Skip to content

上下文工程

🎯 学习目标

  • 把 Context 当作动态系统而非一次性 Prompt 字符串
  • 设计 System / RAG / Tools / History 的拼装顺序与优先级
  • 识别 Context Rot 与 Context Collapse
  • 模块化、版本化 System Prompt

引言

Context Engineering(上下文工程)是 2024–2026 Agent 实践里上升最快的 discipline:不是写更长的 Prompt,而是管理什么信息在何时进入窗口。本节讲拼装、退化与治理。

章节正文

第 1 步:Context 的组成块

典型拼装顺序(从稳定到易变,利于 KV Cache,见 5.5):

  1. System 核心指令(稳定、短)
  2. 工具定义(较稳定,或 Deferred)
  3. RAG 检索片段(每 query 变)
  4. Memory 摘要(慢变)
  5. 近期对话历史(快变)
  6. 当前用户输入

每块应有最大 Token 预算,超限则截断或摘要,而非整体 silent truncate。

第 2 步:模块化 System Prompt

typescript
const modules = {
  safety: loadVersioned('system/safety-v3.txt'),
  persona: loadVersioned('system/persona-support-v2.txt'),
  tools_policy: loadVersioned('system/tools-v1.txt'),
}
const system = [modules.safety, modules.persona, modules.tools_policy].join('\n\n')

Git 管理、PR review、A/B 标签 prompt_version 写入 trace,便于回归「哪版 Prompt 导致拒答率上升」。

第 3 步:Context Rot 与 Collapse

Context Rot:窗口很长时,模型对中间消息「注意力下降」,早期关键约束被违背。

Context Collapse:为省 Token 过度摘要,丢失否定条件(「除 XX 外均可」摘要成「均可」)。

缓解:

  • 关键约束重复出现在 system 与最终 user 前(recency + stability)
  • 结构化 fact list 而非散文摘要
  • 分 Agent 隔离域(5.7),单窗口不塞所有工具结果

第 4 步:工具结果与 RAG 的裁剪

python
def shrink_tool_result(raw: dict, max_chars=4000) -> dict:
    if len(json.dumps(raw)) <= max_chars:
        return raw
    return {
        "summary": llm_summarize(raw, keep=["ids", "dates", "amounts"]),
        "_truncated": True,
    }

RAG 片段 similarly:只注入 rerank 后 Top-5,每段 header 带 source id。

第 5 步:评测 Context 策略

指标:

  • 指令遵循率(是否违反 system)
  • 长对话第 N 轮 fact 召回率
  • Token 成本 per successful task

实验:固定模型,只改 Context 策略,比换模型便宜得多。

动手练习

  1. 为你当前项目画 Context 六块饼图,估 Token 占比。
  2. 写 safety 模块三条规则,设计 persona 模块如何不与之冲突。
  3. 模拟 Context Collapse:长摘要丢失「不」字,写修复策略。
  4. 实现 shrink_tool_result 规则版(无 LLM),保留指定 key。
  5. 设计 prompt_version 如何进入 trace JSON。

常见问题

Q:Context Engineering 和 Prompt Engineering 区别?

Prompt Engineering 偏单次文案;Context Engineering 偏运行时拼装、预算、版本、多源数据与长会话治理,是系统问题。

Q:把 RAG 放 system 还是 user?

常见放 user 或 pseudo-system「参考资料」块,便于每轮替换且不打乱 system 前缀 cache。关键约束仍在 system。

Q:窗口 128K 还要压缩吗?

要。更长窗口 ≠ 更高注意力质量;成本与 Rot 仍在。应用预算与 selective context。

本节小结

Context Engineering 管理六块信息的顺序、预算与版本,对抗 Rot/Collapse。稳定前缀 + 模块化 system + 结构化裁剪,比堆长 Prompt 更有效。