AI 文摘

TulipAgent:一种利用增删改查让LLM使用大量工具解决复杂任务的新框架!





作者: PaperAgent 来源: PaperAgent

LLM在工具使用方面仍存在限制,如上下文窗口限制和成本问题:

*成本问题 :工具描述会占用LLM的上下文窗口,增加推理时间和成本。

*注意力和工具限制 :从大量工具中选择合适工具对LLM来说是一个挑战,类似于“大海捞针”。

*静态性问题 :工具使用是静态的,仅限于预先定义的工具,限制了自主智能体的适应性和应用范围。

使用郁金香智能体架构解决一个简单数学问题的示例应用。

Tulip Agent(郁金香智能体)架构 :允许LLM通过具有创建、读取、更新和删除 (CRUD)权限的工具库来解决任务,工作流程:

  • 初始化工具库:自动提取工具信息并创建嵌入向量。

  • 接收用户提示:LLM分解任务并搜索工具库以找到合适的工具。

  • 工具搜索:基于子任务描述,使用语义搜索找到最相关的工具。

  • 工具调用:LLM生成工具调用,工具执行器执行工具并返回结果。

  • 结果反馈:LLM根据工具返回的结果进行进一步操作或响应用户。

郁金香智能体架构及其信息流的概览: 大语言模型、工具库、工具本身、搜索模块、功能执行模块以及工具自省模块。

####问题阐述

  • 郁金香智能体被设计为一个拥有大量工具集的LLM支持的自主智能体。

  • 当接收到自然语言查询时,代理需要将任务分解为可使用现有工具解决的子任务序列。

####工具和工具库

  • 工具定义为可执行的函数,具有特定目的并返回结果或状态消息。

  • 通过代码内省自动提取工具信息,生成嵌入向量并存储在工具库中。

  • 工具库可以是任何支持搜索的数据库,这里使用向量存储来实现语义搜索。

####任务分解和工具检索

  • 郁金香智能体接收自然语言输入,使用LLM将任务分解为更细粒度的子任务。

  • 通过创建子任务的嵌入向量并匹配工具描述的嵌入向量,来搜索适合的工具。

  • 支持递归分解和搜索工具,如果找不到合适的工具,则进一步细化子任务。

####工具使用

  • 基于子任务和识别的工具,LLM生成工具调用,由工具执行器执行并返回结果。

  • LLM可以根据前一个调用的返回值来生成后续的工具调用。

####自主工具管理

  • 提供了AutoTulipAgent变体,具备创建、读取、更新和删除工具库中工具的能力。

  • 使用LLM的代码生成能力来创建或更新工具,确保新工具的有效性,并动态加载到工具库中。

####架构变体

  • 郁金香智能体架构可以与其他LLMznt范式结合使用,例如使用CoT(Chain of Thought)提示来指导LLM按固定方式执行任务。

在数学任务上的评估和多项消融实验得出了一些结论:

    1. 工具对于解决复杂任务至关重要;
    1. 使用工具库显著降低了成本;
    1. 任务分解改善了工具的使用;
    1. 语言模型的性能影响智能体设计的适用性;
    1. 嵌入模型的性能(在当前OpenAI模型的高水平上)对工具检索影响很小;
    1. 更好的规划允许更精确地搜索工具;
    1. 郁金香智能体架构适合于不断创建工具和即时构建工具库。

在几个数学任务上,几个Agent在成本(以美元计)、工具使用精确度、工具使用召回率以及结果正确性方面的表现。设置:语言模型 gpt-3.5-turbo-0125,嵌入模型 text-embedding-3-large,top_k = 5,运行5次。

CotTulipAgent 在模拟环境中控制一个辅助机器人,协助两个人类(穿红色衣服的 Felix 和穿橙色衣服的 Daniel)在具有不同饮品选择的桌面场景中完成各种任务。

附录:

Agent的Prompt:

Tool的定义:

NaiveToolAgent关于“What is 45342 * 23487 + 32478?”的日志


1 INFO:root:Query: What is 45342 * 23487 + 32478?
2 INFO:base_agent:Usage for chatcmpl-94zcjnURFRF2nyTMlcVzhWJmfjdTZ in tokens: 3960 prompt and 19 completion.
3 INFO:base_agent:Function multiply returned `1064947554` for arguments {'a': 45342, 'b': 23487}.
4 INFO:base_agent:Usage for chatcmpl-94zcliQksrQsOMn72GamhLxiJRqN3 in tokens: 3990 prompt and 21 completion.
5 INFO:base_agent:Function add returned `1064980032` for arguments {'a': 1064947554, 'b': 32478}.
6 INFO:base_agent:Usage for chatcmpl-94zcyDN3oBC8rh5hzFNZkn1iXakLJ in tokens: 4022 prompt and 25 completion.
7 base_res='The result of \\(45342 \\times 23487 + 32478\\) is \\(1064980032\\).'

CotTulipAgent关于“What is 45342 * 23487 + 32478?”的日志


1 INFO:root:Query: What is 45342 * 23487 + 32478?
2 INFO:tulip_agent:Usage for chatcmpl-94zjNuHaG36iH6FtEuE4po0gRhTG4 in tokens: 182 prompt and 25 completion.
3 INFO:root:actions_response_message=ChatCompletionMessage(content='1. Multiply 45342 by 23487.\n2. Add the result of
step 1 to 32478.', role='assistant', function_call=None, tool_calls=None)
4 INFO:tulip_agent:Usage for chatcmpl-94zjPPlK1ySBo6VZJLFMZhPyE0NJK in tokens: 234 prompt and 13 completion.
5 INFO:root:Tool search for: {'action_descriptions': ['multiply two numbers', 'add two numbers']}
6 INFO:root:Functions for `multiply two numbers`: [...]
7 INFO:root:Functions for `add two numbers`: [...]
8 INFO:tulip_agent:Usage for chatcmpl-94zjRk9IrLzy5QKpfNEs5bsrXCGvp in tokens: 413 prompt and 19 completion.
9 INFO:tulip_agent:Function multiply returned `1064947554` for arguments {'a': 45342, 'b': 23487}.
10 INFO:tulip_agent:Usage for chatcmpl-94zjTXb58ZHJiNYDugqpwpaeffzzB in tokens: 443 prompt and 21 completion.
11 INFO:tulip_agent:Function add returned `1064980032` for arguments {'a': 1064947554, 'b': 32478}.
12 INFO:tulip_agent:Usage for chatcmpl-94zjVrSx0sLQN9ZqoI8f4z6JW0eVx in tokens: 475 prompt and 25 completion.
13 tulip_res='The result of \\(45342 \\times 23487 + 32478\\) is \\(1064980032\\).'

Tulip Agent – Enabling LLM-Based Agents to Solve Tasks Using Large Tool Libraries
https://hri-eu.github.io/tulip_agent/
https://arxiv.org/pdf/2407.21778
https://github.com/HRI-EU/tulip_agent

推荐阅读

欢迎关注我的公众号“PaperAgent ”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的例子,不简单的方法,提升自己。

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具