工具使用,也称函数调用,是指让大语言模型在生成回复过程中,以结构化方式调用外部函数、API或程序的能力。具备工具使用能力的模型不再只生成自然语言文本,而是可以输出结构化请求,通常格式类似于带有命名参数的函数调用,由外围应用程序代表模型执行该请求;执行结果随后返回给模型,通常被重新插入其上下文窗口中,以便模型将该信息纳入最终回答或决定下一步行动。工具使用是AI代理与自身文本生成之外任何事物交互的基本机制,包括数据库、计算器、搜索引擎、代码执行环境及其他软件。
发展历程
早期语言模型只能生成纯文本,因此与外部系统的任何交互都必须通过解析自由格式输出并寄希望于其符合预期模式来实现,这种方法并不可靠。自2023年起,各大实验室开始将结构化函数调用作为模型的一等特性引入,供应商专门训练模型,使其能够针对提示中描述的一组工具发出格式正确的调用,并附带匹配的模式(schema)来约束调用可包含的参数。这使得工具使用变得极为可靠,并到2024年成为几乎所有前沿聊天和API模型的标准能力。与此同时,包括Anthropic于2024年11月推出的模型上下文协议在内的更广泛努力,也在推动跨不同供应商和应用程序的工具描述与模型连接方式的标准化。
实际运作方式
一次典型的工具使用交互包含三个部分。首先,调用应用程序向模型描述可用工具,通常以函数名、描述和预期参数类型的列表形式,包含在提示中或与之并列。其次,当模型判断回答用户请求需要其自身无法产生的信息或操作(如查询最新数据或执行精确计算)时,它会发出对相关工具的结构化调用,而非自然语言回答。第三,应用程序在模型外部执行该调用,并将结果反馈到对话中,之后模型可利用该结果撰写最终回答或发出另一个调用。这一循环可在单个代理任务中重复多次,模型通常经过训练,能够自主决定何时需要工具调用,何时可直接依据自身知识作答。
应用场景
工具使用支撑着广泛的实用系统:模型可配备网络搜索功能以回答近期事件相关问题,配备代码执行工具以运行并验证计算或生成的代码片段,配备数据库查询工具以查找特定记录,或配备API调用以执行发送消息或更新外部系统记录等操作。它也是将检索暴露为可调用工具的检索增强生成流水线的基础,以及计算机使用系统的基础,,在后者的场景中,“工具”是对图形界面(如鼠标和键盘)的控制,而非狭义的API。
可靠性与安全性
工具使用引入了纯文本生成所不具备的故障模式,因为模型可能调用错误的工具、提供格式错误或幻觉生成的参数,或在循环中异常频繁地调用某个工具。由于工具调用可能产生现实世界的影响,从发送电子邮件到执行任意代码不等,工具使用还引发了独特的安全问题,包括如何防止模型被对抗性内容操纵而滥用可用工具,,这一攻击模式与提示注入密切相关。生产系统通常通过权限范围限定、对后果性操作设置人工确认步骤,以及对任何执行代码或访问敏感数据的工具进行沙箱隔离来应对这些问题。