📖 定义
Tool Use(工具使用)或称 Function Calling(函数调用),是指大型语言模型根据用户请求,自动识别需要调用外部工具或API,生成结构化参数,并在获得执行结果后继续生成最终回答的能力。这是构建 AI Agent 的核心技术之一。
核心理念:让语言模型成为"大脑",通过调用外部工具(计算器、搜索引擎、数据库等)来扩展其能力边界。
⚙️ 工作流程
1
工具定义
向模型提供可用工具的Schema描述
→
2
意图识别
模型分析用户输入,决定调用哪个工具
→
3
参数生成
模型生成符合Schema的JSON参数
→
4
执行工具
应用程序执行实际工具调用
→
5
结果整合
将工具结果返回给模型生成回答
💻 代码示例
OpenAI Function Calling
from openai import OpenAI
import json
client = OpenAI()
# 定义可用工具
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}]
# 调用模型
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools
)
# 检查并执行工具调用
message = response.choices[0].message
if message.tool_calls:
for tool_call in message.tool_calls:
args = json.loads(tool_call.function.arguments)
# 执行实际函数并返回结果...
print(f"调用: {tool_call.function.name}, 参数: {args}")
LangChain Agent
from langchain.agents import Tool, AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
tools = [
Tool(name="Calculator", func=lambda x: str(eval(x)), description="数学计算"),
Tool(name="Search", func=lambda x: "搜索结果...", description="搜索信息")
]
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
result = agent_executor.invoke({"input": "计算 15 * 23 + 100"})
🎯 常见工具类型
信息检索
搜索引擎、数据库查询、向量检索
计算工具
计算器、代码解释器、数学引擎
系统操作
日历管理、邮件发送、文件操作
外部服务
天气API、地图服务、翻译API
🚀 应用场景
- 智能助手:查天气、订机票、设提醒的全能助手
- 数据分析:自动生成并执行SQL查询
- 代码助手:调用代码解释器执行和验证代码
- 知识库问答:检索内部文档后生成回答
- 自动化工作流:串联多个API完成复杂任务
⚠️ 最佳实践
- 清晰的工具描述:准确的名称和描述帮助模型选择正确工具
- 参数验证:始终验证模型生成的参数,防止注入攻击
- 错误处理:优雅处理工具调用失败的情况
- 权限控制:限制工具的执行权限,特别是涉及修改的操作
- 结果缓存:对幂等操作进行缓存,提高响应速度
🛠️ 支持工具调用的模型
GPT-4/GPT-3.5
OpenAI原生支持,功能最完善
Claude
Anthropic的tool use功能
Gemini
Google的function calling
Mistral/Llama
通过微调支持工具调用