AI智能医疗问诊平台:RAG+LangChain+Neo4j全栈项目实战
2026/8/31 6:24:03 网站建设 项目流程

每年这个时候,都有大量做 Python AI 大模型方向毕业设计或课程设计的同学在找题。题目不能太简单,也不能只调用一个 API 就交差,最好还能把知识库、图数据库、大模型问答、前后端分离这些点全带上。这次要说的“AI 智能医疗问诊平台系统”就属于这种几乎为毕设/课设量身定做的开源项目,技术栈锁定在 RAG + LangChain + Neo4j 知识图谱 + FastAPI + Vue3,整体链路完整,且项目本身免费。

这个项目的核心思路并不复杂:用户在前端输入症状或病情描述后,后端先借助 LangChain 做多轮对话管理,再通过 RAG 从医学知识库中检索相关内容,同时利用 Neo4j 知识图谱保存和查询疾病、症状、科室、药物之间的关联关系,最后由大模型综合上下文生成回答。相比“裸调大模型”,这种方案明显更适合写论文,也有实际演示效果。

这篇文章会直接带你把整套系统梳理清楚:先看核心能力,再走本地部署流程,接着验证问答、知识库检索、知识图谱和多轮会话,最后给出接口调用、资源占用观察和常见问题排查。因为这是一个典型的 RAG 项目,所以即使你手头机器配置不高,也可以先跑通全流程,再根据自己的硬件情况换更大的模型。

1. 核心能力速览

能力项说明
项目类型AI 医疗问诊 Demo / 全栈 Web 应用 / 毕业设计课题
开源情况免费开源,适合非商业学习用途
技术栈RAG + LangChain + Neo4j + FastAPI + Vue3
主要功能症状描述问诊、多轮对话、知识库检索、知识图谱可视化、AI 回答生成
后端框架FastAPI
前端框架Vue3
向量知识库 / 图数据库Neo4j 存储医疗实体关系,RAG 负责语义检索
大模型接入可接本地开源模型,也可接云端大模型 API
推荐硬件纯 API 模式下普通 CPU 笔记本即可;本地模型模式需按模型版本配置显卡
显存占用取决于接入的模型,本地部署建议先查模型官方要求
支持平台Windows / Linux / macOS 均可,需能安装 Python、Node.js 和 Neo4j
启动方式后端命令行启动,前端 npm 启动,Neo4j 使用 Docker 或 Desktop 启动
是否支持 API支持,FastAPI 自带交互式接口文档
是否支持批量任务可按接口循环调用,也可扩展批量问诊测试脚本
适合场景毕业设计、课程设计、RAG 学习、LangChain 实践、知识图谱入门、医疗问答 Demo

从材料看,这个项目最大的优势不是模型多强,而是“链路完整”。它把大模型应用开发里最常被考察的几个知识点全都串起来了,非常适合拿去当课题讲解和演示。

2. 适用场景与使用边界

先说适合什么人。如果你是 Python 方向的学生,需要完成一个能演示、能写论文、能答辩的 AI 大模型项目,这个系统非常合适。你不需要从零开始写 RAG 流程,也不需要自己标注医学数据,项目已经帮你把整体框架搭好。学习时重点看这几块:LangChain 如何管理对话和检索、FastAPI 如何封装接口、Vue3 如何展示图谱和问答结果、Neo4j 的 Cypher 查询怎么写。

如果你是做技术调研或 RAG 实战练习,这个项目也能当参考案例,尤其是医疗领域知识图谱的建模方式,对理解实体关系抽取和存储有直接帮助。

但要注意边界。这个系统本质上是一个技术演示项目,不是真实医疗产品,不能把它当成诊断工具。它不适合处理真实患者的紧急病情,也不应该给出“该吃什么药”“是否严重”这类确定性建议。展示时最好用脱敏或虚构的问答示例,说明系统只是验证技术链路,不代表临床结论。

如果项目会用到患者信息、处方数据或医院内部资料,必须提前做脱敏处理,并确认数据来源合法。涉及大模型生成内容时,前端页面最好加一句“回答仅供参考,请前往正规医疗机构就诊”的提示。毕业设计答辩前,也建议把这条合规边界直接写进论文的“局限性”部分,反而加分。

3. 环境准备与前置条件

这个项目属于全栈应用,本地跑起来需要准备 Python、Node.js、Neo4j 三个环境。以常见的 Windows 11 为例,完整前置条件如下:

3.1 基础软件清单

