1. 工具定义方式
smolagents 中的工具本质上是带有结构化元数据的 Python 可调用对象。最常用的定义方式是 @tool 装饰器:
from smolagents import tool
@tool
def get_current_weather(city: str) -> str:
"""Returns the current weather for a given city.
Args:
city: Name of the city to check.
"""
return fetch_weather(city)
装饰器会自动解析函数签名和文档字符串,生成大语言模型可读的工具描述和参数模式。文档字符串和类型注解直接成为模型决策时的参考信息。
2. 工具来源与集成
smolagents 支持从多种渠道获取工具:
- 内置工具:包括 DuckDuckGoSearchTool、WebSearchTool、Whisper 语音转写工具和浏览器自动化工具
- Hugging Face Hub:通过 Tool.from_hub() 加载社区共享的工具,或通过 Tool.push_to_hub() 分享自定义工具
- LangChain 工具:通过 Tool.from_langchain() 直接包装现有 LangChain 工具
- MCP 服务器:通过 ToolCollection.from_mcp() 连接任意 MCP 服务器获取工具集
- Hub Space:通过 Tool.from_space() 将 Hugging Face Space 转换为可调用工具
3. 工具元数据规范
每个工具需具备以下核心属性:
- name:工具名称,作为模型调用时的函数标识
- description:工具功能描述,帮助模型判断何时使用该工具
- inputs:参数字典,包含每个参数的类型和说明
- output_type:输出类型标注
- forward():实际执行逻辑的方法