藍圖篇 - 工具呼叫
工具調用(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)等屬性
工具呼叫流程
完整流程如下:工具呼叫
- 發送請求: 向模型發送包含工具定義的聊天請求
- 模型判斷: 模型根據對話內容判斷是否需要調用工具
- 返回工具調用:如果需要調用,模型返回要調用的函數名和參數
- 執行函數: 開發者根據返回資訊執行實際的函數調用
- 返回結果: 將函數執行結果作為新訊息發送給模型
- 繼續對話: 模型根據函數結果生成最終回覆
OpenAI工具調用示例
以下以 OpenAI 為例,示範如何使用 Tool Call 功能。
1. 定義 Tool
首先建立 Tool 的定義。本例中我們定義一個獲取快遞包裹送達時間的函數 get_delivery_date。
2. 定義工具參數
為 Tool 添加 Properties(參數)。本例中添加一個 order_id 參數,類型為 string,設置為必填。
3. 配置 Options
創建 OpenAI Chat Request Options 節點,設定 API Key 和 Model,並將 Tools 陣列連接到 Options。
4. 建立訊息
建立使用者訊息,詢問快遞包裹的相關問題。
5. 發送請求並處理Tool Call
建立 Send OpenAI Chat Request In World 節點,並將其綁定至 On Message Finished 事件。於事件回呼函式中,自 Payload 中擷取 ToolCalls 陣列。
當模型決定調用工具時,ToolCalls 陣列不為空。遍歷陣列以獲取每個 Tool Call 的資訊:
- Id:Tool Call 的唯一識別符
- FunctionName: 要呼叫的函式名稱
- FunctionArguments: 函數參數(JSON 字串格式)
6. 執行函數並返回結果
根據 FunctionName 執行對應的函數邏輯(本例中模擬獲取快遞包裹送達時間),然後將結果作為 ToolCallResult 類型的消息返回給模型。
創建新的 Message,需要設定:
- 角色: 設定為
工具 - 內容: 函數執行的結果
- 工具呼叫結果:新增一個
FAIChatPlus_ChatRequestToolCallResult,設定 Id(使用先前的 Tool Call Id)、FunctionName 和 FunctionResult
7. 繼續對話
將包含ToolCallResult結果的訊息加入到歷史訊息中,再次發送請求。模型會根據函數返回的結果生成最終的自然語言回覆。
高階用法
多個工具
可以同時定義多個Tools,模型會根據需要選擇呼叫哪個或哪些函式。
複雜參數類型
工具參數支援多種類型,可透過 ExtraJsonString 或 ExtraJsonObject 欄位添加更複雜的參數定義,例如列舉類型:
其他平台
Claude、Gemini、Ollama 和 CllamaServer 的 Tool Call 使用方式與 OpenAI 類似,只需替換對應的 Request 和 Options 節點即可。各平台的核心資料結構(FAIChatPlus_ChatRequestTool、FAIChatPlus_ChatResponseToolCall 等)是通用的。
Original: https://wiki.disenone.site/tc
This post is protected by CC BY-NC-SA 4.0 agreement, should be reproduced with attribution.
Visitors. Total Visits. Page Visits.
此貼文是使用ChatGPT翻譯的,請在反饋中指出任何遺漏之處。








