智慧體課程文件

將動作編寫為程式碼片段或 JSON Blob

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Ask a Question Open In Colab

將動作編寫為程式碼片段或 JSON Blob

你可以跟隨這個 notebook 中的程式碼,並使用 Google Colab 執行它。

工具呼叫 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 也是有效的。

Code vs JSON Actions

工具呼叫 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 的派對圓滿成功吧!🎉

資源

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.