Hospital_guidance_agent 项目深度分析报告
本报告由 OpenClaw 自动生成(AI 深度分析版)
研究日期: 2026-08-08
项目路径: /Users/daoyu/Documents/ai-repo/Hospital_guidance_agent
📊 项目概览
- 项目名称: Hospital_guidance_agent
- 文件数量: 181 个文件
- 主要插件: 0 个
开源项目分析报告:Hospital_guidance_agent
1. 项目概述
项目定位与核心价值Hospital_guidance_agent 是一个定位为生产级医院导诊 Agentic 助手的开源项目。该项目旨在通过大语言模型(LLM)和智能体编排技术,解决传统医院导诊过程中存在的沟通效率低、信息不对称等问题。其核心价值在于提供了一个结合了多轮对话状态管理、意图识别与混合检索增强生成(RAG)的完整参考实现,能够同时处理“症状问诊”和“就医流程指引”两类高频医疗场景。
主要功能列表
- 医疗导诊多轮对话:支持基于症状问诊和就医流程的上下文交互。
- Agentic 对话编排:基于 LangGraph 状态机管理意图识别、RAG 检索、Query 重写和答案生成。
- 多会话管理:提供类似 ChatGPT 的会话列表、创建、切换与删除功能,元数据持久化至 Redis。
- 混合检索增强(RAG):结合 Elasticsearch(结构化流程文档)与 Milvus(医疗知识向量),实现精准召回。
- 命令行交互前端:基于
rich构建的美观 CLI,支持 Markdown 渲染与斜杠命令,完整演示前后端交互。
2. 技术栈分析
使用的技术和框架
- Web 框架:FastAPI(高性能异步 API)
- Agent 编排:LangGraph(状态机驱动的多步推理)
- LLM 服务:DashScope(阿里云通义千问,兼容 OpenAI 接口的 Chat 与 Embedding 模型)
- 存储与检索:
- Redis(会话元数据存储 + LangGraph 状态持久化
RedisSaver) - Elasticsearch(医院流程、制度等结构化/半结��化文档检索)
- Milvus(症状、医疗知识等非结构化向量检索)
- Redis(会话元数据存储 + LangGraph 状态持久化
- 前端交互:Python
rich库(终端美化与 Markdown 渲染)、requests(API 调用)
架构特点
项目采用典型的分层与领域驱动设计(DDD)结合的架构。从目录结构可以清晰看到 api(接口层)、core(核心配置)、domain(领域模型)、graph(智能体编排)、infra(基础设施)、services(应用服务)的划分。这种架构使得业务逻辑与底层基础设施解耦,具备极高的可测试性和可扩展性。
依赖关系
前端 CLI 通过 REST API 与 FastAPI 后端通信;后端 services 层作为门面,衔接 API 与 graph 层;graph 层的各个节点在执行过程中,依赖 infra 层的 Redis、ES、Milvus 客户端以及 core 层的 LLM 封装来完成具体的检索与生成任务。
3. 核心功能/组件分析
主要功能模块
- **对话与意图路由模块 (
graph/nodes/decision)**:系统的“大脑前哨”。负责解析用户输入,判断其属于“症状问诊”还是“流程咨询”,从而决定后续走医疗知识向量检索路径还是流程文档检索路径。 - **混合 RAG 检索模块 (
graph/nodes/es_rag&milvus_rag)**:- ES RAG:针对“挂号流程”、“医保政策”等强规则性文档进行 BM25 或结构化检索。
- Milvus RAG:针对“头痛发热可能是什么病”等语义模糊的症状描述进行向量相似度检索。
- **状态机编排模块 (
graph/builder.py&domain/routing.py)**:基于 LangGraph 构建有向无环图(DAG),管理AppState(如历史对话、当前意图、检索到的文档),确保多步推理的有序进行(如 Query 重写 -> 检索 -> 文档评估 -> 生成)。 - **会话管理模块 (
sessions/manager.py)**:维护user_id和thread_id的映射关系,保障多用户、多会话并发时的上下文隔离。
关键组件说明
AppState:全局领域状态对象,贯穿整个 LangGraph 生命周期,是各节点间数据流转的唯一媒介。RedisSaver:LangGraph 的状态持久化组件,保证服务重启后对话状态不丢失。ChatService:业务编排层,将 HTTP 请求转化为 LangGraph 的输入,并将流式或最终结果返回给客户端。
功能之间的关系
用户通过 CLI 发起请求 -> ChatService 接收并初始化 AppState -> 传入 LangGraph 状态机 -> decision 节点判断意图 -> 路由到 es_rag 或 milvus_rag 节点 -> (可选)文档评估节点过滤低质内容 -> LLM 生成答案 -> ChatService 返回结果,同时 manager 更新 Redis 中的会话活跃时间。
4. 技术实现亮点
创新点
- 混合 RAG 策略的应用:医疗场景天然存在“流程规则”和“症状语义”两种数据模态。项目创新性地将 ES(擅长精确匹配和结构化检索)与 Milvus(擅长语义理解)结合,并通过 Agent 意图识别进行动态路由,比单一 RAG 效果更好。
- LangGraph 的生产级实践:不仅用 LangGraph 实现了简单的链式调用,还引入了 Query 重写、文档评估等高级 RAG 技巧,并将其编排为状态机,提升了系统的鲁棒性。
设计模式
- 依赖注入与配置集中管理:通过
core/config.py集中管理环境变量,infra层客户端单例化,降低了组件间的耦合。 - 领域驱动设计(DDD):将
AppState、IntentResult等纯数据模型抽离到domain层,使得图节点的业务逻辑不依赖于具体的框架 API。 - 门面模式:
ChatService作为 API 层与复杂 Graph 层之间的门面,屏蔽了内部状态机的复杂性。
最佳实践
- 状态持久化:使用 Redis 保存对话状态,满足生产环境对服务高可用和弹性扩缩容的需求。
- 前后端分离与多端兼容:虽然只提供了
richCLI,但后端是完全标准的 RESTful API,未来替换为 Web 前端或小程序只需零成本接入。 - 完善的工程文档:保留了
后端设计提示词.md、前端设计提示词.md和项目总结.md,展现了 AI 辅助开发的真实思考过程,极具透明度。
5. 产品意义和应用场景
解决的问题
- 患者侧:缓解患者面对复杂医院流程的迷茫感,提供 7x24 小时的精准导诊和症状预判,减少无效跑动。
- 医院侧:分摊人工导诊台的压力,过滤基础流程问题,让医疗资源更集中于核心诊疗。
目标用户
- 二级及以上医院、大型医疗联合体。
- 医疗 SaaS 服务商、互联网医院平台。
- 希望学习 Agentic 架构和复杂 RAG 系统的开发者与架构师。
应用场景
- 门诊大厅智能导诊机/自助机:通过语音或文本交互,指导患者挂号科室。
- 医院微信公众号/小程序客服:解答就医流程、医保政策、科室位置等问题。
- 医生辅助预问诊系统:在患者就诊前,通过多轮对话收集症状特征,生成结构化预问诊报告。
6. 借鉴点
技术层面
- 基于意图路由的混合检索架构:为处理多模态/多领域知识的 RAG 系统提供了范本,即不同类型的 Query 走不同的检索引擎。
- LangGraph 状态机设计:展示了如何将复杂的 Agent 推理过程(意图识别 -> Query 重写 -> 检索 -> 评估 -> 生成)拆解为解耦的图节点,提高了系统的可维护性。
- Redis 在 Agent 系统中的双重应用:既用作高频会话元数据缓存,又作为 LangGraph 的 Checkpoint 持久化层,减少了基础设施的运维组件种类。
产品层面
- 类似 ChatGPT 的多会话体验:即使在垂直业务场景下,也保留了用户熟悉的侧边栏会话列表交互,提升了用户体验。
- 症状与流程的解耦:将“医疗知识”与“医院流程”分开处理,避免了通用大模型在特定医院流程上产生幻觉。
- CLI 作为 MVP 验证工具:使用
rich快速构建高颜值 CLI,在不投入前端资源的情况下即可完成核心业务逻辑的演示与验证。
工程实践
- 清晰的目录分层(DDD):
api -> services -> graph/domain -> infra的调用链路严格单向依赖,避免了循环引用和面条代码。 - 配置与代码分离:通过
.env和core/config.py管理环境差异,符合 12-Factor App 规范。 - AI 辅助开发的文档沉淀:保留设计 Prompt 和总结文档,为团队内部知识传承和后续开发者接手提供了极大便利。
7. 待深入研究
- 文档评估节点的具体实现机制:需深入
graph/nodes查看其是否使用了 Cross-Encoder 重排序,或是通过 LLM 进行事实性校验,以评估其抗幻觉能力。 - 并发与流式响应支持:当前
POST /chat是否支持 Server-Sent Events (SSE) 流式输出?LangGraph 与 FastAPI 结合时如何处理长时间生成的阻塞问题? - 医疗数据的安全与脱敏机制:医疗数据涉及隐私(PHI),系统在将患者症状发送给 DashScope 等 LLM 前,是否有数据脱敏或本地化部署的降级方案?
- 意图识别的准确率与兜底策略:当用户输入模糊(如“我肚子痛但我也想问下报销单怎么打”)时,
decision节点如何处理多意图或进行澄清反问? - ES 与 Milvus 的数据同步与索引构建方案:项目目前侧重于查询侧,需研究其是否包含配套的数据清洗、切片和写入脚本,以评估其作为生产系统的完整度。—
📁 文件结构示例
1 | /Users/daoyu/Documents/ai-repo/Hospital_guidance_agent/demo/项目进度.md |
本报告由 OpenClaw 的 AI 深度分析系统生成
如有疑问或需要进一步分析,请联系研究者