工具调用(Tool Use)是指大语言模型(LLM)不仅能生成文本,还能主动“请求”执行特定功能的能力。它不再是被动的问答机器,而是能够操作 API、查询数据库、甚至控制物理设备的智能代理。
传统 API 调用由程序员硬编码逻辑(if-else)。
AI 工具调用由模型根据自然语言意图动态决策何时调用、调用什么。
向 AI 提供工具的说明书(Schema)。包括功能描述、参数名称、类型及是否必填。
AI 不直接执行,而是输出一个结构化的 JSON 对象(如 {"tool": "weather", "city": "Beijing"})。
代码捕获 JSON,调用真实 API,将结果文本返回给 AI 上下文,AI 再次阅读后生成最终回复。
它是 AI 的"技能背包"。存储所有可用工具的定义(JSON Schema),AI 在思考时会查阅此表。
它是"手臂"。负责根据 AI 的请求解析参数,发起真正的 HTTP 请求或函数调用,并捕获返回值(包括错误信息)。
大模型本体。负责意图识别(是否需要用工具?)、参数填充(从对话中提取参数)和结果整合。
LLM 的训练数据截止于过去。通过工具,它能获取现在的股价、天气和新闻。
LLM 不擅长数学。让它调用 Calculator 或 Python 解释器,实现 100% 精确的计算。
不再只是说话。可以发送邮件、修改数据库、控制智能家居,真正"产生影响"。
场景:用户问“今天北京这天气我该穿什么去开会?”
这是告诉 AI 如何使用工具的标准方式。遵循 OpenAPI 规范。
{
"name": "get_stock_price",
"description": "Get current stock price",
"parameters": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "e.g. AAPL"
}
},
"required": ["symbol"]
}
}
模型不会返回普通文本,而是返回一个特殊的 finish_reason 和调用参数。
// Response Object
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_stock_price",
"arguments": "{\"symbol\": \"AAPL\"}"
}
}
]
}
工具名称和描述必须让 AI 一眼就懂。避免模糊的动词,使用精确的场景化描述。
❌ 错误示范:
get_data()
✅ 正确示范:
get_user_purchase_history(user_id, days)
既不要太细(单个参数就是一个工具),也不要太粗(一个工具做 10 件事)。
每个参数必须包含:
• 类型:string / number / boolean
• 描述:什么意思,何时用
• 示例:具体格式(e.g. "2024-01-30")
同样的输入应该总是返回同样的结果。避免内部随机性和隐藏状态。如果有时间性,明确在参数中表达。
返回的错误信息要让 AI 能理解并调整策略。不要只返回 "Error 500",要说明“工具超时,请稍后重试或使用替代方案”。
{
"name": "search_flights",
"description": "搜索指定路线和日期的可用航班,返回价格、时间和航空公司信息",
"parameters": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"description": "出发地机场代码,例如 PEK (北京)、LAX (洛杉矶)"
},
"destination": {
"type": "string",
"description": "目的地机场代码"
},
"departure_date": {
"type": "string",
"description": "出发日期,格式 YYYY-MM-DD,例如 2024-03-15"
},
"max_results": {
"type": "integer",
"description": "最多返回结果数,默认 5,范围 1-20",
"default": 5
}
},
"required": ["origin", "destination", "departure_date"]
}
}
永远不要让 AI 直接执行 DROP TABLE。所有高风险操作必须经过人工确认 (Human-in-the-loop)。
一个工具只做一件事。不要创建一个万能的 "do_everything" 函数,保持原子性。
具体的参数描述比微调模型更管用。告诉 AI 参数的单位、范围和格式例子。
Reasoning + Acting
AI 交替进行"推理"和"行动",每次工具调用后重新思考。
// 步骤1: 思考
"I need to check the weather first"
// 步骤2: 行动
call_tool("get_weather")
// 步骤3: 观察
result = "Sunny, 25°C"
// 步骤4: 再思考
"Good weather, suggest outdoor activity"
OpenAI 原生支持
模型直接输出结构化的函数调用 JSON,系统自动执行并将结果返回。
{
"tool_calls": [{
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"Beijing\"}"
}
}]
}
允许 AI 自动串联多个工具,前一个工具的输出成为下一个的输入。
📦 例子场景:"查找北京最近的高评分餐厅并订位"
1. get_location() → 获取经纬度
2. search_restaurants(lat, lon) → 返回餐厅列表
3. make_reservation(restaurant_id) → 完成预订
AI 传递了错误的参数类型或缺失必填参数。
解决:在 Schema 中明确标注 required 字段,并提供示例。
外部工具响应过慢或无响应。
解决:设置超时限制,并告诉 AI "工具不可用,尝试其他方法"。
// 重试机制 + 降级方案
async function executeTool(toolName, params) {
const maxRetries = 3;
for (let i = 0; i < maxRetries; i++) {
try {
return await tools[toolName](params);
} catch (error) {
if (i === maxRetries - 1) {
// 最后一次失败,返回降级方案
return {
success: false,
message: "Tool unavailable, using fallback"
};
}
// 指数退避
await sleep(1000 * Math.pow(2, i));
}
}
}
OpenAI 的插件系统允许 ChatGPT 访问第三方服务,如 Zapier、Expedia 等。
• 标准化的 OpenAPI 规范
• OAuth 认证支持
• 内置审查与限流
不仅生成代码,还能执行终端命令、搜索文档、创建 PR。
• 集成 Git 操作工具
• 文件系统读写
• 代码执行沙箱
Alexa / Google Home 通过工具调用控制智能设备。
• 设备发现与绑定
• 场景自动化
• 多设备协同控制
答:合理设计下不会。关键在于:
1)使用白名单限制工具范围
2)高风险操作必须人工确认
3)实时监控和审计日志
4)设置资源使用上限和调用频率限制
答:三个关键点:
1)精确的工具描述 - 写清楚何时使用该工具,避免模糊语言
2)参数示例 - 在 description 中提供格式示例(e.g. "2024-01-30")
3)Few-shot 示范 - 在 system prompt 中给出正确调用示例
答:目前主流支持:
• OpenAI: GPT-4, GPT-4 Turbo, GPT-3.5-turbo (function calling)
• Anthropic: Claude 3 Opus/Sonnet/Haiku (tool use)
• Google: Gemini Pro, Gemini Ultra (function calling)
• 开源: LLaMA 3, Mistral Large, Qwen 2.5 等(需微调或 prompt engineering)
答:主要开销来自:
1)模型推理延迟 - 通常 1-3 秒
2)工具执行时间 - 取决于 API 响应速度
3)多轮对话 - 复杂任务可能需要 3-5 轮
优化:缓存、异步执行、流式输出
答:最佳实践:
1)记录完整对话 - 保存所有 prompt 和 response
2)检查 Schema 匹配 - 确认 AI 生成的参数符合定义
3)增加日志 - 记录工具执行的输入输出
4)单元测试 - 为每个工具编写测试用例
AI 工具调用不仅是技术能力的提升,更是 AI 从“思考者”向“行动者”的跨越。它让 AI 能够真正地与现实世界互动,
完成从信息获取到任务执行的全链路。
随着技术的发展,未来的 AI Agent 将会更加智能、自主和可靠。
掌握工具调用技术,就是掌握了构建下一代智能应用的核心能力。