跳转至

蓝图篇 - Tool Call

Tool Call(工具调用)也被称为 Function Calling(函数调用),是指大模型可以根据对话内容,判断是否需要调用外部工具/函数来获取信息或执行操作。模型会返回需要调用的函数名称和参数,由开发者执行实际调用后,将结果返回给模型继续对话。

AIChatPlus 支持以下平台的 Tool Call 功能:

  • OpenAI
  • Claude
  • Gemini
  • Ollama
  • CllamaServer(llama.cpp server)

核心概念

Tool 定义

Tool 的定义包含以下关键字段:

  • Type: 工具类型,目前仅支持 Function
  • Name: 函数名称,必须由 a-z、A-Z、0-9、下划线或连字符组成,最大长度 64
  • Description: 函数描述,模型会根据此描述判断何时调用该函数
  • Properties: 函数参数列表,每个参数包含 Name、Description、Type、Required 等属性

Tool Call 流程

Tool Call 的完整流程如下:

  1. 发送请求: 向模型发送包含 Tools 定义的聊天请求
  2. 模型判断: 模型根据对话内容判断是否需要调用工具
  3. 返回 Tool Calls: 如果需要调用,模型返回要调用的函数名和参数
  4. 执行函数: 开发者根据返回信息执行实际的函数调用
  5. 返回结果: 将函数执行结果作为新消息发送给模型
  6. 继续对话: 模型根据函数结果生成最终回复

OpenAI Tool Call 示例

下面以 OpenAI 为例,演示如何使用 Tool Call 功能。

1. 定义 Tool

首先创建 Tool 定义。本例中我们定义一个获取快递包裹送达时间的函数 get_delivery_date

guide bludprint

2. 定义 Tool 参数

为 Tool 添加 Properties(参数)。本例中添加一个 order_id 参数,类型为 string,设置为必填。

guide bludprint

3. 配置 Options

创建 OpenAI Chat Request Options 节点,设置 API Key 和 Model,并将 Tools 数组连接到 Options。

guide bludprint

4. 创建 Messages

创建用户消息,询问快递包裹相关的问题。

guide bludprint

5. 发送请求并处理 Tool Call

创建 Send OpenAI Chat Request In World 节点,绑定 On Message Finished 事件。在事件回调中,从 Payload 获取 ToolCalls 数组。

当模型决定调用工具时,ToolCalls 数组不为空。遍历数组获取每个 Tool Call 的信息:

  • Id: Tool Call 的唯一标识符
  • FunctionName: 要调用的函数名
  • FunctionArguments: 函数参数(JSON 字符串格式)

guide bludprint

6. 执行函数并返回结果

根据 FunctionName 执行对应的函数逻辑(本例中模拟获取快递包裹送达时间),然后将结果作为 ToolCallResult 类型的消息返回给模型。

创建新的 Message,需要设置:

  • Role: 设置为 Tool
  • Content: 函数执行的结果
  • ToolCallResults: 添加一个 FAIChatPlus_ChatRequestToolCallResult,设置 Id(使用之前的 Tool Call Id)、FunctionName 和 FunctionResult

guide bludprint

7. 继续对话

将包含 ToolCallResult 结果的消息添加到历史消息中,再次发送请求。模型会根据函数返回的结果生成最终的自然语言回复。

guide bludprint

高级用法

多个 Tools

可以同时定义多个 Tools,模型会根据需要选择调用哪个或哪些函数。

guide bludprint

复杂参数类型

Tool 参数支持多种类型,可以通过 ExtraJsonStringExtraJsonObject 字段添加更复杂的参数定义,例如枚举类型:

{"enum": ["Beijing", "HongKong"]}

guide bludprint

其他平台

Claude、Gemini、Ollama 和 CllamaServer 的 Tool Call 用法与 OpenAI 类似,只需替换相应的 Request 和 Options 节点即可。各平台的核心数据结构(FAIChatPlus_ChatRequestToolFAIChatPlus_ChatResponseToolCall 等)是通用的。

原文地址:https://wiki.disenone.site

本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。