cyber-doctor
东南大学开源的多模态 AI 医生助手,集成 RAG + 知识图谱 + 语音交互,一键搭建个人健康顾问
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
东南大学开源的多模态 AI 医生助手,集成 RAG + 知识图谱 + 语音交互,一键搭建个人健康顾问
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,深夜孩子发烧,你焦急地在网上搜索症状,却越看越慌;或者父母记性不好,你在外地工作无法陪同就医,只能干着急——这不是某个家庭的困境,而是整个中国社会医疗资源不均衡的缩影。三甲医院门庭若市,基层诊所门可罗雀,优质医疗资源高度集中在少数城市,让无数普通人面临"看病难、问诊贵"的现实困境。
正是在这一背景下,来自东南大学的一个学生团队在暑期实训课程中,开发了一款名为「赛博华佗」(Cyber Doctor)的开源项目。它以多模态大语言模型为核心,结合知识图谱、检索增强生成(RAG)、语音交互等多项技术,试图打造一个"人人都能拥有的 AI 私人医生"——不依赖高端硬件,不要求专业背景,只需一个 API 接口,就能完成疾病初诊、病历解读、健康咨询等日常医疗辅助工作。

图1:赛博华佗机器人头像
「赛博华佗」诞生于东南大学暑期实训课程,由学生团队独立开发。项目名称本身就蕴含着技术理想——"赛博"代表人工智能与数字技术,"华佗"代表传统中医的智慧与医者仁心,二者结合,象征用 AI 技术传承和延伸医疗服务的初心。
作者 Warma10032 在 README 中坦言,项目最初的设计目标是解决医疗资源不平衡问题——落后地区的人们获取优质医疗资源往往需要跋涉千里,而大语言模型的出现让人们看到了破局可能:只要接入一个足够聪明的 AI 医生,即使在偏远山区,也能获得基于专业知识的健康建议。
当然,项目团队也明确声明:这是一个辅助工具而非医疗器械,AI 给出的建议不能替代专业医生的诊断。这一态度既是对用户负责,也是对项目边界的清醒认知。
赛博华佗采用多智能体(Multi-Agent)架构,整体设计围绕一个中央调度器 + 多个专用处理模块展开,类似于一个医院的分诊台:患者描述症状后,分诊护士判断病情类型,然后分配到对应科室。

图2:赛博华佗功能模块架构
项目的主入口是 app.py,约 19KB 代码量,核心是 Gradio 构建的 Web 界面。主函数 grodio_view() 负责处理用户请求的全生命周期:接收文本/图片/音频/文档等多元化输入,通过 parse_question() 解析用户意图,再由 get_answer() 调度到对应工具函数。
意图识别模块 qa/purpose_type.py 定义了 11 种用户目的类型:
这种枚举驱动的意图分类模式,使得系统可以精确地将用户请求路由到最合适的后端处理模块,避免用一个通用 prompt 处理所有请求,从而提高回答质量。
项目设计了工厂模式的 LLM 客户端架构(clientfactory.py),支持多种后端接入:
所有客户端均兼容 OpenAI SDK 接口规范,这意味着只要是支持 OpenAI 兼容格式的模型 API,都可以无缝接入。项目默认使用智谱 AI,也正是踩着"即插即用"的设计原则实现多模型支持。
这是赛博华佗区别于普通聊天机器人的关键所在。
RAG 模块(rag/):用户可以上传 PDF、Word、纯文本文件,系统会通过 Modelscope 的中文句子嵌入模型(iic/nlp_corom_sentence-embedding_chinese-base)将文本向量化,存入 FAISS 向量数据库。查询时,将用户问题也向量化,通过相似度检索召回相关文本片段,作为上下文注入 LLM prompt,实现"结合你的知识库回答"的效果。
知识图谱模块(kg/ + model/KG/):支持连接 Neo4j 图数据库,使用 Cypher 语句查询。项目默认配置了医疗领域的图谱节点类型(科室、疾病、症状、药物、食物、检查手段等)和关系类型(属于、好评药物、治疗方法等)。通过 check_entity() + relation_tool() 两步,先从用户问题中抽取实体,再查询实体之间的关系,将结构化知识注入 LLM 上下文。
这种"向量检索 + 图谱推理"双轨增强的设计,让 AI 不仅能回答"是什么",还能回答"为什么"和"怎么办"。
SpeechRecognition(whisper 模型)将音频转为文字edge-tts 将 LLM 回复转为语音,支持多种方言使用 python-pptx 和 python-docx 库,根据用户需求自动生成 PPT 和 Word 文档。生成的文档基于结构化的内容模板,可以一键导出,便于医疗记录的整理和分享。
项目使用 Gradio 作为 Web UI 框架,这是目前 AI 应用领域最流行的开源 UI 库之一,特点是写几行 Python 代码就能快速构建美观的交互界面。

