Tools 工具调用
工具允许模型与外部系统交互。在 LangChain 中,工具就是 Python 函数——带上一些元数据。
定义工具
使用 @tool 装饰器
python
from langchain.tools import tool
@tool
def search(query: str) -> str:
"""搜索互联网信息"""
return f"关于 '{query}' 的搜索结果..."
@tool
def calculator(expression: str) -> str:
"""计算数学表达式"""
return str(eval(expression))@tool 装饰器自动:
- 使用函数名作为工具名
- 使用文档字符串作为工具描述
- 使用类型注解作为参数 schema
使用 Pydantic 定义复杂参数
python
from pydantic import BaseModel, Field
from langchain.tools import tool
class SearchInput(BaseModel):
query: str = Field(description="搜索关键词")
max_results: int = Field(default=5, description="返回结果数量")
@tool(args_schema=SearchInput)
def search(input: SearchInput) -> str:
"""搜索互联网信息"""
return f"找到 {input.max_results} 条关于 '{input.query}' 的结果"将工具传入 Agent
python
from langchain.agents import create_agent
from langchain.tools import tool
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气"""
return f"{city}: 晴,22°C"
@tool
def search(query: str) -> str:
"""搜索信息"""
return f"搜索结果: {query}"
agent = create_agent(
model="openai:gpt-4o",
tools=[get_weather, search],
system_prompt="你是一个助手,可以使用工具回答问题",
)工具运行时上下文
工具可以访问运行时上下文:
python
from langchain.tools import tool
from langchain.tools import ToolRuntime
@tool
def get_user_info(runtime: ToolRuntime) -> str:
"""获取当前用户信息"""
return f"用户ID: {runtime.context.user_id}"动态工具选择
你可以在运行时动态选择工具:
python
tools = [get_weather, search, calculator]
# 只使用部分工具
agent = create_agent(
model="openai:gpt-4o",
tools=tools,
)下一步
- Agents 智能体 —— 深入了解 Agent 框架
- Structured Output —— 结构化输出
- MCP 接入 —— MCP 协议集成