Function Calling 教程:用工具调用搭建可执行 AI 助手
Function Calling 教程:从工具定义到多轮调用,手把手教你让大模型调用外部函数、查询数据库和执行操作,搭建真正能做事的 AI 助手。
这篇教程适合你吗
你已经用过 OpenAI 或 Claude 的 API 做基础对话,现在想让模型真正「做事」——查天气、搜数据库、调接口、执行操作。Function Calling 就是干这个的。
不适合:完全没写过 API 调用代码的读者。建议先看 OpenAI API 教程。 最终产物:一个能让大模型自动调用外部函数的完整代码示例。环境假设
- Python 3.9+
- OpenAI API Key
- 以当前常见版本为准
> 合规提醒:使用 OpenAI 等海外 API 服务时,请遵守所在地法律法规和服务条款。如遇网络连接不稳定,可参考我们的海外 AI 工具使用指南。
Function Calling 的核心思想
传统 API 调用是「你告诉程序做什么」,Function Calling 是「你告诉大模型有哪些工具,它自己决定用哪个」。
用户: "北京今天天气怎么样?"
↓
大模型: 判断需要调用 get_weather 工具,参数 city="北京"
↓
你的代码: 执行 get_weather("北京"),拿到结果
↓
大模型: 根据结果生成自然语言回答
第一步:定义工具
先告诉模型你有哪些工具可用。工具用 JSON Schema 描述:
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的当前天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,例如 北京、上海"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位,默认摄氏度"
}
},
"required": ["city"]
}
}
}
]
关键:description 写得越清晰,模型越能准确判断何时调用。这是 Function Calling 效果好坏的核心。
第二步:发送请求
from openai import OpenAI
client = OpenAI() # 自动读取 OPENAI_API_KEY 环境变量
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools,
tool_choice="auto" # 让模型自动决定是否调用
)
第三步:处理工具调用
模型不会直接调用你的函数——它只是返回「我想调用这个函数,参数是这些」。你需要自己执行:
import json
message = response.choices[0].message
# 检查模型是否要求调用工具
if message.tool_calls:
for tool_call in message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
if function_name == "get_weather":
# 这里是你真正执行函数的地方
result = get_weather(arguments["city"], arguments.get("unit", "celsius"))
print(f"天气结果: {result}")
注意:模型返回的是「调用请求」,不是执行结果。你必须自己实现函数逻辑,然后把结果返回给模型。
第四步:把结果返回给模型
拿到工具执行结果后,再发一次请求让模型生成最终回答:
# 把工具结果添加到对话历史
messages.append(message) # 模型的 tool_calls 消息
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps({"city": "北京", "temp": 28, "condition": "晴"})
})
# 再次请求,让模型基于工具结果生成回答
final_response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
print(final_response.choices[0].message.content)
# → "北京今天天气晴朗,气温 28°C,适合外出。"
完整流程总结
定义 tools → 发送请求 → 模型返回 tool_calls → 你执行函数 → 把结果返回 → 模型生成最终回答
这就是一个完整的 Function Calling 循环。
多工具场景
实际项目中通常定义多个工具。模型会根据用户意图自动选择:
tools = [
{"type": "function", "function": {"name": "get_weather", "description": "查天气", ...}},
{"type": "function", "function": {"name": "search_web", "description": "搜索网页", ...}},
{"type": "function", "function": {"name": "send_email", "description": "发邮件", ...}},
]
用户说「帮我搜一下最新的 AI 新闻」→ 模型自动选择 search_web。
用户说「给张三发封邮件」→ 模型自动选择 send_email。
Claude 的 Function Calling
Claude 的工具调用逻辑类似,但 API 格式不同:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "查询指定城市的当前天气信息",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}],
messages=[{"role": "user", "content": "北京天气怎么样?"}]
)
# 检查 stop_reason 是否为 tool_use
for block in response.content:
if block.type == "tool_use":
print(f"调用工具: {block.name}, 参数: {block.input}")
> 合规提醒:使用 Anthropic Claude API 时请遵守 Anthropic 的服务条款。API 服务的可用性和定价可能因地区不同而有所变化。
常见问题与排错
模型不调用工具
原因:工具描述不够清晰,模型不确定何时使用。 解决:在description 中明确说明「在什么场景下使用这个工具」,而不是只写工具名。
模型调用了错误的工具
原因:多个工具的功能描述有重叠。 解决:让每个工具的职责边界更清晰。如果两个工具确实容易混淆,考虑合并成一个。参数格式错误
原因:parameters 的 JSON Schema 定义不够严格。
解决:善用 enum、required、description 约束参数,减少模型自由发挥的空间。
进阶学习
- 不了解概念?先看AI 工具调用是什么
- 想了解 Claude 的工具调用?看 Claude Tool Use 教程
- 想了解结构化输出?看 OpenAI 结构化输出教程
- 想搭建完整的 Agent?看 AI 工作流是什么
总结
- Function Calling 让大模型自动决定调用哪个工具
- 你定义工具接口,模型负责理解和调用,你负责执行
- 关键是写好工具的
description,让模型准确理解何时使用 - 可以定义多个工具,模型根据用户意图自动选择
---
本文最后更新于 2026-07-27。代码示例基于当前常见版本,请根据最新 API 文档调整。保障 API 调用稳定性
调用 OpenAI、Anthropic 等海外 API 时,网络波动可能导致请求超时或失败。稳定的网络环境有助于提升开发效率。
⚠️ 请遵守所在地的法律法规和服务条款。使用 AI API 时请遵守各平台的使用政策。
了解安全上网方案 →常见问题
相关推荐
AI 工具调用是什么?Function Calling、插件和 API 怎么区分
AI 工具调用是什么?解释 Function Calling 的原理、与插件和 API 调用的区别,以及工具调用在 AI Agent 中的作用。
OpenAI API 调用教程:Python 集成指南
OpenAI API 怎么用?本文从申请 API Key 到 Python 调用,手把手教你使用 GPT-4o、DALL-E、Whisper 等 OpenAI API,含完整代码和最佳实践。
Claude API 使用教程:从申请到调用
Claude API 怎么用?本文从申请 API Key 到 Python 调用,手把手教你使用 Anthropic 的 Claude API,含基础对话、工具调用和最佳实践。
AI 工作流是什么?Agent、自动化和低代码平台的关系
AI 工作流是什么?解释 AI 工作流的概念、与传统自动化的区别,以及 Dify、Coze 等平台如何构建 AI 工作流。
获取更多 AI 内容
订阅更新,第一时间获取新教程和工具推荐。