Agents 课程文档
将动作编写为代码片段或 JSON blob
并获得增强的文档体验
开始使用
将动作编写为代码片段或 JSON blob
Tool Calling Agents 是 smolagents 中提供的第二种 Agent 类型。与使用 Python 代码片段的 Code Agents 不同,这些 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 对于不需要变量处理或复杂工具调用的简单系统可能有效。
Tool Calling Agents 如何工作?
Tool Calling Agents 遵循与 Code Agents 相同的多步骤工作流程(详情请参阅上一节)。
关键区别在于它们如何构建其动作:它们不是生成可执行代码,而是生成指定工具名称和参数的 JSON 对象。然后,系统解析这些指令以执行相应的工具。
示例:运行 Tool Calling Agent
让我们回顾之前的例子,Alfred 开始准备派对,但这次我们将使用 ToolCallingAgent 来突出显示差异。我们将构建一个可以使用 DuckDuckGo 搜索网络的 Agent,就像在我们的 Code Agent 示例中一样。唯一的区别是 Agent 类型 - 框架处理其他一切
from smolagents import ToolCallingAgent, DuckDuckGoSearchTool, HfApiModel
agent = ToolCallingAgent(tools=[DuckDuckGoSearchTool()], model=HfApiModel())
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 的官方文档