生成优化

生成阶段决定RAG系统的最终输出质量,需要精心设计Prompt和上下文处理。

共 3 篇文章·阅读时间:约30分钟

01上下文注入

如何将检索到的文档有效地组织成LLM的输入上下文,是影响生成质量的关键。

上下文构建

简单拼接

将检索到的chunk按相关性顺序拼接。
问题:可能超出LLM上下文限制。

摘要压缩

先用LLM对每个chunk生成摘要,再拼接。
保留关键信息的同时减少token消耗。

窗口扩展

如果某个chunk匹配度高,扩展到更大的上下文窗口。
如:当前chunk → 整个段落 → 整篇文章。

上下文过滤

并非所有检索到的内容都有用,需要过滤低质量和冗余信息。

过滤策略

  • 相似度阈值:低于阈值的chunk直接丢弃
  • 重复去除:去除内容高度重复的chunk
  • 多样性采样:确保选取的chunk覆盖不同角度
  • 关键词匹配:保留包含用户问题关键词的chunk

上下文长度控制

  • GPT-3.5/4:可使用4K-128K上下文,建议使用8K以内
  • Claude:支持200K上下文,可适当多用
  • 长上下文模型:LongLoRA、ChatGLM等可处理更长
  • 注意:更长 ≠ 更好,噪音会增加

02引用溯源

RAG的重要优势是答案可以追溯到具体来源,增强可信度和可验证性。

引用方法

显式引用

在Prompt中要求LLM明确标注引用的来源。
"根据[文档1],[文档2]指出:..."

引用编号

为每个chunk分配编号,在回答中用编号引用。
如:"xxx [1]。yyy [2]。"

位置标记

在上下文中标注chunk的文档来源。
LLM学习到特定位置对应特定来源。

引用展示

引用展示格式

答案内容...
[1] 来源:《技术文档》- 第三章 2024-01-15
[2] 来源:《用户手册》- FAQ第5条
点击查看完整来源...

引用质量保障

  • 确保引用与回答内容确实相关
  • 展示足够的信息让用户能定位原文
  • 提供原文的点击跳转链接
  • 如果多个来源冲突,明确说明

03答案生成

通过精心设计的Prompt和生成策略,提升RAG系统的答案质量和用户体验。

Prompt设计

RAG标准Prompt模板

你是一个问答助手。请根据以下参考信息回答用户的问题。

参考信息:
{context}

用户问题:{question}

要求:
1. 只基于参考信息回答,不要编造信息
2. 如果参考信息不足以回答,请明确说明
3. 使用清晰简洁的语言
4. 如需引用,请标注来源编号

质量控制

无答案处理

当检索结果不足以回答时,不要编造答案。
Prompt明确要求:"如果无法回答,请说明..."

置信度校准

根据检索质量调整回答的确定性程度。
检索质量高 → 自信回答;检索质量低 → 保守表达。

多答案整合

当多个chunk提供不同角度的信息时,整合回答。
识别冲突信息,并说明不同观点。

格式控制

根据用户需求调整输出格式。
如:JSON、Markdown、列表、段落等。

生成优化 checklist

  • ✅ 明确的上下文边界和来源标注
  • ✅ 明确的回答约束(不编造、有据可查)
  • ✅ 无答案时的友好处理
  • ✅ 根据检索质量调整置信度
  • ✅ 支持多种输出格式
AI知识已学完
返回AI知识 →
----