Tool Use (工具调用) 开发教程
Tool Use(在 OpenAI 中也称为 Function Calling)是让大模型连接外部世界的桥梁。通过这个功能,AI 不再只是一个只会聊天的机器,而是能联网搜索、查询数据库、操作软件的智能体(Agent)。
5分钟
2025-12-26
AI教程Tool
Tool Use (工具调用) 开发教程
Tool Use(在 OpenAI 中也称为 Function Calling)是让大模型连接外部世界的桥梁。通过这个功能,AI 不再只是一个只会聊天的机器,而是能联网搜索、查询数据库、操作软件的智能体(Agent)。
1. 原理流程
传统的对话是:用户 -> AI -> 回答。
Tool Use 的对话是:
- 用户:"查一下北京现在的天气。"
- AI (思考):"我无法直接知道天气,但我有一个
get_weather的工具。" -> 输出 JSON:{"tool": "get_weather", "args": {"city": "Beijing"}} - 你的代码:拦截到这个 JSON,在后台调用真实的天气 API,得到结果
"25度,晴"。 - 你的代码:将结果发回给 AI:"查询结果是 25度,晴。"
- AI (最终回答):"北京现在天气不错,25度,晴天。"
2. 代码实现 (OpenAI 示例)
from openai import OpenAI
import json
client = OpenAI()
# 1. 定义工具
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如 Beijing"}
},
"required": ["city"]
}
}
}]
# 2. 发送请求
messages = [{"role": "user", "content": "上海天气怎么样?"}]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
tool_calls = response.choices[0].message.tool_calls
# 3. 处理工具调用
if tool_calls:
for tool_call in tool_calls:
function_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
if function_name == "get_weather":
# 模拟API调用结果
weather_data = "上海,阴天,20度"
print(f"调用函数 {function_name},参数 {args},结果 {weather_data}")
# 将结果追加到对话历史
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": weather_data
})
# 4. 获取最终回答
final_response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
print(final_response.choices[0].message.content)
3. 最佳实践
- 描述要精准:工具的
description是写给 AI 看的“说明书”。写得越清楚(例如:“只在用户明确询问天气时使用”),AI 调用越准确。 - 容错处理:AI 输出的 JSON 偶尔可能格式错误,代码中要做好 try-catch 异常处理。
- 安全风险:不要让 AI 直接执行敏感操作(如删除文件、转账),除非有二次确认机制。
掌握了 Tool Use,你就掌握了开发 Agent 的核心钥匙。