# **LLM 交互协议与 Prompt 最佳实践指南** **文档目的:** 定义“质控报告”的标准上下文格式,并提供配套的 System Prompt,以消除幻觉、确保回复准确性。 **适用版本:** IIT Manager Agent V2.9.1 **创建日期:** 2026-02-08 ## **🧠 一、 核心原理:为什么“混合格式”能防幻觉?** 我们将数据格式定义为 **Context Protocol v2.0**,采用 **XML 骨架 \+ Markdown 血肉** 的形式。 ### **1.1 格式对比** | 格式 | 示例 | LLM 视角的优缺点 | | :---- | :---- | :---- | | **纯 JSON** | {"age": 45, "error": true} | ❌ **缺点**:Token 消耗大,括号层级深时 LLM 容易“晕”,注意力机制容易分散。 | | **纯 Markdown** | \*\*Age\*\*: 45 (Error) | ❌ **缺点**:边界不清晰,多条记录容易混在一起,导致“张冠李戴”。 | | **混合模式 (推荐)** | \- Age: \*\*45\*\*\ | ✅ **优点**:XML \ 明确告诉 LLM “这是独立的一条记录”,Markdown \*\* 告诉 LLM “这是重点”。 | ### **1.2 防幻觉的三道防线** 1. **防线一:证据注入 (Evidence Injection)** * **以前**:只给 Age Error。LLM 被问“多少岁”时,只能瞎编。 * **现在**:给 Age Error (Current: 45, Range: 25-35)。LLM 看到了 45,直接引用,无需生成。 2. **防线二:预计算 (Pre-computation)** * **以前**:给 DOB: 1980,让 LLM 算年龄。LLM 数学不好,可能算错。 * **现在**:Node.js 算好 Age: 46,直接喂给 LLM。LLM 只负责读,不负责算。 3. **防线三:结构化边界 (XML Boundaries)** * **以前**:平铺文本。LLM 可能把 A 病人的合并用药安到 B 病人头上。 * **现在**:\...\。强制物理隔离,杜绝串行。 ## **📝 二、 Context Protocol v2.0 标准格式** 这是后端 ReportGenerator 需要生成的最终字符串格式。 \ \<\!-- 1\. 规则定义 (让 LLM 知道判罚标准) \--\> \ \入排标准 I-01: 年龄应在 25-35 岁之间\ \伦理合规 E-01: 必须签署知情同意书\ \ \<\!-- 2\. 严重问题清单 (按受试者分组) \--\> \ \ \存在 2 个严重违规\ \ 1\. \[R\_AGE\] \*\*年龄超标\*\* \- 现状: 当前年龄 \*\*45岁\*\* \- 标准: 25-35岁 \- 证据: \`birth\_date\` \= 1981-05-12 2\. \[R\_ICF\] \*\*知情同意缺失\*\* \- 现状: 字段为空 \- 证据: \`icf\_date\` \= null \ \ \ \存在 1 个严重违规\ \ 1\. \[R\_AGE\] \*\*年龄超标\*\* \- 现状: 当前年龄 \*\*52岁\*\* \- 证据: \`birth\_date\` \= 1974-02-01 \ \ \ \ ## **🗣️ 三、 配套 Prompt 设计 (System Prompt)** 仅有好的数据格式是不够的,必须用 Prompt 教会 LLM 如何阅读这个格式。 ### **3.1 CRA 监查员 System Prompt** \# Role 你是一名资深的临床监查员 (CRA)。你的任务是根据提供的【质控报告上下文】回答用户关于项目质量、违规情况的问题。 \# Input Format 你收到的上下文将包含在 \`\\` XML 标签中。 \- \`\\`: 定义了项目的质控规则。 \- \`\\`: 列出了具体的违规记录,按受试者 (\`\\`) 分组。 \# Constraints (绝对准则) 1\. \*\*基于证据\*\*:回答必须严格基于 \`\\` 中的数据。如果上下文中没有提到某条记录或某个数值,\*\*必须直接说“报告中未包含相关信息”\*\*,严禁编造数值。 2\. \*\*引用原文\*\*:在解释违规原因时,必须引用上下文中的 "证据" (Evidence) 字段(例如:“因为患者当前年龄为 45 岁...”)。 3\. \*\*结构化输出\*\*:回答多个受试者问题时,请使用 Markdown 列表。 4\. \*\*语气专业\*\*:保持客观、冷静的医疗专业语气。 \# Example User: "1号病人有什么问题?" Assistant: "1号受试者存在 \*\*2个严重违规\*\*: 1\. \*\*年龄超标\*\*:患者当前 \*\*45岁\*\*,不符合“25-35岁”的入排标准 (R\_AGE)。 2\. \*\*伦理缺失\*\*:未检测到知情同意书签署日期 (\`icf\_date\` 为空)。 建议立即核查原始病历或剔除该病例。" ## **🔬 四、 验证与测试 (Evaluation)** ### **4.1 幻觉压力测试** **测试用例 A:询问不存在的数值** * **Prompt**: "1号病人的血压是多少?" * **Context**: (上下文中只有年龄和ICF问题,没有血压数据) * **预期回答**: "报告中未包含1号受试者的血压数据。当前仅记录了年龄和知情同意书相关的违规信息。" * **失败回答 (幻觉)**: "1号病人的血压是 120/80 mmHg。" (如果 LLM 只有 Message 没有 Evidence,容易顺口胡编一个正常值) **测试用例 B:询问违规原因** * **Prompt**: "为什么10号病人年龄违规?" * **Context**: \...当前年龄 \*\*52岁\*\*...\ * **预期回答**: "因为10号受试者当前年龄为 **52岁**,超出了研究方案规定的 25-35 岁范围。" ### **4.2 结论** 通过 **"XML 结构化 \+ 证据注入 \+ 严格约束 Prompt"** 三位一体的方案,我们可以将幻觉率控制在 **极低水平 (\< 1%)**。 AI 在这里不再是“创造者”,而是精准的“阅读理解者”。