-
成本问题:工具描述会占用LLM的上下文窗口,增加推理时间和成本。
-
注意力和工具限制:从大量工具中选择合适工具对LLM来说是一个挑战,类似于“大海捞针”。
-
静态性问题:工具使用是静态的,仅限于预先定义的工具,限制了自主智能体的适应性和应用范围。

Tulip Agent(郁金香智能体)架构:允许LLM通过具有创建、读取、更新和删除(CRUD)权限的工具库来解决任务,工作流程:
-
初始化工具库:自动提取工具信息并创建嵌入向量。
-
接收用户提示:LLM分解任务并搜索工具库以找到合适的工具。
-
工具搜索:基于子任务描述,使用语义搜索找到最相关的工具。
-
工具调用:LLM生成工具调用,工具执行器执行工具并返回结果。
-
结果反馈:LLM根据工具返回的结果进行进一步操作或响应用户。

问题阐述
-
郁金香智能体被设计为一个拥有大量工具集的LLM支持的自主智能体。
-
当接收到自然语言查询时,代理需要将任务分解为可使用现有工具解决的子任务序列。
工具和工具库
-
工具定义为可执行的函数,具有特定目的并返回结果或状态消息。
-
通过代码内省自动提取工具信息,生成嵌入向量并存储在工具库中。
-
工具库可以是任何支持搜索的数据库,这里使用向量存储来实现语义搜索。
任务分解和工具检索
-
郁金香智能体接收自然语言输入,使用LLM将任务分解为更细粒度的子任务。
-
通过创建子任务的嵌入向量并匹配工具描述的嵌入向量,来搜索适合的工具。
-
支持递归分解和搜索工具,如果找不到合适的工具,则进一步细化子任务。
工具使用
-
基于子任务和识别的工具,LLM生成工具调用,由工具执行器执行并返回结果。
-
LLM可以根据前一个调用的返回值来生成后续的工具调用。
自主工具管理
-
提供了AutoTulipAgent变体,具备创建、读取、更新和删除工具库中工具的能力。
-
使用LLM的代码生成能力来创建或更新工具,确保新工具的有效性,并动态加载到工具库中。
架构变体
-
郁金香智能体架构可以与其他LLMznt范式结合使用,例如使用CoT(Chain of Thought)提示来指导LLM按固定方式执行任务。

在数学任务上的评估和多项消融实验得出了一些结论:
-
1) 工具对于解决复杂任务至关重要;
-
2) 使用工具库显著降低了成本;
-
3) 任务分解改善了工具的使用;
-
4) 语言模型的性能影响智能体设计的适用性;
-
5) 嵌入模型的性能(在当前OpenAI模型的高水平上)对工具检索影响很小;
-
6) 更好的规划允许更精确地搜索工具;
-
7) 郁金香智能体架构适合于不断创建工具和即时构建工具库。


附录:


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 ofstep 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 Librarieshttps://hri-eu.github.io/tulip_agent/https://arxiv.org/pdf/2407.21778https://github.com/HRI-EU/tulip_agent