依赖建议版本用途
Python3.9 及以上运行 FastAPI 后端和 LangChain 流程
Node.js16 或 18 以上运行 Vue3 前端工程
npm / yarnnpm 自带即可安装前端依赖
Neo4jCommunity 版即可存储知识图谱数据
Docker(可选)任意较新版本快速启动 Neo4j 容器
大模型 API / 本地模型按项目配置生成最终问答答案

3.2 硬件建议

如果大模型部分接入的是云端 API,比如 OpenAI 兼容接口或国内大模型 API,那本地机器只需要能跑 FastAPI 和 Vue3,8GB 内存的普通笔记本就够了。如果选择本地部署开源模型,比如 Qwen 系列 7B 或更小模型,就需要考虑显存。以常见的 4-bit 量化 7B 模型为例,通常建议显卡显存不要低于 6GB,实际占用以模型框架加载结果为准。这里不写死某个数字,建议先跑 API 模式,整个流程通了之后再决定是否切换到本地模型。

3.3 端口规划

后端、前端、Neo4j 各有默认端口,部署前先检查端口占用:

服务默认端口说明
Neo4j Browser7474浏览器访问图数据库管理界面
Neo4j Bolt7687应用连接 Neo4j 使用的端口
FastAPI 后端8000后端 API 服务
Vue3 前端5173 或 8080前端开发服务器

Windows 下可以用以下命令查看端口占用:

netstat -ano | findstr "8000"

如果 8000 被占用,可以换一个后端端口,也可以使用 8001。实际操作中端口冲突是最常见的启动失败原因,建议提前确认。

3.4 磁盘空间

代码本身不大,但依赖占用不小。Python 虚拟环境加依赖约 1GB 到 2GB,前端 node_modules 约 500MB 到 1GB,Neo4j 数据目录约几百 MB。如果还下载本地模型,7B 量化模型通常 4GB 到 5GB,要预留足够空间。

4. 安装部署与启动方式

下面给出通用本地部署流程。因为不同分支或压缩包目录结构可能不同,路径以实际项目为准。

4.1 获取项目

将项目代码下载到本地并解压,或者使用 Git 拉取:

git clone https://example.com/ai-medical-rag.git cd ai-medical-rag

这里只是演示命令示例,实际仓库地址请按你拿到的项目文档替换。

4.2 创建并激活 Python 虚拟环境

后端依赖尽量装在虚拟环境里,避免污染全局 Python:

python -m venv venv

Windows 下激活:

venv\Scripts\activate

Linux / macOS 下激活:

source venv/bin/activate

激活后可以看到命令行前面出现(venv)前缀,说明当前已经进入虚拟环境。

4.3 安装后端依赖

pip install -r requirements.txt

如果 requirements.txt 里包含较新的 LangChain 和 FastAPI 版本,安装时间可能比较久。国内网络环境可以考虑先配置 pip 镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

4.4 启动 Neo4j

推荐用 Docker 启动 Neo4j Community 版,省去本地 Java 环境配置:

docker run -d \ --name neo4j-medical \ -p 7474:7474 \ -p 7687:7687 \ -e NEO4J_AUTH=neo4j/yourpassword \ -v neo4j_data:/data \ neo4j:5-community

如果本机没有 Docker,也可以直接安装 Neo4j Desktop,创建数据库后把密码改成项目配置里需要的值。无论哪种方式,首次启动后建议用浏览器打开http://localhost:7474,用用户名neo4j和设置的密码登录,确认图谱数据库可用。

这里有一个常见坑:项目源码里如果写死了 Neo4j 默认密码,而你在 Docker 启动时设置了新密码,后端就会连接失败。操作时要么把项目配置里的密码改成你自己设置的密码,要么保持NEO4J_AUTH=neo4j/neo4j,看项目文档怎么约定。

4.5 写入知识图谱初始数据

多数 RAG + 知识图谱项目会提供初始化脚本,把疾病、症状、药物、检查项目等内容写入 Neo4j。常见形式是:

python init_graph.py

执行前先确认 Neo4j 服务已经启动,并且项目配置里的连接地址、端口、用户名、密码都正确。初始化脚本执行完成后,可以在 Neo4j Browser 里执行一句简单的查询验证:

MATCH (n) RETURN n LIMIT 25

如果能看到疾病、症状、药物等节点和关系,说明图谱数据写入成功。

4.6 配置大模型参数

找到后端的配置文件,比如.envconfig.py,确认以下参数:

