乐于分享
好东西不私藏

[开源] 临床AI决策支持系统固执性监测器:面向信息科与医务质控的CDSS输出可靠性审计

[开源] 临床AI决策支持系统固执性监测器:面向信息科与医务质控的CDSS输出可靠性审计

本项目是专为临床AI决策支持系统(CDSS)设计的输出固执性监测器,解决医生已明确纠正、但系统在后续N次内仍重复输出相同错误结论这一类典型可靠性风险。我们面向三类核心角色协同工作:信息科负责日志接入与系统部署,医务部负责复核流程审批,上级医师执行最终签字确认。系统通过解析HIS/CDSS原始JSONL操作日志,识别「医生纠正后仍固执输出」模式,量化固执率与置信度衰减轨迹,并在超阈值时自动生成结构化复核工单;所有审计日志采用HMAC-SHA256哈希链写入,确保不可篡改;提供REST API、CLI命令行与Docker一键部署三种交付形态。技术栈基于Python 3.11+、FastAPI、Pydantic、Typer、aiosqlite与SQLite,轻量可靠,无外部依赖。

定位与能力范围

我们不做CDSS本身,也不替代临床判断,而是专注在其「输出行为是否可信」这一层做可观测性加固。当CDSS给出一条用药建议、检验提醒或诊断提示,医生点击“否”或手动修改后,系统若在后续若干次会话中仍反复返回相同结论,这种现象即为「固执性输出」,它暴露模型未收敛、反馈闭环缺失或数据漂移等深层问题。本项目不试图修复模型,而是把这类行为变成可定义、可计量、可追溯、可问责的质控事件。

它的边界非常清晰:只处理已落地运行的CDSS系统产生的真实操作日志;只关注「医生主动干预后系统是否持续复现错误」这一特定模式;所有判断均基于输入日志中明确定义的字段(session_id、user_id、timestamp、cdss_output、doctor_correction、confidence_score),不引入额外标注或人工预判。这意味着它天然适配医院现有CDSS接口规范,无需改造上游系统,也无需对接EMR结构化数据库。

核心功能模块

系统由五个职责分明的模块组成,每个模块对应一个可独立验证的能力单元:

模块名称
职责说明
输入依据
输出形态
日志接入层(log_adapter.py)
解析多源HIS/CDSS JSONL日志,支持字段映射配置,兼容不同厂商日志格式
.env
 中 LOG_MAPPING_CONFIG 指向的映射表
标准化内部事件对象
固执检测引擎(persistence_engine.py)
检测「医生纠正后N次内重复输出相同cdss_output」模式,计算固执率(固执次数/总触发次数)
session_id + doctor_correction + cdss_output 序列
固执记录JSON、固执率统计
置信度衰减追踪器(decay_tracker.py)
记录每次输出的confidence_score变化,绘制固执发生时的置信度衰减曲线
confidence_score 时间序列
衰减轨迹JSON数组
复核触发器(workorder_trigger.py)
当固执率超过配置阈值(默认0.6)时,生成含会话上下文、原始输出、纠正动作的复核工单
固执率 + session上下文
工单JSON,含唯一ID与状态字段
审计日志层(audit_logger.py)
所有关键操作(摄入、查询、工单处理)写入哈希链JSONL文件,每条记录含前序哈希与当前HMAC
HMAC-SHA256密钥 + 上一条哈希
不可篡改JSONL审计流

这五个模块全部封装在src/目录下,彼此松耦合,可通过环境变量开关启用或禁用部分能力(如关闭哈希链仅用于测试)。

使用与配置流程

部署只需三步:安装依赖、配置映射、摄入日志。全程无图形界面,全部通过CLI或API驱动,适合嵌入医院DevOps流水线。

首先安装运行环境:

pip install -r requirements.txt

接着复制配置模板并按需调整:

cp .env.example .env

关键配置项包括:CDSS_LOG_PATH(指定日志目录)、PERSISTENCE_WINDOW(默认5,即医生纠正后检查后续5次输出)、PERSISTENCE_THRESHOLD(固执率触发阈值,默认0.6)、AUDIT_LOG_PATH(审计日志路径)以及LOG_MAPPING_CONFIG(指向字段映射规则文件,用于兼容不同CDSS日志格式)。

然后开始摄入示例日志:

python -m src.cli ingest --path data/sample_cdss_log.jsonl

系统将自动解析、归档、检测并生成初始固执记录。你可用CLI立即查询结果:

python -m src.cli query --session-id "sess_abc123"python -m src.cli workorder list

如需对外提供服务,启动API即可:

python -m uvicorn src.api_server:app --host 0.0.0.0 --port 8000

或使用Docker:

docker build -t cdss-persistence-monitor .docker run -p 8000:8000 cdss-persistence-monitor

服务启动后访问http://localhost:8000/docs即可查看完整Swagger文档,所有端点均带鉴权中间件保护。

数据契约与字段要求

系统严格遵循最小数据契约,仅依赖六项必填字段,全部来自CDSS标准输出日志:

字段名
类型
是否必填
说明
session_id
string
同一患者本次就诊的唯一会话标识
user_id
string
执行操作的医生工号或账号
timestamp
ISO8601 string
操作发生时间,精度到毫秒
cdss_output
string
CDSS本次输出的原始文本或结构化结论(如"建议加用阿托伐他汀20mg qd")
doctor_correction
boolean
医生是否对该输出进行了否定或修改(true=已纠正,false=接受)
confidence_score
float [0.0, 1.0]
CDSS本次输出的置信度分值,用于衰减分析

