跳转到主要内容

介绍自主工具调用(Agentic Tool Use)

通过自主工具调用解锁大模型的无限可能

Quentin avatar
作者:Quentin
超过 5 个月前更新

什么是自主工具调用?

现在,人们都在谈论AI工作流,有很多工具可以帮助我们实现AI工作流的编排,比如Dify, n8n, make.com。然而,用过这些编排工具的人可能都有感受,不仅编排工具本身就具有相当的学习成本,而且编排出来的工作流灵活性有限。

在现实生活中,我们每天所做的很多事情都并不是事先编排好的剧本。高度重复的流程确实适合通过固定模式来编排和处理,但对于具有变化的非重复性流程,这些固定模式的工作流灵活性显然不足。如果我们将一切都按照固定模式进行编排,这对于处理现实生活中复杂、变化多端的场景显得力不从心。

针对这一问题,ConsoleX推出了一种更具创新性的自主工具调用方式,它基于大语言模型的工具调用机制实现,允许用户创建一系列的单元工具(Unit Tools),每个工具只用来完成最基本的任务。这相当于给AI配备了一个工具库,并提供每种工具的使用说明书,让AI自主根据最终的任务目标,通过工具的横向及纵向组合来完成任务。

这样的动态工作流相对应于预先编排的工作流具有更大的灵活性和适应性,而不是被固定的模式所束缚。

效果演示

首先,我们创建两个函数,一个是获取汇率的,另一个是获取天气的。然后我们提出一个问题:“明天我要去曼谷,请帮我查一下当地的天气以及泰铢兑美元的汇率。",接着,我们在AI对话中附加这两个工具,并且向AI提出这个问题,AI会根据我们提出的问题自主利用这些工具去给出答案。

不同大模型的自主工具调用过程可能有所不同。首先我们向OpenAI的gpt-4o模型提问,它在给出回答之前首先同时调用了两个工具,然后综合获得的信息给出了最终答案。然后我们再来试试Claude-3.5-Sonnet是如何回答的。当我们把问题抛给它,它选择了链式调用,先调用了一个工具,再调用另一个工具,最后总结出回答。

我们可以看出:无论是平行工具调用还是链式工具调用,在ConsoleX上都可以轻松实现,理论上可以解锁大模型的无限可能。

注意事项:

  1. 并不是每个模型都支持工具的调用,在不支持工具调用的模型基础上附加工具可能会导致对话出错。

  2. 工具调用的效果与大模型的基础能力息息相关。建议使用 GPT-4o以及Claude-3.5-Sonnet 等较为先进、智能的模型来进行工具调用,以确保最佳效果。

如何在对话中使用工具?

ConsoleX 提供了两种不同的在对话中附加工具的方式:手动附加工具和设置自动调用工具。

手动附加工具指的是每次对话时,人工指定需要使用的工具。而自动调用工具则是将一些常用工具设置为自动调用,并在每次发起对话时都附加这些工具。

在使用手动添加工具的方式时,还可以开启强制调用的开关。在这种情况下,要求大模型必须调用当前选择并附加的工具之一。

在对话中附加了工具后,在向大模型提问时,ConsoleX将会利用AI模型本身的工具调用机制实现自主工具调用,包括平行工具调用和链式工具调用,来帮助用户解决问题。

使用预置工具

我们提供了一些开箱即用工具作为预置工具,方便用户在对话中使用。这些工具包括图片生成、网络搜索、论文搜索、提示语生成和优化等。带有Pro标签的预置工具仅开放给构建者计划的用户使用。我们今后还会不断丰富预置工具的种类,方便用户在对话中使用。

在使用预置工具时由于需要调用大模型或者使用第三方的付费服务(比如使用Flux Pro生成图片),因此可能会产生费用并消耗ConsoleX上的Credits余额,具体的费用标准可参见预置工具使用价格中的帮助。

创建自定义工具

在ConsoleX上创建自定义工具非常简单。只需打开工具界面,选择添加工具,接着输入工具的定义。这些定义是完全符合OpenAI工具定义标准的JSON格式。接下来,我们启用工具调用功能。如果不启用,AI只会返回调用工具的参数;如果启用,我们可以设定具体的函数调用方式。

设定调用方式时,可以选择GET或POST请求来调用工具函数,并设定工具函数的来源类型和工具函数的Webhook URL。

1. 可以自己实现并发布函数,然后通过Webhook URL来添加为工具。

2. 利用一些工作流编排工具,比如n8n、Dify、Make.com。我们可以在这些平台上编排工作流,然后将这些工作流添加为工具。

最后,可以设定合成结果的方式,这里有三种选择:

  1. 直接输出内容。在这种方式下,将直接返回工具输出的结果并结束对话。

  2. 通过大模型进行二次生成,在这种方式下,工具调用返回的结果将被提供给模型生成最终的结果。

  3. 使用模板合成,在这种方式下,需要进一步设定模版,模版中可以通过{....}插入键名,如果变量名与工具返回的JSON对象中的属性名相匹配,则变量名将会被替换为属性值。

    例如,模版的内容为

    The following is the image generated by Flux.1:
    ![image]({image_url})


    工具返回的结果为:

    {
    "image_url":<the image url>,
    "prompt":"......"
    .....
    }


    经过替换后的输出内容为:

    The following is the image generated by Flux.1:
    ![image](<the image url>)

新手计划的用户可以创建三个自定义工具,构建者计划的用户可以创建无限数量的工具。

这是否解答了您的问题?