Zubnet AI学习Wiki › 工具使用
工具

工具使用

别名:函数调用
AI模型在对话过程中调用外部函数或工具的能力。与其仅仅生成文本,模型可以决定进行网络搜索、运行代码、查询数据库或调用API—然后将结果整合到其响应中。模型输出一个结构化的“工具调用”,由主机应用程序执行。

为什么重要

工具使用是使AI模型在对话之外真正有用的关键。它是代码解释器、网络浏览AI和每个AI代理背后的机制。没有它,模型将局限于其训练数据中的内容。

深度解析

这里解释一下工具调用在底层是如何实际工作的。当你向Claude或GPT-4这样的API发送消息时,你还会发送一个工具定义列表——每个定义都是一个描述函数名称、参数(包括类型和描述)以及其功能的JSON schema。模型会将这些定义作为上下文的一部分进行阅读,当它判断调用某个工具有助于回答用户的问题时,它会停止生成文本,转而输出一个结构化的工具调用对象:函数名称和它想要传递的参数。你的应用程序代码随后执行该函数(调用API、查询数据库、运行计算),并将结果作为新消息发送回模型。模型读取结果后继续生成响应。这不是模型在“运行代码”——而是模型生成结构化输出,由你的应用程序进行解释并执行。

命名的重要性

你的工具定义的质量至关重要。模型会根据工具的名称和描述来选择工具,因此一个名为search_docs、描述为“根据自然语言查询在内部知识库中搜索相关文档”的工具会得到适当使用,而一个名为sd且没有描述的工具会让模型感到困惑。参数描述同样重要——如果你有一个date参数,请指定预期格式(“ISO 8601,例如2025-03-15”),否则模型会猜测。在Claude API中,你还可以添加tool_choice参数,强制模型使用特定工具、自由选择或完全禁止使用工具。OpenAI的API有类似控制。正确编写这些定义通常是工具调用集成可靠运行与在边缘案例中崩溃之间的关键差异。

并行调用

并行工具调用是一个容易被忽视但对性能影响显著的功能。当模型需要从多个来源收集信息——例如检查三个城市的天气——它可以在单个响应中发出多个工具调用。你的应用程序可以并行执行它们,并一次性发送所有结果。Claude、GPT-4和Gemini都支持此功能。另一种方法(顺序调用,每次往返一个)会增加累积的延迟。如果你正在构建工具调用集成,请从一开始就设计执行层以处理工具调用数组。

应对意外情况

一个常见的陷阱是工具调用不是确定性的。相同的提示和工具可能导致模型调用不同的工具、传递不同的参数,甚至完全不使用工具。这对测试和可靠性非常重要。生产系统通常会在工具调用输出中包含验证逻辑——检查必需参数是否存在、值是否在预期范围内、函数名称是否匹配已知工具。一些团队会添加重试机制:如果模型发出格式错误的工具调用,错误会作为工具结果返回,模型将获得再次尝试的机会。这种“自我纠正”模式在实践中出人意料地有效,而且比试图提前防止所有错误要便宜得多。

简短的历史

AI模型中工具调用的历史出人意料地短暂。OpenAI于2023年6月在GPT-3.5和GPT-4中引入了“函数调用”,这立即改变了可构建的内容。在此之前,开发者使用提示工程让模型输出特定格式的JSON,然后用脆弱的正则表达式解析——这虽然可行,但很脆弱。Anthropic于2024年为Claude推出了工具调用,随后Google为Gemini推出了。API的设计已经趋同:你以JSON schema定义工具,模型输出结构化调用,你处理执行。2024年底引入的MCP在此机制之上添加了标准化的发现和传输层,因此工具可以在不同应用程序之间共享,而无需为每个应用程序重新定义。

相关概念

← 所有术语
← Token Transformer →
ESC