LLM_API_KEY=your_api_key LLM_API_BASE=https://api.example.com/v1 LLM_MODEL=qwen-plus NEO4J_URI=bolt://localhost:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=yourpassword

不同项目变量名会有差异,核心就是“大模型 API 配置”和“Neo4j 连接配置”两部分。使用云端 API 时,把密钥填好即可。使用本地模型时,需要按你选择的推理框架配置地址。

4.7 启动后端服务

uvicorn main:app --host 127.0.0.1 --port 8000

如果项目入口文件不是main.py,请按实际文件名调整。后端启动成功后,控制台会显示访问地址,同时 FastAPI 会自动提供/docs接口文档页面。

4.8 安装前端依赖并启动

前端是 Vue3 工程,先安装依赖再启动:

cd frontend npm install npm run dev

启动成功后,浏览器打开前端地址,比如http://localhost:5173。如果前端页面配置的是固定后端地址,要确认前端代理和后端端口一致。

4.9 验证整体服务

打开前端页面,输入“我最近总是头痛,伴随恶心,应该挂哪个科?”如果系统能返回回答,且页面能展示相关疾病或科室信息,说明从前端到后端、再到 Neo4j 和大模型的整条链路已经跑通。

5. 功能测试与效果验证

项目跑起来之后,不要只试一句提问就结束。下面按维度给出完整的验证清单,方便你检查系统是否真的完整可用。

5.1 医疗问诊问答测试

这是最基础的测试。目的是验证大模型是否真正接入了 RAG 流程,而不是简单返回通用回答。

测试输入示例:

最近两天嗓子疼,咳嗽,有痰,体温38度,需要吃什么药?

判断标准:

  • 后端是否返回结构化回答。
  • 回答是否包含合理建议,而不是单纯重复用户问题。
  • 回答是否引用了知识库内容,比如相关科室、注意事项。
  • 页面是否展示了多轮对话历史。

常见失败原因:大模型 API Key 无效、配置模型名错误、后端连不上 Neo4j。启动后端时看到报错信息,先看是哪一层失败。

5.2 知识库检索测试

RAG 的核心是“先检索,再生成”。可以直接在后端接口的调试日志或 FastAPI 文档里观察检索过程。

打开http://127.0.0.1:8000/docs,找到对话或问答接口,手动发送请求,看返回内容里是否有检索来源。

如果项目提供了检索可视化功能,可以试着输入:

高血压患者平时饮食需要注意什么?

观察它是否从知识库中检索到“高血压”“低盐饮食”“心血管内科”等实体信息。没有检索结果时,优先检查向量索引是否已经创建,以及知识库文档是否已成功加载。

5.3 知识图谱查询测试

进入 Neo4j Browser,执行以下 Cypher 查询:

MATCH (d:Disease)-[:HAS_SYMPTOM]->(s:Symptom) RETURN d.name AS disease, collect(s.name) AS symptoms LIMIT 10

如果返回结果中包含疾病和对应症状,说明知识图谱已经生效。前端页面里的图谱可视化如果也能看到节点,说明前后端图谱接口也是通的。

这个环节建议作为毕业论文里的“系统功能验证”章节素材,截图保存好。

5.4 多轮会话测试

RAG 项目最容易被忽略的就是对话记忆。连续输入两到三轮问题,测试系统是否记得前文内容:

第一轮:我最近经常失眠。 第二轮:这种情况持续一个多月了。 第三轮:综合我前面说的,可能是什么原因?

判断标准:第三轮回答是否结合了前两轮的信息。如果没有结合,说明对话记忆没有配置好或者前端没有把历史消息传给后端。

LangChain 里常见的做法是使用 ConversationBufferMemory、ConversationSummaryMemory,或者通过 LangGraph 管理消息状态。你可以在论文里重点写这部分的设计。

5.5 LangChain 与 LangGraph 的扩展方向

如果你在做毕设时发现项目里使用的是传统 LangChain 链式调用,而当前主流技术讨论已经转向 LangGraph,可以把它作为二次开发方向。基本思路是:用 LangGraph 重新组织“意图识别 → 知识图谱查询 → 文档检索 → 答案生成”的有状态工作流,让系统能够根据用户意图自动选择走检索路径还是图谱路径。这个工作量适中,又容易在答辩时讲出亮点。

6. 接口 API 与批量任务

FastAPI 作为后端框架,自带 OpenAPI 文档,你不需要额外安装工具就能测试接口。

6.1 查看接口文档

后端启动后,浏览器打开:

http://127.0.0.1:8000/docs

