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}
"""

常见坑

  1. 不标注来源: LLM 无法引用,用户无法验证
  2. 注入太多: 检索了 20 个 chunk 全部注入,浪费 token
  3. 不做格式化: 原始文本直接拼接,LLM 难以理解
  4. 不告诉 LLM 怎么用: LLM 不知道参考资料的用途

参考资料

创建于 2026/6/30 更新于 2026/7/15