☰
智能体工具怎么搭:Agents-Course 3 步跑通
2026/10/3 3:46:05 网站建设 项目流程

智能体工具怎么搭: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 处

  1. 函数名是否英文且表意明确:叫helper这种含糊名字,模型很难选对工具。
  2. 类型注解是否完整:输入缺类型,模型生成的参数会不稳定。
  3. docstring 里每个参数是否都有描述:smolagents 靠 Args 段构建工具描述。
  4. 实际输出类型是否与注解一致:模型预期 str 却拿到 list,下一步就容易崩。
  5. 动作格式是否规范收尾:格式坏了解析器抽不出函数名,循环会空转,先开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),仅供参考

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

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

立即咨询