首页 / 资料库 / Hugging Face · 智能体课

资料库4 分钟读完Apache-2.0智能体Hugging Facesmolagents

将操作编写为代码片段或 JSON 结构

译自《将操作编写为代码片段或 JSON 结构》 · 查看英文原文

原文出处Hugging Face Agents Course · units/zh-CN/unit2/smolagents/tool_calling_agents.mdx 原作者:Hugging Face · 许可证:Apache-2.0 License 本篇为课程官方中文译文(Hugging Face 社区翻译),诸葛AI学院仅做格式整理(去除图片与交互组件),版权归原作者所有。

将操作编写为代码片段或 JSON 结构

您可以通过 此 Notebook 跟随代码实践,该文件支持在 Google Colab 中运行。

工具调用智能体(Tool Calling Agents)是 smolagents 中提供的第二种智能体类型。与使用 Python 代码片段的代码智能体(Code Agents)不同,这类智能体利用 LLM 提供商的内置工具调用能力来生成 JSON 结构的工具调用指令。这是 OpenAI、Anthropic 等主流提供商采用的标准方法。

当 Alfred 想要搜索餐饮服务和派对创意时,CodeAgent 会生成并运行如下 Python 代码:

python for query in [ "Best catering services in Gotham City", "Party theme ideas for superheroes" ]: print(web_search(f"Search for: {query}"))

ToolCallingAgent 则会创建 JSON 结构:

python [ {"name": "web_search", "arguments": "Best catering services in Gotham City"}, {"name": "web_search", "arguments": "Party theme ideas for superheroes"} ]

该 JSON 结构随后会被用于执行工具调用。

尽管 smolagents 主要专注于 CodeAgents(因为它们整体表现更好),但对于不需要变量处理或复杂工具调用的简单系统,ToolCallingAgents 仍然可以高效工作。

工具调用智能体的工作原理

工具调用智能体遵循与代码智能体相同的多步骤工作流程(详见前一章节)。关键区别在于操作结构方式:智能体不再生成可执行代码,而是生成指定工具名称和参数的 JSON 对象,系统随后解析这些指令来执行相应工具。

示例:运行工具调用智能体

让我们重新审视 Alfred 开始筹备派对的示例,这次使用 ToolCallingAgent 来展示区别。我们将构建一个能够使用 DuckDuckGo 进行网页搜索的智能体,与代码智能体示例的唯一区别在于智能体类型——框架会处理其他所有细节:

```python 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.") ```

当查看智能体的执行跟踪时,您将看到类似以下内容而非 Executing parsed code:

text ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Calling tool: 'web_search' with arguments: {'query': "best music recommendations for a party at Wayne's │ │ mansion"} │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

智能体生成结构化的工具调用指令,系统通过处理这些指令来生成输出,而非像 CodeAgent 那样直接执行代码。

现在我们已经了解两种智能体类型,可以根据需求选择合适的一种。让我们继续探索 smolagents,让 Alfred 的派对大获成功!🎉

资源

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课