Claude Code 团队经验:学会用 Agent 的眼光看世界
 开发一个智能体(Agent)系统,最难的部分之一,就是怎么给它设计"工具箱"(Action Space)。 Claude 是通过调用工具(Tool Calling)来做事的。但在 Claude API 里,有各种各样的工具构建方式,比如执行 bash 命令、调用 Skills,或者最近新出的代码执行功能。 面对这么多选择,你怎么给 Agent 设计工具?是只给它一个全能工具(比如直接执行代码或 bash),还是给它 50 个工具,覆盖它可能遇到的每一种场景? 为了弄明白这个问题,我喜欢把自己代入模型。想象一下,如果给你一道很难的数学题,你希望手头有什么工具?这其实取决于你自己的能力! 给你一张纸是最低配置,但你只能手算。给你一个计算器会好很多,前提是你得知道怎么按那些高级功能键。最快、最强大的工具是一台电脑,但这要求你必须懂编程,能写代码来解题。 这是一个设计 Agent 时非常有用的思维框架。你给它的工具,必须跟它的能力相匹配。 可是,你怎么知道它有多大能耐呢?答案是:去观察它,去读它的输出,去不断实验。你要学会"用 Agent 的眼光看世界"。 在开发 Claude Code 的过程中,我们一直在观察 Claude。下面是我们学到的一些经验。 改进提问方式与 AskUserQuestion 工具 我们在开发 AskUserQuestion 这个工具时,目标是让 Claude 更擅长向用户提问(这通常被称为激发,elicitation)。 虽然 Claude 本来就能用纯文本问问题,但我们发现,回答这些问题通常很费时间。我们该怎么降低这种摩擦,让用户和 Claude 的沟通更高效呢? 尝试 1:修改 ExitPlanTool 我们最初的想法是,在现有的 ExitPlanTool(退出并输出计划的工具)里加一个参数,让它在输出计划的同时,也输出一组问题。这是最容易实现的方法,但它把 Claude 搞糊涂了。因为我们让它同时做两件事:一边给计划,一边问跟计划相关的问题。如果用户的回答和计划冲突了怎么办?Claude 是不是得再调用一次 ExitPlanTool?显然,这条路走不通。 尝试 2:改变输出格式 接着,我们尝试修改 Claude 的系统提示词,让它输出一种特定格式的 Markdown,用来表示问题。比如,我们可以要求它输出一个列表,括号里写上可选项。然后我们通过解析这个格式,在终端里渲染出一个漂亮的提问界面。 这看起来是个通用的改动,Claude 似乎也能做到,但这并不可靠。Claude 有时会多加几句话,有时会漏掉选项,或者干脆用了别的格式。 尝试 3:推出 AskUserQuestion 工具 ...