TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

智能体的工具是怎么工作的

工具是交给大模型的函数,是智能体行动的基础。读完本文,你能写出一个带类型标注的工具,用装饰器自动生成描述,并理解模型怎样发出工具调用、智能体怎样执行。

这篇适合谁,读完能做什么

这篇适合已经知道智能体是什么,想搞清楚「工具」到底怎么接进大模型的读者。读完后,你应该能写出一个带类型标注的 Python 工具,用装饰器让它自动生成描述,并理解从模型输出文字到工具真正执行的完整过程。

工具是什么

工具就是交给大模型的一个函数,这个函数应该有明确的目标[1]。常见的工具包括:联网搜索、图片生成、从外部来源检索信息,以及调用 GitHub、YouTube、Spotify 等服务的接口[1]。

工具之所以重要,是因为大模型的知识只截止到训练时。需要最新数据时,智能体必须通过工具去获取。比如直接问模型今天的天气而没有搜索工具,它可能会编造一个答案[1]。

一个工具应该包含:对功能的文字描述、可以调用的函数本身、带类型的参数,以及(可选的)带类型的返回值[1]。

模型怎么「调用」工具

大语言模型只能接收文字、输出文字,它自己没办法调用任何工具。所谓给模型提供工具,就是让模型知道这些工具的存在,并在需要时指示它生成基于文字的调用指令[1]。

比如用户问巴黎的天气。模型识别出这是使用天气工具的机会,于是生成一段表示工具调用的文字,例如 call weather_tool('Paris')。智能体读到这段文字,识别出需要调用工具,替模型执行工具,拿到真实的天气数据[1]。

这些工具调用的步骤通常不会展示给用户。智能体会把它们作为一条新消息追加到对话里,再把更新后的对话交给模型,模型据此生成通顺的回答。对用户来说,好像是模型直接调用了工具,实际上整个执行过程都是智能体在后台完成的[1]。

工具的描述通过系统提示词(system prompt)交给模型,里面是对每个可用工具的文字说明[1]。描述必须精确,要说清工具做什么,以及它需要什么确切的输入。通常用计算机语言或 JSON 来写,不过任何精确、一致的格式都可以[1]。

从一个计算器工具开始

下面是一个最简化的计算器工具,它把两个整数相乘[1]:

def calculator(a: int, b: int) -> int:
    """Multiply two integers."""
    return a * b

交给模型的文字描述是:Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int。手写这种描述容易遗漏细节,而且每加一个工具都要保持同样的格式,很容易出错[1]。

用装饰器自动生成描述

更好的办法是让 Python 自己读取代码信息。函数只要有类型注解、文档字符串(docstring)和清晰的函数名,就可以用装饰器自动生成描述[1]:

@tool
def calculator(a: int, b: int) -> int:
    """Multiply two integers."""
    return a * b

print(calculator.to_string())

装饰器背后用的是 Python 的 inspect 模块,读取函数签名。它把函数的文档字符串作为描述,把函数名作为工具名[1]。to_string() 输出的结果,和手写的描述一模一样[1]。

一个通用的 Tool 类里有名称、描述、函数、参数和返回值,还有 __call__ 和 to_string() 两个方法。这是示例写法,但与大多数库中的真实实现很接近[1]。生成的描述会被注入系统提示词[1]。

工具的标准化:MCP

模型上下文协议(MCP)是一个开放协议,它规定应用如何把工具提供给大语言模型。任何实现了 MCP 的框架都能使用协议里定义的工具,不必为每个框架重新实现一遍工具接口[1]。

MCP 提供的东西包括:不断增长的预置集成列表,在不同大模型提供方之间切换的灵活性,以及在自己的基础设施内保护数据的最佳实践[1]。

行动:智能体怎样与环境互动

行动是智能体与环境互动的具体步骤,比如浏览网页、控制一台实体设备[2]。行动大致分为四类:信息获取、工具使用、环境交互和沟通[2]。

按照表达行动的方式,智能体可以分为三种[2]:

  • JSON 智能体:用 JSON 格式指定要执行的动作。
  • 代码智能体:写一段代码,由外部解释执行。
  • 函数调用智能体:JSON 智能体的一个子类,经过微调,每个动作都生成一条新消息。

停止并解析:让输出可以被程序读取

实现行动的一个关键方法叫「停止并解析」(stop and parse),分三步[2]:

  1. 模型按预定的结构输出动作,格式可以是 JSON 或代码。
  2. 动作描述完整之后,模型停止继续生成 token。
  3. 外部解析器读取动作,判断要调用哪个工具,并提取参数。

这要求模型在输出完整动作后必须停下来,把控制权交还给智能体,这样输出才能被解析[2]。比如查询天气的动作可以写成:

{
  "action": "get_weather",
  "action_input": {"location": "New York"}
}

框架读到这段内容,就能轻松解析出要调用的函数名和参数[2]。

代码智能体

代码智能体不输出简单的 JSON,而是生成一段可执行的代码,通常是 Python。代码能表达循环、条件判断和嵌套函数,生成的函数和模块可以在不同动作之间复用,出错时也更容易调试,还能直接调用外部库和 API[2]。

但执行模型生成的代码有安全风险,从提示注入到执行有害代码都可能发生。建议使用 smolagents 这类自带默认防护的框架[2]。

下一步

先用一个两三个工具的小项目,体验一遍「写函数、加装饰器、看描述、让模型调用、解析执行」的完整流程,再考虑把工具换成 MCP 服务器提供的标准工具。

本文改编自 Hugging Face 开源课程《Agents Course》第 1 单元[1][2],原文以 Apache-2.0 许可证发布。

来源

  1. 1
    What are Tools?Hugging Face agents-course (Apache-2.0)
  2. 2
    Actions: Enabling the Agent to Engage with Its EnvironmentHugging Face agents-course (Apache-2.0)

引用本页: 智能体的工具是怎么工作的. TellWorld, https://www.tellworld.net/zh/practice/practice-agent-tools-explained. 更新于 2026-11-14

相关动态