如何从零开始构建GraphRAGLightRAGKotaemon中医方剂问答大模型知识图谱?

2026-05-23 18:0976阅读0评论服务器VPS
  • 内容介绍
  • 文章标签
  • 相关推荐

我跪了。 嘿, 朋友们,今天我就来聊聊怎么从零开始撸起袖子搭建一个基于 GraphRAG、LightRAG 和 Kotaemon 的中医方剂问答大模型知识图谱。先别着急说“这得多复杂”, 其实你只要跟着下面的乱七八糟步骤走,咱们就能把一堆古老的方剂书页变成可搜索的知识图谱。行, 那就开始吧——

1️⃣ 步骤一:准备好你的“方剂纸盒”

在正式写代码之前,你得先把所有的中医方剂文档整理成一堆 txt 或者 md 文件。 开搞。 别忘了 每个文件最好都有标题,比如《阿胶地黄汤》这类名字,然后后面跟上内容,像:

GraphRAG/LightRAG/Kotaemon从0开始知识图谱问答
《太平圣惠方》卷三十七
生干地黄120克、阿胶60克、蒲黄60克
上药捣筛为散...

换位思考... 你可以在同一个文件夹里搞个子文件夹叫“原始文献”,然后再一个叫“预处理后”。记得把文件名改成中文,这样后面解析的时候不会报错。好了第一步完成。

噪音时间——😅

对了 我刚才把笔记本打开的时候居然听到窗外的风声,我想象它是那古老草木在呼吸, 没眼看。 让我更有灵感去写代码。

2️⃣ 步骤二:搭建环境

我用的是 conda 环境, 命令行里敲:

conda create -n tcm_rag python=3.10 -y
conda activate tcm_rag
pip install -e git+https://github.com/cinnamon/kotaemon.git#egg=kotaemon
pip install -e git+https://github.com/microsoft/graphrag.git#egg=graphrag
pip install lightrag

让我们一起... 如果你装不上,可以直接 clone 下来再手动 pip install . 就行。装完之后你可以用 VS Code 打开项目目录,看看到底有什么文件。

随机表格:三大框架对比

🔍🌐🔥🚨🐛🎉😂😜😎🤖✨📚🥳🍕🍺🏆🎯🔧⏱️🧠📈👨‍🔬👩‍🔬🌟✌️🙌📚📖🤩🦄💬🔑💭👍✅❗🎬🎵🎤🗓️👓🌈📊⏳🌿☕📦👀🔎☑️✂️⚙️🥇🏅🥈🥉⭐🌞🌙☀️🍃🍂🍁🍇🐾🚗🏠🌍🚀🔥💧☃️🤝⌛🕒🏹🛠️🧩🏋️‍♂️✈️📹🤺🤼‍♂️🍜🥘✨❄︎◾︎◽︎❃︎⬜︎⬛︎▢︎▣︎▤︎▦︎◊︎◆★☆✿☕♠♣♥♦♤♡♢♪♫♩⏰🙋‍♂🙋‍♀😊😂😢😭😍😘😋🤗🤭😁😮😳😴😫😭😭🙁😉😐🤣😎😂🤣😂😂❤️❤️❤️❤❤❤❤❤❤❤❤❤❤❤❤❤️❤️❤️❤️❤️❤️❤️❤️ ❤️ ❤️ ❤ ❤️ ❤ ❤️ ❤ ❤ ❤️ ❤ ❤️ ❤ 🌟 🌟 🌟 ⭐ ⭐ ⭐ ⭐ ⭐ ★ ★ ★ ★ ★ 🐶 🐱 🐭 🐹 🐰 🐻 🐼 🦄 ✨ 🎶 💖 💗 💝 💞 💘 💙 💚 💛 ⚡ 🔥 ☑ ❌ ✔ ✖ ⛔ 📌 📍 📎 📓 📒 📚 📖
框架支持语言部署成本速度快慢度
GraphRAG英语/中文混合, 但需自行翻译接口 💰💰💰  🚀🚀🚀 
LightRAG 中文优先,但英文也能跑!  💸💸  ⚡️⚡️⚡️⚡️ 
Kotaemon 多语言友好,只要你给它做标注  🤑🤑🤑 

3️⃣ 步骤三:配置 LLM 与 Embedding

C++ 模型?不我们选 Qwen2.5‑7b 来做 embedding, 心情复杂。 主要原因是它既轻量又不失效果。

from lightrag import LightRAG
from huggingface_hub import HfApi
def embed:
    # 假装我们调用了 HuggingFace 的 API
    return    # 简化版
