检索到相关文档片段只是完成了“找资料”这一步。要让大模型真正基于这些资料生成准确回答,还需要一个关键环节:将检索结果有效地“注入”到模型的上下文中,使其成为生成过程的直接依据。这一过程看似简单——把文本拼接起来发给模型就行,但其中的设计细节,会直接影响回答的质量、准确性和可审核性。
1. 上下文注入的本质
大语言模型在生成每个词时,都会参考当前对话的“上下文窗口”内的所有内容。上下文注入,就是将检索到的外部知识片段,作为这个窗口的一部分,与用户问题、系统指令一起打包发送给模型。
它的核心作用是将模型的生成行为从“基于内部知识的自由发挥”,转变为“基于给定资料的约束性转述”。模型不再需要依赖参数中存储的、可能过时或不确定的信息,而是被明确告知:“下面这几段资料是你回答的依据,请严格据此作答。”
2. 典型的注入结构
在实际工程中,注入的上下文通常由三部分组成,按照一定顺序拼接成一个 Prompt:
- 系统指令:定义模型的角色、行为约束和输出格式。例如:“你是一个公司内部知识库助手,只用提供的资料回答问题。如果资料中找不到答案,请明确说明‘未找到相关信息’,并始终注明信息来源。”
- 检索到的资料片段:来自向量数据库的 top‑k 个文本块,每个片段附带上它的元数据(如来源文档名、章节、日期等)。通常会按相关性从高到低排列,并用分隔符或特定格式区分,例如:
【资料 1】来源:《员工手册》第 3.2 条
内容:员工每年享有 15 天带薪年假,自入职满一年后开始计算……
【资料 2】来源:《2024 年福利调整通知》
内容:自 2024 年 7 月 1 日起,年假天数调整为 18 天……
- 用户问题与输出指示:既包括原始提问,也可以加上对回答风格的额外要求,如“请用中文回答”“答案尽量简洁”等。
将这些内容组合成一个完整的 Prompt 模板后,单次调用大模型 API 即可完成生成。
3. 注入方式的选择
实践中,不同的模型调用方式和工具链,会有几种常见的注入策略:
- 直接拼接(最常见)
把上述所有内容合并为一段文本,作为 user 消息或 system 消息传入模型。这种方式最直观,适合大多数单轮问答场景。需要注意控制总长度,避免超出模型的上下文窗口限制(如 4k、8k、128k tokens)。
- 结构化消息注入(多轮对话或复杂指令)
利用 Chat 模型的角色区分(system/user/assistant),例如:
system消息放置系统指令和资料片段;user消息放置用户问题。
这种组织方式更清晰,便于在需要多轮对话时维护上下文,且支持一些支持原生函数调用的模型框架。
- 分步注入(长上下文或大资料量)
当检索到的资料总长度接近上下文窗口上限时,可以采用截断策略(只保留最相关的部分),或使用摘要技术先压缩资料片段,再将摘要注入。但这一步会牺牲细节,需根据场景权衡。
4. 设计影响质量的几个细节
上下文注入不只是简单拼接,以下细节会显著影响最终答案:
a. 指令的明确性
指令必须清楚界定模型的行为边界。一个模糊的指令如“请根据资料回答”,可能让模型不自觉加入自己的常识。更有效的是加上约束:“严格仅使用上述资料中的信息回答,不得添加任何额外内容。如果信息不充分,直接说明。”这会强制模型回归检索内容,减少幻觉。
b. 资料片段的有序性与去噪
检索结果中可能包含不相关或弱相关的片段。如果不加筛选全部注入,模型会被噪声干扰,抓不住重点。常见做法有:
- 保留相关性分数最高的 3~5 个片段;
- 按相关度降序排列,让最重要的信息最先被模型读取;
- 对于重复内容片段,去重或只保留一份,避免冗余干扰模型判断。
c. 来源标注的植入
提示词中可以要求模型在回答中标注出处,比如:“请在回答每个要点时,用【来源:xxx】的格式注明依据。”同时,在注入的资料片段里也预先带上清晰的来源标识(如文件名、章节号)。这样模型既能便利地引用,又能确保引用信息的可追溯性。
d. 长度与位置效应
模型对上下文窗口的首尾部分关注度往往更高。因此,通常把最重要的指令放在开头,把最相关的资料放在靠近用户问题的位置,中间放置辅助性资料。这有助于模型优先处理关键信息。
5. 一个完整的注入示例
假设用户问:“请解释 RAG 如何缓解幻觉问题。”系统检索到两个相关片段:
- 片段 A:描述幻觉产生的原因。
- 片段 B:说明 RAG 通过检索真实文档限制生成内容的自由发散。
构建的 Prompt 可以是:
你是一名技术科普助手。请严格根据下方提供的资料回答问题,如果资料不足以回答,请直接回复“资料不足”。
回答时,请在每个关键点后注明来自哪段资料。
【资料 1】来源:《常见AI术语解释》
幻觉是大语言模型因概率预测特性而编造看似合理但事实错误的内容。
【资料 2】来源:《RAG 技术白皮书》
RAG 将外部知识库中的可靠文档片段注入生成上下文,强制模型基于这些真实信息作答,从而大幅降低幻觉发生概率。
用户问题:请解释 RAG 如何缓解幻觉问题。
模型收到这些后,会自然整合两段资料,生成带有来源的答案,而不会凭空臆想。
6. 对实际系统的启发
上下文注入原理虽然直接,但把它的细节做对,是很多 RAG 系统从“可用”走向“好用”的分水岭。不必过度设计,只需要在实践中反复调整指令措辞、资料排序和长度控制,观察模型的回答是否符合预期。一旦稳定,这套注入逻辑几乎可以固化下来,成为 RAG 流水线中最可靠的环节之一。