上下文工程
提示工程关乎你选择的词语。上下文工程关乎你交给模型的工作空间——里面有什么、顺序如何、以及你刻意留在外面的是什么。
这个区分之所以重要,是因为上下文窗口不是一本记事本。它是一种有限、昂贵、与注意力相关的资源。你如何填充它,会改变模型聚焦于什么、它让你花多少钱、以及随着会话变长它是否还保持有用。
上下文预算
每个模型都有一个最大上下文规模——一个以 token 计量的硬性上限。把它当成一份预算。你把它花在:
- 你的系统提示和常驻指令
- 检索到的文档、代码库片段、工具定义
- 对话历史
- 模型的输出(在多轮会话中,它同样计入窗口)
当你用光时,总得有所取舍。要么旧内容被丢弃,要么会话撞上一堵墙。
大多数入门指南把上下文窗口当成"越多越好"。上下文工程则把它当成一种要谨慎分配的资源:把它花在模型这一轮真正需要的东西上,而不是花在所有可能相关的东西上。
上下文腐烂与"中间迷失"
长上下文 LLM 中有一个有充分记录的现象:模型对靠近其上下文开头和结尾的内容投以不成比例的注意力,而对埋在中间的内容的回忆能力会下降。研究这一效应的研究者称之为"中间迷失"。
实际后果是:如果你往一个 100,000 token 的上下文里塞满文档,并把最关键的指令埋在位置 60,000,模型可能实际上会忽略它——不是因为它读不到那么远,而是因为注意力在整个窗口上并非均匀分布。
"上下文腐烂"是更宽泛的模式:随着一次会话变长,回复的质量往往会漂移。早期指令被稀释。来来回回的反复挤占了原始任务。模型开始含糊其辞、自我重复,或者丢失了你真正所求之事的线索。
这些不是用更好的提示就能彻底修好的 bug。它们是注意力在规模化时如何运作的结构性属性。工程上的应对是让上下文更小更锐利,而不是把它填满然后寄希望于运气。
顺序很重要
你把内容放在哪里,和你纳入什么同样重要。公认的良好实践:
| 位置 | 该放什么 |
|---|---|
| 最顶部(系统提示) | 稳定、持久的指令。人设、规则、格式要求。 |
| 系统提示之后 | 当前任务,用平实的话说清楚。 |
| 紧接最后一个用户轮次之前 | 针对这一精确请求的、最关键、最具体的上下文。 |
| 中间 | 支撑性文档、检索到的片段——按相关性排序,而非按时间顺序。 |
| 对话历史 | 只保留为延续所必需的部分。要积极地修剪。 |
总的规则是:越靠近当前轮次,得到的注意力越多。只存在于一段长历史中间的关键指令是有风险的。
检索胜过塞料
诱惑是把所有东西都放进去:所有文档、整个代码库、整段对话。要抵制它。
更好的做法是选择性检索:辨明模型针对这一具体请求真正需要什么,只注入那部分。一个检索得当的、来自正确文档的 2,000 token 片段,胜过一个 40,000 token 的倾倒,那里头答案藏在中间某处。
这正是检索增强生成(RAG)存在的原因——不仅是为了克服上下文限制,更是为了通过让上下文保持精心策划来提升质量。
对于交互式会话,同样的逻辑适用:与其把所有东西都累积起来,不如周期性地压缩或清空历史,移除对当前任务不再相关的内容。Claude Code 的 /compact 和 /clear 命令是上下文工程工具,而不只是会话管理。
成本这一面
你发送的 token 就是你要付费的 token——既是金钱也是延迟。用松散相关的材料塞满上下文会让两者都膨胀。上下文工程和成本效率是同一个问题。
更具体地说:
- 一个你从模板里复制粘贴来的臃肿系统提示,每一次调用都要为它付费。
- 你因为"它可能有用"而携带向前的旧对话历史,每一次调用都要为它付费。
- 你"以防万一"注入的文档,每一次调用都要为它付费。
修剪掉不必要存在的东西,同时对质量更好、运行成本更低。
给 Claude 用户的实用战术
在 Claude.ai 中:
- 为不同任务使用不同的对话。别让一下午的离题污染了一个专注项目的上下文。
- 在问一个依赖于长线程的复杂问题之前,先总结那个长线程。一份明确的摘要往往比原始历史更有用。
- 把你想要的那个具体东西放在一条长消息的末尾,而不是埋在中间。
在 Claude Code 中:
- 保持你的
CLAUDE.md文件精简。其中每一行都会被注入到每次会话里。参见 CLAUDE.md 和上下文管理。 - 切换到一个确实不同的任务时使用
/clear。想要继续但会话正在变长时使用/compact。 - 当当前步骤不需要整个文件时,按路径引用文件,而不是粘贴它们的内容。
在 API 层面:
- 把系统提示设计成只包含每个请求真正需要的东西。把任务专属的指令移到用户轮次里。
- 对于文档密集的用例,检索并注入相关片段,而不是上传整个语料库。
- 把提示组织成稳定、可复用的前缀排在最前——这也能启用提示缓存,它是上下文工程的天然搭档。
心态上的转变
提示工程问的是:"我该说什么?" 上下文工程问的是:"模型该看见什么、以什么顺序、又有什么是我该刻意挡在外面的?"
第二个问题更难,但它才是真正在规模化时决定质量的那一个。