工具使用
工具使用是一种让 LLM 在响应过程中调用外部函数、API、数据库或服务的能力,可用于获取最新数据、执行计算或在现实世界中采取行动。借助工具使用,模型不再被锁定在训练数据中,而是能够在任务需要时触及自身之外的资源。
工具使用是一种让 LLM 在响应过程中调用外部函数、API、数据库或服务的能力,可用于获取最新数据、执行计算或在现实世界中采取行动。借助工具使用,模型不再被锁定在训练数据中,而是能够在任务需要时触及自身之外的资源。
为什么重要
裸 LLM 有三个硬性限制:固定的知识截止日期、无法访问私有数据,以及无法采取行动。工具使用消除了这三者。借助工具,同一个模型可以回答"当前的 MRR 是多少?",可以发送电子邮件、预订航班、查询数据库或执行代码。工具使用是每一个现代 AI 智能体、每一个"副驾驶(copilot)"以及几乎所有聊天机器人层级之上的生产级 LLM 应用的基础。
工作原理
1. 工具定义:调用方向模型提供一份可用工具列表,每个工具都带有名称、描述和参数模式(schema)。
2. 模型决定调用:当用户的请求需要某个工具时,模型会输出一个结构化的工具调用(符合该模式的 JSON),而不是普通文本。
3. 运行时执行工具:你的代码接收到工具调用,运行实际的函数,并返回结果。
4. 结果返回给模型:模型将结果作为上下文的一部分接收,并继续生成响应,要么回答用户,要么调用另一个工具。
5. 循环直至完成:多工具任务会不断串联工具调用,直到模型产生最终的文本响应。
工具使用与函数调用
这两个术语大体上可以互换,只有细微的差别:
- 函数调用:最初的说法,模型为单个具名函数输出 JSON 参数。
- 工具使用:更宽泛的说法,工具可以是函数、API、计算机操作或 MCP 服务器,模型会按顺序编排调用多个工具。
Anthropic 使用"工具使用"一词,OpenAI 过去使用"函数调用",现在则称为"工具(tools)"。两者描述的是同一种底层能力。
工具的种类
检索:获取文档、搜索网络、查询数据库、查找记录。
计算:运行 Python、做数学运算、转换单位、解析文件。
操作:发送电子邮件、创建日历事件、发布到 Slack、更新 CRM。
代码执行:模型可以在其中编写并运行代码的沙箱化解释器。
计算机使用:点击、输入和读取屏幕,这是最通用的工具。
模型间调用:委托给另一个专门的模型(例如图像生成)。
设计良好的工具模式
清晰、简短的描述:描述是模型决定何时调用的依据。务必让它含义明确。
收窄参数类型:相比自由文本,优先使用枚举和受约束的字符串,可减少虚构的参数。
尽可能保证幂等性:如果模型可能重试,第二次调用不应该把邮件重复发送一次。
返回结构化结果:给模型返回 JSON,而不是自由文本,它对结构的推理能力更强。
错误响应应告诉模型该怎么做:"错误:未找到城市,请尝试不同的拼写"比"500"更有用。
常见错误
工具太多:超过约 20 到 30 个工具后,模型会开始挑错工具。把相关工具分组,或通过更小的范围进行路由。
描述含糊:"实用工具"无法告诉模型何时调用它。要具体。
没有错误处理:工具失败会中断循环。始终返回模型可以据此反应的结构化错误。
忽视延迟:每次工具调用都会增加一次往返。并行处理相互独立的调用,能批处理的就批处理。
跳过护栏:执行操作的工具(发送邮件、转账)需要人工介入或严格的范围限制。
Sources: