智能体工具怎么搭:Agents-Course 3 步跑通
【免费下载链接】agents-courseThis repository contains the Hugging Face Agents Course.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-course
HuggingFace 的 Agents-Course 是一份从零教人搭智能体的课程。读完本篇,你可以照着仓库示例,用 10 行代码给智能体装上第一个工具,并看懂它背后的调用原理。
先跑通最小示例:给智能体装一个工具 🛠️
课程第一单元实战用的是 smolagents 框架,添加工具的套路很固定:写一个 Python 函数,套上@tool装饰器,框架会自动从源码里提取函数名、文档字符串和参数类型,生成给模型看的文本描述。课程里的时区查询工具是很好的起点:
from smolagents import CodeAgent, InferenceClientModel, tool @tool def get_current_time_in_timezone(timezone: str) -> str: """查询指定时区的当前本地时间。 Args: timezone: 合法时区字符串,如 'America/New_York' """ import datetime, pytz return datetime.datetime.now(pytz.timezone(timezone)).strftime("%Y-%m-%d %H:%M:%S")注意三个要点:函数名用有意义的英文、输入输出带类型注解、docstring 的 Args 段写清每个参数。接着实例化智能体,把工具传进去:
model = InferenceClientModel( max_tokens=2096, temperature=0.5, model_id="Qwen/Qwen2.5-Coder-32B-Instruct", ) agent = CodeAgent(model=model, tools=[get_current_time_in_timezone]) print(agent.run("东京现在几点?"))跑起来后,智能体会自己写一段代码调用get_current_time_in_timezone("Asia/Tokyo")并返回时间,说明它真的"读懂"了工具描述,而不是在做字符串匹配。完整应用模板和发布 Space 的步骤见 unit1 教程。
概念速览:智能体、工具、调用循环各是什么角色
用餐厅类比,三个角色一句话讲清:
| 角色 | 干什么 |
|---|---|
| 模型(LLM) | "厨师",只负责文本进、文本出,自己碰不到外部世界 |
| 智能体(Agent) | "服务员",把模型的文字翻译成真实的函数调用,再把结果端回来 |
| 工具(Tool) | "菜品",模型可以点单的函数,比如查时间、搜网页 |
调用循环是三步转台:模型先以结构化文本(JSON 或代码)写出调用意图,智能体解析后停止继续生成、执行函数,再把结果写回对话发给模型。模型自始至终"文本进、文本出",真正干活的是智能体的代码。unit1 工具说明逐段拆解了这个流程,actions则对比了 JSON、代码、函数调用三种动作格式。
场景扩展:从单工具到文档分析工作流
单个工具应对一次性查询足够,真实任务往往是多步连续操作。拿文档分析举例:先识别图片笔记里的文字,再按需做计算,最后输出摘要。课程 LangGraph 单元 就用图把这件事拆开:
- 视觉模型识别手写笔记,封装成
extract_text工具 - 简单的
divide工具处理笔记里的计算需求 - assistant 节点把工具描述注入系统消息后调用模型,工具节点在模型发出调用时执行
为什么改成图结构,原因有三个。一是步骤顺序明确,消息需要在节点间通过状态(AgentState)传递,流程顺序一眼可见。二是模型能调工具后,一次响应不一定能结束,需要tools_condition判断"回到模型"还是"结束流程"。三是出问题时能看到卡在哪个节点,比单次agent.run的黑盒更容易定位。反过来,如果任务没有条件分支、只想要最少的代码,继续用单个 CodeAgent 加工具即可,把流程控制交给模型自己。
选型:什么场景用什么做法 🧭
| 场景 | 推荐做法 |
|---|---|
| 上手试水、小型演示 | smolagents 的 CodeAgent +@tool装饰器 |
| 流程有固定顺序、需要可审计 | LangGraph 状态图,显式定义节点与边 |
| 工具逻辑复杂(有状态、多输出) | 继承 Tool 类,显式写 name / inputs / forward |
| 不想自己写工具 | 用load_tool从 Hub 加载社区预制工具 |
| 同一工具要在多个框架复用 | 用 MCP 协议封装统一接口 |
工具如果只是简单函数,@tool就够了,不必急着继承类;当工具内部需要维护中间状态时,再迁到 Tool 子类写法,unit2 smolagents 工具一节有完整对比。
调试检查清单:工具不听话时先查这 5 处
- 函数名是否英文且表意明确:叫
helper这种含糊名字,模型很难选对工具。 - 类型注解是否完整:输入缺类型,模型生成的参数会不稳定。
- docstring 里每个参数是否都有描述:smolagents 靠 Args 段构建工具描述。
- 实际输出类型是否与注解一致:模型预期 str 却拿到 list,下一步就容易崩。
- 动作格式是否规范收尾:格式坏了解析器抽不出函数名,循环会空转,先开
verbosity_level=1看模型原始输出。
下一步可以做什么
- 做一遍 unit1 的最终测验,巩固消息、动作、观察的完整循环
- 在教程的 Gradio 界面里试一个多工具任务,比如"生成一张图并告诉我纽约天气"
- 需要扩展规模时,去 unit2 横向对比 LangGraph、LlamaIndex 与 smolagents
【免费下载链接】agents-courseThis repository contains the Hugging Face Agents Course.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-course
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考