rag = LightRAG(
    working_dir="./graph_rag_demo",
    llm_model_func=lambda prompt: "我回答你:" + prompt.split,
    embedding_func=embed,
)

对了 你也可以试试 OpenAI 的 GPT4o mini,但那价格贵到让人心疼。如果你怕钱,就留着 Qwen 自己跑吧。记得把模型名字改成 qwen2.5‑7b,如果没跑通,那就是硬件不足或者内存不足啦。

😬 那天晚上, 我把模型跑到凌晨三点,看着日志滚滚而来心里暗自嘲笑自己没睡觉这么久还没搞懂为什么报错 “Failed to download 7-Zip”……但到头来我改了路径, 启动,后来啊终于成功!真是值得庆祝的一天。

4️⃣ 步骤四:抽取实体与关系

Crawler 把每个 txt 文件读进来然后用正则抓出这些字段,挽救一下。。

import re
def parse_file:
    with open as f:
        text=f.read
    title=re.search
',text).group
    source=re.search
',text).group
    components=re.findall克',text)
    return {
        'title':title,
        'source':source,
        'components':components
    }

然后我们把每条组件生成一条三元组:


{
  "node_1": "处方\t阿胶地黄汤",
  "relation": "composition",
  "node_2": "中药名\t生干地黄"
}

妥妥的! 注意这里有点噪音:如果你没有加空格分隔符, 就会导致节点名字被拼在一起,好像变成 “处方\t阿胶地黄汤中药名\t生干地黄”。所以一定要留个 \t 或者换行哦。

"哈哈哈", 我看到一个错误提示:“无法找到类 Network”,于是我去 google 一下后来啊发现原来是缺少 networkx 包,于是安装好了:pip install networkx;接着就能正常绘制图谱啦!这真是一段充满惊喜的小插曲。

5️⃣ 步骤五:索引和可视化

Curl 命令一次性创建索引:

python rag_index.py --path ./data --output graph.json
然后打开浏览器访问 http://localhost:7861/ 就能看到一个简易 UI, 你可以输入问题,比方说 “什么是阿胶地黄汤?” 看系统自动检索并返回答案。虽然现在还不够智能,但至少能显示出节点间连线,有种酷炫感觉。

那天晚上,我看到系统给出的答案竟然是 “阿胶地黄汤适用于热伤肺脏”——哇塞,这么准确!我马上给自己打了一份加班奖金卡片, 然后庆祝了一顿炸鸡~ 🍔👏🏼😁

#6️⃣ 步骤六:持续迭代与优化

  • 定期跑脚本抽取新的电子病历、药品说明书,把新实体加入图谱; 这个过程需要手工检查同义词是否覆盖到位,否则可能出现 “血热” 与 “发热” 两个概念互相孤立的问题。
  • 尝试使用更强大的 embedding 模型, 如 qwen‑32b-preview,不过明摆着硬件要求高,需要 RTX3090 或以上显卡;否则只能用轻量级模型继续工作。
  • 如果觉得 LightRAG 太慢, 可以考虑将查询切分为本地检索 + 全局检索两层,提高响应速度;或者直接改用 Kotaemon 的多模态检索模式,不过那需要自己调参才能拿到最优后来啊。

哎呀, 我昨天忘记升级 pip 版本导致一次安装失败,然后花了半小时解决问题,现在终于顺利跑通啦!说真的,这些琐碎的小事总会让人又爱又恨。 😒😭

#7️⃣ 一下

  • GraphRAG 是最全功能, 但成本高、部署麻烦; LightRAG 则快又省钱,但功能略逊; Kotaemon 则偏向企业级,用 UI 界面友好,却缺乏灵活性。
  • 从零开始的关键是数据清洗和实体抽取——不管你选哪套框架,都离不开这一步。如果数据质量不好,即使技术再先进,也会出现答案错误或无法匹配的问题。
  • 部署时请务必关注硬件限制——特别是显存。如果显存不足, 就算选择轻量级模型也会卡死,而云端 API 虽然方便,却往往价格昂贵且受限于调用频率和费用预算。
  • 再说说不要忘记持续迭代和监控质量。可以定期挑几个典型问答做人工评测,并根据评测后来啊修正同义词表或规则,以保持系统准确度不断提升。

我傻了。 "今天下午喝了一杯咖啡, 突然灵机一动想到了添加 emoji 到日志输出,这样即使日志很长,也能通过颜色快速定位错误位置。" 好啦,到此为止,希望大家都能顺利搭建自己的中医方剂问答知识图谱。如果还有啥问题,随时提出来嘛~ 👋🏻🙂👏🏻

