Skip to content

与 Agent 一起,为 Agent 编写有效工具

官方原文: https://www.anthropic.com/engineering/writing-tools-for-agents

发布日期: 2025 年 9 月 11 日
来源: Anthropic Engineering Blog

Agent 的效果上限,很大程度上取决于工具质量。本文讨论如何为 LLM Agent 构建、评估并持续改进工具。MCP 可以让 Agent 接入数百项工具,但数量本身不等于能力。

核心内容

本文覆盖三件事:构建并测试工具原型;用 Agent 建立和运行完整 eval;借助 Claude 自动分析并改进工具性能。

工具是什么

确定性系统在相同输入下给出相同输出,非确定性 Agent 即使起始条件相同,也可能产生不同回答。工具是这两类系统之间的契约,因此应当为 Agent 设计,而非仅为传统开发者或传统软件封装 API。对 Agent 使用顺手的工具,通常也会让人感到直观。

如何编写工具

先做原型

先快速搭起原型,再通过本地 MCP server 或 Desktop Extension(DXT)连接并亲自试用,能最快发现不顺畅之处。使用 Claude Code 时,也可以在 llms.txt 中提供面向 LLM 的说明。

运行评测

生成评测任务。 Claude Code 可以根据真实使用方式生成 prompt-response 对。不要只建过于简单、表面的 sandbox;它们没有足够复杂度来压测工具。高质量任务可能需要多次,甚至数十次工具调用,例如安排附带附件的会议、跨日志排查客户账单问题、或综合客户数据制定留存方案。单步骤查找类任务则很难检验真实能力。

每个 prompt 都应配有可验证的结果。verifier 可以是精确字符串比对,也可以由 Claude 评判;避免 verifier 过于严格,因无关格式差异误判正确答案。

运行评测。 推荐以直接 LLM API 调用配合简单 agentic loop 进行程序化运行。可要求 Agent 在工具调用与回答前输出 reasoning 和 feedback block,这可能触发 chain-of-thought(CoT)行为并提高实际表现。Claude 可启用 interleaved thinking 获得类似能力。应记录运行时长、工具调用次数、token 消耗和工具错误。

分析结果。 Agent 能帮助发现问题,但它没写出来的内容,有时比它写出来的更重要;LLM 并不总能准确表达自身状态。因此仍要阅读原始 transcript,并分析工具调用指标。

与 Agent 协作优化

可以把 eval transcript 拼接后交给 Claude Code,让它分析并改进工具。本文的大量建议都来自用 Claude Code 反复优化内部工具实现的经验。务必保留 held-out test set,避免工具只对已见案例过拟合。

编写有效工具的原则

选择正确的工具粒度

工具越多并不一定越好。常见错误是机械地包装每个 API endpoint,而不考虑是否适合 Agent。Agent 与传统软件的使用方式不同,应优先构建少量、围绕高价值工作流的工具。

例如,通讯录不应返回全部联系人,而应提供 search_contacts。也可把低层操作合并为更符合任务的工具:

  • schedule_event 取代分别暴露 list_userslist_eventscreate_event
  • search_logs 取代 read_logs
  • get_customer_context 聚合客户、交易和备注信息。

过多或彼此重叠的工具会让 Agent 分心,也更难形成高效策略。

使用命名空间

Agent 可能同时访问数十个 MCP server、数百个工具。按服务分组,如 asana_searchjira_search,或进一步按资源命名,如 asana_projects_search,有助于它选择正确工具。采用前缀还是后缀式命名会对 tool-use eval 产生不可忽略的影响,而且结果可能因 LLM 而异。

返回有意义的上下文

工具应只向 Agent 返回高信号信息,优先保证上下文相关性,避免暴露低层技术标识符。例如 nameimage_urlfile_type 通常比 uuid256px_image_urlmime_type 更有用。把无意义的字母数字 UUID 解析成可理解的实体描述,能减少 hallucination 并提高准确性。

可通过 response_format 枚举让 Agent 选择 DETAILEDCONCISE。文中的 Slack 示例显示,简洁响应的 token 约为详细响应的三分之一;详细模式则保留下游工具调用所需 ID。XML、JSON、Markdown 等结构也会影响表现,但没有通用最优格式,LLM 往往更擅长训练数据中常见的格式。

为 Token 效率设计响应

应实现合理默认值的 pagination、范围选择、过滤和截断。Claude Code 默认将工具响应限制为 25,000 tokens。发生截断时,要告诉 Agent 下一步如何以更省 token 的方式继续;错误响应也应清晰说明可操作的修复方法,不要只返回晦涩 error code 或 traceback。

把工具描述当作 Prompt Engineering

工具描述是改进工具的高收益手段之一,因为它们会被加载进 Agent 的 Context 并持续引导行为。可以设想向一名新员工介绍工具时会说什么,再把隐含前提明确写出。参数名也应无歧义,例如用 user_id 而不是 user

文章指出,对工具描述做精确调整曾显著降低错误率并提高任务完成率,是 Claude Sonnet 3.5 在 SWE-bench Verified 上取得先进表现的重要因素之一。

展望

Agent 时代的软件开发需要从完全可预测的确定性模式,转向能容纳非确定性行为的设计。有效工具应有明确意图、节制使用 Agent Context,并能在多种工作流中组合。随着 Agent 能力提升,它们使用的工具也会继续演进。

致谢

本文由 Ken Aizawa 撰写,研究、MCP、产品工程、市场、设计与 Applied AI 团队的同事参与贡献。

AI 落地咨询
艾维禾砺数字科技

企业 AI 落地全链路服务

Agent 开发工作流搭建Claude Code 集成
微信咨询
d187l8801b6124
访问官网 ivheli.com