Retrieval Context
Retrieval Context 是从 RAG 检索结果注入到 LLM 上下文中的知识片段。它需要格式化、标注来源、控制长度,并与对话上下文融合。
#type / concept
#status / evergreen
#tech / ai
[!info] related notes
Retrieval Context
一句话定义
Retrieval Context 是从 RAG 检索结果注入到 LLM 上下文中的知识片段。它不只是”把检索结果塞进去”,还需要格式化、标注来源、控制长度,并告诉 LLM 如何使用这些信息。
核心原理
注入格式
def format_retrieval_context(chunks: list[Chunk]) -> str:
"""格式化检索结果为 LLM 可读的上下文"""
parts = []
for i, chunk in enumerate(chunks):
source = chunk.metadata.get("title", "未知来源")
parts.append(f"[{i+1}] 来源: {source}\n{chunk.text}")
return "参考资料:\n\n" + "\n\n".join(parts)
注入位置
System Prompt
+
用户画像
+
对话摘要
+
参考资料: ← Retrieval Context 注入这里
[1] 来源: 员工手册
膝关节不稳定常见原因包括...
[2] 来源: 康复指南
股四头肌训练方法...
+
最近消息
+
当前输入
与 Prompt 的配合
SYSTEM_PROMPT = """
你是一个健康助手。请基于参考资料回答问题。
规则:
- 优先使用参考资料中的信息
- 引用时标注来源编号,如 [1]
- 如果参考资料中没有相关信息,说明并基于你的知识回答
{retrieval_context}
"""
常见坑
- 不标注来源: LLM 无法引用,用户无法验证
- 注入太多: 检索了 20 个 chunk 全部注入,浪费 token
- 不做格式化: 原始文本直接拼接,LLM 难以理解
- 不告诉 LLM 怎么用: LLM 不知道参考资料的用途