新智元报道
编辑:英智
【新智元导读】AI智能体正悄然成为我们工作和生活中的得力助手。从自动化任务到复杂规划,它们不仅能帮我们做市场调研、准备面试,还能完成复杂的决策任务。本文深度探讨智能体的概念、工作原理、工具使用及挑战。
许多人认为「智能体」是AI发展的终极目标。
智能体在处理复杂任务时,展现出了巨大潜力。从协助搭建网站、管理客户账户,到开展市场调研、自动录入数据,智能体的应用场景日益广泛。
斯坦福计算机科学家Chip Huyen,对这一热门领域进行了深入研究,系统阐释了智能体的概念,分析了智能体在工具使用、任务规划、反思纠错等方面的技术要点,探讨了智能体可能出现的失败模式与相应的评估方法。
智能体概述
智能体在众多工程领域应用广泛,常见类型包括软件智能体、对话智能体和强化学习智能体等。
那么,智能体究竟是什么?简单来讲,智能体指的是能够感知环境,并据此做出行动的事物。
《人工智能:一种现代方法》将其定义为:借助传感器感知周遭环境,通过执行器对环境采取行动的事物。
这说明,智能体的特性取决于它所处的环境,以及自身所能执行的行动。
智能体的工作环境由其应用场景决定。例如,为游戏而开发的智能体,游戏便是它的环境;用于从网上抓取文档的智能体,互联网就是它的环境;自动驾驶汽车智能体的环境,则是道路系统及其周边区域。
图中呈现的是SWE-agent,这是一个基于GPT-4构建的智能体。它的工作环境是一台配备了终端和文件系统的计算机。它能执行的操作包括在代码仓库中导航、搜索文件、查看与编辑文件。
智能体的核心目标是完成用户指定任务。在智能体架构里,AI充当「大脑」负责解析任务、规划执行步骤,并判断任务是否达成。
以用于处理表格数据的RAG系统为例,这个智能体具备三项基本操作:生成回应、生成SQL查询、执行SQL查询。
当收到「预测未来三个月销售收入」的查询时,智能体可能会按以下步骤运作:
规划任务执行路径,确定预测未来销售额需获取过去五年销售数据。
调用「生成SQL查询」功能,生成用于获取过去五年销售数据的查询语句。
调用「执行SQL查询」功能,执行上述查询。
分析查询结果对销售预测的可用性。若因数据缺失等情况,认为无法据此做出可靠预测,确定还需获取过去营销活动的数据。
再次调用「生成SQL查询」功能,生成获取过去营销活动数据的查询语句。
调用「执行SQL查询」功能,获取相关数据。
确认新获取的数据足以支撑预测后,生成销售预测。
判断任务成功完成。
智能体通常需要更强大的模型,主要基于两方面原因:
复合错误:智能体完成任务往往涉及多个步骤。随着步骤增加,整体准确率会大幅降低。例如,若模型每步的准确率为95%,执行10步后,准确率降至60%;执行100步,准确率仅剩0.6%。
风险更高:智能体具备使用工具的能力,这使其能够执行更具影响力的任务。但一旦任务失败,造成的后果往往更为严重。
执行多步骤任务既耗时又费钱,不少人抱怨智能体很快就会耗尽API额度。不过,要是智能体能自主运行,节省人力时间成本,那么这样的投入还是值得的。
在特定环境里,智能体能否成功,取决于其可用的工具,以及AI规划器的能力。下面,我们先了解模型可使用的各类工具,再分析AI的规划能力。
工具的分类与作用
通常情况下,模型功能较为单一,例如LLM仅能生成文本,图像生成模型仅能生成图像。但借助外部工具,智能体的能力将得到大幅提升。
工具能帮助智能体更好地感知环境并做出行动。智能体所处环境各异,其可用工具也多种多样,包括知识增强(构建上下文)工具、能力扩展工具,以及能够改变环境的工具。
知识增强
有一类重要工具能帮助智能体扩充知识,为模型提供相关上下文,如文本检索器、图像检索器、SQL执行器,还有内部搜索工具、库存API、Slack检索工具和邮件阅读器等。
这类工具能让模型获取公司内部信息与流程,也能获取互联网公共信息。
网络浏览功能,是人们最早期望集成到ChatGPT的功能之一。若模型没有网络浏览功能,就无法提供天气、新闻、股价、航班状态等信息。借助浏览器、搜索API、新闻API、GitHub API、社交媒体API等联网工具,智能体能够参考最新信息,给出更可靠的回答,避免胡编乱造。
能力扩展
为提升模型性能,还可引入弥补其固有缺陷的工具。
例如,AI模型在数学运算方面一直表现欠佳。若询问「199,999除以292等于多少」,模型大概率无法给出准确答案。但要是能让模型调用计算器,计算就易如反掌。
显然,相比花费大量精力训练模型做算术,为其提供工具更为高效,也更节省资源。除计算器外,还有许多简单工具能显著增强模型能力,像日历、时区转换器,以及单位转换器(如将磅换算为千克)等。
代码解释器是一种较为复杂但功能强大的工具。无需耗费精力训练模型理解代码,为其配备一个代码解释器即可。利用该工具,模型可执行代码、返回结果,并分析代码错误。凭借此功能,智能体可作为编码助手、数据分析师,甚至研究助手,编写代码开展实验和撰写报告。
不过,需要注意的是,自动执行代码会面临代码注入攻击的风险,务必采取恰当的安全措施。
工具可以把仅支持文本或仅支持图像的模型转化为多模态模型。例如,ChatGPT能生成文本和图像,是因为它使用了DALL-E。
智能体可以利用代码解释器生成图表,使用LaTex编译器渲染数学公式,或通过浏览器依据HTML代码显示网页。仅能处理文本的模型,可以借助图像工具处理图像,使用转录工具处理音频,以及利用OCR工具读取PDF文件。
与单纯使用提示词或微调相比,使用工具能够极大地提升模型性能。
研究表明,一个由GPT-4驱动且配备13种工具的智能体,在多个基准测试中的表现超越了仅使用GPT-4的情况。这些工具涵盖知识检索工具、查询生成器、图像描述器、文本检测器和必应搜索。
写入操作
目前我们提及了只读操作,而工具还可执行写操作,对数据源进行修改。例如,SQL执行器既能检索数据表,也能修改或删除表;邮件API既可以阅读邮件,也能够回复邮件;银行API既可以查询余额,也能发起转账。
写操作可为系统带来更多功能。以客户沟通流程为例,其可实现全自动化操作:研究潜在客户、查找联系方式、起草邮件、发送首封邮件、查看回复、跟进、提取订单,并用新订单更新数据库。
不过,赋予 AI 自动改变我们生活的能力会引发人们的担忧。正如不能让实习生随意删除生产数据库,也绝不能让不可靠的 AI 发起银行转账,必须确保系统得到保护,避免受到不良行为的操控。
合适的工具能极大地提升人类的生产力。试想一下,如果没有Excel该如何做生意,或者没有起重机如何建造摩天大楼呢?
许多模型供应商已为模型提供工具支持,这通常被称为函数调用。未来,预计大多数模型都会支持包含多种工具的函数调用。
规划任务
基础模型代理的核心在于处理用户提供的任务,任务由目标和约束条件来定义。例如,安排一次从旧金山前往印度、时长为两周且预算5000美元的旅行,此为一个任务,其中两周的旅行是目标,预算则为限制条件。
对于复杂任务,需要进行规划。规划结果如同路线图,它清晰地呈现完成任务的具体步骤。为实现有效规划,模型通常要理解任务,考虑完成任务的不同方法,进而选出最可行的方案。
对于一项任务,存在多种解决方法,但并非所有方法都能成功。即便方法正确,其效率也有差异。例如对于问题:没有收入且融资至少10亿美元的公司有多少家?有以下两种解决方法:
先找出所有没有收入的公司,然后从中筛选出融资至少10亿美元的公司。
先找出所有融资至少10亿美元的公司,再从中筛选出没有收入的公司。
显然,第二种方法的效率更高,因为没有收入的公司数量比融资至少10亿美元的公司数量多得多。
可以在同一个提示中让模型同时进行规划和执行操作。例如,给模型一个提示,使其像使用思维链提示那样逐步思考,并直接在该提示内执行这些步骤。
倘若模型生成了一个长达1,000步的计划,却无法达成目标呢?若缺乏监督,智能体可能会花费数小时来运行这些步骤,进而浪费时间和API调用费用。
为避免做无用功,应将规划和执行分开。
首先让智能体制订一个计划,待计划通过验证后再执行。可以使用 AI 判断器来评估该计划是否合理,以及如何改进。若生成的计划欠佳,就要求规划器重新制订;若计划不错,则开始执行。
现在,系统包含三个组件,分别是生成计划、验证和执行计划。若将每个组件都视为一个智能体,就形成了一个多智能体系统。
为提高效率,可并行生成多个计划,而非依次逐个生成,之后让评估器从中挑选最可靠的计划。不过这样做需要权衡延迟和成本,因为同时生成多个计划会带来额外开销。
为明确任务的意图,一般会使用意图分类器辅助智能体规划。明确意图后,智能体可准确选用工具。比如在客户支持场景中,用户询问账单问题时,智能体应使用工具获取用户近期付款记录;用户询问密码重置问题时,智能体需使用文档检索工具。
截至目前,我们假设智能体自动完成生成、验证和执行计划这三个阶段。实际上,人类可参与其中任何一个阶段,以协助推进流程并降低风险。
人类专家可以为计划中的部分步骤提供支持、进行验证或执行操作。
若计划涉及更新数据库、合并代码等高风险操作,系统在执行前,可先征求人类的批准,或直接由人类执行操作。为此,需要明确定义智能体各项操作的自动化程度。
总之,解决任务通常有以下流程:
计划生成:提出能完成任务的计划,计划是一系列可操作的步骤,此过程也叫任务分解。
反思与纠错:评估已生成的计划,若不合理,重新制定。
执行:按计划行动,一般需要调用特定函数。
再反思纠错:收到行动结果后,评估结果,确认目标是否达成,若未完成,重新规划。
基础模型的规划能力究竟如何,还是个未解之谜。很多研究人员认为基础模型(至少是建立在自回归语言模型之上的模型)无法实现规划。
2023年,Meta的首席AI科学家Yann LeCun明确指出,自回归LLM无法做规划。
虽说很多传闻都认为LLM的规划能力欠佳,但这究竟是由于未掌握LLM的正确使用方法,还是LLM本身无法规划,目前并不清楚。
另一种可能是,LLM规划能力差,是因为没有被赋予规划所需的工具。要进行规划,不仅需要知晓可行的行动,还得了解每个行动可能产生的结果。
简单举例,若你要去爬山,可能的行动有向右转、向左转、转身或直走。若向右转会使你掉下悬崖,你很可能就不会考虑此动作。从技术层面讲,一个行动会使你从一种状态转变为另一种状态,决定是否采取某个行动的关键在于知晓行动后的最终状态。
这意味着,仅靠像思维链提示法那样让模型生成一系列行动,是无法完成规划任务的。研究指出,由于LLM包含大量世界信息,它有能力预测每个行动的结果,可利用这些预测结果生成连贯计划。
即便模型无法独立完成规划,它也能在规划过程中发挥作用。或许给LLM配备搜索工具和状态追踪系统,就能帮助它做好规划。
生成规划提示词
通过提示词工程,可轻松将模型变成计划生成器。例如,若要创建一个帮助客户了解Kitty Vogue产品的智能体,会给该智能体开放三个外部工具权限:按价格检索产品、检索热门产品、检索产品信息。
以下是一个生成计划的提示词示例。
关于这个例子,需注意以下两点:
这里使用的计划格式(一个由智能体推断参数的函数列表)只是构建智能体控制流程的一种方式。
「generate_query」函数接收任务的当前历史记录和最新的工具输出,生成一个查询,然后输入到响应生成器中。每一步中的工具输出都会添加到任务的历史记录里。
通常,用于改善模型性能的技术可用来增强模型的规划能力。
函数调用
许多模型供应商为其模型提供工具使用功能,实际上是将模型转变为智能体。
工具本质上是函数,因此调用工具通常也被称为函数调用。一般而言,函数调用的流程如下:
建立工具列表。列出所有可能让模型使用的工具,每个工具都需说明执行入口(如函数名)、参数,并提供文档介绍。
确定智能体在查询时可使用哪些工具。
函数调用如图所示。以下是用伪代码编写的,以便涵盖多种API。
规划粒度
计划是完成任务步骤的路线图,具有不同粒度。例如,对于年度计划,季度计划比月度计划更宏观,而月度计划又比周计划更宏观。
计划和执行需要权衡。详细计划不易制定,但执行较易;宏观计划易生成,执行却较难。对此,可采用分层规划:先让规划器生成宏观计划(如季度计划),再针对各季度用规划器生成月度计划。
复杂计划
目前所有示例的执行方式都属于顺序式,即计划中的下一个行动要在前一个行动完成后才会执行。然而,顺序执行只是多种控制流中的一种,此外还有并行、条件语句以及for循环等。
传统软件工程的控制流条件较为精确。但对于由AI驱动的智能体,其控制流由AI模型决定,不仅生成的难度更大,将其转化为可执行指令的难度也更高。
在评估智能体框架时,需要关注它所支持的类型。例如,若系统需要同时浏览十个网站,此操作能否达成呢?并行操作可以显著减少用户所感受到的延迟。
反思与纠错
再好的计划,也需要不断评估和调整,以最大程度提升成功的概率。对于智能体的运行,反思虽不是必需的,但却是其成功的关键因素。
在任务执行过程中,以下环节进行反思会很有帮助:
收到用户查询时,评估请求是否可行。
初步生成计划后,考量该计划是否合理。
每完成一个执行步骤,检查执行方向是否正确。
整个计划执行完毕后,确认任务是否完成。
反思和纠错是两种不同的机制,二者相辅相成。反思可提供见解,有助于找出需纠正的错误。反思有两种实现方式:可由使用自我批评提示的同一智能体完成,也可通过独立组件(如专门的评分器模型)来实现。
这种方法最初由ReAct提出,如今已成为智能体中的常见模式。在每个步骤中,智能体都要解释其思维过程(即做计划),随后采取行动,再分析行动产生的结果(即反思),如此循环,直至任务完成。
在多智能体环境下,可实现反思机制:一个智能体负责规划并执行动作,另一个智能体在每一步或几步后评估结果。若该智能体的响应未能完成任务,可引导其反思失败的原因及改进方法。基于这些反思,智能体能生成新的计划。
这是Reflexion(Shinn 等人,2023年)所采用的方法。在该框架中,反思过程被拆分为两个模块:评估结果的评估模块和分析问题所在的自我反思模块。图中展示了Reflexion智能体的实际应用示例。
相比生成计划,反思的实现相对容易,且能带来意外的性能提升。
然而,此方法存在延迟和成本问题。思考、观察,有时甚至是具体行动的生成,都可能需要大量的tokens,这既会增加成本,又会让用户明显感受到延迟,尤其对于有许多中间步骤的任务。
工具选择策略
工具对于任务的成功通常至关重要,所以在选择工具时必须谨慎。为智能体挑选工具,需要考虑任务、所处环境以及驱动它的AI模型。目前,尚无一种绝对可靠的方法能够确保选出最佳的工具组合。
工具数量的增加会使智能体的能力增强,但要高效使用这些工具也会变得更加困难,这与人类掌握大量工具时所面临的困难情况类似。
和构建 AI 应用程序时的诸多决策一样,选择工具需要进行实验和分析。以下方法有助于你做出决策:
比较智能体使用不同工具组合时的性能表现。
开展消融研究,观察从工具清单中移除某一工具后,智能体的性能会下降多少。若移除该工具不影响性能,可将其舍弃。
找出智能体经常出错的工具。若某个工具难以被智能体学会使用,即便给出大量提示或进行微调也不起作用,就应更换工具。
绘制工具调用分布图,以掌握各工具的使用频率高低。
如图所示,在Chameleon(Lu et al.,2023 年)的研究中,GPT-4 和 ChatGPT 的工具使用模式存在差异。该研究验证了以下两点:
不同任务对工具的需求存在差异。例如,科学问答任务ScienceQA对知识检索工具的依赖程度高于表格数学问题求解任务TabMWP。
不同模型偏好使用不同的工具。ChatGPT更常使用图像描述工具,而GPT-4更倾向于使用知识检索工具。
人类提升生产力不仅依靠现有的工具,还会使用简单工具制造出更强大的工具。那么,AI能否创造新工具呢?
Chameleon(Lu et al.,2023 年)开展了一项关于工具转换的研究。下图展示了一个工具转换的实例。若两种工具经常被协同使用,就可以将它们整合为一个功能更强大的工具。倘若智能体知晓这些信息,便能对初始工具进行组合,进而持续构建出更为复杂的工具。
智能体在特定环境中的成功与否取决于工具库和规划能力,这两方面任一方面出现问题都可能致使任务失败。
接下来将探讨智能体的失败情况及其评估方法。
失败模式与评估
评估的目的在于找出失败之处。智能体执行的任务越复杂,可能出现失败的环节就越多。除常见的失败模式外,智能体还会因规划、工具执行和效率等方面的问题而出现一些特有的失败情形。
要评估一个智能体,首先需确定其存在哪些失败模式,然后统计每种模式出现的频率。
规划失败
规划并非易事,会以多种方式失败。其中最常见的规划失败情况是工具使用出现问题。
智能体生成的计划可能出现以下错误:
使用无效工具:例如,生成的计划包含「bing_search」,但工具清单中无此工具。
工具有效但参数无效:例如,调用函数时传入两个参数,而实际上该函数仅需一个名为「lbs」的参数。
工具有效但参数值错误:例如,调用函数时传入参数「lbs」,但使用了错误的数值100,正确数值应为120。
另一种规划失败的情形,是规划方案未能完成任务,或者虽完成任务却未遵守限定条件。
例如,假设让模型规划一次从旧金山到印度、为期两周且预算为5000美元的旅行。智能体可能会规划出从旧金山到越南的旅行,或者规划出从旧金山到印度的两周旅行,但费用远超预算。
时间是一个常被忽视的限定条件。在很多时候,智能体完成任务所需时长并不重要,将任务交给它后,只需等待结果即可。然而在不少情况下,随着时间流逝,智能体的作用会大打折扣。比如让智能体准备一份资助提案,若过了截止日期才完成,该提案便失去了价值。
有一种有趣的规划失败情形,是由反思失误导致的。智能体在未完成任务的情况下,却坚信自己已经完成。例如,当你让智能体将50个人分配到30间酒店房间时,它可能只分配了40人,却仍然认为任务已经完成。
若要评估智能体在规划方面是否存在失败情况,一种可行的方法是创建一个规划数据集。该数据集中的每个示例都为一个元组,包含「任务」和「工具清单」两部分。
针对每项任务,让智能体生成K个计划,并计算以下指标:
所生成的全部计划中,有效计划的数量是多少?
针对特定任务,智能体需生成多少个计划才能得到一个有效计划?
全部工具调用中,有效调用的数量是多少?
无效工具的调用频率是多少?
调用有效工具时,使用无效参数的频率是多少?
调用有效工具时,使用错误参数值的频率是多少?
分析智能体的输出,明确智能体在哪些类型的任务上更易失败,以及模型在使用哪些工具时会频繁出错。
有些工具对于智能体来说可能较难使用。在这种情况下,可以尝试通过优化提示内容、多提供一些示例或进行微调等方式,提升智能体使用这些具有挑战性工具的能力。
若这些方法均不奏效,则可以考虑用更易于使用的工具将其替换。
工具选取失败
工具失败是指使用了正确工具,但工具输出结果错误。若智能体仅生成高层次计划,并通过翻译模块将每个计划中的动作转化为可执行命令,那么失败可能源于翻译错误。
工具失败的情况因工具而异,每个工具都需单独测试。
要检测是否因缺少工具而导致失败,需清楚应使用哪些工具。若智能体在特定领域频繁失败,很可能是由于缺少该领域所需的工具,这种情况下,可与人类领域专家合作,观察他们在该领域使用的工具。
效率评估
智能体可能会生成有效的任务完成计划,并使用正确的工具,但效率或许不高。
若要评估智能体的效率,可关注以下指标:
智能体完成任务平均所需的步骤数?
智能体完成任务的平均成本是多少?
每个动作通常耗费的时长是多少?是否存在特别耗时或成本高的动作?
你可以将这些指标与基准进行比较,此基准可以是另一个智能体,也可以是人工操作员。在 对比AI智能体和人类操作员时,要记住人类和AI的工作方式差异很大,对人类高效的方法,对AI可能并不高效,反之亦然。
在AI驱动的智能体中,模型如同大脑,会借助工具和环境反馈,规划出完成任务的最佳方式,工具的使用极大地提升了模型的能力。
尽管智能体在工具使用、规划、反思纠错等方面面临诸多挑战,如规划失败、工具选取失败和效率不高,但这也为我们提供了广阔的研究和探索空间。
相信随着技术的进一步突破和创新,智能体将不断优化完善,充满无限可能。让我们怀着期待与好奇,共同见证智能体开启更加智能、高效的未来之旅!
参考资料:
https://huyenchip.com//2025/01/07/agents.html
https://x.com/chipro/status/1876681640505901266