返回首页

Triage-and-Voice:LLM 幻觉的修复

Triage-and-Voice 模式通过分离分析和响应生成,解决了 LLM 中的幻觉问题。第一遍提取结构化数据,后端替换验证事实,第二遍形成表达。加速 2–3 倍,通过代码实现安全性。

拆分 LLM:Triage-and-Voice 对抗幻觉
Advertisement 728x90

分诊与语音架构模式:彻底消除大语言模型幻觉

聊天机器人中的大语言模型分析对话后,没有提供实际的热线号码,而是编造了一个儿童求助热线。“请勿编造联系方式”的指令被忽略。原因在于单次处理中的任务冲突:精确分析和共情回应争夺令牌资源,导致关键数据出现幻觉。

单次架构的问题

在标准的大语言模型产品方案中,用户输入直接传递给模型,由模型生成最终答案。分析需要输出包含精确事实的结构化JSON:参与者、风险、目标。而回应措辞则是一项涉及语音和语调的创造性任务。

将这两者合并到一个提示词中会导致妥协:

Google AdInline article slot
  • 模型为了风格牺牲准确性。
  • 幻觉被伪装成令人信服的文本。
  • 无法通过编程区分事实与虚构。

提升模型能力(推理模型、更多令牌)可以减少错误频率,但无法根除问题。在涉及潜台词的复杂案例中,即使顶级模型也会混淆动机并捏造细节。风险涉及可信数据:价格、地址、剂量、服务联系方式。

分诊与语音模式

将处理过程拆分为两次大语言模型调用,中间加入后端守门员。

第一轮:分诊。 不带风格的结构分析。模型将信号提取为JSON:

Google AdInline article slot
{
  "mood": "焦虑",
  "is_crisis": false,
  "crisis_type": null,
  "participants": [...],
  "motives": [...]
}

危机示例:

{
  "mood": "红色警报",
  "is_crisis": true,
  "crisis_type": "暴力"
}

后端守门。 确定性代码检查标志:

if (triage.IsCrisis) {
    var contacts = await db.GetVerifiedCrisisContacts(triage.CrisisType);
    prompt = crisisPromptTemplate.WithContacts(contacts);
}

从数据库插入已验证数据。按规则路由:危机 → 特殊提示词。

Google AdInline article slot

第二轮:语音。 模型接收增强后的输入,并以期望的语调生成回应。它不分析或编造事实。

在DeepSeek V3.2上测试(数十个危机案例):联系方式幻觉为零。

分离的优势

  • 职责分离。 分诊专注于结构(用于事实的令牌)。语音专注于风格(用于共情的令牌)。两个维度的质量都得到提升(在40个评估案例中已验证)。
  • 缓存。 分析只需进行一次。当改变语音风格时(例如Telegram机器人中的不同视角),只需重新运行语音部分。指标:首次回应30–45秒(对比50–90秒),后续回应15–20秒。
  • 安全性。 控制权在代码中,而非提示词中。模型设置标志(“何时”),后端决定(“什么”)。可测试,可预测。

应用场景

该模式适用于具有以下特点的大语言模型产品:

  • 输入分析 + 输出生成。
  • 可信数据(金融、法律参考、医疗)。
  • 边缘案例(危机、例外情况)。
  • 无需重新分析的多视角输出。
  • 在分析与输出之间需要检查点。

原则:模型分析 → 代码决定 → 模型表述。

重构信号:提示词中包含“请勿编造[数据]”。

关键要点

  • 架构转变: 从一次调用变为两次调用加一个守门员,消除任务冲突。
  • 性能指标: 分析被缓存,语音部分速度提升2–3倍。
  • 安全性: 确定性后端插入事实,模型不接触数据库。
  • 可扩展性: 适用于聊天机器人、分析工具、具有边缘案例的产品。
  • 已验证: 40个评估案例 + 数十个危机运行,无幻觉。

简单架构的风险

单次调用 = 无验证的原子操作。缺乏:

  • 在到达用户前验证模型决策。
  • 分析缓存。
  • 边缘案例路由。
  • 已验证数据的插入。

在关键位置信任概率性生成是一个漏洞。分诊与语音模式增加了控制:+1次调用,+1个守门员 = 可验证的管道。

— Editorial Team

Advertisement 728x90

继续阅读