
每年这个时候都有大量做 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 和 Vue38GB 内存的普通笔记本就够了。如果选择本地部署开源模型比如 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 到 1GBNeo4j 数据目录约几百 MB。如果还下载本地模型7B 量化模型通常 4GB 到 5GB要预留足够空间。4. 安装部署与启动方式下面给出通用本地部署流程。因为不同分支或压缩包目录结构可能不同路径以实际项目为准。4.1 获取项目将项目代码下载到本地并解压或者使用 Git 拉取git clone https://example.com/ai-medical-rag.git cd ai-medical-rag这里只是演示命令示例实际仓库地址请按你拿到的项目文档替换。4.2 创建并激活 Python 虚拟环境后端依赖尽量装在虚拟环境里避免污染全局 Pythonpython -m venv venvWindows 下激活venv\Scripts\activateLinux / 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/simple4.4 启动 Neo4j推荐用 Docker 启动 Neo4j Community 版省去本地 Java 环境配置docker run -d \ --name neo4j-medical \ -p 7474:7474 \ -p 7687:7687 \ -e NEO4J_AUTHneo4j/yourpassword \ -v neo4j_data:/data \ neo4j:5-community如果本机没有 Docker也可以直接安装 Neo4j Desktop创建数据库后把密码改成项目配置里需要的值。无论哪种方式首次启动后建议用浏览器打开http://localhost:7474用用户名neo4j和设置的密码登录确认图谱数据库可用。这里有一个常见坑项目源码里如果写死了 Neo4j 默认密码而你在 Docker 启动时设置了新密码后端就会连接失败。操作时要么把项目配置里的密码改成你自己设置的密码要么保持NEO4J_AUTHneo4j/neo4j看项目文档怎么约定。4.5 写入知识图谱初始数据多数 RAG 知识图谱项目会提供初始化脚本把疾病、症状、药物、检查项目等内容写入 Neo4j。常见形式是python init_graph.py执行前先确认 Neo4j 服务已经启动并且项目配置里的连接地址、端口、用户名、密码都正确。初始化脚本执行完成后可以在 Neo4j Browser 里执行一句简单的查询验证MATCH (n) RETURN n LIMIT 25如果能看到疾病、症状、药物等节点和关系说明图谱数据写入成功。4.6 配置大模型参数找到后端的配置文件比如.env或config.py确认以下参数LLM_API_KEYyour_api_key LLM_API_BASEhttps://api.example.com/v1 LLM_MODELqwen-plus NEO4J_URIbolt://localhost:7687 NEO4J_USERneo4j NEO4J_PASSWORDyourpassword不同项目变量名会有差异核心就是“大模型 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}, timeout60) 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;第三目录管理要有规范。项目里建议至少划分出这几个目录backendFastAPI 服务、LangChain 流程、提示词模板。frontendVue3 页面组件、API 封装。data知识库原始文档、加工后的 JSON 或 CSV。scriptsNeo4j 初始化、知识库构建、批量测试脚本。logs后端运行日志和批量任务日志。第四接口服务上线前要限制访问范围。默认绑定127.0.0.1就能在本地展示如果要部署到服务器必须设置访问密钥或 IP 白名单避免接口被外部直接调用消耗大模型额度。第五医疗合规不能松懈。演示时用虚构案例或公开医学知识不使用真实患者隐私数据。如果最终产品要上线或做实验必须经过数据脱敏和伦理审核。论文里可以单独写一节“隐私保护与合规性设计”说明系统在数据存储、传输、使用上的限制。10. 总结与下一步这个项目最值得尝试的点在于它不是简单包装一个对话页面而是把 RAG、知识图谱、LangChain 记忆管理、FastAPI 后端、Vue3 前端全部串成了一条完整链路。对毕设和课设来说这是一套很容易出演示效果、也很容易写论文的骨架。建议你拿到项目后先按顺序做三件事第一把 Neo4j 跑起来并完成图谱数据初始化第二用 FastAPI 自带接口文档把问诊接口调通第三用最少三个测试问题验证检索和问答效果并截图保存作为答辩素材。最容易踩的坑是 Neo4j 连接配置和前端代理地址不一致这两处排错时优先检查。后续如果想提升系统完整度可以从三个方向入手把 LangChain 链式流程升级为 LangGraph 有状态工作流给知识库增加更细致的文档加载和清洗流程在批量问诊接口中加入任务队列和失败重试机制。免费的项目拿到手之后把它跑明白再按自己的思路改造一圈这套毕设基本就稳了。