医疗智能问答系统-RAG检索增强与Agent工具调用-医疗知识助手
这个项目起因是我自己查资料时的麻烦。默沙东手册内容很全,但得用对关键词才搜得到,我用大白话问经常搜不出来;直接丢给大模型问,它又会编剂量和诊断结论,医疗场景这样肯定不行。所以想做一个先查资料、再回答的东西,答案尽量有原文撑着。
功能上主要几块。检索是核心,走了 BM25 加语义两条路,因为医学里药名、缩写、数值区间这类内容必须精确匹配,纯向量检索容易漏。多轮对话做了持久化,历史存在 SQLite 里,服务重启不丢;像"那饮食上呢"这种省略式追问,会先结合上文补成完整问题再去检索。前端是流式输出,边生成边显示,答完给几条相关追问。再往后发现光能查还不够:用户问一句,系统就只按这一句去查,查什么、查几次都是写死的。所以又加了一层 Agent,把决定权交给模型自己——什么时候检索、要不要读全文、信息不够时先反问用户,一共给了它 8 个工具,除了检索和读全文,还能查天气、拿定位、记住用户的病史和用药。顺手加了识图,化验单或者检查报告拍下来传上去,会自动把指标读出来,生成一份带风险等级和就诊建议的评估报告。另外把能力封成了一套 MCP 服务,其他 AI 客户端可以直接调用。
流程是:用户提问 → 判意图(医疗咨询、急症、闲聊分开处理)→ 取会话历史 → 追问改写 → 双通道检索 → 排序过滤 → 大模型生成 → 流式返回 → 结果落库缓存。这是流水线的走法;接上 Agent 之后,中间的检索改由模型按需触发,其余环节不变。
知识库这块单独做了处理。爬下来的文档要先清洗,归一化全半角、去掉引用标记和爬虫造成的重复行;分块按段落切,小标题并进正文,相邻片段之间保留约 60 字的上下文重叠,避免一句话正好被切在边界上,检索时缺了上文。
医疗健康
人工智能