图3:文本交流界面

图4:语音对话界面
用户访问 http://localhost:7860 即可看到两个并排的 Tab:文本交流和语音对话。文本界面支持多文件上传(图片/音频/PDF/Word),语音界面直接使用麦克风收音,真正实现了"只要会说话就能用"的低门槛交互设计。

图5:病历识别功能
用户上传一张病历照片,AI 自动识别其中的文字(检查项目、数值、诊断结论),并结合医学知识图谱给出解读。例如,血常规中某项指标偏高,AI 会解释这可能意味着什么,并建议是否需要进一步检查。
基于 Neo4j 知识图谱的专业问答,可以回答"糖尿病患者宜吃什么食物"这类涉及多跳关系的问题——先找到"糖尿病"节点,再通过"宜吃"关系连接到"食物"类型的节点,最终给出个性化建议。

图6:PPT 和 Word 文档自动生成
医生或患者可以用自然语言描述需求,AI 自动生成格式规范的医学报告或演示文稿,大大减少整理资料的时间。
# 1. 克隆项目
git clone https://github.com/Warma10032/cyber-doctor.git
cd cyber-doctor
# 2. 配置 API Key
cp .env.example .env
# 编辑 .env,填入 LLM_BASE_URL 和 LLM_API_KEY
# 3. 安装依赖并启动
pip install -r requirements.txt
python app.py
# 访问 http://localhost:7860
项目推荐使用 OpenKG 上的开源医疗知识图谱(面向家庭常见疾病的知识图谱),导入 Neo4j 后填写 config/config-web.yaml 中的数据库连接信息即可启用。
尽管赛博华佗在功能设计上颇具亮点,但以下局限需要在实际使用时格外注意:
1. AI 不能替代医生:项目 README 明确声明"不能作为最终诊断依据",LLM 的幻觉问题在医疗领域可能导致严重后果,用户必须自行核实 AI 给出的医疗建议。
2. API 成本:项目依赖商业 LLM API(非 Ollama 模式),在高频使用场景下可能产生一定费用。团队也承认"缺少测试多家 API 的能力",不同 API 的适配可能存在 bug。
3. 缺乏容器化:项目没有提供 Dockerfile 或 docker-compose,无法一键部署,对非技术用户有一定门槛。
4. Whisper 依赖网络:语音识别默认使用 whisper 自动下载模型,若网络不畅可能失败,需提前准备模型文件。

图7:知识图谱增强检索效果
赛博华佗的核心价值不在于它能做多精准的诊断,而在于它探索了一条"AI + 医疗知识"的可行路径:RAG 解决知识时效性问题,知识图谱解决专业推理问题,多模态解决输入多样化问题,语音交互解决老年群体使用门槛问题。
这种组合式 Agent 架构,对于任何需要结合领域知识的 AI 应用都有参考价值——无论是法律咨询、教育辅导还是金融分析,都可以用类似的思路,将通用 LLM 的语言能力与领域知识库的结构化信息结合起来,打造真正专业垂直的 AI 助手。
作为学生实训项目,能达到 440+ GitHub Stars 的关注度,说明社区对"AI + 医疗"这个方向有真实需求。期待作者能持续维护,特别是完善 API 适配、补充测试用例、增加 Docker 支持,让更多人受益于这个有温度的开源项目。