#AI Agent#软件工程

上下文越多,Agent 为什么反而越容易迷路

拆开系统提示、项目规则、工具描述、记忆与文件选择,看上下文不断叠加怎样从信息供给变成注意力争夺。

种下2026/07/25 4 分钟 生长中

你给 Claude Code 发一行指令,它实际读到的远不止这一行。

系统提示词、你装的技能、项目里的 CLAUDE.md、它自己存的记忆、你 @ 进来的文件——全部拼成一大块送进去。你打的那行字只占其中一小条。管这一大堆东西怎么组织、什么时候进来,Anthropic 管它叫上下文工程

提示词是你交代的这件事,上下文是你递过去的整个工作台。

这两样东西的底层逻辑完全不同。提示词是一次性的,你知道自己这回要什么,可以写得具体。上下文是通用的,它要服务成千上万条你事先不知道内容的请求——难就难在这:你要为一个还不存在的问题准备好指引。

写一次规则,挨上万种打。

台灯只照亮桌上真正相关的几页纸 桌上什么都有,真正需要的只有那几页。

注释规则是怎么从护栏变成障碍的

Claude Code 早期的系统提示词里,关于注释有条规则。具体内容不展开,大意是告诉模型别加注释。

这条规则当年是必要的。Claude Code 刚推出时,最要紧的是别让模型闯祸。注释这种自由发挥的东西,当时的模型判断力不够,写出来的十有八九是废话或者误导。明知一刀切会误伤一部分用户,也只能这么定——当时的模型不给硬规则就会跑偏。

到了 Opus 5 和 Fable 5 这代模型,事情变了。

模型的判断力已经强到可以自己决定”这段代码需要注释”还是”这段自解释”。那条一刀切的规则不再保护用户,而是在阻碍用户。有文档习惯的人被误伤,需要多行注释块的复杂代码被掐住。

Anthropic 做了件反直觉的事:把 Claude Code 的系统提示词删掉了 80% 以上。 编程评测跑完,没测出任何损失。

同一个注释行为,新系统提示词里只剩一句:让模型自己判断。不是不给指引,是不替它做它能自己做的决定。

旧模型时代留下的硬编码规则,不会因为模型升级了自动消失。 它继续活在系统提示词里,继续执行,继续误伤。需要有人专门进去删。

规则堆叠的隐藏成本

这件事不只是”模型强了规则可以松了”。更深的坑是:规则堆多了会互相冲突。

拿一个最常见的场景:一个 Agent 既要”优先遵循用户偏好”,又要”建议最佳实践”。当用户偏好是”全部用内联样式”而最佳实践是”用 CSS 模块”时,这两条规则同时在场——模型不仅仅是不知道听谁的,它需要先消耗注意力去发现冲突、权衡冲突、做出取舍,然后才能开始干活。

每多加一条规则,不只是多了几行要读的文字。它增加了跟其他规则碰撞的概率。

回想一下你给 AI 配置的场景:CLAUDE.md 里写了三条代码风格偏好,装了两个 skill 自带的规范,系统提示词里还有十几条通用指引。这些规则之间有没有互相矛盾的地方?你检查过吗?如果没检查过,Agent 遇到矛盾的规则时是怎么处理的——你有没有观察过它的最后输出,是默默放弃了某一条?

硬规则、软规则与不用规则的区别

回过头看,上下文里的内容可以分成三种类型:

第一类:安全边界。 不能删文件、不能修改特定目录、不能执行某些命令。这些规则不管模型多强都不能变——模型擅长判断对错,但它判断不了的是”丢了用户数据”这个后果对用户意味着什么。安全边界不交给模型判断。

第二类:示例与参考。 一段代码样板、一个正确输出的例子、一个已经验证通过的测试。这些在模型弱的时候是必要的脚手架,在模型强的时候变成了占据上下文窗口却没被参考的闲置文本。

第三类:硬编码判断。 注释规则就属于这类。模型判断力不够时,提前替你判断。模型判断力够了之后,这条规则就变成了替模型做它能自己做的决定。

删掉 80% 系统提示词这件事,删的主要是第二类和第三类。Anthropic 的做法不是”少写规则”,而是重新验收每一条规则:这条规则是在弥补模型的能力缺口吗?这个缺口还在吗?

一个检查清单

你可以现在打开站在用的 CLAUDE.md 或 Hermes skill 文件,逐条问自己三个问题:

  1. 这条规则是在补模型的判断力不足吗? 如果模型已经有这个判断力,删掉。
  2. 这条规则跟其他规则冲突吗? 不冲突才能留。
  3. 这条规则在做模型自己做不了的事吗? 是安全边界才绝对保留,不是就可以删。

你会发现至少有三分之一已经在第一个问题里被筛掉了。

这件事本质上是把权力交还给合适的主体。 不是”少给上下文模型就能做好”,而是”别再替模型做它能自己做的决定”。上下文工程不是研究怎么把更多信息塞进窗口,是研究怎么把不必要的信息请出窗口。每一条被删掉的规则,都是在说:你已经不需要我替你盯着了。

这篇还在生长——想法会随着理解加深继续修剪、补充。