Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

模型: openai/gpt-5.4
生成日期: 2026-04-01
书名: Claude Code VS OpenCode:架构、设计与未来
章节: 第20章 — 上下文工程
Token用量: 约 6,500 input + 1,800 output

20.3 自动上下文注入

在高级 agent 架构里,有一个非常强大、但也非常容易被滥用的能力,叫做 automatic context injection(自动上下文注入)。它的基本思想是:不要每次都让用户或模型手动重复规则、记忆和项目约束,而是由宿主系统在合适的时间,把合适的信息自动拼进当前上下文。

如果这件事做得好,agent 的稳定性和一致性会显著提高;如果做得差,它会变成一种隐形 prompt 膨胀机制,让系统越来越重、越来越不可解释。

为什么自动上下文注入如此重要?因为 coding agent 从来都不是在真空里工作。它总是位于某个项目、某个团队、某套规范、某个长期流程里。比如:

  • 修改完必须先跑诊断;
  • 不要改生成文件;
  • 优先用 patch/edit 工具而不是 shell 直接改文件;
  • 某些术语需要额外解释;
  • Git 提交必须遵循某种安全协议;
  • 某些路径只读;
  • 某些测试必须在最后一步执行。

这些规则如果每次都靠人类重复,系统会非常笨重;如果模型自己从过去历史里“猜出来”,又很不稳定。因此,自动注入会成为更现实的做法。

OMO 在这方面的代表性非常强,尤其是它的 rules injector(规则注入器) 和更广义的 hook 系统。它的关键思想是:不是所有规则都适合永久写在 system prompt 里。很多规则只在特定场景、特定阶段、特定工具调用之前才有意义。因此,它把上下文视为运行时动态拼装流,而不是一次性写死的固定文本。

Claude Code 的做法则更偏 memory system。用户会感觉系统“记住了”偏好、约束、项目习惯,好像一种持续的产品体验。但从架构角度看,这本质上仍然是上下文注入:某些持久记忆在当前回合被激活并加入活跃上下文。

OpenCode 的价值在于,它把 instruction management(指令管理)留作可编程框架能力。也就是说,在 OpenCode 视角里,自动注入不只是产品技巧,而可以成为一种明确的架构模式,甚至供扩展层去重写与增强。

自动注入最明显的好处,是 consistency(一致性)。只要项目级规则是真的稳定存在,那它们就不应该依赖用户重复输入。Agent 在不同任务中都能自动继承这些规则,才说明系统真的在一个“项目环境”中工作,而不是每轮都像失忆重来。

第二个好处,是 locality(局部性)。不是所有规则都值得一直放在全局 prompt 顶部。某些规则只有在某个决策点附近才最有价值。例如:

  • 在调用 bash 前提醒:读取文件优先用 read 工具;
  • 在提交代码前提醒:先查看 git status / diff / log;
  • 在上下文压缩前提醒:保留 todo 和任务锚点;
  • 在危险操作前注入审批或约束语句。

这种局部注入,比把所有规则永远钉在全局 prompt 里更节省、更有效。因为它把信息放到了真正需要它的地方。

但自动注入也有三类非常典型的风险。

第一类风险是 invisible bloat(不可见膨胀)。系统不断“好心地”注入东西,最后活跃上下文在用户看不见的地方越长越重。由于这些信息不是显式手动输入的,性能变差时也更难诊断。

第二类风险是 instruction collision(指令碰撞)。系统级规则、项目级规则、用户偏好、临时任务约束、记忆条目,全都可能同时被注入。如果没有明确优先级,模型就可能收到互相冲突的信号。

第三类风险是 opacity(不透明性)。用户可能不清楚 agent 为什么会按某种方式行动,也不知道究竟是哪层记忆或规则在起作用。这样一来,信任和可调试性都会下降。

因此,自动上下文注入要想成为优点,而不是隐患,至少需要五条纪律。

第一,必须 selective(有选择地注入)。只注入当前任务或当前决策点真正相关的内容。

第二,必须有 clear precedence(明确优先级)。系统要清楚定义:系统策略、项目规则、用户记忆、任务局部状态,谁优先、谁覆盖谁。

第三,必须 compact(保持紧凑)。能用一句话表达的规则,就不要每次展开成一段长文。

第四,必须 observable enough(足够可观察)。不一定要让普通用户看到所有细节,但至少系统开发者和高级用户应能理解当前有哪些上下文层在生效。

第五,应该偏向 runtime assembly(运行时组装),而不是把所有注入都提前固化进一个越来越胖的 system prompt。自动注入的价值,本来就是避免全局 prompt 膨胀。

从三套系统可以提炼出一个共同趋势:高级 agent 的自动上下文注入已经不是可选项。OMO 展示了 hook 驱动的动态注入能力;Claude Code 展示了 memory 驱动的持续注入体验;OpenCode 展示了指令拼装管线本身可以成为扩展接口。

未来最好的 agent 很可能越来越不像“带着一大坨固定提示词的聊天机器人”,而更像“每一步都在按需拼装活跃上下文的运行时系统”。但这个未来只有在注入足够克制时才成立。否则,automatic context 很容易沦为 hidden prompt sprawl(隐藏式提示词膨胀)的新名字。

自动上下文注入的目标,从来不是给模型更多文字,而是在对的时间,给它对的那一小段文字。只有做到这一点,它才是真正的上下文工程,而不是另一种形式的堆料。