工具使用(Tool Use):LLM 如何调用工具
工具使用(Tool Use,也叫 function calling)让 LLM 不只是写文字,还能调用真正的函数——这是每个 AI agent 的基础。
核心问题
LLM 本身只能生成文字。它不能保存文件、查询数据库,也不能发邮件。工具使用(Tool Use,也叫 function calling)解决了这个问题:你把可用的“工具”(tools)描述给模型——比如一个叫 get_weather 或 send_email 的函数——并附上一份说明它们需要什么输入的 schema。
整个流程是如何运作的
当模型判断需要用到某个工具时,它不会用普通文字回答,而是返回一个结构化的“tool_use”块:工具名称加上以 JSON 格式给出的输入参数。你的应用读取这个块,执行真正的操作(调用 API、查询数据库),然后把结果作为“tool_result”发回给模型。模型会用这个结果继续工作,或组织出最终答案。
为什么这是所有 agent 的基础
Agent 归根结底就是一个在循环中调用工具的 LLM:提出请求、使用工具、读取结果、选择下一个工具,直到任务完成。没有工具使用,模型就只是一个纯文字生成器,无法对真实世界产生任何影响。
一个重要的特性
模型本身从不执行代码。它只决定何时调用哪个工具、传入什么参数。真正的执行——以及由此而来的风险控制——都掌握在你的应用手里。
示例
一个天气工具被定义为 { name: 'get_weather', input_schema: {location: string} }。用户问:“柏林天气怎么样?”Claude 返回一个 tool_use 块:{ name: 'get_weather', input: {location: 'Berlin'} }。你的应用调用真正的天气 API,把结果作为 tool_result 发回。之后 Claude 才会把它组织成文字回答。
🛠️ 练习——自己动手试试
为你自己选的一个任务(比如 search_product)定义一个简单的工具 schema,然后让一个 LLM 生成对应的 tool_use 调用。
- 为你的工具写一个 JSON schema,包含名称、描述和 1-2 个输入参数。
- 写一个明显需要用到这个工具的用户问题,把它和 schema 一起交给一个模型。
- 检查返回结果:是否收到了一个带有合理参数的正确 tool_use 块?
✅ 自查清单
- ☐ 模型有没有选对工具(而不是比如直接猜一个答案)?
- ☐ tool_use 块里的参数是否正确地从用户问题中提取出来了?
- ☐ 如果工具描述写得含糊,会发生什么——你有没有实际测试过?
小测验
当 Claude 想要调用一个工具时,会发生什么?
来源
- Anthropic 文档:Tool Use 概览 ↗ platform.claude.com
- Anthropic 文档:Tool Use 的工作原理 ↗ platform.claude.com
- OpenAI 文档:Function Calling ↗ developers.openai.com