为 agent 编写有效工具
来自 Anthropic Engineering · 期号 2025-09-11
摘要
Agent 的能力上限取决于你给了它什么工具。 Anthropic 分享了为 LLM agent 编写高质量工具的方法:先快速搭出原型并本地测试,再建立评测体系来量化每次改动的影响,最后让 Claude Code 自动帮你优化工具。 核心原则包括:选对要实现的工具(以及明确哪些不该实现)、用命名空间划定功能边界、让工具返回有意义的上下文、为 token 效率优化工具响应、以及用 prompt 工程打磨工具描述。 "工具是一种新型软件契约——连接确定性系统与非确定性 agent。" 本文附了完整的评测搭建流程和 MCP 服务器配置示例。
深读
导读 Agent 的能力上限取决于你给了它什么工具。Anthropic 分享了为 LLM agent 编写高质量工具的系统方法:先快速搭建原型并本地测试,再建立评测体系来量化每次改动的影响,最后让 Claude Code 自动帮你优化工具。读完能带走一套从原型到评测再到自动优化的完整流程,以及五条经过验证的工具设计原则。 关键信息 - 工具是一种新型软件契约,连接确定性系统(如 getWeather("NYC") 每次返回相同结果)与非确定性 agent(同一个问题可能调用工具、凭常识回答或反问)。 - 评测任务应基于真实数据源(如内部知识库和微服务),避免过于简单的沙箱环境;强任务可能需要数十次工具调用,弱任务则只需一次简单查询。 - 在内部 Slack 工具的评测中,Anthropic 使用留出测试集来防止过拟合,发现即使“专家”手写的工具实现也能被 Claude Code 进一步优化。 - 将工具响应中的 UUID 解析为语义可读的标识符(如 0-indexed ID 方案),显著提升了 Claude 在检索任务中的精度,减少了幻觉。 - Claude Sonnet 3.5 在 SWE-bench Verified 上达到当时最先进水平,正是源于对工具描述的精确微调。 - 对于 Claude Code,工具响应默认限制为 25,000 token,并鼓励使用多次小范围搜索替代单次大范围搜索以提高 token 效率。 逐节讲解 工具的本质:从确定性契约到非确定性契约 传统软件开发中,函数调用是确定性系统之间的契约——getWeather("NYC") 每次以完全相同的方式获取纽约天气。但 agent 是非确定性的:用户问“今天该带伞吗?”,agent 可能调用天气工具、凭常识回答、甚至先反问地点。这意味着为 agent 编写工具需要彻底重新思考:不是为开发者写 API,而是为 agent 设计工具。目标是扩大 agent 能有效解决问题的“表面积”,让工具支持多种成功策略。 编写工具的迭代流程:原型 → 评测 → 自动优化 原型阶段:先快速搭建工具原型并在本地测试。如果使用 Claude Code 编写工具,应提供工具依赖的软件库、API 或 SDK 的文档(推荐使用 llms.txt 格式的 LLM 友好文档)。将工具包装在本地 MCP 服务器或 Desktop Extension (DXT) 中,即可在 Claude Code 或 Claude Desktop 中连接测试。 评测阶段:生成大量基于真实用例的评测任务,每个 prompt 配一个可验证的响应或结果。验证器可以简单到精确字符串匹配,也可以复杂到让 Claude 评判。建议在评测 agent 的系统 prompt 中要求输出推理和反馈块(触发 chain-of-thought),并收集总运行…