smolagents 文档
工具
并获得增强的文档体验
开始使用
工具
Smolagents 是一个实验性 API,可能随时更改。由于 API 或底层模型容易发生变化,智能体返回的结果可能有所不同。
要了解更多关于智能体和工具的信息,请务必阅读入门指南。本页面包含底层类的 API 文档。
工具基类
load_tool
smolagents.load_tool
< source >( repo_id model_repo_id: str | None = None token: str | None = None trust_remote_code: bool = False **kwargs )
参数
- repo_id (
str
) — 工具在 Hub 上的 Space repo ID。 - model_repo_id (
str
, 可选) — 使用此参数可使用与所选工具的默认模型不同的模型。 - token (
str
, 可选) — 用于在 hf.co 上识别您的令牌。如果未设置,将使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 - trust_remote_code (
bool
, 可选, 默认为 False) — 需要接受此项才能从 Hub 加载工具。 - kwargs (附加关键字参数,可选) — 附加关键字参数将分为两部分:与 Hub 相关的所有参数(例如
cache_dir
、revision
、subfolder
)将用于下载工具文件,其余参数将传递给其 init。
用于从 Hub 快速加载工具的主函数。
加载工具意味着您将下载工具并在本地执行它。在运行时加载工具之前,请务必检查您下载的工具,就像您使用 pip/npm/apt 安装包时一样。
工具
smolagents.tool
< source >( tool_function: Callable )
将函数转换为动态创建的工具子类的实例。
工具
智能体所用函数的基本类。继承此类并实现 forward
方法以及以下类属性
- description (
str
) — 您的工具功能的简短描述,它期望的输入以及将返回的输出。例如,“这是一个从url
下载文件的工具。它以url
作为输入,并返回文件中包含的文本。” - name (
str
) — 将在提示智能体时用于您的工具的指示性名称。例如"text-classifier"
或"image_generator"
。 - inputs (
Dict[str, Dict[str, Union[str, type, bool]]]
) — 输入期望的模态字典。它有一个type
键和一个description
键。这用于launch_gradio_demo
或从您的工具制作一个漂亮的 Space,也可以用于您工具生成的描述中。 - output_type (
type
) — 工具输出的类型。这用于launch_gradio_demo
或从您的工具制作一个漂亮的 Space,也可以用于您工具生成的描述中。
如果您的工具在可用之前有昂贵的操作要执行(例如加载模型),您还可以覆盖 setup() 方法。 setup() 将在您第一次使用工具时调用,而不是在实例化时调用。
from_dict
< source >( tool_dict: dict[str, Any] **kwargs ) → Tool
从字典表示创建工具。
从 Gradio 工具创建 Tool。
from_hub
< source >( repo_id: str token: str | None = None trust_remote_code: bool = False **kwargs )
参数
- repo_id (
str
) — 您要将工具推送到的存储库名称。当推送到给定组织时,它应包含您的组织名称。 - token (
str
, 可选) — 用于在 hf.co 上识别您的令牌。如果未设置,将使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 - trust_remote_code(
str
, 可选, 默认为 False) — 此标志表示您了解运行远程代码的风险,并且信任此工具。如果未将其设置为 True,则从 Hub 加载工具将失败。 - kwargs (附加关键字参数,可选) — 附加关键字参数将分为两部分:与 Hub 相关的所有参数(例如
cache_dir
、revision
、subfolder
)将用于下载工具文件,其余参数将传递给其 init。
加载 Hub 上定义的工具。
从 Hub 加载工具意味着您将下载工具并在本地执行它。在运行时加载工具之前,请务必检查您下载的工具,就像您使用 pip/npm/apt 安装包时一样。
从 LangChain 工具创建 Tool。
from_space
< source >( space_id: str name: str description: str api_name: str | None = None token: str | None = None ) → Tool
根据其在 Hub 上的 ID 从 Space 创建 Tool。
push_to_hub
< source >( repo_id: str commit_message: str = 'Upload tool' private: bool | None = None token: bool | str | None = None create_pr: bool = False )
参数
- repo_id (
str
) — 您要将工具推送到的存储库名称。它应包含您在推送到给定组织时的组织名称。 - commit_message (
str
, 可选, 默认为"Upload tool"
) — 推送时提交的消息。 - private (
bool
, 可选) — 是否将存储库设为私有。如果为None
(默认),则存储库将是公共的,除非组织的默认设置为私有。如果存储库已存在,此值将被忽略。 - token (
bool
或str
, 可选) — 用作远程文件 HTTP bearer 授权的令牌。如果未设置,将使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 - create_pr (
bool
, 可选, 默认为False
) — 是否创建包含已上传文件的 PR 或直接提交。
将工具上传到 Hub。
保存
< source >( output_dir: str | Path tool_file_name: str = 'tool' make_gradio_app: bool = True )
保存工具的相关代码文件,以便将其推送到 Hub。这将把工具代码复制到 output_dir
中,并自动生成
- 一个包含工具逻辑的
{tool_file_name}.py
文件。如果您传入make_gradio_app=True
,它还将写入 - 一个
app.py
文件,用于在工具导出到 Space 并使用tool.push_to_hub()
时为工具提供 UI - 一个
requirements.txt
,其中包含工具使用的模块名称(在检查其代码时检测到)
在此处覆盖此方法以执行任何昂贵的操作,并且需要在开始使用工具之前执行。例如加载大型模型。
返回表示工具的字典
launch_gradio_demo
为工具启动 Gradio 演示。相应的工具类需要正确实现类属性 inputs
和 output_type
。
工具集
工具集允许在智能体的工具箱中加载工具集合。
可以从 Hub 中的集合或从 MCP 服务器加载集合,请参阅
有关示例和用法,请参阅:ToolCollection.from_hub() 和 ToolCollection.from_mcp()
from_hub
< source >( collection_slug: str token: str | None = None trust_remote_code: bool = False ) → ToolCollection
从 Hub 加载工具集合。
它将集合中所有 Space 的工具集合添加到代理的工具箱中
[!NOTE] 只会获取 Space,因此您可以随意将模型和数据集添加到您的集合中,如果您希望此集合展示它们。
示例
>>> from smolagents import ToolCollection, CodeAgent
>>> image_tool_collection = ToolCollection.from_hub("huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f")
>>> agent = CodeAgent(tools=[*image_tool_collection.tools], add_base_tools=True)
>>> agent.run("Please draw me a picture of rivers and lakes.")
from_mcp
< 来源 >( server_parameters: 'mcp.StdioServerParameters' | dict trust_remote_code: bool = False ) → ToolCollection
参数
- server_parameters (
mcp.StdioServerParameters
或dict
) — 连接到 MCP 服务器的配置参数。这可以是:-
mcp.StdioServerParameters
的实例,用于通过子进程使用标准输入/输出连接 Stdio MCP 服务器。 -
一个至少包含以下内容的
dict
:- “url”:服务器的 URL。
- “transport”:要使用的传输协议,可以是:
- “streamable-http”:可流式 HTTP 传输(默认)。
- “sse”:旧版 HTTP+SSE 传输(已弃用)。
-
- trust_remote_code (
bool
, 可选, 默认为False
) — 是否信任执行 MCP 服务器上定义的工具代码。仅当您信任 MCP 服务器并理解在本地机器上运行远程代码的风险时,才应将此选项设置为True
。如果设置为False
,从 MCP 加载工具将失败。
返回
ToolCollection
一个工具集合实例。
自动从 MCP 服务器加载工具集合。
此方法支持 Stdio、可流式 HTTP 和旧版 HTTP+SSE MCP 服务器。有关如何连接到每个 MCP 服务器的更多详细信息,请参阅 server_parameters
参数。
注意:将生成一个单独的线程来运行处理 MCP 服务器的 asyncio 事件循环。
Stdio MCP 服务器示例
>>> import os
>>> from smolagents import ToolCollection, CodeAgent, InferenceClientModel
>>> from mcp import StdioServerParameters
>>> model = InferenceClientModel()
>>> server_parameters = StdioServerParameters(
>>> command="uvx",
>>> args=["--quiet", "pubmedmcp@0.1.3"],
>>> env={"UV_PYTHON": "3.12", **os.environ},
>>> )
>>> with ToolCollection.from_mcp(server_parameters, trust_remote_code=True) as tool_collection:
>>> agent = CodeAgent(tools=[*tool_collection.tools], add_base_tools=True, model=model)
>>> agent.run("Please find a remedy for hangover.")
可流式 HTTP MCP 服务器示例
>>> with ToolCollection.from_mcp({"url": "http://127.0.0.1:8000/mcp", "transport": "streamable-http"}, trust_remote_code=True) as tool_collection:
>>> agent = CodeAgent(tools=[*tool_collection.tools], add_base_tools=True, model=model)
>>> agent.run("Please find a remedy for hangover.")
MCP 客户端
class smolagents.MCPClient
< 来源 >( server_parameters: 'StdioServerParameters' | dict[str, Any] | list['StdioServerParameters' | dict[str, Any]] adapter_kwargs: dict[str, Any] | None = None )
参数
- server_parameters (StdioServerParameters | dict[str, Any] | list[StdioServerParameters | dict[str, Any]]) — 连接到 MCP 服务器的配置参数。如果您想同时连接多个 MCP,则可以是一个列表。
-
mcp.StdioServerParameters
的实例,用于通过子进程使用标准输入/输出连接 Stdio MCP 服务器。 -
一个至少包含以下内容的
dict
:- “url”:服务器的 URL。
- “transport”:要使用的传输协议,可以是:
- “streamable-http”:可流式 HTTP 传输(默认)。
- “sse”:旧版 HTTP+SSE 传输(已弃用)。
-
- adapter_kwargs (dict[str, Any], 可选) — 要直接传递给
MCPAdapt
的其他关键字参数。
管理与 MCP 服务器的连接,并将其工具提供给 SmolAgents。
注意:只有在通过 connect()
方法启动连接后才能访问工具,该方法在初始化期间完成。如果您不使用上下文管理器,我们强烈建议使用“try … finally”来确保连接被清除。
示例
# fully managed context manager + stdio
with MCPClient(...) as tools:
# tools are now available
# context manager + Streamable HTTP transport:
with MCPClient({"url": "https://:8000/mcp", "transport": "streamable-http"}) as tools:
# tools are now available
# manually manage the connection via the mcp_client object:
try:
mcp_client = MCPClient(...)
tools = mcp_client.get_tools()
# use your tools here.
finally:
mcp_client.disconnect()
连接到 MCP 服务器并初始化工具。
断开连接
< 来源 >( exc_type: type[BaseException] | None = None exc_value: BaseException | None = None exc_traceback: TracebackType | None = None )
断开与 MCP 服务器的连接
获取工具
< 来源 >( ) → list[Tool]
返回
list[Tool]
可从 MCP 服务器获得的 SmolAgents 工具。
抛出
ValueError
ValueError
— 如果 MCP 服务器工具为 None(通常假定服务器未启动)。
可从 MCP 服务器获得的 SmolAgents 工具。
注意:目前,这始终返回在会话创建时可用的工具,但在未来的版本中,它还将在调用时返回 MCP 服务器上可用的任何新工具。
代理类型
代理可以在工具之间处理任何类型的对象;工具完全是多模态的,可以接受和返回文本、图像、音频、视频以及其他类型。为了增加工具之间的兼容性,并正确地在 ipython(jupyter、colab、ipython notebooks 等)中渲染这些返回,我们围绕这些类型实现了包装器类。
被包装的对象应继续保持其最初的行为;文本对象应仍表现为字符串,图像对象应仍表现为 PIL.Image
。
这些类型有三个特定用途
- 对类型调用
to_raw
应该返回底层对象 - 对类型调用
to_string
应该将对象作为字符串返回:对于AgentText
,可以是字符串,但在其他实例中将是对象序列化版本的路径 - 在 ipython 内核中显示它应该正确显示对象
AgentText
代理返回的文本类型。行为类似于字符串。
AgentImage
代理返回的图像类型。行为类似于 PIL.Image.Image。
将图像保存到文件。
返回该对象的“原始”版本。对于 AgentImage,它是一个 PIL.Image.Image。
返回该对象的字符串化版本。对于 AgentImage,它是图像序列化版本的路径。
AgentAudio
代理返回的音频类型。
返回该对象的“原始”版本。它是一个 torch.Tensor
对象。
返回该对象的字符串化版本。对于 AgentAudio,它是音频序列化版本的路径。