跳到主要内容
进阶

上下文工程

提示工程关乎你选择的词语。上下文工程关乎你交给模型的工作空间——里面有什么、顺序如何、以及你刻意留在外面的是什么。

这个区分之所以重要,是因为上下文窗口不是一本记事本。它是一种有限、昂贵、与注意力相关的资源。你如何填充它,会改变模型聚焦于什么、它让你花多少钱、以及随着会话变长它是否还保持有用。

上下文预算

每个模型都有一个最大上下文规模——一个以 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 层面:

  • 把系统提示设计成只包含每个请求真正需要的东西。把任务专属的指令移到用户轮次里。
  • 对于文档密集的用例,检索并注入相关片段,而不是上传整个语料库。
  • 把提示组织成稳定、可复用的前缀排在最前——这也能启用提示缓存,它是上下文工程的天然搭档。

心态上的转变

提示工程问的是:"我该说什么?" 上下文工程问的是:"模型该看见什么、以什么顺序、又有什么是我该刻意挡在外面的?"

第二个问题更难,但它才是真正在规模化时决定质量的那一个。

相关内容