第八章 · 生成策略与模型容错

本章定位:前面七章把检索做到了极致——分块、向量化、混合检索、知识图谱、意图路由、会话记忆,最终攒出了一堆高质量的证据。但证据再好,喂给大模型的方式不对,照样出烂答案。检索是「买菜」,生成是「做菜」——菜再新鲜,厨师手艺不行或灶台故障,端上来的还是黑暗料理。本章讲两件事:怎么把证据喂好(生成策略 + 幻觉抑制),以及灶台故障了怎么办(模型容错)

本章分两部分:

  • 上篇 · 概念与原理(科普):RAG 生成的三段式 Prompt 结构是什么?幻觉是什么、有哪几种、怎么抑制?引用对齐怎么做?答案格式怎么约束?
  • 下篇 · SparkX 源码落地(实践):SparkX 怎么拼装证据(<documents> 标签 + 引用编号对齐)?防幻觉 Prompt 怎么写?模型容错三板斧(多候选路由 + 三态熔断 + 首包探测)怎么实现用户无感知的故障切换?

上篇 · 概念与原理

一、从检索到生成:最后一公里的质量问题

1. 好 chunk + 烂 Prompt = 烂答案

假设你检索召回了完美的证据:「自签收之日起 7 天内可无理由退货」。但如果你的 Prompt 是这样写的:

系统:你是客服助手。
用户:退货政策是什么?

模型可能回答「一般来说电商都支持 7 天无理由退货,这是行业惯例…」——它用了自己的通用知识,而不是你给的证据。证据给了但没用上,等于白检索

2. RAG 生成阶段的核心挑战

  • 怎么让模型严格基于证据回答,而不是自由发挥(幻觉);
  • 怎么把证据结构化地喂给模型,让它清楚哪段是证据、哪段是问题;
  • 不知道时怎么让它说不知道,而不是编一个;
  • 答案怎么可溯源,让用户能点开看「这个结论来自哪个文档」。

这些都要靠 Prompt 工程 解决——生成阶段的核心技术不是模型本身,而是你怎么「指挥」模型。


二、RAG Prompt 的三段式结构

一个标准的 RAG Prompt 由三部分组成:

1. 系统指令(System Prompt):定义角色和行为边界

告诉模型「你是谁、该怎么回答、不能做什么」:

你是企业知识库助手。
只能基于提供的文档内容回答,不得使用外部知识。
如果文档中没有相关信息,直接说"未找到相关内容"。
回答时用 [n] 标注来源。

System Prompt 是防幻觉的主战场——「只能基于文档」「不得使用外部知识」「不知道就说不知道」这三条是最关键的约束。

2. 检索上下文(Retrieved Context):把 chunk 喂给模型

把检索到的证据结构化地呈现给模型,用标签包裹让它清楚边界:

<documents>
<context index="1">自签收之日起 7 天内可无理由退货...</context>
<context index="2">生鲜食品不支持退货...</context>
</documents>

为什么要用标签包裹:明确告诉模型「标签内是证据,标签外不是」。index 编号让模型能在回答里引用 [1][2] 实现溯源。

3. 用户问题(User Query):用改写后的还是原文


🔒 以上为本章部分预览(约 10%)

本章剩余 90% 内容包含:关键源码逐行拆解、设计细节与工程权衡、代码示例与生产实践要点。

加入知识星球,获取《SparkX 源码深度解析》全部 13 章

💡 本次展示的仅为部分预览内容(约 10%)。完整的源码深度解析包含每一个技术点的完整实现细节。点击上方按钮扫码加入知识星球,解锁全部内容。

🔒

本章为知识星球会员专属内容

完整源码解析、设计决策与落地实践,加入知识星球即可解锁全部章节。

知识星球
🌟 加入知识星球
解锁源码与设计详解
知识星球二维码 了解详情