[开源] 医疗大模型知识盲区检测与可视化系统:面向临床决策者的AI能力边界认知工具
本项目是一个专为医疗场景设计的知识盲区探测与可视化系统核心目标是帮助临床医生、医院信息科、AI医学产品团队等角色客观识别当前医疗大语言模型在具体知识域如心内科-急性心梗-溶栓禁忌证中的能力断点。它不替代模型推理而是构建一套可枚举、可复现、可对比的测试框架将医疗知识组织为「科室→疾病→药物/操作」层级结构通过语义熵测量答案一致性、LLM自我置信度标注、探测式黑盒提问三路信号交叉验证最终生成结构化盲区评分与分类错误标签并以雷达图、热力图等形式呈现「哪里能用、哪里慎用、哪里不能用」的直观地图。交付形态覆盖命令行CLI、Web仪表盘、REST API三种接口技术栈以Python为主引擎TypeScript/Node.js支撑交互层FastAPI提供服务D3.js实现动态可视化。定位与能力范围我们不做通用AI评测也不做单点问答打分。本项目的判断颗粒度锚定在临床真实工作流中的最小决策单元比如「是否推荐阿司匹林用于房颤患者卒中一级预防」而非笼统的「心血管知识」。这种定位决定了三个刚性边界-不评估模型基础能力如逻辑推理、多步计算只聚焦其在已知医疗知识体系内的覆盖完整性-不介入模型训练或微调流程所有探测均走标准API或本地Mock调用属纯黑盒行为分析-不输出治疗建议或诊断结论所有结果仅服务于「这个模型在该问题上是否具备稳定输出能力」这一元判断。因此它的适用对象非常明确当一位心内科医生准备将某LLM嵌入查房辅助流程时他需要知道该模型对「新型口服抗凝药NOAC在肾功能不全患者中的剂量调整」这类具体条目是否可靠当医院信息科部署AI导诊模块时需确认其对「儿科发热待查鉴别诊断路径」的覆盖深度当AI厂商发布新版医疗模型时可用它生成第三方视角的盲区对照报告。它不是用来证明模型“好不好”而是回答“在哪好、在哪不好”。核心功能模块系统由五大协同模块构成每一块都对应临床AI落地中的一个现实卡点模块名称解决的问题关键机制知识域体系建模医疗知识太散无法结构化测试将公开指南、教科书、临床路径映射为三级树形结构如神经外科→脑胶质瘤→替莫唑胺同步放化疗方案支持手动扩展与版本管理语义熵测量同一问题多次回答不一致但模型不自知对同一探测题发起5–10次独立采样用Sentence-BERT计算答案向量余弦相似度标准差熵值0.25即标记为高不确定性区间自我评估置信度LLM常把错误答案说得无比笃定在每次探测后追加元提示“请用0–100分评价你对上述回答的确定性”强制模型进行认知自检探测式黑盒测试被动问答漏掉隐性盲区按预设策略生成对抗性探测题如故意替换关键术语、插入干扰条件、要求反向推理主动触发边界失效盲区分析引擎单点错误难形成决策依据综合语义熵、自我置信分、错误类型事实错误/逻辑断裂/回避回答/幻觉生成加权计算域级盲区得分0–100并归类为「高危盲区」「待验证区」「可信区」所有模块输出统一存入结构化存储层确保每次探测可追溯、可回放、可比对。例如当发现「内分泌科→糖尿病足感染→铜绿假单胞菌经验用药」这一节点盲区得分高达92分系统会同时给出该节点5次采样的语义熵值0.31、模型自评置信均值43分、3例典型错误回答原文及错误类型标注。使用与配置流程上手只需三步无须修改代码即可完成端到端验证# 1. 安装依赖Python与Node.js环境需预先就绪 pip install -r requirements.txt npm install# 2. 快速跑通一个完整闭环以「呼吸内科→社区获得性肺炎→CURB-65评分解读」为例 npx blindspot domain list # 查看全部知识域ID npx blindspot probe run --domain resp-cap-curbscore # 启动探测生成probe_id npx blindspot analyze run --probe-id 20240521-143207 # 分析结果输出盲区评分 npx blindspot report generate --probe-id 20240521-143207 # 生成HTML报告# 3. 启动可视化界面实时查看多维度分布 npx blindspot web start # 浏览器打开 http://localhost:3000 即可交互式浏览雷达图各科室盲区强度、热力图疾病粒度错误密度、时间轴不同模型版本对比CLI命令设计遵循临床工作习惯domain list输出带中文路径的树状列表如呼吸内科 社区获得性肺炎 抗菌药物选择避免用户记忆IDprobe run支持按科室批量探测--department respreport generate默认包含原始探测题、全部采样回答、熵值曲线、错误类型统计饼图满足院内质控文档归档需求。工程结构与技术选型我们坚持「能力可验证、边界可解释、部署可嵌入」三条原则选型Python作为主引擎因其在NLP生态Sentence-BERT、HuggingFace Transformers、科学计算NumPy/Pandas、以及医疗文本处理MedSpaCy、ScispaCy方面无可替代的成熟度所有核心算法熵计算、置信加权、错误聚类均在此层实现TypeScript/Node.js负责CLI与Web保障跨平台命令行体验Windows/macOS/Linux一致且TypeScript的强类型约束有效防止前端传参错误导致后端崩溃FastAPI暴露REST接口轻量、异步、OpenAPI原生支持方便医院现有信息系统如HIS、EMR通过HTTP直接调用探测服务无需重写客户端D3.js而非Chart.js/ECharts因盲区地图需支持动态交互如点击某科室热力区块下钻显示其下属所有疾病的错误类型分布D3的底层控制力更适配复杂定制需求。整个代码库按职责严格分层src/knowledge_domain/仅维护知识树定义与校验规则src/probe_engine/封装所有LLM调用逻辑含OpenAI/Claude/Mock三套适配器src/analysis/独立于模型提供商确保分析结果不随API变更而漂移。数据与扩展机制知识域数据完全开放可编辑。data/domains/目录下存放JSON格式定义文件示例片段如下{ id: card-afib-noac, path: [心内科, 心房颤动, 新型口服抗凝药NOAC], description: NOAC在不同肾功能分期患者的剂量调整与禁忌证, questions: [ { text: CrCl28mL/min的房颤患者能否使用利伐沙班若能推荐剂量是多少, source: 2023 ESC房颤指南第4.2节 } ] }新增疾病或操作只需补充对应JSON文件运行npx blindspot domain reload即可加载。探测题支持引用权威来源指南章节、药品说明书条款确保每个测试点都有据可查。对于尚未覆盖的领域项目文档提供了标准字段说明与映射规范便于医院信息科基于本院临床路径自主构建私有知识域。限制与说明本系统存在三项明确限制我们在设计之初即公开声明-不覆盖非结构化临床经验如“如何向老年患者家属委婉解释临终撤机决定”此类高度情境化、伦理权重高的问题不在当前知识域体系内-不替代人工审核所有盲区地图仅为辅助参考最终临床决策必须由执业医师完成-LLM提供商响应差异不可控OpenAI与Claude对同一探测题的熵值表现可能不同系统不对厂商API稳定性负责仅保证本端测量逻辑一致。此外语义熵阈值0.25、自我置信权重30%、错误类型判定规则等参数均在项目文档中明确定义支持用户根据本院质控标准调整。所有探测过程日志默认留存符合医疗软件可审计要求。项目地址https://github.com/nexorin9/medical-llm-blindspot-detector