这里可以看到项目所有接口,包括问诊对话接口、知识图谱查询接口、知识库管理接口等。点击接口名,再点“Try it out”,可以直接在页面上发送测试请求。

6.2 接口调用示例

以下是一个通用的 POST 请求调用示例,实际路径和参数以项目文档为准:

curl -X POST "http://127.0.0.1:8000/api/chat" \ -H "Content-Type: application/json" \ -d '{"message": "最近总是头晕,需要挂哪个科?"}'

如果项目接口返回格式要求统一,通常会封装成类似下面的 JSON 结构:

{ "code": 200, "message": "success", "data": { "answer": "建议您先到神经内科就诊排查。", "sources": ["高血压", "头晕"] } }

6.3 Python 批量测试脚本

做课程设计或毕设时,经常需要批量验证问答效果。可以写一个简单的 Python 脚本循环调用接口:

import requests url = "http://127.0.0.1:8000/api/chat" questions = [ "感冒发烧应该怎么办?", "高血压患者的饮食建议", "头痛伴随恶心挂哪个科?", ] for q in questions: resp = requests.post(url, json={"message": q}, timeout=60) result = resp.json() print(f"问题: {q}") print(f"回答: {result.get('data', {}).get('answer', 'no answer')}") print("---")

批量测试时要注意控制请求频率,避免触发大模型 API 的限流。如果调用云端 API,建议每次请求之间加time.sleep(1)或更高延迟。

6.4 批量任务设计建议

如果你的毕设需要支持“批量病历问答”或“批量症状录入”,可以基于 FastAPI 写一个异步任务接口:

  • 客户端上传 CSV 文件或 JSON 数组。
  • 后端把任务写入队列。
  • 后台逐个调用大模型生成回答。
  • 结果统一写入数据库或导出文件。

这个设计能明显提升项目完整度,论文里也有内容可写。实际操作时,需要注意对上游大模型 API 的限流、失败后的重试机制,以及输出结果的格式校验。

7. 资源占用与性能观察

本地部署这种 RAG 项目时,性能观察比功能跑通更值得关注。下面从几个角度说。

7.1 显存与内存怎么观察

打开任务管理器,观察内存占用:后端 Python 进程加载 LangChain 和向量库之后,常见占用在 1GB 到 3GB 之间,具体取决于依赖版本和数据量。Neo4j 作为 Java 应用,内存占用通常也在 1GB 以上,如果机器内存只有 8GB,建议给 Neo4j 的 JVM 堆内存做限制。

如果使用本地大模型,建议用nvidia-smi观察显存占用:

nvidia-smi -l 1

启动模型后,显存占用会从几 GB 到十几 GB 不等,取决于模型参数量和量化位数。这里不做具体数字断言,以你本机实际加载为准。

7.2 模型接入方式的差异

  • 云端 API 模式:本地资源占用低,启动快,回答质量取决于模型服务。适合日常开发和演示。
  • 本地模型模式:隐私性更好,不依赖外部服务,但需要显卡和模型文件。适合论文里写“本地化部署”章节。

对于毕设项目,建议先跑云端 API 模式,等答辩前再录一段“本地模型”的对比测试。这样既稳定又有展示深度。

7.3 影响响应速度的因素

因素影响
大模型本身模型越大,生成越慢
知识库规模文档越多,检索时间越长
Neo4j 查询复杂度多级关系查询比简单查询慢
请求并发量并发高时受 API 限流和 CPU 影响
多轮历史长度历史越长,发送给模型的 token 越多,响应越慢

如果觉得回答太慢,优先做两件事:第一,限制对话历史长度;第二,把知识库做小规模剪枝,只保留演示场景需要的核心数据。

7.4 如何降低本地部署门槛

  • 使用更小的模型,比如 1.5B 或 3B 的量化版本。
  • 开启 GPU 加速前先确认 CUDA 版本和 PyTorch 匹配。
  • 把 Neo4j 的堆内存调低,比如-Xmx2g
  • 对知识库文档做轻量清洗,减少无用数据。

这些优化点都可以写进毕业设计的“系统性能优化”部分,比空谈更有说服力。

8. 常见问题与排查方法

以下是这个项目最常见的几类问题,建议收藏备用。

