Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/05-测试文档/LLM 友好型质控报告评估与优化方案.md

5.1 KiB
Raw Blame History

LLM 友好型质控报告评估与优化方案

评估对象: qc-report-test0102-pd-study-2026-02-08.xml

评估目的: 确定该格式是否适合作为 Context 喂给 LLM 以回答用户提问。

评估日期: 2026-02-08

📊 一、 现状评估 (Current State Analysis)

1. 评分卡

维度 评分 (1-10) 评价
结构化程度 9/10 XML 结构清晰,解析容易。
Token 效率 3/10 极差。重复信息太多(如 rule_name 重复 64 次)。
信息完整性 4/10 缺失核心证据。只说了“错”,没说“值为多少”。
语义清晰度 5/10 rule="unknown" 对 AI 毫无帮助,缺乏语义标签。

2. 核心缺陷分析

缺陷 1缺乏“原始值” (The "Evidence Gap")

  • 现状
    <message>年龄不在 25-35 岁范围内</message>
    <field>age</field>

  • LLM 的困惑"我知道年龄不对,但这个病人到底几岁?是 24 岁(轻微偏差)还是 80 岁(严重偏差)?用户如果问我‘为什么报错’,我只能复读 Message无法解释原因。"

缺陷 2Token 冗余 (The "Echo Chamber")

  • 现状
    13 条记录都有“年龄”问题rule_name 和 message 重复了 13 次。
  • LLM 的困惑"为什么要让我读 13 遍同样的一句话?这浪费了宝贵的上下文窗口。"

缺陷 3逻辑扁平 (Lack of Hierarchy)

  • 现状
    所有问题平铺在 <critical_issues> 下,没有按 Record ID 聚合。
  • LLM 的困惑"如果用户问001号病人有哪些问题我得遍历整个列表去挑出 record=1 的项,容易看漏。"

🚀 二、 优化方案Context Protocol v2.0

根据我们的 CRA Agent 深度设计,我们需要将报告重构为 “以实体为中心,以证据为支撑” 的结构。

2.1 理想的 Context 结构 (Gold Standard)

建议采用 混合模式XML 定义边界Markdown 描述详情。

<qc_context project_id="test0102" generated="2026-02-08">

<!-- 1. 宏观统计 (Aggregate) -->
<overview>
- 总记录数: 13 | 严重违规: 13人 (100%)
- 主要问题: 年龄超标 (13), 未签知情同意书 (13), 疼痛评分不达标 (13)
</overview>

<!-- 2. 规则定义 (Reference) - 只定义一次,省 Token -->
<rule_definitions>
<rule id="R_AGE" tag="#demographics">年龄应在 25-35 岁之间</rule>
<rule id="R_ICF" tag="#ethics">必须签署知情同意书</rule>
</rule_definitions>

<!-- 3. 问题详情 (Grouped by Record) -->
<issues_list>

\<record id="1" status="CRITICAL"\>  
  \<summary\>存在 5 个严重违规\</summary\>  
  \<details\>  
    \- \[R\_AGE\] ❌ \*\*年龄违规\*\*: 当前值 \`45\` (不在 25-35 范围内)。  
    \- \[R\_ICF\] ❌ \*\*伦理违规\*\*: \`informed\_consent\` 为空。  
    \- \[R\_VAS\] ❌ \*\*入排不符\*\*: VAS评分 \`2\` (要求 \>= 4)。  
  \</details\>  
\</record\>

\<record id="10" status="CRITICAL"\>  
  \<summary\>存在 5 个严重违规\</summary\>  
  \<details\>  
    \- \[R\_AGE\] ❌ \*\*年龄违规\*\*: 当前值 \`52\`。  
    \<\!-- 省略重复描述,仅列出差异或关键点 \--\>  
  \</details\>  
\</record\>

</issues_list>

</qc_context>

🛠️ 三、 实施建议 (Action Items)

3.1 后端代码调整 (QcService / ReportGenerator)

你需要修改生成 XML 的逻辑,不仅要查 iit_qc_logs还要关联 原始数据

  1. 补充 value 字段
    在存入 iit_qc_logs 时,或者在生成报告时,必须把触发报错的 具体数值 写进去。
    • Bad: { "message": "Age error" }
    • Good: { "message": "Age error", "evidence": { "value": 45, "threshold": "25-35" } }
  2. 补充 rule_id 和 tag
    目前的 rule="unknown" 是不可接受的。
    • 在 HardRuleEngine 里,每条规则必须有一个唯一的 code (例如 AGE_CHECK)。
    • 在 iit_skills 配置中,关联 Tags。
  3. 按受试者聚合 (Group By Record)
    不要输出扁平的 List要输出 MapMap<RecordId, Issues[]>。

3.2 优化后的 LLM 交互流程

当用户问:“为什么 1 号病人不合格?

  • 旧 XMLLLM 看到 "年龄不在范围内",只能回答“因为年龄不对”。
  • 新 XMLLLM 看到 当前值 45 (要求 25-35),可以回答:
    “1号病人不合格主要有 3 个原因:
    1. 年龄不符:患者 45岁,超出了研究要求的 25-35 岁范围。
    2. 疼痛评分不足VAS 评分为 2分,未达到入组要求的 4分。
    3. 伦理缺失:系统中未查询到知情同意书签署记录。”

3.3 总结

现有报告是给程序员调试用的,不是给 LLM 用的。

请按照 Context Protocol 规范,增加 Evidence (原始值),增加 Grouping (聚合),并消除冗余文本。