智慧體課程文件
將動作編寫為程式碼片段或 JSON Blob
並獲得增強的文件體驗
開始使用
將動作編寫為程式碼片段或 JSON Blob
工具呼叫 Agent (Tool Calling Agents) 是 smolagents
中可用的第二種 Agent 型別。與使用 Python 程式碼片段的程式碼 Agent 不同,這些 Agent 使用 LLM 提供商內建的工具呼叫功能,以 JSON 結構生成工具呼叫。這是 OpenAI、Anthropic 和許多其他提供商使用的標準方法。
讓我們看一個例子。當 Alfred 想要搜尋餐飲服務和派對創意時,一個 CodeAgent
會生成並執行如下的 Python 程式碼:
for query in [
"Best catering services in Gotham City",
"Party theme ideas for superheroes"
]:
print(web_search(f"Search for: {query}"))
而一個 ToolCallingAgent
會建立一個 JSON 結構:
[
{"name": "web_search", "arguments": "Best catering services in Gotham City"},
{"name": "web_search", "arguments": "Party theme ideas for superheroes"}
]
這個 JSON Blob 隨後被用於執行工具呼叫。
雖然 smolagents
主要關注 CodeAgents
,因為它們整體效能更好,但對於不需要變數處理或複雜工具呼叫的簡單系統,ToolCallingAgents
也是有效的。
工具呼叫 Agent 如何工作?
工具呼叫 Agent 遵循與程式碼 Agent 相同的多步驟工作流程(詳見上一節)。
關鍵區別在於它們構建動作的方式:它們生成指定工具名稱和引數的 JSON 物件,而不是可執行的程式碼。然後,系統會解析這些指令來執行相應的工具。
示例:執行一個工具呼叫 Agent
讓我們重溫一下之前 Alfred 開始派對準備的例子,但這次我們將使用 ToolCallingAgent
來突顯差異。我們將構建一個可以使用 DuckDuckGo 搜尋網頁的 Agent,就像我們的程式碼 Agent 示例一樣。唯一的區別是 Agent 的型別——框架會處理其他所有事情。
from smolagents import ToolCallingAgent, DuckDuckGoSearchTool, InferenceClientModel
agent = ToolCallingAgent(tools=[DuckDuckGoSearchTool()], model=InferenceClientModel())
agent.run("Search for the best music recommendations for a party at the Wayne's mansion.")
當你檢查 Agent 的追蹤記錄時,你將不會看到 Executing parsed code:
(執行已解析的程式碼),而是會看到類似這樣的內容:
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Calling tool: 'web_search' with arguments: {'query': "best music recommendations for a party at Wayne's │ │ mansion"} │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Agent 會生成一個結構化的工具呼叫,系統處理這個呼叫以產生輸出,而不是像 CodeAgent
那樣直接執行程式碼。
現在我們瞭解了兩種 Agent 型別,我們可以根據我們的需求選擇合適的型別。讓我們繼續探索 smolagents
,讓 Alfred 的派對圓滿成功吧!🎉
資源
- ToolCallingAgent 文件 - ToolCallingAgent 的官方文件