Context Stuffing
上下文塞入把检索到的内容拼进 Prompt 一起发给模型——RAG 的最后一步。
详解
Context Stuffing(上下文塞入)是 RAG 流程的最后一步:把检索阶段拿到的 top-K 文档块,按格式拼装进 Prompt,一起发给语言模型生成最终回答。没有这一步,RAG 只是"查了资料但没交给模型"。拼装方式一般是:System Prompt 中交代模型角色和指令,然后附上"以下是参考资料:...各块内容...",最后是用户的原始问题。这一步的挑战在于上下文窗口限制——如果检索到的内容太多、每块太长,拼起来超过模型最大 token 数就会报错或截断。实践中需要控制每块长度、限制 K 的大小,有时还要对检索内容做摘要压缩再塞入。另一个常见问题是"迷失在中间"(lost in the middle):多项研究发现模型对位于上下文中段的信息注意力下降,因此应把最重要的内容放在前面或最后。
一个类比
期末开卷考试:你查了 5 本参考书,把最相关的几段抄在答题纸上方作为"小抄",然后根据小抄回答问题。小抄太多、页数太厚,反而找不到重点;小抄少而精,回答才清晰。Context Stuffing 就是整理这张小抄的过程。
举个例子
RAG 最后一步:拼装 Prompt 并调用模型
```python
import anthropic
client = anthropic.Anthropic()
# 假设检索阶段已返回 top-3 块
retrieved_chunks = [
"RAG 分三步:索引、检索、生成。",
"检索阶段用余弦相似度找 top-K 块。",
"生成阶段把检索结果拼进 Prompt。",
]
context = "\n".join(f"- {c}" for c in retrieved_chunks)
user_query = "RAG 的检索步骤是怎么工作的?"
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
system=f"你是一个 AI 助手。请根据以下参考资料回答问题。\n\n参考资料:\n{context}",
messages=[{"role": "user", "content": user_query}],
)
print(response.content[0].text)
```PYTHON 示例
相关概念
- → Retrieval / Top-K· 检索
- → Context Window· 上下文窗口