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,安装
uv或pip,npm,git。
阶段 1:后端骨架
- 使用
fastapi+uvicorn初始化应用,配置 CORS。 - 编写
app/models.py定义SymptomRequest、AnalysisResponse、EvidenceItem、ChartDatum。 - 写
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.service、medagt-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 覆盖关键交互。