本项目是一个专为中文电子病历(EMR)设计的轻量级质控辅助工具,核心目标是让医生在提交病历前,就能快速识别出文本中潜藏的逻辑矛盾、信息缺项、时间线错乱、数值异常和主观夸大等典型质量问题。我们不替代人工质控,也不介入医院HIS或EMR系统内部流程,而是以“病历自己承认问题”的方式,把LLM变成一位冷静、细致、不知疲倦的初筛协作者。它支持TXT/JSON/Excel三种常见病历格式输入,通过结构化解析提取主诉、现病史、既往史、体格检查、诊断等关键字段,再由大模型逐段质疑、打分、归类,最终生成带置信度排序的Markdown/HTML/JSON报告。整个系统以命令行(CLI)为唯一交互界面,无需部署Web服务,不依赖GPU,所有逻辑封装在Python包内,开箱即可运行,你填好API密钥,指定一个病历文件,一条命令就输出一份可读性强、定位精准的“自白报告”。
定位与能力边界
我们明确不做三件事:不对接医院数据库、不修改原始病历、不提供SaaS服务。它的存在位置很清晰,就在医生点击“提交”按钮前的最后一道本地检查环节。就像写完论文后用Grammarly扫一遍语法,这个工具是在病历定稿后、上传前,帮医生做一次语义级的自我复核。它的能力完全围绕“文本一致性”展开:不是判断诊断是否正确(那是临床决策),而是指出“诊断写了肺炎,但全文未提体温或肺部听诊”;不是质疑用药合理性,而是发现“既往史称无高血压,却记录长期服用氨氯地平”。所有判断都基于病历内部文字的显性表达,不引入外部知识库或指南条文,因此结果可解释、可追溯、无幻觉干扰。
这也决定了它的适用对象非常具体:一线书写病历的住院医师、实习医生、规培生;病案科初审人员;以及需要批量抽检病历质量的教学医院质控小组。它不面向患者、不面向医保审核员、不处理影像报告或病理图文,也不解析手写扫描件,所有输入必须是结构清晰、字段可识别的纯文本或表格化病历。
核心功能与问题覆盖类型
系统能识别五类高频病历书写缺陷,每类都有明确定义、代码标识和临床示例,确保医生拿到报告时一眼看懂问题性质:
可疑类型 | 代码 | 典型表现 | 临床意义 |
|---|---|---|---|
逻辑矛盾 | logical_conflict | “否认糖尿病史”但“正在使用胰岛素” | 暴露信息录入疏漏或患者陈述偏差 |
缺项 | missing_field | 诊断为“急性阑尾炎”,但现病史未描述腹痛部位与转移过程 | 关键诊疗依据缺失,影响病案首页填写与DRG入组 |
夸大 | exaggeration | “疼痛剧烈无法下床”,但体格检查写“神志清、自主体位” | 主观描述与客观记录脱节,削弱病历公信力 |
时间线错误 | timeline_error | “术后第3天拔管”,但手术记录日期晚于拔管日期 | 时序混乱可能掩盖治疗延误或记录倒置 |
数值异常 | value_anomaly | 血压180/120mmHg但标注“生命体征平稳” | 数值与结论冲突,易被质控系统自动标红 |
所有可疑段落均附带0–100置信度评分,按等级建议处置优先级:60分以上值得立即核实,90分以上基本可判定为硬伤。报告不仅标出问题,还给出原文摘录(高亮显示)、所在病历字段(如“现病史第2段”)、质疑理由(如“主诉‘反复上腹痛3年’与既往史‘无消化系统疾病’存在时间维度矛盾”)及修复建议(如“请补充既往胃镜或幽门螺杆菌检测结果”)。
使用与配置:五分钟完成本地部署
整个流程无需安装服务、不改系统环境、不碰数据库。你只需要一台能跑Python 3.9+的电脑(Windows/macOS/Linux均可),执行三步:
git clone https://github.com/nexorin9/emr-self-whistleblower cd emr-self-whistleblower pip install -r requirements.txt然后复制配置模板并填入API密钥:
cp .env.example .env编辑.env文件,选择任一提供商(OpenAI或Anthropic),填入对应密钥。无需注册新账号,用你已有的开发者密钥即可。我们默认使用gpt-4o或claude-3-sonnet这类强推理模型,也支持降级到gpt-3.5-turbo应对成本敏感场景。
之后即可单文件分析:
python -m emr_self_whistleblower --input data/sample_records/case_1_gastritis.txt --output report.md或批量处理整个目录(自动为每个病历生成独立报告,并汇总高频问题):
python -m emr_self_whistleblower --input data/sample_records/ --batch-output summary.md关键参数可随时调整:用--confidence-threshold 50过滤低置信项;用--temperature 0.2压缩模型发散性,提升判断稳定性;用--dry-run跳过LLM调用,仅测试解析逻辑是否正常,这些不是调试黑盒,而是给你掌控权的明确开关。
报告解读:如何高效利用自白结果
一份报告包含两大部分:摘要页与详情页。摘要页直给四个关键指标:患者ID、总可疑项数、高置信度项数(≥70)、整体可疑等级(低/中/高)。这让你3秒掌握该份病历的风险水位。
详情页按置信度倒序排列每个可疑段落,每条含五栏信息:
字段 | 说明 | 示例价值 |
|---|---|---|
原文摘录 | 精确截取病历原文,高亮问题句 | 避免上下文误读,定位到字节级 |
所在字段 | 明确归属主诉/现病史/诊断等标准EMR节段 | 区分是书写疏漏还是结构设计缺陷 |
质疑理由 | 用自然语言解释矛盾点,不含术语黑话 | 让非技术医生也能理解“为什么可疑” |
可疑类型 | 标准化分类代码,支持后续统计分析 | 院内质控可按 |
置信度 | 0–100整数,非概率值,而是模型对自身判断的确定性打分 | 70分=强烈建议核查,30分=留待人工复核 |
我们建议医生先聚焦置信度≥70的条目,它们占全部可疑项约35%,却贡献了90%以上的真问题。对于批量报告,重点关注汇总页中的“高频可疑类型TOP3”和“各科室平均可疑等级”,这些数据可直接用于科室质控会通报。
工程结构与可扩展性
系统采用清晰分层架构,所有模块职责单一、接口稳定:
模块 | 职责 | 可替换性说明 |
|---|---|---|
parser.py | 从TXT/JSON/XLSX中提取标准EMR字段 | 支持新增PDF解析器(需OCR前置) |
prompts_v3.py | 定义“质疑者”角色指令与输出约束 | 可按专科定制prompt(如儿科侧重生长发育时序) |
scorer.py | 将LLM原始输出映射为0–100置信度 | 支持接入规则引擎加权(如时间线错误权重×1.5) |
reporters/ | 生成Markdown/HTML/JSON三格式报告 | 可扩展Word或PDF导出(需python-docx依赖) |
llm.py | 统一封装OpenAI/Anthropic API调用 | 可无缝接入国产大模型(如Qwen、GLM) |
这种设计意味着:如果你的医院已部署私有化大模型,只需修改llm.py中几行适配代码;如果病历模板含特殊字段(如“中医四诊信息”),只需在parser.py中新增提取逻辑;若需对接院内质控平台,可通过--format json获取结构化结果,由其他服务消费。
环境与运行保障
系统最低运行要求极低:Python 3.9+、2GB内存、无需GPU。我们在测试中验证过以下组合稳定可用:
组件 | 版本要求 | 实测兼容性 |
|---|---|---|
Python | ≥3.9 | 3.9 / 3.10 / 3.11 / 3.12 |
OpenAI SDK | ≥1.0 | 支持gpt-4o、gpt-4-turbo、gpt-3.5-turbo |
Anthropic SDK | ≥0.35 | 支持claude-3-haiku/sonnet/opus |
Pandas | ≥2.0 | Excel解析稳定,支持.xlsx与.xls |
所有依赖均列在requirements.txt中,虚拟环境隔离确保不污染主机Python生态。我们不强制要求特定模型,gpt-3.5-turbo已能覆盖80%基础问题识别,而gpt-4o在时间线推演与多段逻辑链比对上准确率提升约40%,你可以按需切换,没有绑定陷阱。
项目地址:
https://github.com/nexorin9/emr-self-whistleblower