跳轉至

藍圖篇 - 工具呼叫

工具調用(Tool Call)也稱為函式呼叫(Function Calling),意指大型模型能夠依據對話內容,判斷是否需要調用外部工具或函式來獲取資訊或執行操作。模型會返回需調用的函式名稱及參數,開發者實際執行調用後,將結果回傳給模型以繼續對話。

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

  • OpenAI
  • Claude
  • Gemini
  • Ollama
  • Cllama伺服器(llama.cpp伺服器)

核心概念

工具定義

工具的定義包含以下關鍵欄位:

  • 類型:工具類型,目前僅支援 Function
  • 名稱:函數名稱,必須由 a-z、A-Z、0-9、底線或連字號組成,最大長度 64
  • 描述:函數描述,模型會根據此描述判斷何時調用該函數
  • 屬性:函數參數列表,每個參數包含名稱(Name)、描述(Description)、類型(Type)、是否必需(Required)等屬性

工具呼叫流程

完整流程如下:工具呼叫

  1. 發送請求: 向模型發送包含工具定義的聊天請求
  2. 模型判斷: 模型根據對話內容判斷是否需要調用工具
  3. 返回工具調用:如果需要調用,模型返回要調用的函數名和參數
  4. 執行函數: 開發者根據返回資訊執行實際的函數調用
  5. 返回結果: 將函數執行結果作為新訊息發送給模型
  6. 繼續對話: 模型根據函數結果生成最終回覆

OpenAI工具調用示例

以下以 OpenAI 為例,示範如何使用 Tool Call 功能。

1. 定義 Tool

首先建立 Tool 的定義。本例中我們定義一個獲取快遞包裹送達時間的函數 get_delivery_date

guide bludprint

2. 定義工具參數

為 Tool 添加 Properties(參數)。本例中添加一個 order_id 參數,類型為 string,設置為必填。

guide bludprint

3. 配置 Options

創建 OpenAI Chat Request Options 節點,設定 API Key 和 Model,並將 Tools 陣列連接到 Options。

guide bludprint

4. 建立訊息

建立使用者訊息,詢問快遞包裹的相關問題。

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,需要設定:

  • 角色: 設定為 工具
  • 內容: 函數執行的結果
  • 工具呼叫結果:新增一個 FAIChatPlus_ChatRequestToolCallResult,設定 Id(使用先前的 Tool Call Id)、FunctionName 和 FunctionResult

guide bludprint

7. 繼續對話

將包含ToolCallResult結果的訊息加入到歷史訊息中,再次發送請求。模型會根據函數返回的結果生成最終的自然語言回覆。

guide bludprint

高階用法

多個工具

可以同時定義多個Tools,模型會根據需要選擇呼叫哪個或哪些函式。

guide bludprint

複雜參數類型

工具參數支援多種類型,可透過 ExtraJsonStringExtraJsonObject 欄位添加更複雜的參數定義,例如列舉類型:

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

guide bludprint

其他平台

Claude、Gemini、Ollama 和 CllamaServer 的 Tool Call 使用方式與 OpenAI 類似,只需替換對應的 Request 和 Options 節點即可。各平台的核心資料結構(FAIChatPlus_ChatRequestToolFAIChatPlus_ChatResponseToolCall 等)是通用的。

Original: https://wiki.disenone.site/tc

This post is protected by CC BY-NC-SA 4.0 agreement, should be reproduced with attribution.

此貼文是使用ChatGPT翻譯的,請在反饋中指出任何遺漏之處。