生成优化
生成阶段决定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
- ✅ 明确的上下文边界和来源标注
- ✅ 明确的回答约束(不编造、有据可查)
- ✅ 无答案时的友好处理
- ✅ 根据检索质量调整置信度
- ✅ 支持多种输出格式