SmolAgents 工具实战:注册到多智能体协作指南
2026/9/20 23:42:50 网站建设 项目流程

SmolAgents 工具实战:注册到多智能体协作指南

【免费下载链接】agents-courseThis repository contains the Hugging Face Agents Course.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-course

假设你要做一个"派对筹备"助手:它得先查哥谭市评分最高的餐饮服务商,再按场合生成菜单,最后把结果汇总成回复。单靠大模型聊天做不了——查实时信息要联网,算账要执行代码。HuggingFace Agents Course 的 unit2 用 smolagents 框架解决这个问题:把普通 Python 函数用@tool装饰器标记,塞进CodeAgent的工具列表,模型会自己决定什么时候调用、传什么参数。整条链路你只需要写"函数 + 一行注册代码",见 units/zh-CN/unit2/smolagents/tools.mdx。

工具调用的运转链路

smolagents 的工具调用不是一次性的,而是一个"思考→行动→观察"的 while 循环(课程第 1 单元称其为 ReAct 循环,详见 units/zh-CN/unit1/agent-steps-and-structure.mdx)。CodeAgent每一轮做的事固定为四步:

这里有两个关键点,直接决定你的工具好不好用:

  • LLM 不直接执行工具。它只输出调用工具的代码文本,真正执行的是智能体框架。所以工具的"说明书"——函数名、docstring、参数类型——会被自动解析后注入系统提示,模型靠这些文本决定怎么调。
  • 观察结果会回灌进日志。工具返回什么,模型下一轮就"看到"什么,因此工具返回值要信息密度高、格式稳定,别返回一堆原始 dump。

快速上手:5 分钟注册一个可用工具

1. 安装框架并登录模型服务

smolagents 本体约千行代码,默认通过 HF 无服务器推理 API 调模型(默认Qwen/Qwen2.5-Coder-32B-Instruct),所以本地要能访问推理端点并持有 token。

pip install smolagents -U
from huggingface_hub import login login()

2. 把函数写成"能被自解释"的工具

框架用 Python 内省(inspect)自动提取工具的元信息,所以三条纪律:函数名要描述功能、参数和返回值必须有类型注解、docstring 里写Args:逐参数说明。缺任何一条,注入系统提示的工具描述就会残缺,模型调用出错率会明显上升。

3. 注册工具并运行智能体

工具不需要显式"注册表",创建CodeAgent时把工具对象放进tools列表即完成注册,下面的最小示例可直接运行(餐饮评分工具改写自课程示例):

from smolagents import CodeAgent, InferenceClientModel, tool @tool def catering_service_tool(query: str) -> str: """Return the highest-rated catering service. Args: query: A search term for finding catering services. """ services = {"Gotham Catering Co.": 4.9, "Wayne Manor Catering": 4.8} return max(services, key=services.get) agent = CodeAgent(tools=[catering_service_tool], model=InferenceClientModel()) print(agent.run("Find the highest-rated catering service in Gotham City.")) # -> Gotham Catering Co.

4. 看运行轨迹确认工具真的被调了

agent.run()会在终端打印逐步轨迹,每步能看到Executing parsed code:后面的代码和工具返回。确认两点即可:代码里出现了对工具函数的调用、参数符合注解类型。如果模型压根没调工具直接编答案,回第 2 步把 docstring 写得更具体。

进阶玩法:把子智能体当工具做任务拆解

单智能体扛复杂任务时步骤会膨胀,课程 unit2 的多智能体章节(units/zh-CN/unit2/smolagents/multi_agent_systems.mdx)给出最实用的组合方式:把另一个智能体包成工具挂给管理智能体(Manager Agent)。管理智能体只负责拆题和汇总,专业活交给子智能体,上下文各管各的,轨迹也更短。

from smolagents import CodeAgent, InferenceClientModel, tool @tool def research(query: str) -> str: """Search and summarize material on a given topic. Args: query: the research topic. """ sub = CodeAgent(tools=[], model=InferenceClientModel()) return sub.run(f"Research '{query}' and summarize in 3 sentences.") manager = CodeAgent(tools=[research], model=InferenceClientModel()) manager.run("对比代码智能体与工具调用智能体两种方案,给出选型建议。")

跑通这个模式后,往tools列表里继续加DuckDuckGoSearchToolVisitWebpageTool等默认工具箱成员(或Tool.from_space()加载的 HF Space),就是一个可落地的多角色编排系统。两种智能体的差别值得一看:CodeAgent生成 Python 代码行动,ToolCallingAgent生成 JSON 调用指令,后者适合不需要变量处理的简单链路,详见 units/zh-CN/unit2/smolagents/tool_calling_agents.mdx。

踩坑速查

现象原因处理办法
模型不认工具或传参张冠李戴缺 docstring 的Args:说明或函数名太含糊补类型注解,逐参数写清楚用途和取值
工具描述没进系统提示函数参数/返回值没有类型注解,内省提取失败给所有参数和返回值加注解后重新运行
智能体反复循环调同一个工具工具返回空或报错,观察结果没提供新信息工具内捕获异常并返回带提示的文字,而非抛栈
外部 API 调用卡死整个智能体网络请求没设超时工具函数里给 HTTP 客户端加 timeout 和重试
load_tool()加载社区工具报远程代码错误未显式信任远端代码trust_remote_code=True,并确认来源可靠

往下走

  • 代码智能体逐步执行细节与记忆机制:units/zh-CN/unit2/smolagents/code_agents.mdx
  • 多智能体编排完整案例(含安装依赖清单):units/zh-CN/unit2/smolagents/multi_agent_systems.mdx
  • 智能体可观测性与评估(Langfuse 埋点、数据集回归):units/zh-CN/bonus_unit2/what-is-agent-observability-and-evaluation.mdx

【免费下载链接】agents-courseThis repository contains the Hugging Face Agents Course.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-course

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询