Assistant API 支援函數調用(Function Calling),讓智能體能夠根據您的需求自動調用外部函數。例如,智能體可以調用函數進行文本翻譯或處理其他任務。本文介紹了一個簡單的"翻譯助手"樣本,協助您快速上手函數調用的基本方法。
快速開始
在這個樣本中,我們將建立一個翻譯助手,並建立一個函數translate_text作為智能體可以調用的工具。在這個樣本中,我們將詢問智能體將"Hello world"翻譯成中文。
在您開始前
首先,確保您已經安裝了必要的依賴庫,如 requests 和 dashscope。您可以通過以下命令安裝它們:
第一步:建立"翻譯文本"函數
我們首先建立一個簡單的翻譯函數,用於示範目的,它使用預定義的翻譯對照表。
- 翻譯功能:通過預定義的翻譯對照表來類比翻譯功能,支援多種語言之間的轉換。
- 錯誤處理:包含了基本的錯誤處理機制,確保函數在各種情況下都能返回合適的響應。
第二步:描述"翻譯文本"函數
您需要向智能體描述"翻譯文本"函數。智能體會根據描述資訊正確調用翻譯函數。
- name: 函數的名稱為 translate_text,將在智能體中被調用。
- description: 提供了該工具的描述,協助使用者理解其用途。
- parameters: 定義了函數的參數,包括要翻譯的文本和目標語言。
第三步:建立智能體
現在我們可以建立一個 Assistant 執行個體,它是一個智能體,並且將會使用我們定義的翻譯工具。
- model: 使用的模型類型,這裡是 qwen-plus,它支援語言理解和任務處理。
- name: 給智能體命名為"Translation Assistant"。
- description: 描述了智能體的功能,它能夠協助使用者進行文本翻譯。
- tools: 註冊了我們之前定義的 translation_tool,使得智能體可以調用該工具。
第四步:建立對話線程並與智能體互動
建立一個新的對話線程,並向其中添加使用者訊息,然後運行智能體,處理使用者的問題。
- Threads.create(): 建立一個新的對話線程,後續的訊息將在此線程中進行。
- Messages.create(): 向線程添加使用者訊息,這裡使用者請求將"Hello world"翻譯成中文。
- Runs.create(): 觸發智能體開始處理使用者訊息。
- Runs.wait(): 等待智能體處理完畢。
第五步:處理函數調用並返回結果
如果智能體在處理過程中需要調用工具,我們將調用 translate_text 函數進行翻譯,並將結果返回給使用者。
- 檢查函數調用:如果智能體需要調用某個函數,我們檢查它調用的是否是 translate_text,並通過之前定義的函數進行翻譯。
- 提交結果:將翻譯結果通過 Runs.submit_tool_outputs 返回給智能體,並繼續等待智能體的下一步回複。
第六步:擷取智能體的回複
智能體處理完成後,我們可以從對話線程中擷取智能體的回複並展示給使用者。
總結
通過以上步驟,您已經成功建立了一個智能體,它可以處理使用者的翻譯請求,並使用翻譯函數來完成文本轉換。Assistant API 使得構建複雜的任務驅動型智能體變得簡單且高效。
您可以根據需求進一步擴充智能體的功能,例如增加更多工具或修改智能體的行為指令。
快速產生業務函數的描述資訊
在快速入門案例中,您需要向智能體描述“翻譯文本”函數,而這一過程比較繁瑣。因此,我們提供了一個簡單的轉換函式,協助您快速描述業務函數。
使用流式輸出
在流式輸出下,您需要修改第五步:處理函數調用並返回結果的代碼邏輯,這是因為 Runs 現在返回的是 Assistant 事件流。
當 Assistant 決定調用函數時,Runs 會返回事件 thread.run.requires_action和大模型給出的入參資訊 data.required_action.submit_tool_outputs.tool_calls,您需要在此時提交函數輸出結果。
請注意,在提交函數輸出run = Runs.submit_tool_outputs時,也需啟用流式輸出。