HCY Blog

MedAgt 开发流程

本文介绍了MedAgt医疗辅助系统的完整开发流程,涵盖从预备知识到部署运维的七个阶段。读者可学习如何结合FastAPI与Next.js构建多Agent推理应用,并掌握医疗数据检索与可视化实现方法。亮点包括基于DeepSeek的智能分诊决策链设计、PubMed/NICE证据整合机制,以及具备进度追踪与追问锁定的交互式前端界面,为开发医疗AI系统提供全链路实践参考。

MedAgt 开发流程

阶段 0:预备知识与环境

  • 学习 FastAPI 基础(路由、依赖注入、Pydantic 模型、异步 IO)。
  • 熟悉 Next.js App Router、React hooks、TypeScript 类型推导与 CSS Modules。
  • 阅读 DeepSeek API 文档,了解 Chat Completion/JSON schema 约束写法。
  • 了解 PubMed E-utilities(esearch、esummary、efetch)以及 NICE 指南公开接口。
  • 准备开发环境:Python 3.11、Node.js 20、阿里云 ECS/Ubuntu 24.04,安装 uvpip, npm, git

阶段 1:后端骨架

  • 使用 fastapi + uvicorn 初始化应用,配置 CORS。
  • 编写 app/models.py 定义 SymptomRequestAnalysisResponseEvidenceItemChartDatum
  • app/config.py 读取环境变量(DeepSeek Key、禁用外部抓取开关等)。
  • 搭建 /health/api/v1/analyze 基础接口,返回占位数据确保前端能打通。
  • 引入 deploy.sh 的 Python 安装部分,方便后续一键部署。

阶段 2:知识检索服务

  • app/services/knowledge.py 中实现 PubMed/NICE 抓取:
    • 拼装查询语句、请求 esearch 获取 PMID 列表。
    • 调用 esummary/efetch 获取摘要、年份、期刊信息。
    • 对年龄段、性别、动物研究等添加过滤逻辑;合并 NICE 指南。
    • 输出 EvidenceItem 列表与 visualizations(年份分布、来源分布)。
  • 为 PubMed 附带摘要/全文下载接口 download_pubmed_asset
  • 实现 _build_visualizations 返回 ChartDatum 数据供前端绘图。

阶段 3:多 Agent 推理链

  • app/services/analyzer.py 中接入 DeepSeek:
    • 搜索计划 Agent:根据症状生成查询关键词、过滤项。
    • 证据排序:对检索结果做词频/新近度/研究类型打分,附加 LLM 校准。
    • 临床规划 Agent:产出 triage、建议、后续行动并引用证据。
    • 追问 Agent:生成追问列表、临时诊断与治疗计划。
    • 翻译 Agent:输出中文标签、置信度描述。
  • 管理进度:ProgressTracker 记录阶段状态,暴露 /api/v1/progress/{token}
  • 设计 fallback:当 LLM 输出为空或证据不足时,返回保底方案。

阶段 4:前端界面

  • 使用 create-next-app 创建 frontend,迁移到 App Router + TypeScript。
  • page.tsx 实现:
    • 病例标签页、多症状录入、患者元数据、补充说明。
    • 本地持久化:将病例、分析结果、历史追问写入 localStorage
    • 追问锁定:当 requires_followup 为真时,只显示追问列表,阻止重复提交。
    • 进度轮询:定时请求 /api/v1/progress/{token},更新五步进度条。
    • 证据可视化:根据 ChartDatum 渲染年份柱状图与来源占比圆图。
    • 证据下载:跳转 /api/v1/evidence/:pmid/abstract|fulltext
  • 编写 page.module.css 控制高密度布局、响应式、玻璃拟态视觉。

阶段 5:联调与错误处理

  • 在前端对接真实 API,处理加载态、错误提示、空结果 fallback。
  • 添加追问历史折叠面板、病例折叠显示与重新编辑入口。
  • 调整按钮与表单禁用逻辑,防止重复提交。
  • 在后端增加日志、agent_traces 字段,便于观察 Agent 输出。

阶段 6:部署与运维

  • 准备阿里云 ECS:安装 Nginx、Python、Node.js;开放 80/443 端口。
  • 使用 systemd 编写 medagt-api.servicemedagt-web.service,让 FastAPI/Next.js 常驻运行。
  • 配置 Nginx 反向代理:/ → Next.js、/api/ → FastAPI。
  • 本地执行 deploy.sh:根据 git diff 同步代码、安装依赖、重启服务。
  • 后续优化:申请 HTTPS 证书、添加监控报警、加上 API 限流与缓存。

阶段 7:迭代与学习

  • 与医学合作者确认 triage 文案与建议是否合规,规划人工审核面板。
  • 为 PubMed 调用增加缓存/限流;评估是否需要引入异步队列或数据库。
  • 继续学习:医疗合规知识、CQL/FHIR 标准、LLM 安全提示工程、Next.js Server Actions。
  • 制定测试计划:编写后端 pytest 覆盖 Agent fallback,前端使用 Playwright/React Testing Library 覆盖关键交互。