只要CDSS日志中存在这六个字段(名称可映射),系统就能工作。映射规则在.env中通过LOG_MAPPING_CONFIG指定,例如将某厂商日志中的"decision"字段映射为cdss_output,无需修改代码。

工程结构与可维护性设计

整个项目采用分层清晰、职责内聚的组织方式。src/下每个Python模块对应一个核心能力,命名直指其作用(如persistence_engine.py即固执检测主逻辑),无抽象过度命名。CLI命令全部由typer驱动,src.cli子模块下按功能分组:ingestqueryworkorderaudit,每个命令都自带--help说明,参数含义与API保持一致。

API服务层api_server.py仅做路由分发与响应包装,业务逻辑全部下沉至对应模块。所有数据校验由Pydantic模型完成,输入请求体、输出响应体、日志事件对象均有严格Schema约束,避免运行时类型错误。SQLite作为默认存储,兼顾轻量与事务一致性;aiosqlite支持异步写入,满足日志高吞吐场景。哈希链实现不依赖外部服务,所有签名与验证逻辑封装在audit_logger.py中,密钥通过环境变量注入,符合医疗系统安全基线。

这种结构让信息科工程师能快速定位问题模块,医务部人员可直接阅读CLI帮助理解操作语义,而不需要接触任何Python代码。

限制与说明

本项目当前版本不支持实时流式日志消费(如Kafka或Fluentd接入),仅处理静态JSONL文件或HTTP POST批量提交;不内置用户权限体系,鉴权中间件预留接口但默认绕过,实际部署需由前置网关统一管控;复核工单目前为单级审批,暂不支持多级会签或退回重审;哈希链验证仅限本地审计日志文件,不提供跨节点分布式共识能力。

所有限制均在项目文档中有明确说明,我们不做能力承诺之外的扩展。例如,它不分析CDSS错误原因(如是训练数据偏差还是推理bug),也不提供模型再训练建议,这些属于CDSS厂商责任范畴。我们只做一件事:把「系统是否听医生的话」这件事,变成可查、可证、可追责的数据事实。

项目地址:https://github.com/nexorin9/cdss-persistence-monitor

往期热门文章

医疗AI做出来了,但没人付钱

医院的“功能无限责任制”逼死了HIS和乙方

HIS厂商最赚钱的产品,是恐惧

医疗AI,连幻觉都谈不上

医疗AI正在被医院HIS“降维打击”

医院数据全进中台了,然后呢?

当整个行业默认HIS不会变好

排队两小时,看病三分钟:医院HIS系统正在改变诊疗

HIS厂商的"架构收敛":当所有系统长得一模一样,你凭什么收费?

十万字病历,AI只配读懂噪音

一群鼓吹AI Coding的专家,正在制造医疗信息化的新技术债

当AI开始学习自己编造的病历

不是AI不行,是HIS系统把门焊死了

医院AI培训:台上教你投喂,台下让你背锅

当AI开始操作医院HIS系统,医疗AI的问题就变了

医院信息网络安全大赛:表演给谁看?

CHIMA年年开,问题年年在

CHIMA2026:AI挤满展厅,但医院已经不买单了

医院的数据不属于医院

医院信息科不会消失,但正在被掏空

谁解释数据,谁就定义医院

一线崩了!医院信息科正在拖垮整个医疗信息化

医疗信息化将进入无人实施时代

当医院信息科主任用AI下场写代码,交付链第一次被打穿

当代码不再是“技术”:HIS厂商的“辜鸿铭时刻”

我用一个Agent,把实施链路压缩到一轮循环

AI狂欢背后:HIS厂商正在成为第一批受害者

离职程序员被炼成AI!但我发现真正该慌的是医生

HIS厂商还没倒,但已经不值钱了!

HIS厂商真正的危机:医院不再必须买系统了

代码不再稀缺,医院HIS厂商还怎么定价?

买国产不会被问责,买进口不会被原谅

把HIS系统的Loading改成Thinking,它就是AI了吗?

Seedance2证明了一件事:医疗AI可能只是另一种幻觉

软件已死:医院未来不需要买系统,只需要买“技能包”

我用OpenClaw干了一件HIS厂商最怕的事

Epic的“美国HIS神话”,为何在中国公立医院无法复制?

中国公立医院的内外网隔离,究竟在保护什么?

Oracle的撤退信号:医疗信息化,正在被资本重新定价

别做梦了,绝大多数公立医院,根本玩不转HIS自研

互联网大厂做不好HIS?因为这不是软件业,是保姆业

为什么开源HIS系统在中国几乎绝迹?

这套HIS系统完美运行,所以:医生全责

当HIS系统真正好用时,病人已经出事了

比“大厂救不了”更残酷的真相,当全国医院共用一套HIS系统

中国式 RWD 祛魅:所谓真实世界数据,其实是 AWD?

都在说医疗数据是金矿,但没人敢提那个尴尬的真相

中国医院信息化正在经历一场反向演化:越评级,越难用

为什么互联网大厂的“降维打击”,救不了中国医院的HIS?