放射科报告的质量,直接关系到后续诊疗决策的准确性。一份影像报告若存在「所见」与「结论」逻辑矛盾,比如CT图像明确显示肺部结节,结论却写着「未见异常」;或结论断言「考虑肺癌」,而所见描述中完全未提及相关征象,这类不一致虽非罕见,却极易被人工审核遗漏。传统质控依赖高年资医师逐份抽查,效率低、覆盖窄、主观性强。有没有一种方法,能在不引入大模型幻觉风险的前提下,用可解释、可追溯、可配置的方式,自动识别这类逻辑冲突?答案是:有。影像所见-结论一致性CSP验证器正是为此而生。
这是一款专为放射科质控场景设计的开源医疗软件工具。它不依赖黑盒AI,不调用外部API,不生成虚构文本,而是基于中文语言学规则与约束满足问题(CSP)建模,对影像报告进行结构化解析与逻辑校验。项目全程采用纯规则引擎实现,所有判断依据清晰可见、每条冲突均可回溯至原始文本片段,真正做到了「可验证、可审计、可落地」。
项目概述:从规则出发,守护报告逻辑底线
本项目核心目标明确:在不引入大语言模型的前提下,自动化检测影像报告中「所见描述」与「诊断结论」之间的三类典型逻辑不一致。它并非替代医生判断,而是将质控人员从重复性筛查中解放出来,聚焦于高价值复核与流程优化。
项目以「所见-结论一致性」为唯一验证焦点,严格限定边界: - 所见抽取模块使用 jieba 分词 + 领域正则匹配,精准识别解剖部位(如左肺上叶、双侧肾上腺)及对应发现(结节、钙化、增粗、占位等),并标注极性(阳性/阴性/不确定); - 结论抽取模块通过关键词识别(如「诊断意见」「结论」「印象」等引导词),定位结论段落,并解析其语义倾向(肯定诊断、排除诊断、建议随访等); - CSP验证引擎将上述结构化结果转化为变量与约束,在 python-constraint 求解框架下执行逻辑校验,输出可读性强的冲突清单。
整个流程不涉及任何统计学习或概率建模,所有规则定义、词典配置、冲突判定条件均以 YAML 或 Python 代码形式显式表达,杜绝「不可知黑箱」带来的信任障碍。
技术亮点:轻量、可控、可演进的规则工程实践
本项目的技术选型体现了一种务实而克制的工程哲学:在保证效果前提下,优先选择成熟、稳定、易理解、易维护的技术栈。
轻量级 NLP 处理,规避大模型陷阱不使用 LLM 进行文本生成或语义嵌入,而是依托 jieba 完成基础分词与词性标注,再结合预定义的医学术语词典(data/medical_terms.txt)和正则模式,完成领域适配的实体识别。这种方式响应快、资源占用低、无网络依赖,且结果完全可复现。
CSP 约束建模,让逻辑校验可形式化表达项目将「所见-结论一致性」抽象为典型的约束满足问题:每个所见发现是一个变量,每个结论陈述也是一个变量,它们之间的逻辑关系(如「出现阳性发现」→「结论不得为正常」)被定义为硬性约束。这种建模方式天然支持: - 多规则并行验证; - 冲突类型分类归因(规则1/2/3); - 规则启用/禁用开关控制; - 后续扩展自定义规则(如针对特定病种的专项校验)。
双入口设计,兼顾效率与交互友好性提供命令行(CLI)与 Web 两种使用模式: - CLI 模式适合批量处理历史报告数据,支持 CSV/Excel 输入、规则筛选、台账式结果导出,可无缝集成进医院信息科日常质控工作流; - Web 模式提供图形化上传界面与结果可视化展示,便于科室主任快速上传当日报告、即时查看冲突分布与典型案例,降低技术使用门槛。
模块化架构,支撑长期可维护性项目代码组织清晰,各功能职责分明: - extractor.py 与 conclusion_extractor.py 职责单一,专注文本解析; - csp_engine.py 封装求解逻辑,与业务规则解耦; - rules_config.py 支持 YAML 配置驱动,新增规则无需修改核心引擎; - formatter.py 与 summary.py 分离数据处理与呈现逻辑,便于定制输出格式。
整套系统可在单机环境快速部署,Docker 支持开箱即用,对医院现有 IT 基础设施要求极低。
应用场景:可用于放射科质控全流程的关键环节
该项目并非通用文本分析工具,而是深度贴合放射科实际工作流的垂直解决方案,适用于以下典型场景:
日常报告质量抽检科室可定期导出当周 CT/MRI/DR 等检查报告,以 CSV 或 Excel 格式批量提交验证,自动生成含报告ID、冲突类型、原文摘录、建议修正项的台账式报告,大幅缩短质控周期。
新入职医师报告规范培训将验证结果作为教学案例,直观展示「所见与结论如何呼应」,帮助年轻医师建立结构化书写意识,减少因经验不足导致的逻辑疏漏。
质控指标量化管理通过 stats 子命令获取全量统计摘要,包括总报告数、触发冲突数、各规则命中率、高频冲突部位等,为科室质量改进提供客观数据支撑。
报告模板合规性预检在新建或修订报告模板时,可预先加载典型样例进行验证,确保模板引导语句(如「结论」段落的措辞选项)与所见描述逻辑兼容,从源头降低错误发生率。
跨院区质控标准统一通过共享同一套规则配置(config.yaml)与术语词典,不同院区可执行完全一致的校验逻辑,保障集团化管理下的质控尺度统一。
使用指南:三分钟上手,两种模式任选
项目提供开箱即用的安装与运行体验,无需复杂配置即可开始验证。
快速启动 CLI 模式
确保已安装 Python 3.9+,然后执行:
pip install -r requirements.txt验证示例数据(附带的 data/sample_reports.csv 包含30条模拟报告):
python -m src.cli verify --input data/sample_reports.csv --output results.txt该命令将输出一份结构清晰的文本报告,列出所有检测到的不一致项及其上下文。如仅需关注某类问题,可添加规则过滤参数:
python -m src.cli verify --input data/sample_reports.csv --rule-filter rule2获取整体质控统计摘要:
python -m src.cli stats --input data/sample_reports.csv启动 Web 服务
运行以下命令启动本地 Web 服务:
python -m src.main --mode web --host 127.0.0.1 --port 5000打开浏览器访问 http://127.0.0.1:5000,即可通过网页表单上传 CSV 或 Excel 文件,实时查看验证结果表格与统计图表。
Docker 一键部署(适合信息科统一部署)
docker build -t imaging-consistency-csp .docker run -p 5000:5000 imaging-consistency-csp服务启动后,同样访问 http://127.0.0.1:5000 即可使用,无需在宿主机安装 Python 环境。
规则配置与扩展
所有校验规则默认启用,可通过编辑 config.yaml 文件灵活调整:
rules: rule1: enabled: false rule2: enabled: true rule3: enabled: true如需新增专科规则(例如「肝脏占位 vs 正常结论」),可在 YAML 中按格式定义:
rules: - id: liver_mass_rule description: "肝脏占位 vs 正常结论" conflict_type: rule1 severity: high enabled: true condition: finding_polarity: "positive" region: "肝脏" conclusion_not_contains: - "正常" - "未见" - "良性"配置修改后,CLI 或 Web 服务重启即生效,无需重新编译。
总结:回归本质的临床工具主义
在生成式AI浪潮席卷医疗IT的当下,本项目反其道而行之,坚持用最朴素的规则工程解决最实际的问题。它不追求炫技式的“智能”,而专注构建一个可靠、透明、可控、易用的质控辅助工具。没有训练成本,没有算力门槛,没有隐私外泄风险,所有逻辑都写在代码与配置里,每一条报警都有据可查。
对于放射科而言,它是一面镜子,照见报告书写中的逻辑盲区;对于信息科而言,它是一把尺子,丈量质控流程的标准化程度;对于开发者而言,它是一份教科书,示范如何用简洁技术栈解决复杂业务问题。
项目当前免费开源,若您对项目有疑问、使用上的困惑或想深入交流,欢迎私信我们,或加入社群讨论。
项目地址:https://github.com/nexorin9/imaging-consistency-csp
夜雨聆风