离线存档

Lessons from Building Claude Code - Seeing like an Agent

AI 核心摘要

构建 Agent 最困难的部分之一是设计其行动空间。文章分享了构建 Claude Code 过程中的经验:改进提问能力(AskUserQuestion 工具)、随能力更新工具(从 Todo 到 Task)、设计搜索界面(从 RAG 到 Grep)、渐进式披露(Claude Code Guide Agent)等。核心思想是学会像 Agent 一样思考,让 AI 主动构建上下文,而非被动接收。

核心观点

构建 Agent 最困难的部分之一是设计其行动空间(action space)。工具设计需要匹配模型的能力——就像给人类解决数学题时,纸笔、计算器、电脑各有适用场景。关键是学会"像 Agent 一样思考"。

一、改进提问能力 - AskUserQuestion 工具

目标

提高 Claude 的提问能力(elicitation),降低用户回答问题的摩擦,增加沟通带宽。

三次尝试

尝试 #1 - 编辑 ExitPlanTool

  • 在 ExitPlanTool 中添加问题数组参数
  • 问题:同时要求计划和问题会让 Claude 困惑
  • 如果用户答案与计划冲突怎么办?需要调用两次工具吗?

尝试 #2 - 改变输出格式

  • 修改 Claude 的输出指令,使用特殊的 markdown 格式
  • 例如:带括号选项的项目符号列表
  • 问题:Claude 不能保证格式一致,会添加额外句子、省略选项或使用不同格式

尝试 #3 - AskUserQuestion 工具

  • 创建独立工具,Claude 可随时调用(特别是在计划模式)
  • 触发时显示模态框,阻塞 Agent 循环直到用户回答
  • 允许结构化输出,确保提供多个选项
  • 可在 Agent SDK 中调用或在 skills 中引用
  • 最重要:Claude 喜欢调用这个工具,输出效果很好

即使设计最好的工具,如果 Claude 不理解如何调用也没用。

二、随能力更新工具 - 从 Todo 到 Task

Todo 时代(早期)

  • 模型需要 Todo 列表保持专注
  • 提供 TodoWrite 工具来写入/更新 Todos
  • 每 5 轮插入系统提醒,提醒 Claude 目标
  • 问题:模型经常忘记要做什么

Task 时代(Opus 4.5)

  • 新模型不仅不需要提醒,反而被 Todo 列表限制
  • 系统提醒让 Claude 认为必须严格遵守列表,而不是修改它
  • Opus 4.5 更擅长使用子代理,但如何在共享 Todo 列表上协作?
  • 解决方案:用 Task 工具替代 TodoWrite
    • Todo 是关于保持模型专注
    • Task 是关于帮助 Agent 相互沟通
    • Task 可以包含依赖关系、跨子代理共享更新、可修改和删除

教训

随着模型能力提升,曾经需要的工具可能现在反而成为限制。要不断重新审视之前的假设。支持少量能力相近的模型也很重要。

三、设计搜索界面

从 RAG 到 Grep

早期:RAG 向量数据库

  • 强大且快速,但需要索引和设置
  • 在不同环境中可能不稳定
  • 更重要:Claude 是被给予上下文,而不是自己找到上下文

现在:Grep 工具

  • 如果 Claude 能在网上搜索,为什么不能搜索代码库?
  • 给 Claude Grep 工具,让它自己搜索文件和构建上下文
  • 模式:随着 Claude 变聪明,如果给予正确工具,它越来越擅长自己构建上下文

渐进式披露(Progressive Disclosure)

通过 Agent Skills 正式化了渐进式披露概念,允许 Agent 通过探索逐步发现相关上下文。

  • Claude 可以读取 skill 文件
  • 这些文件可以引用其他文件
  • Claude 可以递归读取
  • Skills 的常见用途:添加更多搜索能力(如 API 使用说明、数据库查询)

演进: 一年内,Claude 从几乎无法构建自己的上下文,到能够跨多层文件进行嵌套搜索,找到所需的确切上下文。

渐进式披露现在是常用技术,用于在不添加工具的情况下增加新功能。

四、渐进式披露案例 - Claude Code Guide Agent

问题

Claude Code 目前有约 20 个工具,添加新工具的门槛很高(给模型多一个选项去思考)。

Claude 不够了解如何使用 Claude Code 本身:

  • 如何添加 MCP?
  • slash 命令是什么?

解决方案演进

方案 1:放入系统提示词

  • 问题:用户很少问这些问题,会增加上下文腐烂,干扰 Claude Code 的主要工作(写代码)

方案 2:提供文档链接

  • Claude 可以加载文档搜索信息
  • 问题:Claude 会加载大量结果到上下文中,实际上只需要答案

方案 3:Claude Code Guide 子代理

  • 当询问 Claude Code 自身时,提示 Claude 调用此子代理
  • 子代理有详细的文档搜索指令和返回内容规范
  • 虽然不完美(Claude 在设置问题上仍会困惑),但比以前好多了
  • 在不添加工具的情况下扩展了 Claude 的行动空间

五、总结:艺术而非科学

设计模型工具更像艺术而非科学,高度依赖于:

  • 使用的模型
  • Agent 的目标
  • 运行环境

建议:

  • 经常实验
  • 阅读输出
  • 尝试新事物
  • 像 Agent 一样思考(See like an agent)

个人思考

这篇文章展示了 Anthropic 团队在构建 Claude Code 过程中的实践智慧:

  1. 工具设计要匹配模型能力:不是越多越好,而是要"合身"
  2. 随模型演进调整工具:昨天的拐杖可能是今天的枷锁
  3. 让 AI 主动构建上下文:从被动接收到主动探索
  4. 渐进式披露:不要一次性塞给 AI 所有信息
  5. 实践导向:没有银弹,需要不断观察、实验、调整

这对我们设计 AI 工作流和工具有很强的指导意义。