智能体工具速通:3个零件、2个框架,十分钟跑通第一次调用
2026/9/2 13:54:54 网站建设 项目流程

智能体工具速通:3个零件、2个框架,十分钟跑通第一次调用

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

Alfred在韦恩庄园值班,韦恩先生留下一张训练计划照片,只问一个问题:菜单上的食材该买哪些。模型能"看懂"图片,却动不了手。你得给它一套智能体工具,让它真正打开图片、读出文字。Hugging Face 的开源课程 Agents-Course 恰好把"给模型装手"这件事做成了可动手的教程。

项目速览

Agents-Course 是 Hugging Face 的官方开源课程,4 个主单元加 3 个加餐单元,从"智能体是什么"讲到框架实战,最后用基准测试收尾。前置要求只有 Python 基础和一点 LLM 常识,仓库里带完整中文版 units/zh-CN/。

碎片化自学有个隐形成本:博客东一篇西一篇,框架版本对不上,去年的代码拿到今天的 smolagents 里跑不通。跟这门课走,例子是一条线的:ReAct 循环、工具定义、图构建,代码逐行给,每节配能在 Colab 里跑的 notebook。学完你能做三件事:定义并注册工具、用两套框架搭出会调工具的智能体、把它们用到文档分析和 RAG 场景里。

工具的三个零件

拆开框架的魔法,一个工具只有三个零件。可以把它想象成组装一把小工具:

  • 标签:这工具干什么。一句话讲清,胜过一串形容词。
  • 插口:要喂什么才能跑。每个参数都有名字、类型和用途说明。
  • 结果窗:吐出来的是什么。字符串、数字还是一组列表。

为什么只要这三个?因为 LLM 本身不会调函数。它只会根据标签、插口和结果窗,输出一段"调用文本",底下的框架负责解析并执行。零件写得清楚,模型选得准;写得含糊,它就开始乱调。

十分钟上手:跑通第一个工具

最快的路是 SmolAgents 的@tool装饰器:写个普通函数,加个装饰器,它就是工具。

from smolagents import CodeAgent, InferenceClientModel, tool @tool def load_note(path: str) -> str: """加载本地文档,返回其中文本内容。 Args: path: 文档的本地路径。 """ with open(path, encoding="utf-8") as f: return f.read() agent = CodeAgent(tools=[load_note], model=InferenceClientModel()) print(agent.run("读取 units/zh-CN/unit1/introduction.mdx 并告诉我重点"))

为什么这么写?装饰器会自动从函数名、docstring 和类型标注里解析出三个零件,这正是模型判断"用不用它、参数怎么填"的全部依据。类型标注还能让框架在真正执行前先校验参数。InferenceClientModel默认走官方推理服务,不需要本地显卡,整段代码就是"定义、注册、调用"的最短路径。

把工具装进智能体:两种框架

课程讲了三个框架,装工具最常用的两个是 SmolAgents 和 LangGraph,思路差得很远。

SmolAgentsLangGraph
注册方式函数上加@tool,塞进tools列表函数列表用bind_tools绑到模型,图里挂ToolNode节点
调用风格智能体走 ReAct 循环,模型自己决定何时调你画节点和边,靠条件边判断"最新一条消息有没有工具调用"
适合场景单个智能体快速起步多步骤流程、分支、状态需要显式控制

一句话总结:SmolAgents 是"扔进工具就跑",LangGraph 是"你来画流程图"。任务是一条直线,用前者;流程里有分支和回退,用后者。

一个能落地的例子

拿课程里的文档分析场景:一张训练计划照片,提取文字,产出采购清单。在 LangGraph 里,整个流程就是两个节点加一条条件边。

核心代码就这几行:

from langgraph.prebuilt import ToolNode, tools_condition builder.add_node("assistant", assistant) # 模型决定要不要调工具 builder.add_node("tools", ToolNode([extract_text, divide])) builder.add_conditional_edges("assistant", tools_condition) builder.add_edge("tools", "assistant") graph = builder.compile() result = graph.invoke({"messages": msgs, "input_file": "note.png"})

assistant 节点让模型表态,它决定调工具,条件边就把消息送进 tools 节点执行,结果再送回模型。它觉得够了,条件边指向答复节点,循环收尾。

踩坑速查

工具集成翻车的原因高度集中,这三个占了一大半,而且都出在"零件"上。

症状原因解法
让它抽文字,它去调了计算器工具描述太像,模型分不出边界描述改写成"何时使用",把参数差异写明
对话中途跑飞或被截断单次返回(整个文件)太长,撑爆上下文限制返回长度,只回摘要加关键段落
换上新工具后,老调用随机失灵两个工具同名,互相覆盖注册名字起得唯一,批量导入前先按名字查重

去哪看源码

拿到整个课程只需一条命令:git clone https://gitcode.com/GitHub_Trending/ag/agents-course

  • units/zh-CN/unit1/tools.mdx:工具是什么、三个零件怎么向模型交代
  • units/zh-CN/unit2/smolagents/tools.mdx:SmolAgents 两种工具写法,含完整跑通示例
  • units/zh-CN/unit2/langgraph/document_analysis_agent.mdx:上一节文档分析智能体的完整源码
  • units/zh-CN/unit1/agent-steps-and-structure.mdx:工具调用在智能体循环里一步步怎么展开

工具是智能体的手。模型再聪明,没有一双手也落不了地。三个零件写清楚,框架选一个,路就通了。

动手建议:把上文的load_note拷走,换成你自己的一份文档跑一次agent.run,看看它读回什么;再只改描述、不改代码,感受一下模型选择的变化。

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

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

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

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

立即咨询