智能体课程文档

将动作编写为代码片段或 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 上更新