保姆级教程!Anthropic官方Agent工具开发秘籍:从API封装到自主决策,附Claude Code实战案例
刚刚,Anthropic 在工程博客上发布了一份详尽的 Agent 工具开发指南,值得每一位 Agent 开发者阅读参考。
刚刚,Anthropic 在工程博客上发布了一份详尽的 Agent 工具开发指南,值得每一位 Agent 开发者阅读参考。
在该开发指南中,Anthropic 提出:
传统软件是确定性系统之间的契约,而 Agent 工具是确定性系统与非确定性 Agent 之间的新型契约。
当用户问「我今天需要带伞吗?」时,Agent 的反应充满不确定性——可能调用天气工具、基于常识回答,或先询问位置。
这种非确定性要求我们为 Agent 而不是为人类开发者设计工具。
文章详细介绍了如何构建原型、运行评估、与 Agent 协作改进工具,并总结了五大设计原则:明智选择工具、清晰命名空间、返回有意义的上下文、优化 token 效率、精心设计工具描述。
以及,值得注意的是:Claude Code 可以自动分析评估结果并改进工具。
Anthropic 团队就是用这种方法反复优化内部工具,在 Slack 和 Asana 等工具上取得了显著的性能提升。
(妈的,内部自己用的,是非降智版吧……)
为LLM智能体编写有效工具——使用LLM智能体
模型上下文协议(MCP)[1]可以为LLM智能体提供数百种工具来解决现实世界的任务。但我们如何让这些工具发挥最大效果呢?
在这篇文章中,我们描述了在各种智能体AI系统中提高性能的最有效技术。
我们首先介绍如何:
- 构建和测试工具原型
- 创建和运行工具与智能体的全面评估
- 与Claude Code等智能体协作,自动提高工具性能
最后,我们总结了在过程中识别出的编写高质量工具的关键原则:
- 选择正确的工具来实现(以及不实现什么)
- 为工具命名空间以定义功能的清晰边界
- 从工具向智能体返回有意义的上下文
- 优化工具响应的令牌效率
- 对工具描述和规范进行提示工程
图1:这是一张描述工程师如何使用Claude Code来评估智能体工具有效性的图像。
构建评估允许您系统地测量工具的性能。您可以使用Claude Code针对此评估自动优化您的工具。
什么是工具?
在计算中,确定性系统在给定相同输入时总是产生相同的输出,而非确定性系统——如智能体——即使在相同的起始条件下也能产生不同的响应。
当我们传统地编写软件时,我们在确定性系统之间建立合约。例如,像getWeather("NYC")
这样的函数调用每次调用时都会以完全相同的方式获取纽约市的天气。
工具是一种新型软件,它反映了确定性系统和非确定性智能体之间的合约。当用户问"我今天应该带伞吗?"时,智能体可能调用天气工具、从通用知识回答,甚至首先询问位置的澄清问题。有时,智能体可能产生幻觉或甚至无法掌握如何使用工具。
这意味着在为智能体编写软件时需要从根本上重新思考我们的方法:我们需要为智能体设计工具和MCP服务器[2],而不是像为其他开发者或系统编写函数和API那样编写它们。
我们的目标是通过使用工具追求各种成功策略,增加智能体在解决广泛任务时能够有效工作的表面积。幸运的是,根据我们的经验,对智能体最"符合人体工程学"的工具最终对人类来说也是出人意料地直观易懂的。
如何编写工具
在本节中,我们描述了如何与智能体协作来编写和改进您给它们的工具。从建立工具的快速原型并在本地测试开始。接下来,运行全面评估来测量后续变化。与智能体一起工作,您可以重复评估和改进工具的过程,直到您的智能体在现实世界任务上达到强劲表现。
构建原型
在没有亲身体验的情况下,很难预测智能体会发现哪些工具符合人体工程学,哪些不会。从建立工具的快速原型开始。如果您使用Claude Code[3]来编写工具(可能是一次性的),向Claude提供您的工具将依赖的任何软件库、API或SDK(包括可能的MCP SDK[4])的文档会有所帮助。LLM友好的文档通常可以在官方文档站点的扁平llms.txt
文件中找到(这里是我们API的[5])。
将您的工具封装在本地MCP服务器[6]或桌面扩展[7](DXT)中,将允许您在Claude Code或Claude桌面应用中连接和测试您的工具。
要将您的本地MCP服务器连接到Claude Code,运行claude mcp add <name> <command> [args...]
。
要将您的本地MCP服务器或DXT连接到Claude桌面应用,分别导航到设置 > 开发者
或设置 > 扩展
。
工具也可以直接传递到Anthropic API[8]调用中进行程序化测试。
自己测试工具以识别任何粗糙边缘。从用户收集反馈,建立对您期望工具启用的用例和提示的直觉。
运行评估
接下来,您需要通过运行评估来测量Claude使用您工具的效果。从生成大量基于现实世界使用的评估任务开始。我们建议与智能体协作来帮助分析您的结果并确定如何改进您的工具。在我们的工具评估cookbook[9]中查看此端到端过程。
图2:这张图表测量了人工编写与Claude优化的Slack MCP服务器的测试集准确性。
我们内部Slack工具的保留测试集性能
生成评估任务
使用您的早期原型,Claude Code可以快速探索您的工具并创建数十个提示和响应对。提示应该受到现实世界使用的启发,并基于现实的数据源和服务(例如,内部知识库和微服务)。我们建议您避免过于简单或肤浅的"沙盒"环境,这些环境不能用足够的复杂性对您的工具进行压力测试。强大的评估任务可能需要多次工具调用——可能有数十次。
以下是一些强大任务的例子:
- 安排下周与Jane的会议讨论我们最新的Acme Corp项目。附上我们上次项目规划会议的笔记并预订一个会议室。
- 客户ID 9182报告他们对一次购买尝试被收费三次。找到所有相关的日志条目并确定是否有其他客户受到相同问题的影响。
- 客户Sarah Chen刚刚提交了取消请求。准备一个保留优惠。确定:(1)他们离开的原因,(2)什么保留优惠最有吸引力,以及(3)在提供优惠之前我们应该注意的任何风险因素。
以下是一些较弱任务的例子:
- 安排下周与jane@acme.corp的会议。
- 在支付日志中搜索
purchase_complete
和customer_id=9182
。 - 通过客户ID 45892找到取消请求。
每个评估提示都应该与可验证的响应或结果配对。您的验证器可以像真实情况和采样响应之间的精确字符串比较一样简单,也可以像使用Claude来判断响应一样高级。避免过于严格的验证器,这些验证器会因为格式、标点符号或有效替代措辞等虚假差异而拒绝正确响应。
对于每个提示-响应对,您还可以选择指定您期望智能体在解决任务时调用的工具,以测量智能体是否成功在评估期间掌握每个工具的目的。但是,由于可能有多条正确解决任务的有效路径,尽量避免过度指定或过度拟合策略。
运行评估
我们建议通过直接LLM API调用以编程方式运行您的评估。使用简单的智能体循环(包装交替LLM API和工具调用的while
循环):每个评估任务一个循环。每个评估智能体应该得到一个任务提示和您的工具。
在您的评估智能体的系统提示中,我们建议指示智能体不仅输出结构化响应块(用于验证),还要输出推理和反馈块。指示智能体在工具调用和响应块之前输出这些可能通过触发思维链(CoT)行为来提高LLM的有效智能。
如果您使用Claude运行评估,您可以开启交错思考[10]来获得类似的"开箱即用"功能。这将帮助您探查智能体为什么会或不会调用某些工具,并突出工具描述和规范中的特定改进领域。
除了顶级准确性,我们建议收集其他指标,如单个工具调用和任务的总运行时间、工具调用总数、总令牌消耗和工具错误。跟踪工具调用可以帮助揭示智能体追求的常见工作流程,并为工具整合提供一些机会。
图3:这张图表测量了人工编写与Claude优化的Asana MCP服务器的测试集准确性。
我们内部Asana工具的保留测试集性能
分析结果
智能体是您在发现问题和提供从矛盾工具描述到低效工具实现和令人困惑的工具模式等一切反馈方面的有用伙伴。但是,请记住,智能体在反馈和响应中省略的内容通常比包含的内容更重要。LLM并不总是说出它们的意思[11]。
观察您的智能体在哪里被难住或困惑。阅读您的评估智能体的推理和反馈(或CoT)以识别粗糙边缘。审查原始记录(包括工具调用和工具响应)以捕获智能体CoT中没有明确描述的任何行为。读出弦外之音;记住您的评估智能体不一定知道正确的答案和策略。
分析您的工具调用指标。大量冗余工具调用可能表明需要对分页或令牌限制参数进行一些合理调整;大量无效参数的工具错误可能表明工具可以使用更清晰的描述或更好的示例。当我们推出Claude的网络搜索工具[12]时,我们发现Claude不必要地在工具的query
参数后附加2025
,偏倚搜索结果并降低性能(我们通过改进工具描述引导Claude朝正确方向)。
与智能体协作
您甚至可以让智能体为您分析结果并改进您的工具。只需连接您评估智能体的记录并粘贴到Claude Code中。Claude是分析记录和一次性重构大量工具的专家——例如,确保在进行新更改时工具实现和描述保持自一致。
事实上,这篇文章中的大部分建议都来自于与Claude Code反复优化我们内部工具实现。我们的评估是在我们内部工作空间之上创建的,镜像了我们内部工作流程的复杂性,包括真实项目、文档和消息。
我们依靠保留测试集来确保我们没有对"训练"评估过度拟合。这些测试集表明,即使超越我们用"专家"工具实现达到的成果——无论这些工具是由我们的研究人员手动编写还是由Claude本身生成——我们也可以提取额外的性能改进。
在下一节中,我们将分享我们从这个过程中学到的一些东西。
编写有效工具的原则
在本节中,我们将我们的学习成果提炼为编写有效工具的几个指导原则。
为智能体选择正确的工具
更多工具并不总是导致更好的结果。我们观察到的一个常见错误是工具仅仅包装现有软件功能或API端点——无论工具是否适合智能体。这是因为智能体与传统软件有不同的"功能可供性"——也就是说,它们对可以使用这些工具采取的潜在行动有不同的感知方式。
LLM智能体有有限的"上下文"(也就是说,它们一次可以处理的信息量有限制),而计算机内存便宜且丰富。考虑在通讯录中搜索联系人的任务。传统软件程序可以有效地存储和处理联系人列表,一次处理一个,在继续之前检查每一个。
但是,如果LLM智能体使用返回所有联系人的工具,然后必须逐个令牌地阅读每一个,它就是在不相关信息上浪费其有限的上下文空间(想象通过从上到下阅读每一页来搜索通讯录中的联系人——也就是说,通过暴力搜索)。对于智能体和人类来说,更好和更自然的方法是首先跳到相关页面(也许按字母顺序找到它)。
我们建议构建一些针对特定高影响工作流程的周到工具,这些工具与您的评估任务匹配,然后从那里扩展。在通讯录案例中,您可能选择实现search_contacts
或message_contact
工具而不是list_contacts
工具。
工具可以整合功能,在幕后处理潜在的多个离散操作(或API调用)。例如,工具可以用相关元数据丰富工具响应,或在单个工具调用中处理经常链接的多步任务。
以下是一些例子:
- 不要实现
list_users
、list_events
和create_event
工具,考虑实现一个schedule_event
工具,它找到可用性并安排事件。 - 不要实现
read_logs
工具,考虑实现一个search_logs
工具,它只返回相关的日志行和一些周围上下文。 - 不要实现
get_customer_by_id
、list_transactions
和list_notes
工具,实现一个get_customer_context
工具,它一次性编译客户的所有最近和相关信息。
确保您构建的每个工具都有清晰、独特的目的。工具应该使智能体能够细分和解决任务,就像人类在访问相同底层资源时会做的那样,同时减少原本会被中间输出消耗的上下文。
太多工具或重叠工具也可能使智能体分心,无法追求高效策略。仔细、有选择地规划您构建(或不构建)的工具真的可以获得回报。
为您的工具命名空间
您的AI智能体将可能获得对数十个MCP服务器和数百种不同工具的访问权限——包括其他开发者的工具。当工具在功能上重叠或目的模糊时,智能体可能会对使用哪些工具感到困惑。
命名空间(在公共前缀下分组相关工具)可以帮助在大量工具之间划定边界;MCP客户端有时默认会这样做。例如,按服务命名空间工具(如asana_search
、jira_search
)和按资源命名空间(如asana_projects_search
、asana_users_search
)可以帮助智能体在正确时间选择正确工具。
我们发现在基于前缀和基于后缀的命名空间之间选择对我们的工具使用评估有非平凡的影响。影响因LLM而异,我们鼓励您根据自己的评估选择命名方案。
智能体可能调用错误工具、用错误参数调用正确工具、调用太少工具或错误处理工具响应。通过有选择地实现其名称反映任务自然细分的工具,您同时减少了加载到智能体上下文中的工具和工具描述数量,并将智能体计算从智能体上下文卸载回工具调用本身。这减少了智能体犯错的整体风险。
从您的工具返回有意义的上下文
在同样的思路下,工具实现应该注意只向智能体返回高信号信息。它们应该优先考虑上下文相关性而不是灵活性,并避开低级技术标识符(例如:uuid
、256px_image_url
、mime_type
)。像name
、image_url
和file_type
这样的字段更有可能直接影响智能体的下游行动和响应。
智能体也倾向于比处理神秘标识符更成功地处理自然语言名称、术语或标识符。我们发现,仅仅将任意字母数字UUID解析为更语义上有意义和可解释的语言(或甚至0索引ID方案)通过减少幻觉显著提高Claude在检索任务中的精度。
在某些情况下,如果只是为了触发下游工具调用(例如,search_user(name='jane')
→ send_message(id=12345)
),智能体可能需要与自然语言和技术标识符输出交互的灵活性。您可以通过在工具中暴露一个简单的response_format
枚举参数来启用两者,允许您的智能体控制工具是否返回"简洁"
或"详细"
响应(下面的图像)。
您可以添加更多格式以获得更大的灵活性,类似于GraphQL,您可以选择您想要接收的确切信息片段。以下是控制工具响应冗长度的示例ResponseFormat枚举:
enum ResponseFormat {
DETAILED = "detailed",
CONCISE = "concise"
}
这里是详细工具响应的示例(206个令牌):
图4:这个代码片段描述了详细工具响应的示例。
这里是简洁工具响应的示例(72个令牌):
图5:这个代码片段描述了简洁工具响应。
Slack线程和线程回复由需要获取线程回复的唯一thread_ts
标识。thread_ts
和其他ID(channel_id
、user_id
)可以从"详细"
工具响应中检索,以启用需要这些的进一步工具调用。"简洁"
工具响应只返回线程内容并排除ID。在这个例子中,我们用"简洁"
工具响应使用约⅓的令牌。
甚至您的工具响应结构——例如XML、JSON或Markdown——都可能对评估性能产生影响:没有一刀切的解决方案。这是因为LLM在下一个令牌预测上训练,倾向于在匹配其训练数据的格式上表现更好。最佳响应结构将因任务和智能体而异。我们鼓励您根据自己的评估选择最佳响应结构。
优化工具响应的令牌效率
优化上下文质量很重要。但优化返回给智能体的工具响应中上下文的数量也同样重要。
对于可能使用大量上下文的任何工具响应,我们建议实现分页、范围选择、过滤和/或截断的某种组合,并具有合理的默认参数值。对于Claude Code,我们默认将工具响应限制为25,000个令牌。我们预期智能体的有效上下文长度会随时间增长,但对上下文高效工具的需求仍然存在。
如果您选择截断响应,确保用有用的指令引导智能体。您可以直接鼓励智能体追求更节约令牌的策略,如对知识检索任务进行许多小而有针对性的搜索,而不是单次广泛搜索。类似地,如果工具调用引发错误(例如,在输入验证期间),您可以对错误响应进行提示工程,以清楚地传达具体和可操作的改进,而不是不透明的错误代码或回溯。
以下是截断工具响应的示例:
图6:这张图像描述了截断工具响应的示例。
以下是无用错误响应的示例:
图7:这张图像描述了无用工具响应的示例。
以下是有用错误响应的示例:
图8:这张图像描述了有用错误响应的示例。
工具截断和错误响应可以引导智能体朝着更节约令牌的工具使用行为(使用过滤器或分页)或给出正确格式化工具输入的示例。
对您的工具描述进行提示工程
我们现在来到改进工具最有效的方法之一:对您的工具描述和规范进行提示工程。因为这些被加载到您智能体的上下文中,它们可以集体引导智能体朝着有效的工具调用行为。
在编写工具描述和规范时,想想您如何向团队中的新员工描述您的工具。考虑您可能隐含带来的上下文——专门的查询格式、细分术语定义、底层资源之间的关系——并使其明确。通过清楚地描述(并使用严格数据模型强制执行)预期输入和输出来避免歧义。特别是,输入参数应该明确命名:不要使用名为user
的参数,尝试名为user_id
的参数。
使用您的评估,您可以更有信心地测量提示工程的影响。即使对工具描述的小改进也可以产生戏剧性改进。Claude Sonnet 3.5在我们对工具描述进行精确改进后,在SWE-bench Verified[13]评估上达到了最先进的性能,大幅降低了错误率并提高了任务完成率。
您可以在我们的开发者指南[14]中找到工具定义的其他最佳实践。如果您为Claude构建工具,我们也建议阅读工具如何动态加载到Claude的系统提示[15]中。最后,如果您为MCP服务器编写工具,工具注释[16]有助于披露哪些工具需要开放世界访问或进行破坏性更改。
展望未来
要为智能体构建有效工具,我们需要将软件开发实践从可预测的确定性模式重新定向到非确定性模式。
通过我们在这篇文章中描述的迭代、评估驱动的过程,我们已经识别出使工具成功的一致模式:有效工具是有意且清楚定义的,明智地使用智能体上下文,可以在多样化工作流程中组合使用,并使智能体能够直观地解决现实世界任务。
在未来,我们预期智能体与世界交互的具体机制将会演进——从MCP协议更新到底层LLM本身的升级。通过系统性、评估驱动的方法来改进智能体工具,我们可以确保随着智能体变得更有能力,它们使用的工具也会随之演进。
如何学习大模型 AI ?
我国在AI大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着Al技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国Al产业的创新步伐。加强人才培养,优化教育体系,国际合作并进,是破解困局、推动AI发展的关键。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
2025最新大模型学习路线
明确的学习路线至关重要。它能指引新人起点、规划学习顺序、明确核心知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。
对于从来没有接触过AI大模型的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线。
针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。
大模型经典PDF书籍
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路!
配套大模型项目实战
所有视频教程所涉及的实战项目和项目源码等
博主介绍+AI项目案例集锦
MoPaaS专注于Al技术能力建设与应用场景开发,与智学优课联合孵化,培养适合未来发展需求的技术性人才和应用型领袖。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
为什么要学习大模型?
2025人工智能大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
适合人群
- 在校学生:包括专科、本科、硕士和博士研究生。学生应具备扎实的编程基础和一定的数学基础,有志于深入AGI大模型行业,希望开展相关的研究和开发工作。
- IT行业从业人员:包括在职或失业者,涵盖开发、测试、运维、产品经理等职务。拥有一定的IT从业经验,至少1年以上的编程工作经验,对大模型技术感兴趣或有业务需求,希望通过课程提升自身在IT领域的竞争力。
- IT管理及技术研究领域人员:包括技术经理、技术负责人、CTO、架构师、研究员等角色。这些人员需要跟随技术发展趋势,主导技术创新,推动大模型技术在企业业务中的应用与改造。
- 传统AI从业人员:包括算法工程师、机器视觉工程师、深度学习工程师等。这些AI技术人才原先从事机器视觉、自然语言处理、推荐系统等领域工作,现需要快速补充大模型技术能力,获得大模型训练微调的实操技能,以适应新的技术发展趋势。
课程精彩瞬间
大模型核心原理与Prompt:掌握大语言模型的核心知识,了解行业应用与趋势;熟练Python编程,提升提示工程技能,为Al应用开发打下坚实基础。
RAG应用开发工程:掌握RAG应用开发全流程,理解前沿技术,提升商业化分析与优化能力,通过实战项目加深理解与应用。
Agent应用架构进阶实践:掌握大模型Agent技术的核心原理与实践应用,能够独立完成Agent系统的设计与开发,提升多智能体协同与复杂任务处理的能力,为AI产品的创新与优化提供有力支持。
模型微调与私有化大模型:掌握大模型微调与私有化部署技能,提升模型优化与部署能力,为大模型项目落地打下坚实基础。
顶尖师资,深耕AI大模型前沿技术
实战专家亲授,让你少走弯路
一对一学习规划,职业生涯指导
- 真实商业项目实训
- 大厂绿色直通车
人才库优秀学员参与真实商业项目实训
以商业交付标准作为学习标准,具备真实大模型项目实践操作经验可写入简历,支持项目背调
大厂绿色直通车,冲击行业高薪岗位
文中涉及到的完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)