它在解决什么
面对医疗问题,模型很容易说得流畅,却说不出依据从哪来。MediAtlas 想把这条链反过来:先检索、再校验、最后才生成解释。它是个人学习与研究用的工作台,不是诊疗工具,也没有经过临床验证。
项目从 medical_disease_db 长出来,后来在 medical_agentic_rag 里收成现在这套编排。原仓库里的 FastAPI 路由、Vue 对话页、JWT 登录和图谱查询都还在;新的一层是证据门槛,以及权威 / 探索两种回答模式。
系统怎么串起来
对话前端是 Vue 3。后端 FastAPI 用 SSE 把回答和执行轨迹推到页面上。一次提问大致走:
- 感知当前意图,并做安全检查(急症、个体剂量、特殊人群等规则先于模型)。
- 按模式规划检索范围。
- BM25、稠密向量、同源图谱三路召回,RRF 融合后再用 CrossEncoder 重排。
- 来源、时效和覆盖校验。不够就改写、HyDE 或停止,最多 3 轮。
- 用带编号的支持片段生成自然语言解释,再做一次独立的语义检查。
权威模式只走已核验的公开来源;探索模式才打开历史疾病文档和原图谱,但主题过滤和引用检查不会关掉。模型不能自行切换模式。
数据和记忆
历史疾病条目来自原 medical.json:8,806 个有效唯一疾病,扩展成约 10 万份历史文档和本地图边。后来补上中英文 WHO 条目和少量 NHS / NIDDK / WHO 页面的中文整理摘要,核验层目前约 8,377 条,知识文档合计约 11 万份。核验表示记录了公开出处和检查日期,不等于医生审核。
记忆分成四层:当前请求的工作记忆、Redis 里最近几轮的短记忆、PostgreSQL 里的情节记录,以及用户明确确认过的长期偏好。图谱查询是参数化只读的,没有任意 Cypher 工具。
界面
登录页把医学知识问答和账户入口分开,并写明不替代医生诊疗。

工作台默认进入知识问答。权威模式与探索模式可以切换;证据不足时会明说。

回答会把支持片段编号写在句子后面,并附上科普免责声明。

点开来源能看到出处、发布日期,以及「已核对公开来源,未经临床审定」。

现在走到哪
本地可以启动前后端,跑回归集和检索消融。评测会看 Recall、MRR、nDCG,以及路由是否通过、轮数和耗时。这些数字只说明开发集上的行为,不能当成临床正确率。
公开仓库在 omiki1/medical_agentic_rag。密钥只放在本机 .env,这里不放演示地址。