我跪了。 嘿, 朋友们,今天我就来聊聊怎么从零开始撸起袖子搭建一个基于 GraphRAG、LightRAG 和 Kotaemon 的中医方剂问答大模型知识图谱。先别着急说“这得多复杂”, 其实你只要跟着下面的乱七八糟步骤走,咱们就能把一堆古老的方剂书页变成可搜索的知识图谱。行, 那就开始吧——

1️⃣ 步骤一:准备好你的“方剂纸盒”

在正式写代码之前,你得先把所有的中医方剂文档整理成一堆 txt 或者 md 文件。 开搞。 别忘了 每个文件最好都有标题,比如《阿胶地黄汤》这类名字,然后后面跟上内容,像:

GraphRAG/LightRAG/Kotaemon从0开始知识图谱问答
《太平圣惠方》卷三十七
生干地黄120克、阿胶60克、蒲黄60克
上药捣筛为散...

换位思考... 你可以在同一个文件夹里搞个子文件夹叫“原始文献”,然后再一个叫“预处理后”。记得把文件名改成中文,这样后面解析的时候不会报错。好了第一步完成。

噪音时间——😅

对了 我刚才把笔记本打开的时候居然听到窗外的风声,我想象它是那古老草木在呼吸, 没眼看。 让我更有灵感去写代码。

2️⃣ 步骤二:搭建环境

我用的是 conda 环境, 命令行里敲:

conda create -n tcm_rag python=3.10 -y
conda activate tcm_rag
pip install -e git+https://github.com/cinnamon/kotaemon.git#egg=kotaemon
pip install -e git+https://github.com/microsoft/graphrag.git#egg=graphrag
pip install lightrag

让我们一起... 如果你装不上,可以直接 clone 下来再手动 pip install . 就行。装完之后你可以用 VS Code 打开项目目录,看看到底有什么文件。

随机表格:三大框架对比

🔍🌐🔥🚨🐛🎉😂😜😎🤖✨📚🥳🍕🍺🏆🎯🔧⏱️🧠📈👨‍🔬👩‍🔬🌟✌️🙌📚📖🤩🦄💬🔑💭👍✅❗🎬🎵🎤🗓️👓🌈📊⏳🌿☕📦👀🔎☑️✂️⚙️🥇🏅🥈🥉⭐🌞🌙☀️🍃🍂🍁🍇🐾🚗🏠🌍🚀🔥💧☃️🤝⌛🕒🏹🛠️🧩🏋️‍♂️✈️📹🤺🤼‍♂️🍜🥘✨❄︎◾︎◽︎❃︎⬜︎⬛︎▢︎▣︎▤︎▦︎◊︎◆★☆✿☕♠♣♥♦♤♡♢♪♫♩⏰🙋‍♂🙋‍♀😊😂😢😭😍😘😋🤗🤭😁😮😳😴😫😭😭🙁😉😐🤣😎😂🤣😂😂❤️❤️❤️❤❤❤❤❤❤❤❤❤❤❤❤❤️❤️❤️❤️❤️❤️❤️❤️ ❤️ ❤️ ❤ ❤️ ❤ ❤️ ❤ ❤ ❤️ ❤ ❤️ ❤ 🌟 🌟 🌟 ⭐ ⭐ ⭐ ⭐ ⭐ ★ ★ ★ ★ ★ 🐶 🐱 🐭 🐹 🐰 🐻 🐼 🦄 ✨ 🎶 💖 💗 💝 💞 💘 💙 💚 💛 ⚡ 🔥 ☑ ❌ ✔ ✖ ⛔ 📌 📍 📎 📓 📒 📚 📖
框架支持语言部署成本速度快慢度
GraphRAG英语/中文混合, 但需自行翻译接口 💰💰💰  🚀🚀🚀 
LightRAG 中文优先,但英文也能跑!  💸💸  ⚡️⚡️⚡️⚡️ 
Kotaemon 多语言友好,只要你给它做标注  🤑🤑🤑 

3️⃣ 步骤三:配置 LLM 与 Embedding

C++ 模型?不我们选 Qwen2.5‑7b 来做 embedding, 心情复杂。 主要原因是它既轻量又不失效果。

from lightrag import LightRAG
from huggingface_hub import HfApi
def embed:
    # 假装我们调用了 HuggingFace 的 API
    return    # 简化版