问题现象可能原因排查方式解决方案
后端启动报 Neo4j 连接失败Neo4j 未启动、密码错、Bolt 端口被占用先访问 7474 检查 Neo4j,再用netstat检查 7687重新启动 Neo4j,修改配置文件中的密码和端口
前端页面打不开前端未启动、5173 端口被占用查看 npm 启动日志切换前端端口,或结束占用进程
前端能打开但提问没反应后端地址配置错误、代理未设置打开浏览器开发者工具查看网络请求把前端请求地址改成后端实际地址
提问后回答“无检索结果”知识库数据未初始化、向量索引不存在检查后端日志是否有检索记录先执行图谱初始化脚本,再检查向量库构建脚本
安装依赖报错Python 版本不兼容、缺少编译工具查看 pip 报错信息升级 Python 到 3.9+,或使用镜像源
调用云端大模型超时网络问题、API 限流看后端日志中的 HTTP 状态码加长请求超时时间,降低批量并发
回答内容包含幻觉信息知识库检索内容不足、prompt 约束弱查看检索到的上下文片段调整 prompt,限定模型只能基于知识库回答
Neo4j 初始化数据重复脚本可重复执行但没有去重逻辑查看节点是否存在重复记录给节点和关系加上唯一性约束
GPU 显存不足模型参数量超出显存nvidia-smi查看显存占用换更小模型或开启量化加载

从实际经验看,Neo4j 连接失败是第一次部署时最高频的错误。一定要区分两个连接入口:7474 是管理网页,7687 是应用驱动连接端口。项目代码里配的是 Bolt 地址,很多人只检查了 7474,却忽略了 7687 不通。

另外,FastAPI 项目如果改了端口,前端代理也要对应改。用 Vue3 的vite.config.js配置代理时,要把 target 改成后端实际地址。

9. 最佳实践与使用建议

第一,第一次部署时不要追求大模型效果,先把链路跑通。建议直接使用云端 API,把 RAG 检索、知识图谱查询、多轮对话全部验证完,再决定是否切换本地模型。这个顺序能帮你快速区分“代码问题”和“模型问题”。

第二,数据初始化脚本要记录执行状态。图谱初始化可能需要几分钟,如果中途断开,再次执行时要确认是幂等操作,不会写入重复数据。给疾病、症状、药物等节点加上唯一约束是更稳妥的做法:

CREATE CONSTRAINT disease_name_unique IF NOT EXISTS FOR (d:Disease) REQUIRE d.name IS UNIQUE; CREATE CONSTRAINT symptom_name_unique IF NOT EXISTS FOR (s:Symptom) REQUIRE s.name IS UNIQUE; CREATE CONSTRAINT drug_name_unique IF NOT EXISTS FOR (dr:Drug) REQUIRE dr.name IS UNIQUE;

第三,目录管理要有规范。项目里建议至少划分出这几个目录:

  • backend:FastAPI 服务、LangChain 流程、提示词模板。
  • frontend:Vue3 页面组件、API 封装。
  • data:知识库原始文档、加工后的 JSON 或 CSV。
  • scripts:Neo4j 初始化、知识库构建、批量测试脚本。
  • logs:后端运行日志和批量任务日志。

第四,接口服务上线前要限制访问范围。默认绑定127.0.0.1就能在本地展示;如果要部署到服务器,必须设置访问密钥或 IP 白名单,避免接口被外部直接调用消耗大模型额度。

第五,医疗合规不能松懈。演示时用虚构案例或公开医学知识,不使用真实患者隐私数据。如果最终产品要上线或做实验,必须经过数据脱敏和伦理审核。论文里可以单独写一节“隐私保护与合规性设计”,说明系统在数据存储、传输、使用上的限制。

10. 总结与下一步

这个项目最值得尝试的点在于:它不是简单包装一个对话页面,而是把 RAG、知识图谱、LangChain 记忆管理、FastAPI 后端、Vue3 前端全部串成了一条完整链路。对毕设和课设来说,这是一套很容易出演示效果、也很容易写论文的骨架。

建议你拿到项目后,先按顺序做三件事:第一,把 Neo4j 跑起来并完成图谱数据初始化;第二,用 FastAPI 自带接口文档把问诊接口调通;第三,用最少三个测试问题验证检索和问答效果,并截图保存作为答辩素材。

最容易踩的坑是 Neo4j 连接配置和前端代理地址不一致,这两处排错时优先检查。后续如果想提升系统完整度,可以从三个方向入手:把 LangChain 链式流程升级为 LangGraph 有状态工作流;给知识库增加更细致的文档加载和清洗流程;在批量问诊接口中加入任务队列和失败重试机制。免费的项目拿到手之后,把它跑明白,再按自己的思路改造一圈,这套毕设基本就稳了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询