Thariq (@trq212)

x.com

本文由 Anthropic 的工程师 Thariq 分享,深入探讨了在构建 AI 智能体(Agent)工具空间(Action Space)时的核心理念与实战经验。作者提出,构建智能体最难的部分在于设计其工具集,而成功的关键在于“像智能体一样思考”,即根据模型自身的能力边界来量身定制工具。

文章通过四个核心案例展示了工具设计的演进过程:首先是提问机制的优化,从简单的参数添加、格式约定,最终演变为独立的 AskUserQuestion 工具,以实现高效的人机协作;其次是任务管理系统的升级,随着模型能力的提升,从被动的 Todo 列表转向了支持多智能体协作、具备依赖关系的 Task 工具;第三是上下文构建的转变,从依赖外部 RAG 检索转向赋予模型 Grep 等搜索工具,让模型通过“渐进式披露”自主探索代码库;最后是复杂功能的解耦,通过引入专门的子智能体(如 Guide Agent)来处理特定领域的知识,避免了系统提示词的臃肿。

作者强调,工具设计并非一成不变的科学,而是一门需要不断实验、观察模型输出并随模型能力提升而迭代的艺术。开发者应保持工具集的精简,避免“上下文腐败”,并始终关注模型在特定环境下的实际表现。


优化信息获取:AskUserQuestion 工具的诞生

在构建 Claude Code 时,如何让模型更高效地向用户提问(Elicitation)是一个核心挑战。最初,团队尝试在现有的 ExitPlanTool 中增加一个问题数组参数,但这导致了逻辑混乱:模型在制定计划的同时还要提问,容易产生指令冲突。随后,团队尝试通过修改输出指令,让模型以特定 Markdown 格式输出问题,但这在实践中并不可靠,模型经常会添加多余文字或格式错误。

最终,团队开发了独立的 AskUserQuestion 工具。这个工具在模型进入“计划模式”时被触发,会弹出一个模态框显示问题并阻塞循环,直到用户回答。这种方式不仅保证了输出的结构化,还允许用户提供多个选项供模型选择。更重要的是,模型表现出对该工具的高度适应性。这一演进过程表明,工具的设计必须符合模型的调用直觉,且应具备良好的组合性,以便在 SDK 或其他技能中复用。

任务管理的进化:从 Todo 到 Task

早期的 Claude Code 依赖简单的 TodoWrite 工具来记录工作进度,并每隔 5 轮对话发送系统提醒以防模型“迷失”。然而,随着模型能力(如 Opus 4.5)的增强,这种强制提醒反而成了束缚,限制了模型根据实际情况修改计划的灵活性。此外,原有的 Todo 模式无法支持多个子智能体之间的协作。

为此,团队将 Todo 升级为 Task 工具。与单纯的备忘录不同,Task 工具支持设置任务依赖、跨智能体共享更新,并允许模型自由修改或删除任务。这一转变揭示了一个重要规律:随着模型能力的提升,曾经起辅助作用的工具可能会变成阻碍。开发者必须定期审视旧有假设,确保工具空间与当前模型的能力剖析(Capability Profile)相匹配,避免过度干预聪明模型的决策过程。

上下文构建:从被动 RAG 到主动搜索

在处理大规模代码库时,如何为模型提供准确的上下文至关重要。起初,Claude Code 使用传统的 RAG(检索增强生成)向量数据库,但这需要复杂的索引预处理,且在不同环境下表现脆弱。最关键的是,这种方式是“喂”给模型信息,而非模型“寻找”信息。

团队随后引入了 Grep 等搜索工具,并提出了“渐进式披露”(Progressive Disclosure)的概念。现在,模型不再依赖预先索引,而是像人类开发者一样,通过搜索文件、阅读技能定义、递归追踪引用来逐步构建自己的上下文。这种从被动接收到主动探索的转变,极大地增强了模型处理复杂、未知环境的能力。事实证明,当模型足够聪明时,赋予其基础的搜索原语比构建复杂的外部检索系统更有效。

渐进式披露与子智能体应用

为了保持系统提示词(System Prompt)的精简,避免“上下文腐败”(Context Rot),团队在处理非核心任务(如产品文档查询)时采用了子智能体方案。如果将所有关于 Claude Code 的操作指南都放入主提示词,会干扰模型编写代码的主任务。

团队最初尝试让模型自行加载文档链接,但发现模型往往会加载过多无关内容。最终的解决方案是构建一个专门的 Guide Agent 子智能体。当用户询问有关工具使用的问题时,主模型会调用该子智能体,由其负责在文档中进行深度搜索并返回精炼答案。这种方法在不增加主工具集负担的前提下,扩展了智能体的行动空间。这再次证明,工具设计是一门平衡的艺术,需要通过不断的实验和观察来寻找最适合模型、目标和环境的方案。


问答

问:为什么不直接在系统提示词里告诉模型所有信息? 答:这会导致“上下文腐败”。过多的非核心信息会干扰模型执行主要任务(如写代码)。通过“渐进式披露”或子智能体,可以保持主模型的高效和专注。

问:为什么 AskUserQuestion 比 Markdown 格式更好? 答:Markdown 格式依赖模型的遵循能力,容易产生格式错误或多余废话。独立工具能强制输出结构化数据,并能通过 UI 交互(如模态框)提升用户体验。

问:从 Todo 转向 Task 工具的主要动力是什么? 答:主要是为了适应更强大的模型和多智能体协作需求。旧的 Todo 模式过于僵化,而 Task 支持依赖管理和跨智能体同步,更符合高级模型的运作方式。

问:在设计工具时,作者最核心的建议是什么? 答:要“像智能体一样思考”。观察模型的输出,了解它的强项和弱点,为其量身定制工具。工具集应保持精简,且需随模型能力的提升不断迭代。