Anthropic 实用发布: 《如何为 Agent 构建工具》
随着AIAgent的能力不断增强,工具的设计也必须从“为人而写”转向“为智能体而构建”。本文基于Anthropic的最新发布,系统梳理了Agent工具的构建原则与评估方法,揭示如何通过高质量工具扩展Agent的任务边界,是一份面向未来软件开发范式的实用指南。
Anthropic上周发布了一篇很值得阅读的文章《如何为Agent构建工具》,包括:如何编写高质量的工具和评估,以及如何利用Claude来为自己优化工具,从而提升性能。
https://www.anthropic.com/engineering/writing-tools-for-agents
什么是工具?
传统软件是确定性系统,而像Agent这样的系统是非确定性的。工具是一种新型软件,它反映了确定性系统与非确定性Agent之间的契约。我们编写工具时,需要为Agent而不是为其他开发者或系统来设计。我们的目标是通过工具,让Agent能够采用多种成功策略,扩大其解决各类任务的有效范围。
如何编写工具
本文描述了一个与Agent协作编写和改进工具的迭代流程:首先构建一个快速原型并进行本地测试,然后通过全面的评估来衡量后续的改动,并与Agent一起重复评估和改进的过程。
1.构建原型
快速构建工具原型,亲身体验。
使用ClaudeCode编写工具时,提供相关软件库、API的文档会有帮助。
将工具包装在本地MCP服务器或DXT中,以便在ClaudeCode或Claude桌面应用中连接和测试。
2.运行评估
通过运行评估来衡量Claude使用工具的效果。
评估任务应基于真实世界用例,并具有足够的复杂性。
强大的评估任务可能需要多次(甚至数十次)工具调用。
在评估中,我们建议收集准确率、运行时间、工具调用次数、Token消耗和错误等指标。
我们内部Slack工具在留出测试集上的性能表现:
我们内部Asana工具在留出测试集上的性能表现:
3.与Agent协作
Agent是你发现问题和提供反馈的得力伙伴。你可以让Agent分析评估结果并为你改进工具。将评估Agent的对话记录粘贴到ClaudeCode中,Claude擅长分析这些记录并一次性重构大量工具。
编写高效工具的原则
原则一:选择合适的工具
更多的工具并不总是带来更好的结果。Agent的“上下文”有限,应避免返回大量无关信息。应构建少量、有思想、针对特定高影响力工作流的工具。例如,实现一个search_contacts而不是list_contacts工具。工具可以整合功能,将多步操作合并为一次调用。
原则二:为工具命名空间
当工具功能重叠或目的模糊时,Agent可能会混淆。使用命名空间(例如asana_search,jira_search)可以帮助在大量工具之间划定界限,帮助Agent在正确的时间选择正确的工具。
原则三:从工具返回有意义的上下文
工具应只返回高信号信息,优先考虑上下文相关性而非灵活性。避免使用UUID等底层技术标识符,多使用自然语言名称。可以通过response_format枚举参数让Agent控制返回“简洁”还是“详细”的响应。
详细响应示例(206tokens):
简洁响应示例(72tokens):
原则四:优化工具响应的Token效率
优化上下文的数量和质量同样重要。为可能消耗大量上下文的工具响应实现分页、过滤和截断等机制。如果截断响应或出现错误,应提供清晰、可操作的改进建议来引导Agent。
截断响应并提供指导:
无帮助的错误vs有帮助的错误:
原则五:对工具描述进行提示工程
这是最有效的方法之一。
编写工具描述时,要像向新同事解释一样,将隐含的背景信息明确化。避免模糊性,对预期输入和输出进行清晰描述和严格定义。
例如,使用user_id而不是user作为参数名。
对工具描述的微小改进都能带来显著的性能提升。
展望未来
为Agent构建有效的工具,需要我们将软件开发实践从确定性模式转向非确定性模式。
有效的工具是有意图且清晰定义的,能明智地使用Agent上下文,并能直观地帮助Agent解决真实世界的任务。
通过系统性、评估驱动的方法,我们可以确保随着Agent能力的增强,它们使用的工具也能同步发展。