动态上下文感知与注入

到目前为止,我们的 Agent 有了文件读写工具、权限检查、@ 引用文件这些能力,但有个问题一直没解决:它对你的项目一无所知。

你在项目根目录放了一个 AGENTS.md 写着「变量名必须用 snake_case」,它不会去读;你在别的终端改了它正在编辑的文件,它不知道;它甚至不知道今天几号、你在哪个目录下工作。

当然,它可以自己使用 shell 命令来获取这些信息,但这依赖 Agent 的主动性,而且会消耗 token。

所以对于开发中的常用信息(比如目录结构、Git 状态、项目规范、当前日期等等),我们可以自动注入到上下文中,这样 Agent 一开始就能对项目有个大致的了解,不容易跑偏。这篇我们就来实现这套自动注入上下文的机制,后面实现记忆机制、plan 模式时也会复用它。

自动注入的上下文大致可以分成三类:

  • 静态 system prompt:Agent 的固有身份和行为准则(你是个编程助手、修改文件前必须先读、工具调用的顺序约束等)。一次写死,任何时候都不会变化。
  • 动态 system prompt:依赖运行环境的项目级信息(工作目录、当前日期、项目规范等)。可能随着时间、工作目录的变化而变化,所以需要动态计算。
  • 实时注入的系统提醒:跟当前对话状态强相关的提示(已读文件被外部修改、相关工作记忆、当前待办事项等)。在合适的时机应该塞到上下文中,对模型起到提醒的作用。

前两类的差异在「静态 vs 动态」,但它们都是 system prompt;第三类不进 system prompt,而是当成普通对话消息插入,只对模型可见,一般不展示给用户。下面几节就按这个顺序展开。