作者和GPT-4绘制的图像,描绘了一个处于推理和工具调用交汇点的AI代理程序
介绍:代理智能的兴起今天,新的图书馆和低代码平台使得构建AI代理,也称为数字工作者,比以往任何时候都更加容易。工具调用是让生成式AI模型具备“代理”性质的主要因素之一,通过扩展其能力超越对话任务。通过执行这些工具(函数),代理可以为您执行任务,并解决复杂且多步骤的问题,这些问题需要强大的决策能力和与各种外部数据源的交互。
这篇文章聚焦于通过工具调用来表达推理的方式,探讨了工具使用中的一些挑战,介绍了评估工具调用能力的常见方法,并提供了不同模型和代理如何与工具交互的示例。
解决问题时的推理表达成功的代理人的核心在于两种关键的推理方式:基于评估和规划的推理 和 利用工具进行推理。
- 通过评估和规划来推理 涉及到代理能够有效地通过反复计划,评估进度并相应调整,直到任务完成。技术如Chain-of-Thought(CoT)、ReAct 和Prompt 分解都是为了提高模型的战略推理能力而设计的模式,通过将任务分解,从而正确解决这些问题。这种推理更侧重于宏观层面,通过逐步推进并考虑每个阶段的结果,确保任务正确完成。
- 使用工具进行推理 涉及到代理能够有效地与其环境互动,决定调用哪些工具以及如何调用它们。这些工具使代理能够检索数据、执行代码、调用API等。这种推理类型的关键在于正确执行工具调用,而不是对调用结果进行反思。
尽管这两种推理表达都很重要,但它们并不总是需要结合使用来创建强大的解决方案。例如,OpenAI的新o1模型在评估和计划推理方面表现出色,因为它是在使用思维链进行推理的训练下发展的。这大大提升了它应对各种基准测试中复杂挑战的能力。例如,o1模型在涵盖物理、生物和化学的GPQA基准测试中,准确性超过了博士水平,并在Codeforces竞赛中得分位于第86到第93百分位之间。虽然o1的推理能力可以用来生成基于工具描述的建议文本,但它目前还没有明确的工具调用能力(至少目前还没有)。
相比之下,许多模型专门针对通过工具使用进行推理进行了微调,使它们能够非常有效地生成功能调用,并与API进行交互。这些模型专注于在正确的时间以正确的格式调用合适的工具,但通常不会像O1模型那样彻底评估自己的结果。伯克利功能调用排行榜(BFCL)是对比不同模型在功能调用任务上表现的一个很好的资源。它还提供了一个评估套件来评估你自己微调的模型的表现在各种具有挑战性的工具调用任务上的表现。事实上,最新的数据集BFCL v3 刚刚发布,并且现在包括了多步骤、多回合的功能调用,进一步提高了基于工具推理任务的标准要求。
这两种推理方法各自都很强大,而当它们结合使用时,有可能创造出能够有效地分解复杂任务并自主地与环境互动的智能代理。更多例子可以查看我们团队的ArXiv文章,点击链接查看:链接。
挑战在于处理工具调用过程中遇到的复杂代理行为构建稳健和可靠的代理需要克服许多不同的挑战。在解决复杂问题时,代理通常需要同时处理多个任务,包括规划、在适当时间使用正确的工具、正确格式化工具调用信息、记住之前步骤的输出结果、避免陷入重复循环以及遵循指南以防止系统被破解、提示注入等。
过多的需求很容易让单一代理难以招架,导致了一种趋势:用户看到的是一个代理,实际上在后台是由多个代理和提示协同工作。这种划分让任务可以被拆解,并分别完成。这使得任务可以被拆解并在后台由不同的模型和代理并行处理,每个模型和代理会专注于解决特定的任务部分。
这里正是那些具有出色工具调用能力的模型大显身手的地方。虽然工具调用是使生产性代理更有效的方法,但它也伴随着自身的挑战。代理需要理解可用的工具,从相似的选项中选出合适的工具,正确地格式化输入信息,按正确的顺序来调用工具,或将来自其他代理或人的反馈和指令整合进来。许多模型经过专门调整以处理工具调用,使它们能够精准选择合适的功能。
在对模型进行工具调用微调时,一些关键考虑因素如下:
- 选择合适的工具:模型需要理解可用工具之间的关系,在需要的情况下进行嵌套调用,并在存在其他类似工具时选择合适的工具。
- 处理结构挑战:尽管大多数模型使用JSON格式进行工具调用,也可以使用YAML或XML等其他格式。考虑模型是否需要支持多种格式的泛化,还是仅仅专注于单一格式。无论使用哪种格式,模型都需要为每次工具调用包含适当的参数,可能利用先前调用的结果进行后续调用。
- 确保数据集的多样性和稳健评估:所使用的数据集应当多样,涵盖多步骤、多轮次函数调用的复杂性。进行适当的评估以防止模型过拟合并避免基准污染。
随着工具使用在语言模型中的重要性日益增加,许多数据集陆续出现,以帮助评估和提升模型的工具使用能力。目前最受欢迎的两个基准测试是伯克利函数调用排行榜和Nexus函数调用基准测试,Meta用这两个基准测试来评估其Llama 3.1模型系列的性能。最近的一项研究《ToolACE》,展示了如何利用代理创建多样化的数据集,以进行模型工具使用的微调和评估工作。
让我们更仔细地看看每个标准。
-
伯克利函数调用排行榜(BFCL): BFCL 包含了 2,000 个跨多个编程语言的问题-函数-答案对。今天共有 3 个版本的 BFCL 数据集,每个版本都进行了优化以更好地反映现实世界的情况。例如,BFCL-V2,发布于 2024 年 8 月 19 日,包括用户贡献的样本,旨在解决因数据污染导致的评估难题。BFCL-V3 发布于 2024 年 9 月 19 日,增加了多轮次及多步骤工具调用的基准测试。这对于需要多次调用工具才能完成任务的代理应用来说至关重要。BFCL 上的模型评估指南可以在 GitHub 上找到:链接,最新的数据集可以在 HuggingFace 上获取:链接,当前的排行榜可以在这里访问:链接。伯克利团队还发布了 Gorilla Open-Functions 模型的不同版本,这些模型经过专门调整以执行函数调用任务。
-
Nexus 函数调用基准: 该基准用于评估模型在零样本函数调用和 API 使用方面的性能,涵盖单一、并行和嵌套工具调用三个主要类别。Nexusflow 发布了用于函数调用的 NexusRaven-V2 模型。Nexus 基准可以在 GitHub 上找到:链接,相应的排行榜可以在 HuggingFace 上找到:链接。
- ToolACE: ToolACE 论文 展示了一种创造性的方法,用于克服收集真实世界数据以进行函数调用的挑战。研究团队创建了一个智能管道,生成了一个包含超过 26,000 个不同 API 的合成数据集。该数据集包括单一、并行和嵌套工具调用的示例,以及非工具调用的互动,并支持单轮及多轮对话。团队发布了 Llama-3.1–8B-Instruct 的一个经过调整的版本,即 ToolACE-8B模型,用于处理这些复杂的工具调用相关任务。ToolACE 数据集的一部分可以在 HuggingFace 上找到:链接。
这些基准测试中的每一个都促进了我们通过工具调用表达模型推理的能力。这些基准测试和经过微调的模型反映了开发更专业化的模型来进行特定任务以及通过增加它们与现实世界互动的能力来提升大型语言模型(LLM)功能的趋势。
调用工具的例子如果你对探索工具调用的实际操作感兴趣,这里有一些示例供你开始,这些示例按照易用性排序,从简单的内置工具到微调后的模型,以及能够调用工具的代理。
Level 1 — ChatGPT :开始的最好地方,并且无需自己定义任何工具即可实时看到工具调用的效果,是通过ChatGPT。在这里,你可以通过聊天界面调用GPT-4o来浏览网络。例如,如果你问“本周最新的AI新闻是什么?”ChatGPT-4o会搜索网络并根据找到的信息回复。不过,新的o1模型目前还不支持工具调用,无法进行网络搜索。
作者供图 9/30
虽然这项内置的网络搜索功能很方便,但在大多数情况下,您还需要定义可以无缝集成到您自己的模型工作流程和应用程序中的自定义工具。这将我们带到了更复杂的层次。
第二级 — 使用具备调用工具能力的模型并定义自定义工具功能
这个级别涉及使用具有工具调用能力的模型来评估模型选择和使用其工具的有效性。需要注意的是,当模型被训练进行工具调用时,它只会生成用于工具调用的文本或代码,而不会自行执行代码。外部需要有其他实体来调用该工具,正是在这个生成与执行结合的点上,我们从语言模型的能力过渡到代理系统。
为了了解模型如何表达工具调用,我们可以转向Databricks Playground。例如,我们可以选择Llama 3.1 405B模型,并允许它使用get_distance_between_locations和get_current_weather这两个工具。当用户消息为“我将从洛杉矶前往纽约,洛杉矶和纽约之间的距离是多少?纽约现在的天气怎么样?我想在到达时做好准备”时,模型会根据需要选择合适的工具并提供相应的参数,以便更好地回答用户的问题。
作者于2024年10月2日制作的图片,展示使用Databricks Playground调用示例工具的功能。
在这个例子中,模型提到了两个工具调用。因为模型不能实际执行这些工具,用户需要输入一些示例结果来假装工具的输出,比如,输入“2500”来代表距离,“68”来代表天气。模型会用这些模拟的结果来回应用户。
使用Databricks Playground这种方法可以观察模型如何使用自定义工具,并且这在你将函数定义实现在具备工具调用能力的应用程序或代理之前是一种很好的测试方法。
在Databricks Playground之外的环境中,我们可以通过直接使用代码观察和评估HuggingFace等平台上的不同模型如何使用工具。例如,我们可以从HuggingFace加载不同的模型,如Llama 3.2–3B-Instruct、ToolACE-8B、NexusRaven-V2–13B等,提供相同的系统提示、工具和用户消息,然后观察并比较每个模型的工具调用结果。这有助于理解不同模型在使用自定义工具方面的能力,并从而帮助您选择最适合您应用的工具调用模型。
这里有个例子,展示了Llama-3.2–3B-Instruct生成的一个工具调用,它是基于以下工具定义和用户消息内容。对于其他模型,也可以用同样的步骤来对比生成的工具调用。
import torch
from transformers import pipeline
function_definitions = """[
{
"name": "search_google",
"description": "对给定的查询执行Google搜索,并返回最相关的搜索结果。",
"parameters": {
"type": "dict",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "用于Google搜索的查询内容。"
},
"num_results": {
"type": "integer",
"description": "要返回的搜索结果数量。",
"default": 10
}
}
}
},
{
"name": "send_email",
"description": "向指定的收件人发送邮件。",
"parameters": {
"type": "dict",
"required": [
"recipient_email",
"subject",
"message"
],
"properties": {
"recipient_email": {
"type": "string",
"description": "收件人的电子邮件地址。"
},
"subject": {
"type": "string",
"description": "邮件的主题。"
},
"message": {
"type": "string",
"description": "邮件正文。"
}
}
}
}
]
"""
# 这是Meta建议的系统提示信息
system_prompt = """您是一位函数编写的专家。您会得到一个问题和一组可能的函数。
根据问题,您需要调用一个或多个函数以达成目的。
如果这些函数都不合适,请明确指出。如果问题中缺少必需的参数,请指明。您只需在函数调用部分返回函数调用。
如果您决定调用任何一个函数,您必须按照[func_name1(params_name1='参数值1', params_name2='参数值2'...), func_name2('参数')]\n格式来输出。
您不应在响应中包含任何额外文本。\n\n
以下是可用的函数列表(以JSON格式提供):\n\n{functions}\n""".format(functions=function_definitions)
作者提供的图片,展示了Llama 3.2–3B-Instruct生成工具的输出示例。
从这里我们可以进入Level 3这里,在这里我们定义那些会执行由语言模型生成的工具调用请求的Agents。
第三级代理(调用或执行LLM工具): 代理通常通过规划和执行以及工具调用来进行推理,使它们成为基于AI应用程序中越来越重要的一部分。使用LangGraph、AutoGen、Semantic Kernel或LlamaIndex等库,您可以快速创建一个使用GPT-4o或Llama 3.1-405B等模型的代理,这些模型支持与用户对话以及工具执行。
看看这些指南中一些激动人心的代理实例。
- LangGraph: 本地RAG代理与Llama 3
- AutoGen: 处理需要网络信息的任务
- Semantic Kernel: Semantic Kernel中代理入门指南
- LlamaIndex: LlamaIndex代理使用指南
代理系统的未来将由拥有强大推理能力的模型驱动,使它们能够更有效地与环境互动。随着该领域的发展,我预计我们还将看到更多小型专业模型的出现,专注于特定任务,例如工具调用和计划。
在构建代理时,考虑到当前模型规模的限制是很重要的。例如,Llama 3.1-8B 模型在需要同时进行对话和调用工具的任务中表现不可靠。相反,建议使用参数数量超过70B的更大模型来处理这类任务。这和其他关于小型语言模型微调的新兴研究一起表明,较小的模型最适合专门的工具调用任务,而较大的模型则更适合进行复杂推理。通过结合这些能力,我们可以构建出越来越有效的代理,从而提供无缝的用户体验,让人们在工作和个人活动中都能利用这些推理能力。
想进一步讨论或合作吗?在我的_ LinkedIn 上联系我一下!
共同学习,写下你的评论
评论加载中...
作者其他优质文章