OpenMed用药对账实战:跨医嘱单自动核对与差异检测
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
OpenMed是一个本地优先(local-first)的医疗 AI 开源项目:临床 NER 命名实体识别与 HIPAA PII 去标识化全部在设备端运行,支持 2,200+ 医疗模型、21 种语言,患者数据绝不出内网 🏥。其中,用药对账(Medication Reconciliation)功能可以自动把同一份病历里散落的多次用药提及归并为一条可审查的状态记录,并精准标记出剂量、给药途径上的矛盾差异——相当于给医嘱单做了一次"自动核对"。
为什么需要用药对账?
真实的临床文本里,同一种药往往被反复提及:入院记录里"口服二甲双胍 500mg",评估部分"加量至 1000mg",出院小结里"停用"……人工逐条核对费时且容易漏看。
OpenMed 的reconcile_medications()就是为解决这个问题而生。它把文档内的用药提及折叠归并为每味药一份规范化的当前状态,是辅助性的组织整理层,而非临床决策(源码自带这条合规提示)。
核心机制:4 步自动核对流程
对账逻辑实现在 openmed/clinical/med_reconciliation.py,官方说明见 docs/clinical/medication-reconciliation.md。
第 1 步:身份识别——确认"是不是同一味药"
归并身份按优先级依次取用:
| 优先级 | 身份来源 | 说明 |
|---|---|---|
| 1 | 共指实体(coreference entity) | "该药"、"it" 等指代由上游共指链合并 |
| 2 | 显式规范化成分名 | 如metformin |
| 3 | 编码归一标识 | 如 RXNORM860975 |
| 4 | 规范化表面词兜底 | 文本词形归一化 |
第 2 步:状态归一——5 种标准状态
口语化的医嘱动作(start / initiate / discontinue / hold / titrate……数十种别名)统一归一为 5 个规范状态:started、continued、held、changed、stopped;缺失状态保守归为continued。
第 3 步:时间排序——建立用药历史
- 有规范化绝对时间戳时:按时间戳排序,最新证据优先;
- 无时间戳时:按文档偏移量确定性排序,保证结果可复现。
第 4 步:差异检测——冲突绝不"悄悄合并" ⚠️
这是差异检测的核心。当同一时间戳下剂量或给药途径存在矛盾、且无唯一权威章节(如 assessment/plan 优先级高于叙述性病史)时:
- 当前字段置为
None; conflicts中记录规范化的候选值、字段名与来源偏移量,留给人工审查,而不是擅自选择一个值。
极简实战:一次对账调用
from openmed.clinical import reconcile_medications records = reconcile_medications( [ {"ingredient": "metformin", "dose": "500 MG", "status": "started", "effective_time": "2026-01-01", "offset": (10, 19)}, {"ingredient": "metformin", "dose": "1000 mg", "status": "changed", "effective_time": "2026-01-15", "offset": (82, 91)}, ], document_id="synthetic-note-1", ) print(records[0].current_status) # changed print(records[0].current_dose) # 1000 mg两次提及被自动归并为一条记录:最新状态为changed,当前剂量取最新时间戳的1000 mg。完整行为可用黄金测试件复现,见 tests/fixtures/clinical/medication_reconciliation_gold.json 与 tests/unit/clinical/test_med_reconciliation.py。
隐私设计:对账结果"不含原文"
对医疗数据来说,这或许是该功能最有价值的设计:
- ✅
ReconciledMedication.to_dict()不输出源提及文本与源文档,仅输出规范化成分、剂量、途径、时间戳与来源偏移量; - ✅ 对账是**文档内局部(document-local)**操作,默认不调用任何术语服务、不发起网络请求;
- ✅ 明确拒绝跨文档混合输入,边界清晰。
每条记录还内置合规提示语(MEDICATION_RECONCILIATION_ADVISORY):"用药对账是确定性的文档内组织辅助,不是处方或临床决策;未解决的剂量与途径冲突需人工审查。"
周边能力:组成完整用药分析管线
单靠对账还不够,OpenMed 提供配套模块拼出完整链路:
- 临床 NER:2,200+ 医疗模型可识别
MEDICATION、DRUG等实体(见 docs/ner-families.md); - Sig 解析器:
parse_sig("1 tab PO BID x7 days")把"1 片 口服 每日两次 x7天"拆成结构化剂量、途径、频次(docs/clinical/sig-parser.md); - 时间归一化:相对时间表达先转绝对时间再进入对账(docs/clinical/temporal-normalization.md);
- 上下文提取:控制实体提取深度与属性(docs/clinical/context-and-extraction.md)。
批量处理时,批处理路径可带来数倍吞吐提升,基准数据见 docs/assets/pii-batch-benchmark.svg。
快速上手与延伸阅读
- 安装:
pip install openmed即可,项目支持 Apple MLX 加速与 Python 双栈,全程离线; - 功能文档:docs/clinical/medication-reconciliation.md(身份优先级、冲突规则、隐私边界逐条说明);
- 源码入口:openmed/clinical/med_reconciliation.py(约 1,200 行,确定性、无网络依赖);
- 测试与黄金件:tests/unit/clinical/test_med_reconciliation.py。
💡 一句话总结:OpenMed 的用药对账 =身份归并 + 状态归一 + 时间排序 + 冲突留痕,且默认零联网、零原文泄露。它不会替你做临床决策,但它能保证每一条差异都"有据可查、有人复核"——这正是用药安全最需要的部分。
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考