- Add development plan: 07-QC system UI and LLM format optimization - Phase 1: PromptBuilder + XML clinical slice format (~5.5h) - Phase 2: QC cockpit + stat cards + risk heatmap (~9.5h) - Phase 3: Variable tagging system (~5h) - Add CRA Agent design document and prototype - Update module status: design 100%, code 45% - Update system status: real-time QC complete + plan ready Co-authored-by: Cursor <cursoragent@cursor.com>
215 lines
8.2 KiB
Markdown
215 lines
8.2 KiB
Markdown
# **CRA Agent (临床监查) 深度设计与展现方案**
|
||
|
||
**文档版本:** v2.0
|
||
|
||
**文档目的:** 针对多变量(300+)、高复杂度(入排/PD/AE/伦理)的临床研究场景,设计 CRA Agent 的数据处理逻辑与交互界面。
|
||
|
||
**适用版本:** IIT Manager Agent V2.9.1
|
||
|
||
**创建日期:** 2026-02-07
|
||
|
||
## **🏗️ 一、 架构设计:如何处理 300+ 变量?**
|
||
|
||
面对 10 个表单、300 个变量,我们不能试图一次性把所有数据塞进 Prompt。我们需要建立一个 **"变量知识图谱" (Variable Metadata Graph)**。
|
||
|
||
### **1.1 变量分组策略 (Grouping)**
|
||
|
||
在 Admin 端配置 REDCap 映射时,不仅要映射字段名,还要给变量打 **"语义标签"**:
|
||
|
||
| REDCap 变量名 | 语义标签 (Tag) | 归属域 (Domain) | 关键度 |
|
||
| :---- | :---- | :---- | :---- |
|
||
| dob | \#demographics | 基线 | High |
|
||
| icf\_date | \#consent, \#ethics | 伦理 | Critical |
|
||
| visit\_date | \#timeline | 访视 | High |
|
||
| alt, ast | \#lab, \#safety | 实验室 | Medium |
|
||
| tumor\_size | \#efficacy | 疗效 | High |
|
||
|
||
**设计价值**:
|
||
|
||
当 CRA Agent 需要核查 "是否符合入排标准" 时,它不需要读取 300 个变量,只需要请求 \#demographics \+ \#lab \+ \#efficacy 标签下的 20 个变量。
|
||
|
||
### **1.2 双层质控引擎 (Hybrid QC Engine)**
|
||
|
||
我们将质控分为两层,只有复杂逻辑才交给 LLM,既省钱又准确。
|
||
|
||
* **Layer 1: 基础清洗 (HardRuleEngine)**
|
||
* **执行者**:Node.js 代码
|
||
* **检查内容**:空值、数据类型、数值范围 (如 BMI \> 50)、逻辑跳转。
|
||
* **输出**:直接生成错误日志,不消耗 Token。
|
||
* **Layer 2: 医学逻辑 (AI Logic Engine)**
|
||
* **执行者**:LLM (DeepSeek/Qwen) \+ RAG (Protocol)
|
||
* **检查内容**:入排标准符合性、AE 判定、方案偏离 (PD)、合并用药禁忌。
|
||
* **输入**:Layer 1 清洗后的数据 \+ 方案规则。
|
||
|
||
## **🤖 二、 对 LLM 友好的数据格式设计 (Context Protocol)**
|
||
|
||
为了让 LLM 精准判断医学逻辑,我们放弃 JSON 堆砌,采用 **"临床切片 (Clinical Slice)"** 模式。
|
||
|
||
### **2.1 场景一:入排标准核查 (Inclusion/Exclusion)**
|
||
|
||
**LLM Prompt 结构建议:**
|
||
|
||
\<task\>核查该患者是否符合研究入排标准\</task\>
|
||
|
||
\<protocol\_criteria\>
|
||
\<\!-- 从 RAG 检索出的标准 \--\>
|
||
1\. 年龄 18-75 岁。
|
||
2\. 病理确诊为非小细胞肺癌。
|
||
3\. 肝肾功能正常 (ALT/AST \< 2.5 ULN)。
|
||
\</protocol\_criteria\>
|
||
|
||
\<patient\_slice tag="screening\_data"\>
|
||
\<\!-- 仅注入相关变量,已转化为自然语言描述 \--\>
|
||
\- 出生日期:1950-05-12 (当前年龄 75 岁)
|
||
\- 诊断:右肺腺癌 (2025-12-01 确诊)
|
||
\- 实验室检查:ALT 150 U/L (参考值 0-40), AST 45 U/L。
|
||
\</patient\_slice\>
|
||
|
||
\<instruction\>
|
||
请一步步推理,对比患者数据与标准。重点关注肝功能指标。
|
||
\</instruction\>
|
||
|
||
### **2.2 场景二:方案偏离 (Protocol Deviation) \- 时间窗检查**
|
||
|
||
**LLM Prompt 结构建议:**
|
||
|
||
\<task\>检查 V2 访视是否超窗\</task\>
|
||
|
||
\<rule\_context\>
|
||
规则:V2 访视应在 V1 后 28 天 ± 3 天进行。
|
||
前提:V1 访视日期为基准。
|
||
\</rule\_context\>
|
||
|
||
\<timeline\_slice\>
|
||
\- V1 访视日期:2026-01-01
|
||
\- V2 实际访视日期:2026-02-05
|
||
\</timeline\_slice\>
|
||
|
||
### **2.3 场景三:AE 事件侦测 (Safety Monitoring)**
|
||
|
||
这是最复杂的,需要对比前后两次数据。
|
||
|
||
\<task\>基于实验室数据变化,判断是否发生潜在 AE\</task\>
|
||
|
||
\<lab\_comparison\>
|
||
\<baseline\>
|
||
WBC: 5.5 (正常)
|
||
PLT: 200 (正常)
|
||
\</baseline\>
|
||
\<current\_visit\>
|
||
WBC: 2.1 (低于下限 4.0) ⚠️
|
||
PLT: 180 (正常)
|
||
\</current\_visit\>
|
||
\</lab\_comparison\>
|
||
|
||
\<question\>
|
||
白细胞计数 (WBC) 出现显著下降且低于正常值,根据 CTCAE 标准,这属于几级不良事件?是否在 AE 表中记录?
|
||
\</question\>
|
||
|
||
## **🖥️ 三、 后台展现形式设计 (Human UI)**
|
||
|
||
Admin 端需要一个高密度的 **"CRA 驾驶舱"**,让 CRA 一眼看穿 300 个变量背后的风险。
|
||
|
||
### **3.1 宏观视图:风险热力图 (Risk Heatmap)**
|
||
|
||
不要只列出 List,要用矩阵。
|
||
|
||
* **行**:受试者 (Subject 001, 002...)
|
||
* **列**:访视/表单 (Screening, Baseline, V1, V2, AE, CM)
|
||
* **单元格**:颜色代表风险等级。
|
||
* 🟢 **Green**: Clean (无问题)
|
||
* 🟡 **Yellow**: Query (有疑问/空值)
|
||
* 🔴 **Red**: Critical (违背入排/严重 PD/SAE)
|
||
* ⚪ **Gray**: Not Started
|
||
|
||
**交互**:点击红色单元格,右侧滑出 "智能诊断报告"。
|
||
|
||
### **3.2 微观视图:智能诊断报告 (The "Why" Panel)**
|
||
|
||
当点击某个具体的报警(例如 Subject 001 的入排标准红色警告)时,展示如下内容:
|
||
|
||
#### **📋 诊断卡片:入排标准违规**
|
||
|
||
**\[结论\]**:❌ **建议剔除**
|
||
|
||
**\[置信度\]**:High (基于硬指标)
|
||
|
||
**\[AI 推理链\]**:
|
||
|
||
1. **标准要求**:ALT \< 2.5倍 ULN (即 \< 100 U/L)。
|
||
2. **患者数据**:当前 ALT 为 150 U/L。
|
||
3. **判定**:150 \> 100,不符合入组标准第 3 条。
|
||
|
||
**\[原始证据\]**:
|
||
|
||
* lab\_alt: 150 (来源于 form: lab\_results, field: alt)
|
||
* lab\_date: 2026-01-15
|
||
|
||
**\[CRA 操作区\]**:
|
||
|
||
* \[ \] 忽略 (医学判断无碍)
|
||
* \[ \] 发送 Query (询问 CRC)
|
||
* \[ \] 确认违规 (标记为 PD)
|
||
|
||
### **3.3 调试视图:LLM 视角 (Trace Viewer)**
|
||
|
||
在每条质控记录的详情中,提供一个 **"AI 思考过程"** Tab,实现黑盒透明化。
|
||
|
||
* **Input (Prompt Context)**: 展示发送给 LLM 的 XML+Markdown 格式原始提示词(即“临床切片”)。
|
||
* **Process (Thinking)**: 展示 LLM 的思维链(Chain of Thought)。
|
||
* **Output (JSON)**: 展示最终生成的结构化结论。
|
||
|
||
## **⚙️ 四、 配置层设计 (Rule Studio)**
|
||
|
||
### **4.1 规则配置中心**
|
||
|
||
采用 **“分层配置,自动托底”** 策略:
|
||
|
||
1. **Layer 1 字段自动映射 (Auto Mapping)**:
|
||
* 系统读取 REDCap Metadata,自动生成 Hard Rules(空值、范围)。
|
||
* 用户仅需为变量打标签(Tagging),如 \#safety, \#efficacy。
|
||
2. **Layer 2 逻辑构建器 (Logic Builder)**:
|
||
* 低代码配置跨表逻辑:IF \[V2.Date\] \- \[V1.Date\] \> 31 THEN \[PD Alert\]。
|
||
3. **Layer 3 AI 监查员配置 (AI Setup)**:
|
||
* **上传 Protocol PDF** \-\> AI 自动提取入排标准 \-\> 人工确认 \-\> 自动生成 Layer 2 检查 Prompt。
|
||
|
||
## **🛡️ 五、 特殊医学逻辑设计**
|
||
|
||
针对你提到的 4 个核心需求,设计如下专项 Check:
|
||
|
||
### **5.1 入排标准 (I/E Criteria)**
|
||
|
||
* **设计**:将 Protocol PDF 中的入排标准 OCR 化,转为结构化规则库。
|
||
* **展现**:在 "受试者列表" 增加一列 "I/E Status"。
|
||
* Pass: ✅
|
||
* Fail: ❌ (Hover 显示具体哪一条没过,如 "I3: Age")
|
||
|
||
### **5.2 方案偏离 (PD)**
|
||
|
||
* **核心**:时间窗 (Time Window) 和 漏做检查 (Missing Procedure)。
|
||
* **展现**:**时间轴视图 (Gantt-like)**。
|
||
* 展示 "计划访视日" vs "实际访视日"。
|
||
* 如果超窗,用红色区间标出。
|
||
|
||
### **5.3 伦理合规 (Ethics)**
|
||
|
||
* **核心逻辑**:Date(ICF\_Sign) \<= Date(Any\_Study\_Procedure)。
|
||
* **逻辑**:如果任何检查日期早于知情同意书签署日期,触发 **最高级别警报 (Critical)**。
|
||
* **展现**:置顶 Banner 警告,因为这是合规红线。
|
||
|
||
### **5.4 AE 事件侦测 (Safety)**
|
||
|
||
* **逻辑**:
|
||
1. **Change Check**: 实验室指标从 Normal 变为 Abnormal。
|
||
2. **Cross Check**: 检查 AE Log 表单中是否有对应日期的记录。
|
||
3. 如果 Lab 异常但 AE 表为空 \-\> **提示 "潜在漏报 AE"**。
|
||
* **展现**:
|
||
* "Lab vs AE 一致性检查" 面板。
|
||
* 左侧显示异常 Lab 指标,右侧显示 AE 记录,中间用连线表示匹配关系。
|
||
|
||
## **📝 总结建议**
|
||
|
||
1. **不要全量喂数据**:建立 VariableMetadata,按 Tag 切片。
|
||
2. **LLM 看"病历"**:将 JSON 转换为 **XML 标签包裹的 Markdown** 格式的“临床叙事”,不仅省 Token,还能极大提升 AI 对医学逻辑的理解力。
|
||
3. **UI 矩阵化**:CRA 需要上帝视角,热力图是最佳选择。
|
||
4. **推理透明化**:AI 报出错误时,必须展示 "标准 vs 现状" 的对比证据,方便 CRA 快速复核。 |