当 AI 拥有了“手”和“脚”:Tool Use 能力的技术演进
当 AI 拥有了“手”和“脚”Tool Use 能力的技术演进1. 标题 (Title)当 AI 拥有了“手”和“脚”Tool Use 能力的技术演进与未来图景从“只会思考”到“知行合一”大模型 Tool Use 能力的核心原理与落地实践Tool Use 的前世今生AI 通用能力爆发的最后一块拼图大模型如何“调用工具”技术深度拆解 AI 从“单模态信息处理”到“多模态行动执行”的跃迁AI Agent 的基石Tool Use 能力的演进脉络、架构设计与未来突破2. 引言 (Introduction)2.1 痛点引入 (Hook)2022年底ChatGPT横空出世像一声惊雷炸响了整个科技界乃至整个社会——人们第一次真切感受到人工智能终于可以“像人一样思考”了它能写代码、改Bug、创作诗歌、撰写论文、翻译几十种语言甚至能扮演苏格拉底式的导师陪你探讨人生哲学。但兴奋劲儿过去没多久越来越多的开发者、产品经理、甚至普通用户都发现了ChatGPT的“致命弱点”它**“只会说不会做”**。举几个非常生活化但非常扎心的例子吧你跟ChatGPT说“帮我订一张明天上午9点从上海虹桥到北京大兴的国航商务舱机票预算1500元以内靠窗的位置要是有里程兑换的优先选项也帮我看看。”它会给你写一段非常详细的“订票攻略”“你可以先登录国航APP或者官网进入‘机票预订’页面选择出发地上海虹桥、目的地北京大兴、日期明天、舱位商务舱然后筛选靠窗的座位和里程兑换的航班……”但它真的会去登录你的国航APP、筛选航班、比对价格、点击确认预订吗显然不会。你是一个数据分析师你跟GPT-4虽然当时GPT-4已经更强了但同样有这个问题说“帮我分析一下这张2024年1-6月公司电商平台的用户留存率Excel表格找出留存率下降的主要原因再生成一张留存率趋势图和一张流失用户画像柱状图最后给我写一份3000字左右的分析报告。”它会先告诉你“请把Excel表格转换成纯文本格式或者JSON格式粘贴给我。”你好不容易花了半小时把几万行数据转换成了JSON粘贴给它之后它又会说“数据量太大了我只能处理前1000行你可以把前1000行的数据再精简一下。”就算你真的精简了数据它给出的分析也可能只是“流于表面”而且生成的图表只是“ASCII码画的”或者“文字描述的”——它不会直接打开Excel表格、不会用Python的Pandas清洗数据、不会用Matplotlib生成专业的可视化图表、不会把报告导出成PDF格式。你是一个程序员你跟GPT-4说“我写了一段Python爬虫代码现在运行报错了错误信息是‘ConnectionError: HTTPSConnectionPool(hostxxx.com, port443): Max retries exceeded with url’你帮我修复一下然后再帮我测试一下修复后的代码能不能正常爬取数据最后把爬取到的前100条数据保存成CSV文件。”它会帮你分析错误原因比如“可能是目标网站有反爬虫机制、你的IP被封了、你的请求头设置有问题”然后给你写一段修改后的代码比如“加上代理IP、设置User-Agent轮询、加上重试机制”——但它真的会去下载这段代码、运行它、测试能不能爬取、保存CSV文件吗除非你把它放到了一个可以执行代码的环境里比如后来的Code Interpreter也就是现在的Advanced Data Analysis但当时那只是一个很小的实验性功能而且只能在OpenAI提供的封闭沙箱里运行不能访问外部的真实网站、不能调用外部的真实API、不能操作你本地的文件。这些例子背后反映的其实是一个非常深刻的人工智能发展阶段的问题此前的大语言模型LLMs本质上都是“单模态的、封闭环境下的、纯文本信息处理的预测机器”——它们只能“接收输入的文本信息”、“在自己的训练数据知识库中检索信息”、“生成输出的文本信息”但它们无法与外部的真实世界进行交互无法调用搜索引擎获取实时的、最新的信息训练数据是截止到某个时间点的“静态知识库”、无法调用计算器进行精确的数学计算大模型的数学推理能力虽然在不断提升但本质上还是基于文本预测的对于复杂的、需要多步精确计算的问题比如12345.6789乘以98765.4321或者求解一个包含10个变量的线性方程组它们很容易出错、无法调用代码解释器执行代码、无法调用天气API获取实时的天气信息、无法调用订票API订机票、订酒店、无法调用支付API完成支付、无法操作你本地的文件、甚至无法给你发一封邮件……而这一切的改变都始于2023年初OpenAI推出的Function Calling函数调用功能——这标志着大语言模型第一次真正拥有了“通用的、可扩展的工具调用能力”也就是我们今天所说的Tool Use工具使用能力。从那以后大模型不再只是“只会思考的大脑”而是开始拥有了“能够感知外部世界的眼睛和耳朵”当然“眼睛和耳朵”更多的是指多模态能力比如视觉、听觉但Tool Use是实现“知行合一”的核心因为只有通过调用工具才能把“大脑的思考”转化为“实际的行动”、“能够执行实际操作的手和脚”——它们可以真正地“帮你做事”了帮你搜索实时信息、帮你做精确计算、帮你写代码并执行、帮你分析数据并生成可视化图表、帮你订机票订酒店、帮你发邮件、帮你操作本地文件……2.2 文章内容概述 (What)本文将带你系统、全面、深入地探索大语言模型Tool Use能力的技术演进——从最早期的、“笨拙的”、“针对特定任务的”工具使用尝试到现在的、“灵活的”、“通用的”、“可扩展的”、“多模态的”工具使用能力再到未来的、“自主的”、“协作的”、“具有创造力的”工具使用能力。具体来说本文将包含以下核心内容核心概念界定首先我们会清晰地界定什么是“Tool Use工具使用能力”它和“Function Calling函数调用”、“Plugin插件”、“AI Agent人工智能代理”之间有什么区别和联系问题背景与演变历史我们会梳理Tool Use能力的发展脉络——从早期的、基于规则的、针对特定任务的“脚本式工具调用”到基于强化学习的、“试错式的工具调用”再到基于大语言模型的、“理解式的、通用的工具调用”核心原理与技术架构我们会深入地拆解Tool Use能力的核心技术——包括“工具描述语言TDL”、“工具选择/规划模块”、“工具参数提取模块”、“工具执行模块”、“结果反馈与迭代优化模块”核心算法与数学模型我们会介绍Tool Use能力中用到的核心算法——包括“提示工程Prompt Engineering在Tool Use中的应用”、“检索增强生成RAG在工具选择中的应用”、“强化学习RL在工具规划与迭代优化中的应用”、“思维链CoT、思维树ToT、思维图GoT在复杂工具调用规划中的应用”同时我们也会用LaTeX公式来描述这些算法背后的数学模型算法流程图与ER实体关系图我们会用Mermaid来绘制Tool Use能力的核心算法流程图、ER实体关系图以及交互关系图实际场景应用与落地实践我们会介绍Tool Use能力在各个实际场景中的应用——比如“智能客服”、“数据分析与可视化”、“软件开发与DevOps”、“智能家居控制”、“自动驾驶辅助决策”、“医疗健康辅助诊断”同时我们也会给出一个完整的、可直接运行的Tool Use项目的源代码——我们会用Python、LangChain、OpenAI API、Weather API、Calculator API来开发一个“智能个人助理”它可以帮你查询实时天气、帮你做精确计算、帮你搜索实时信息最佳实践与常见坑点我们会总结Tool Use能力在落地实践中的最佳实践——比如“如何设计好的工具描述语言TDL”、“如何优化工具选择/规划的准确率”、“如何处理工具调用的失败情况”、“如何保证工具调用的安全性和隐私性”同时我们也会指出Tool Use能力在落地实践中的常见坑点——比如“大模型的幻觉Hallucination导致的工具选择错误或参数提取错误”、“工具调用的延迟导致的用户体验下降”、“工具调用的成本过高”行业发展与未来趋势我们会分析Tool Use能力的行业发展现状——比如目前主流的大模型OpenAI GPT-4o、Anthropic Claude 3 Opus/Sonnet/Haiku、Google Gemini 1.5 Pro/Flash、Meta Llama 3、阿里云通义千问、百度文心一言、腾讯混元、字节跳动豆包都支持哪些Tool Use功能同时我们也会展望Tool Use能力的未来发展趋势——比如“多模态Tool Use”、“自主Tool规划与迭代优化”、“多Agent协作Tool Use”、“工具的自动发现与自动学习”、“Tool Use能力与机器人技术的结合”、“Tool Use能力的标准化与开源化”本章小结虽然本文是一篇完整的博客文章但我们会把每一个大的部分都拆成“章节”并在每一个章节的最后都加上“本章小结”我们会在每一个章节的最后都简要回顾一下该章节的核心内容。2.3 读者收益 (Why)读完本文你将能够清晰地理解Tool Use能力的核心概念你将不再混淆“Tool Use”、“Function Calling”、“Plugin”、“AI Agent”这些概念全面地了解Tool Use能力的发展脉络你将知道Tool Use能力是怎么一步步从“笨拙的脚本式调用”发展到“灵活的通用式调用”的深入地掌握Tool Use能力的核心技术与算法你将能够理解Tool Use能力背后的技术原理包括工具描述语言、工具选择/规划、参数提取、执行、反馈与优化独立地开发一个具有Tool Use能力的AI应用我们会给出一个完整的、可直接运行的Tool Use项目的源代码你可以跟着我们的步骤一步步地开发也可以在这个项目的基础上进行扩展添加更多的工具避免Tool Use能力落地实践中的常见坑点我们会总结一些最佳实践和常见坑点帮助你在落地实践中少走弯路对Tool Use能力的未来发展趋势有一个清晰的认识你将知道Tool Use能力未来会朝着哪些方向发展从而提前做好准备。3. 核心概念界定Tool Use、Function Calling、Plugin与AI Agent的区别与联系3.1 问题背景在开始深入探索Tool Use能力的技术演进之前我们首先必须要清晰地界定一些核心概念——因为在目前的科技界和产业界这些概念的使用非常混乱很多人会把“Tool Use”和“Function Calling”混为一谈很多人会把“Plugin”和“AI Agent”混为一谈甚至有些大模型厂商在宣传自己的产品时也会故意混淆这些概念以吸引更多的用户和开发者。比如OpenAI在2023年初推出的第一个具有工具调用能力的功能叫做“Plugins插件”后来又推出了“Function Calling函数调用”现在又把这两个功能统一到了“Advanced Data Analysis之前叫Code Interpreter”、“Browse with Bing之前叫Web Browsing”以及“GPT-4o Custom Instructions/Custom GPTs”里面Anthropic的Claude系列大模型支持的工具调用功能叫做“Tool Use”Google的Gemini系列大模型支持的工具调用功能叫做“Function Calling”或者“Tool Use”Meta的Llama 3系列大模型支持的工具调用功能叫做“Function Calling”国内的大模型厂商比如阿里云通义千问支持的叫做“工具调用”或者“函数调用”百度文心一言支持的叫做“插件”或者“函数调用”腾讯混元支持的叫做“工具调用”字节跳动豆包支持的叫做“插件”或者“函数调用”。这种概念的混乱不仅会让普通用户感到困惑也会让很多初级开发者感到迷茫——他们不知道到底应该用哪个功能来开发自己的应用也不知道这些功能之间有什么区别和联系。因此在本文的开头我们首先必须要清晰地、准确地、系统地界定这些核心概念。3.2 核心概念什么是Tool Use工具使用能力3.2.1 核心概念的定义首先我们来看一下学术界对Tool Use能力的定义——在人工智能领域Tool Use能力最早并不是由大语言模型LLMs提出的而是由强化学习RL和机器人学提出的。在强化学习和机器人学领域Tool Use能力的定义是智能体Agent能够感知外部环境中的工具理解工具的功能和使用方法并且能够根据自己的目标自主地选择合适的工具、规划工具的使用步骤、执行工具的使用操作最后根据工具执行的结果调整自己的目标或者下一步的行动。比如在强化学习的经典实验“猴子拿香蕉”中虽然这个实验更多的是用来测试强化学习的“探索与利用”能力但也可以用来测试Tool Use能力环境中有一只猴子智能体、一串挂在天花板上的香蕉目标、一个放在角落里的箱子工具猴子一开始够不到香蕉猴子需要先感知到箱子的存在理解箱子的功能是“可以垫高自己”然后自主地选择箱子作为工具规划使用箱子的步骤“走到箱子旁边→把箱子推到香蕉下面→爬到箱子上→拿到香蕉”执行这些步骤最后拿到香蕉达成目标。后来随着大语言模型LLMs的兴起Tool Use能力的定义被扩展到了大语言模型领域——在大语言模型领域Tool Use能力的定义是大语言模型能够理解用户的自然语言请求根据用户的请求和自己的知识库自主地选择合适的外部工具比如搜索引擎、计算器、代码解释器、天气API、订票API等规划工具的使用步骤提取工具的输入参数调用外部工具的执行接口获取工具的执行结果最后根据工具的执行结果生成用户需要的自然语言响应。3.2.2 核心概念的结构与核心要素组成从上面的定义中我们可以看出Tool Use能力的核心结构是一个**“感知-理解-规划-执行-反馈-迭代”的闭环**它的核心要素组成包括以下几个部分用户请求User Request这是Tool Use能力的输入通常是用户的自然语言请求比如“帮我订一张明天上午9点从上海虹桥到北京大兴的国航商务舱机票”但也可以是多模态的请求比如用户上传一张Excel表格的图片然后说“帮我分析一下这张表格的数据”智能体Agent这是Tool Use能力的核心它是一个能够“思考”、“决策”、“行动”的实体——在大语言模型领域这个智能体通常是“大语言模型Tool Use模块”的组合工具库Tool Library/Toolkit这是智能体可以使用的所有外部工具的集合——每个工具都有自己的“名称Name”、“描述Description”、“输入参数Input Parameters”、“输出结果Output Results”、“执行接口Execution Interface”感知模块Perception Module这是智能体“感知外部世界”的模块——它可以感知用户的请求包括自然语言和多模态也可以感知工具库中的工具包括工具的名称、描述、输入参数、输出结果、执行接口还可以感知工具执行的结果理解模块Understanding Module这是智能体“理解外部信息”的模块——它可以理解用户的请求的“意图Intent”和“实体Entity”也可以理解工具库中的工具的“功能Function”和“使用方法Usage Method”规划模块Planning Module这是智能体“规划行动步骤”的模块——它可以根据用户的请求的意图和实体以及工具库中的工具的功能和使用方法自主地选择合适的工具规划工具的使用步骤比如是“先调用工具A再调用工具B”还是“同时调用工具A和工具B”还是“调用工具A多次直到达成目标为止”参数提取模块Parameter Extraction Module这是智能体“提取工具输入参数”的模块——它可以根据用户的请求的实体以及工具的输入参数的要求自主地提取工具的输入参数比如用户的请求是“帮我查一下明天上海的天气”那么工具的输入参数就是“日期明天”、“城市上海”执行模块Execution Module这是智能体“执行工具操作”的模块——它可以根据规划好的工具使用步骤以及提取好的工具输入参数调用工具的执行接口执行工具的操作反馈模块Feedback Module这是智能体“获取并处理工具执行结果”的模块——它可以获取工具的执行结果判断工具的执行结果是否“成功”、是否“满足用户的请求的意图”迭代优化模块Iterative Optimization Module这是智能体“调整行动并迭代优化”的模块——如果工具的执行结果“失败”或者“不满足用户的请求的意图”那么它可以调整工具的选择、工具的使用步骤、工具的输入参数然后再次调用工具的执行接口直到工具的执行结果“成功”并且“满足用户的请求的意图”为止响应生成模块Response Generation Module这是智能体“生成用户需要的响应”的模块——如果工具的执行结果“成功”并且“满足用户的请求的意图”那么它可以根据工具的执行结果生成用户需要的自然语言响应或者多模态响应比如可视化图表、图片、视频等。为了更清晰地展示Tool Use能力的核心结构与核心要素组成我们可以用一个Mermaid架构图来表示渲染错误:Mermaid 渲染失败: Parse error on line 17: ...]:::process end:::agent subgrap ----------------------^ Expecting SEMI, NEWLINE, SPACE, EOF, subgraph, end, acc_title, acc_descr, acc_descr_multiline_value, AMP, COLON, STYLE, LINKSTYLE, CLASSDEF, CLASS, CLICK, DOWN, DEFAULT, NUM, COMMA, NODE_STRING, BRKT, MINUS, MULT, UNICODE_TEXT, direction_tb, direction_bt, direction_rl, direction_lr, direction_td, got STYLE_SEPARATOR3.2.3 核心概念的核心属性从上面的定义和结构中我们可以总结出Tool Use能力的核心属性通用性GeneralityTool Use能力应该是通用的也就是说它不应该只针对某个特定的任务或者某个特定的工具而是应该能够适用于各种各样的任务和各种各样的工具——只要工具的描述足够清晰大语言模型就应该能够理解工具的功能和使用方法并且能够自主地选择和使用工具自主性AutonomyTool Use能力应该是自主的也就是说它不应该需要用户的“明确指令”来选择工具、规划工具的使用步骤、提取工具的输入参数——用户只需要给出一个“自然语言的、高层次的目标请求”比如“帮我安排一下明天去北京出差的行程”智能体就应该能够自主地完成所有的操作比如查询明天上海到北京的航班、查询北京的天气、预订机票、预订酒店、规划出差的行程安排、生成行程单可扩展性ScalabilityTool Use能力应该是可扩展的也就是说它应该能够很容易地添加新的工具——不需要重新训练大语言模型只需要给新的工具提供一个“清晰的、结构化的描述”大语言模型就应该能够理解和使用这个新的工具闭环性Closed-LoopTool Use能力应该是闭环的也就是说它应该能够根据工具执行的结果调整自己的行动并且能够迭代优化直到达成目标为止多模态性Multimodality随着多模态大语言模型MLLMs的兴起Tool Use能力也应该是多模态的也就是说它应该能够处理多模态的用户请求比如图片、视频、音频并且能够生成多模态的输出响应比如可视化图表、图片、视频。3.3 概念辨析Tool Use与Function Calling、Plugin、AI Agent的区别与联系现在我们已经清晰地界定了Tool Use能力的核心概念接下来我们来辨析Tool Use与Function Calling、Plugin、AI Agent之间的区别与联系——这是目前科技界和产业界最容易混淆的几个概念。3.3.1 Tool Use vs Function Calling首先我们来看一下Tool Use与Function Calling之间的区别与联系。3.3.1.1 Function Calling的定义首先我们来看一下Function Calling的定义——Function Calling函数调用是OpenAI在2023年6月推出的一个功能它的定义是大语言模型能够根据用户的自然语言请求自主地判断是否需要调用外部的函数Function如果需要的话就生成一个“结构化的JSON格式的函数调用请求”里面包含了“函数的名称Function Name”和“函数的输入参数Function Arguments”然后开发者可以根据这个JSON格式的函数调用请求调用自己定义的外部函数获取函数的执行结果最后把函数的执行结果返回给大语言模型大语言模型再根据函数的执行结果生成用户需要的自然语言响应。3.3.1.2 Tool Use与Function Calling的联系从上面的定义中我们可以看出Function Calling其实是Tool Use的一个“子集”或者说是Tool Use的一个“底层技术实现方式”——也就是说Tool Use是一个“高层次的、抽象的概念”而Function Calling是一个“低层次的、具体的技术实现方式”我们可以用Function Calling来实现Tool Use能力。具体来说在Tool Use能力的核心要素组成中“工具Tool”其实就是“函数Function”的一个“更抽象的、更广义的概念”——函数通常是指“开发者自己定义的、可以执行特定操作的代码块”而工具不仅可以是“开发者自己定义的代码块”还可以是“第三方提供的API”、“第三方提供的插件”、“第三方提供的软件”、“甚至是物理世界中的机器人手臂”“工具选择/规划模块”、“参数提取模块”其实就是“大语言模型生成结构化的JSON格式的函数调用请求的能力”“工具执行模块”其实就是“开发者根据JSON格式的函数调用请求调用外部函数的能力”“反馈模块”、“迭代优化模块”、“响应生成模块”其实就是“大语言模型根据函数的执行结果调整行动并生成响应的能力”。3.3.1.3 Tool Use与Function Calling的区别虽然Function Calling是Tool Use的一个子集和底层技术实现方式但它们之间还是有一些区别的概念的抽象程度不同Tool Use是一个“高层次的、抽象的概念”它关注的是“智能体如何根据目标自主地选择、使用、优化工具”而Function Calling是一个“低层次的、具体的技术实现方式”它关注的是“大语言模型如何生成结构化的JSON格式的函数调用请求”工具的范围不同Function Calling中的“函数”通常是指“开发者自己定义的、可以通过API调用的代码块”而Tool Use中的“工具”的范围要广得多——它不仅可以是“开发者自己定义的代码块”还可以是“第三方提供的API”、“第三方提供的插件”、“第三方提供的软件”、“甚至是物理世界中的机器人手臂”规划的复杂程度不同Function Calling通常只支持“单次函数调用”或者“简单的多次函数调用”比如先调用函数A再调用函数B而Tool Use通常支持“复杂的、多步骤的、甚至是迭代的工具规划”比如先调用工具A获取信息再根据工具A的结果调用工具B再根据工具B的结果调用工具A多次直到达成目标为止自主性的程度不同Function Calling通常需要开发者“明确地告诉大语言模型有哪些函数可以调用”并且“函数的调用逻辑通常是由开发者或者大语言模型简单地判断的”而Tool Use通常支持“工具的自动发现”比如智能体可以自动地搜索可用的工具并且“工具的调用逻辑通常是由智能体自主地、复杂地规划的”。为了更清晰地展示Tool Use与Function Calling之间的区别我们可以用一个Markdown表格来对比它们的核心属性核心属性Tool Use工具使用Function Calling函数调用概念的抽象程度高层次的、抽象的概念低层次的、具体的技术实现方式工具的范围非常广泛开发者自己定义的代码块、第三方API、第三方插件、第三方软件、物理世界的机器人等相对狭窄主要是开发者自己定义的、可以通过API调用的代码块规划的复杂程度支持复杂的、多步骤的、迭代的工具规划通常只支持单次函数调用或者简单的多次函数调用自主性的程度非常高支持工具的自动发现、自主的复杂规划相对较低需要开发者明确提供可调用的函数列表、调用逻辑相对简单是否是闭环通常是闭环的支持根据工具执行结果调整行动并迭代优化可以是闭环的但需要开发者自己实现反馈和迭代优化的逻辑是否支持多模态随着多模态大模型的兴起通常支持多模态通常不直接支持多模态但可以通过开发者自己定义的函数来实现多模态的处理3.3.2 Tool Use vs Plugin接下来我们来看一下Tool Use与Plugin之间的区别与联系。3.3.2.1 Plugin的定义首先我们来看一下Plugin的定义——Plugin插件是OpenAI在2023年3月推出的一个功能比Function Calling早3个月它的定义是第三方开发者可以开发自己的插件插件包含了“插件的 manifest.json 文件里面包含了插件的名称、描述、图标、验证方式、API接口的OpenAPI规范文档等”和“插件的API接口”然后用户可以在ChatGPT中安装这些插件安装之后ChatGPT就可以根据用户的自然语言请求自主地调用这些插件的API接口获取插件的执行结果最后根据插件的执行结果生成用户需要的自然语言响应。3.3.2.2 Tool Use与Plugin的联系从上面的定义中我们可以看出Plugin其实也是Tool Use的一个“子集”或者说是Tool Use的一个“早期的、针对普通用户的、简化的技术实现方式”——也就是说Tool Use是一个“高层次的、抽象的、针对开发者和高级用户的概念”而Plugin是一个“低层次的、具体的、针对普通用户的、简化的技术实现方式”我们可以用Plugin来实现Tool Use能力的一部分功能。具体来说在Tool Use能力的核心要素组成中“插件Plugin”其实就是“工具Tool”的一个“针对普通用户的、标准化的实现方式”——插件通常是由第三方开发者开发的、包含了标准化的manifest.json文件和OpenAPI规范文档的工具“工具库Tool Library”其实就是“ChatGPT的插件商店Plugin Store”“工具选择/规划模块”、“参数提取模块”其实就是“ChatGPT根据插件的manifest.json文件和OpenAPI规范文档自主地调用插件API接口的能力”“工具执行模块”其实就是“ChatGPT调用插件API接口的能力”“反馈模块”、“响应生成模块”其实就是“ChatGPT根据插件的执行结果生成响应的能力”。3.3.2.3 Tool Use与Plugin的区别虽然Plugin也是Tool Use的一个子集和早期的简化技术实现方式但它们之间还是有一些区别的目标用户不同Tool Use的目标用户主要是“开发者”和“高级用户”——他们可以自己定义工具、自己实现工具的执行逻辑、自己规划工具的使用步骤而Plugin的目标用户主要是“普通用户”——他们不需要自己开发工具只需要在插件商店里安装第三方开发者开发的插件就可以了工具的标准化程度不同Plugin的标准化程度非常高——第三方开发者必须按照OpenAI规定的格式编写manifest.json文件和OpenAPI规范文档而Tool Use的标准化程度相对较低——开发者可以用自己喜欢的方式定义工具比如用OpenAI的Function Calling格式、用Anthropic的Tool Use格式、用LangChain的Tool格式等工具的可控性不同在Plugin模式下用户和开发者对工具的可控性相对较低——工具的执行逻辑是由第三方开发者开发的工具的调用逻辑是由ChatGPT控制的而在Tool Use模式下用户和开发者对工具的可控性非常高——开发者可以自己定义工具的执行逻辑开发者可以自己控制工具的调用逻辑比如用LangChain来实现复杂的工具规划工具的扩展性不同在Plugin模式下工具的扩展性相对较低——只有第三方开发者开发的、通过OpenAI审核的插件才能在ChatGPT的插件商店里使用而在Tool Use模式下工具的扩展性非常高——开发者可以自己定义任何工具不需要通过任何审核是否支持离线使用Plugin通常需要联网才能使用——因为插件的API接口通常是部署在云端的而Tool Use可以支持离线使用——如果工具是部署在本地的那么智能体就可以在离线的情况下调用本地的工具。为了更清晰地展示Tool Use与Plugin之间的区别我们也可以用一个Markdown表格来对比它们的核心属性核心属性Tool Use工具使用Plugin插件目标用户开发者、高级用户普通用户工具的标准化程度相对较低开发者可以用自己喜欢的方式定义工具非常高必须按照OpenAI规定的格式编写manifest.json文件和OpenAPI规范文档工具的可控性非常高开发者可以自己定义工具的执行逻辑和调用逻辑相对较低工具的执行逻辑由第三方开发者开发调用逻辑由ChatGPT控制工具的扩展性非常高开发者可以自己定义任何工具不需要审核相对较低只有通过OpenAI审核的第三方插件才能使用是否支持离线使用可以支持如果工具部署在本地通常不支持插件的API接口通常部署在云端是否支持复杂的工具规划支持开发者可以用LangChain等框架实现复杂的规划通常不支持插件的调用逻辑由ChatGPT简单地控制3.3.3 Tool Use vs AI Agent最后我们来看一下Tool Use与AI Agent之间的区别与联系——这是目前科技界和产业界最热门的两个概念也是最容易混淆的两个概念。3.3.3.1 AI Agent的定义首先我们来看一下AI Agent的定义——在人工智能领域AI Agent人工智能代理的定义最早是由**斯坦福大学的计算机科学家John McCarthy约翰·麦卡锡人工智能之父**在1956年的达特茅斯会议上提出的但后来经过了很多次的扩展和修改。目前学术界和产业界对AI Agent的一个比较通用的定义是AI Agent是一个能够“感知外部环境”、“根据自己的目标和内部状态做出决策”、“执行决策并作用于外部环境”、“根据环境的反馈调整自己的目标和内部状态”的“自主的、持续运行的实体”。而在大语言模型领域AI Agent的定义通常被简化为AI Agent是一个“以大语言模型为核心大脑”、“拥有Tool Use能力”、“拥有记忆Memory能力”、“拥有规划Planning能力”的“自主的、持续运行的实体”。3.3.3.2 Tool Use与AI Agent的联系从上面的定义中我们可以看出Tool Use是AI Agent的一个“核心能力”或者说是AI Agent的一个“必要不充分条件”——也就是说没有Tool Use能力的AI Agent不是一个真正的AI Agent它只是一个“只会思考的大脑”无法与外部环境进行交互但只有Tool Use能力的AI Agent也不是一个真正的AI Agent它还需要拥有记忆能力、规划能力、自主的目标设定能力等。具体来说在大语言模型领域的AI Agent的核心要素组成中Tool Use能力只是其中的一个核心要素——AI Agent的核心要素组成通常包括以下几个部分这就是著名的LLM Agent的“四大核心组件”由OpenAI的研究人员在2023年的论文《LLM Agents: A Survey》中提出或者说是由很多研究人员共同总结的核心大脑Core Brain通常是一个大语言模型比如GPT-4o、Claude 3 Opus、Gemini 1.5 Pro等它负责“理解外部信息”、“做出决策”、“生成行动指令”、“生成响应”记忆模块Memory Module负责“存储智能体的历史信息”——包括“短期记忆Short-Term Memory”比如用户的最近几次对话历史、工具的最近几次执行结果和“长期记忆Long-Term Memory”比如用户的个人偏好、智能体的历史学习经验规划模块Planning Module负责“根据智能体的目标和外部环境的信息规划行动步骤”——包括“高层次的目标分解Goal Decomposition”比如把“帮我安排一下明天去北京出差的行程”这个高层次的目标分解成“查询航班”、“查询天气”、“预订机票”、“预订酒店”、“规划行程安排”、“生成行程单”这些低层次的子目标和“低层次的行动规划Action Planning”比如把“查询航班”这个低层次的子目标分解成“调用航班查询API输入参数出发地上海虹桥、目的地北京大兴、日期明天、舱位商务舱”这个具体的行动工具使用模块Tool Use Module也就是我们今天讲的Tool Use能力——它负责“根据规划好的行动步骤选择合适的工具、提取工具的输入参数、调用工具的执行接口、获取工具的执行结果、根据工具的执行结果调整行动”。为了更清晰地展示AI Agent的四大核心组件以及Tool Use模块在其中的位置我们可以用一个Mermaid架构图来表示渲染错误:Mermaid 渲染失败: Parse error on line 10: ...orld]:::env end:::env subgraph ----------------------^ Expecting SEMI, NEWLINE, SPACE, EOF, subgraph, end, acc_title, acc_descr, acc_descr_multiline_value, AMP, COLON, STYLE, LINKSTYLE, CLASSDEF, CLASS, CLICK, DOWN, DEFAULT, NUM, COMMA, NODE_STRING, BRKT, MINUS, MULT, UNICODE_TEXT, direction_tb, direction_bt, direction_rl, direction_lr, direction_td, got STYLE_SEPARATOR3.3.3.3 Tool Use与AI Agent的区别虽然Tool Use是AI Agent的一个核心能力和必要不充分条件但它们之间还是有一些本质的区别的概念的层次不同Tool Use是一个“能力层次的概念”——它关注的是“智能体如何使用工具”而AI Agent是一个“实体层次的概念”——它关注的是“一个自主的、持续运行的实体如何感知、决策、行动、学习”核心要素组成不同Tool Use的核心要素组成是“感知-理解-规划-执行-反馈-迭代”的闭环但它通常不包含“长期记忆能力”、“自主的目标设定能力”、“持续运行的能力”而AI Agent的核心要素组成是“核心大脑记忆模块规划模块工具使用模块”它包含了“长期记忆能力”、“自主的目标设定能力”、“持续运行的能力”自主性的程度不同Tool Use的自主性通常是“任务级的自主性”——也就是说用户需要给智能体一个“明确的任务请求”智能体才能自主地完成这个任务而AI Agent的自主性通常是“目标级的自主性”甚至是“元级的自主性Meta-Autonomy”——也就是说用户只需要给智能体一个“高层次的、模糊的目标”比如“帮我管理我的财务”智能体就可以自主地设定子目标、自主地规划行动步骤、自主地使用工具、自主地学习和优化甚至可以自主地调整自己的目标持续运行的能力不同Tool Use通常是“单次任务运行的”——也就是说智能体完成一个任务之后就会停止运行而AI Agent通常是“持续运行的”——也就是说智能体会一直运行在后台不断地感知外部环境的变化不断地做出决策不断地执行行动不断地学习和优化学习的能力不同Tool Use通常“不具备自主学习的能力”——也就是说它的工具使用能力是由大语言模型的训练数据决定的它不会根据自己的历史经验来学习和优化自己的工具使用能力而AI Agent通常“具备自主学习的能力”——也就是说它可以根据自己的历史经验存储在长期记忆模块中来学习和优化自己的工具使用能力、规划能力、决策能力等。为了更清晰地展示Tool Use与AI Agent之间的区别我们也可以用一个Markdown表格来对比它们的核心属性核心属性Tool Use工具使用AI Agent人工智能代理概念的层次能力层次的概念实体层次的概念核心要素组成感知-理解-规划-执行-反馈-迭代的闭环通常不包含长期记忆、自主目标设定、持续运行核心大脑记忆模块短期长期规划模块目标分解行动规划工具使用模块自主性的程度任务级的自主性需要用户给出明确的任务请求目标级