
本项目是专为临床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结构化数据库。
核心功能模块
系统由五个职责分明的模块组成,每个模块对应一个可独立验证的能力单元:
.envLOG_MAPPING_CONFIG 指向的映射表 | |||
这五个模块全部封装在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 | |||
user_id | |||
timestamp | |||
cdss_output | |||
doctor_correction | |||
confidence_score |
只要CDSS日志中存在这六个字段(名称可映射),系统就能工作。映射规则在.env中通过LOG_MAPPING_CONFIG指定,例如将某厂商日志中的"decision"字段映射为cdss_output,无需修改代码。
工程结构与可维护性设计
整个项目采用分层清晰、职责内聚的组织方式。src/下每个Python模块对应一个核心能力,命名直指其作用(如persistence_engine.py即固执检测主逻辑),无抽象过度命名。CLI命令全部由typer驱动,src.cli子模块下按功能分组:ingest、query、workorder、audit,每个命令都自带--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
往期热门文章
HIS厂商的"架构收敛":当所有系统长得一模一样,你凭什么收费?
一群鼓吹AI Coding的专家,正在制造医疗信息化的新技术债
夜雨聆风