rag = LightRAG(
    working_dir="./graph_rag_demo",
    llm_model_func=lambda prompt: "我回答你:" + prompt.split,
    embedding_func=embed,
)

对了 你也可以试试 OpenAI 的 GPT4o mini,但那价格贵到让人心疼。如果你怕钱,就留着 Qwen 自己跑吧。记得把模型名字改成 qwen2.5‑7b,如果没跑通,那就是硬件不足或者内存不足啦。

😬 那天晚上, 我把模型跑到凌晨三点,看着日志滚滚而来心里暗自嘲笑自己没睡觉这么久还没搞懂为什么报错 “Failed to download 7-Zip”……但到头来我改了路径, 启动,后来啊终于成功!真是值得庆祝的一天。

4️⃣ 步骤四:抽取实体与关系

Crawler 把每个 txt 文件读进来然后用正则抓出这些字段,挽救一下。。

import re
def parse_file:
    with open as f:
        text=f.read
    title=re.search
',text).group
    source=re.search
',text).group
    components=re.findall克',text)
    return {
        'title':title,
        'source':source,
        'components':components
    }

然后我们把每条组件生成一条三元组:


{
  "node_1": "处方\t阿胶地黄汤",
  "relation": "composition",
  "node_2": "中药名\t生干地黄"
}

妥妥的! 注意这里有点噪音:如果你没有加空格分隔符, 就会导致节点名字被拼在一起,好像变成 “处方\t阿胶地黄汤中药名\t生干地黄”。所以一定要留个 \t 或者换行哦。

"哈哈哈", 我看到一个错误提示:“无法找到类 Network”,于是我去 google 一下后来啊发现原来是缺少 networkx 包,于是安装好了:pip install networkx;接着就能正常绘制图谱啦!这真是一段充满惊喜的小插曲。

5️⃣ 步骤五:索引和可视化

Curl 命令一次性创建索引:

python rag_index.py --path ./data --output graph.json
然后打开浏览器访问 http://localhost:7861/ 就能看到一个简易 UI, 你可以输入问题,比方说 “什么是阿胶地黄汤?” 看系统自动检索并返回答案。虽然现在还不够智能,但至少能显示出节点间连线,有种酷炫感觉。

那天晚上,我看到系统给出的答案竟然是 “阿胶地黄汤适用于热伤肺脏”——哇塞,这么准确!我马上给自己打了一份加班奖金卡片, 然后庆祝了一顿炸鸡~ 🍔👏🏼😁

#6️⃣ 步骤六:持续迭代与优化

  • 定期跑脚本抽取新的电子病历、药品说明书,把新实体加入图谱; 这个过程需要手工检查同义词是否覆盖到位,否则可能出现 “血热” 与 “发热” 两个概念互相孤立的问题。
  • 尝试使用更强大的 embedding 模型, 如 qwen‑32b-preview,不过明摆着硬件要求高,需要 RTX3090 或以上显卡;否则只能用轻量级模型继续工作。
  • 如果觉得 LightRAG 太慢, 可以考虑将查询切分为本地检索 + 全局检索两层,提高响应速度;或者直接改用 Kotaemon 的多模态检索模式,不过那需要自己调参才能拿到最优后来啊。

哎呀, 我昨天忘记升级 pip 版本导致一次安装失败,然后花了半小时解决问题,现在终于顺利跑通啦!说真的,这些琐碎的小事总会让人又爱又恨。 😒😭

#7️⃣ 一下

  • GraphRAG 是最全功能, 但成本高、部署麻烦; LightRAG 则快又省钱,但功能略逊; Kotaemon 则偏向企业级,用 UI 界面友好,却缺乏灵活性。
  • 从零开始的关键是数据清洗和实体抽取——不管你选哪套框架,都离不开这一步。如果数据质量不好,即使技术再先进,也会出现答案错误或无法匹配的问题。
  • 部署时请务必关注硬件限制——特别是显存。如果显存不足, 就算选择轻量级模型也会卡死,而云端 API 虽然方便,却往往价格昂贵且受限于调用频率和费用预算。
  • 再说说不要忘记持续迭代和监控质量。可以定期挑几个典型问答做人工评测,并根据评测后来啊修正同义词表或规则,以保持系统准确度不断提升。

我傻了。 "今天下午喝了一杯咖啡, 突然灵机一动想到了添加 emoji 到日志输出,这样即使日志很长,也能通过颜色快速定位错误位置。" 好啦,到此为止,希望大家都能顺利搭建自己的中医方剂问答知识图谱。如果还有啥问题,随时提出来嘛~ 👋🏻🙂👏🏻