EN

OpenAI 函数调用完全指南:2026 年开发者完整教程

通过实际示例和生产模式掌握 OpenAI 函数调用

返回教程列表🌐 Read in English
进阶11 分钟
AI Skill Navigation 编辑团队发布于 2026年6月9日

OpenAI 函数调用完全指南:2026 年开发者完整教程

通过实际示例和生产模式掌握 OpenAI 函数调用

OpenAI 函数/工具调用完全指南(2026):使用 JSON Schema 定义工具 → 模型返回结构化调用 → 你执行并反馈结果。包含完整循环的真实代码、生产模式(验证/tool_choice/并行调用/strict)、与结构化输出的区别,以及如何驱动智能体。

OpenAI 函数调用:2026 年开发者完整指南

函数调用(现在通常称为工具调用)让模型决定调用你定义的函数,并返回结构化参数。你将工具描述为 JSON Schema;模型在适当时回复一个工具调用(名称 + JSON 参数)而非自由文本;你的代码执行函数并将结果反馈回去。这是智能体、RAG 检索以及任何需要 LLM 可靠执行操作的应用程序的基础。

核心循环

python

pip install openai

from openai import OpenAI client = OpenAI()

tools = [{ "type": "function", "function": { "name": "get_weather", "description": "获取某个城市的当前天气", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }]

messages = [{"role": "user", "content": "东京的天气怎么样?"}] resp = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools)

call = resp.choices[0].message.tool_calls[0] import json args = json.loads(call.function.arguments) # {"city": "Tokyo"} result = get_weather(**args) # 你的真实函数

将结果反馈回去,以便模型用自然语言回答

messages.append(resp.choices[0].message) messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)}) final = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools) print(final.choices[0].message.content)

重要的生产模式

  • 始终验证参数。 模型返回 JSON,但应将其视为不可信输入——解析为模式(Pydantic)并处理错误值。参见 Pydantic AI vs Instructor
  • 使用 tool_choice 来强制、禁止或自动选择工具。当你需要保证结构化输出时,强制使用特定工具。
  • 处理并行工具调用。 现代模型可以同时请求多个工具;遍历 tool_calls 并为每个调用 ID 追加一条 tool 消息。
  • 保持工具小巧且正交。 许多重叠的工具会混淆模型;少量清晰的工具效果更好。
  • 严格模式/结构化输出 可以保证参数完全匹配你的模式——当下游代码要求严格时使用。
  • 函数调用 vs 结构化输出

    如果你只想要一个类型化的对象(而不需要*执行*任何操作),请使用结构化输出/响应模式,而不是工具往返。如果模型必须选择操作并由你执行,那就是工具调用。Anthropic 的 Claude 通过其工具使用 API 提供了相同的功能——概念是直接迁移的。

    如何驱动智能体

    每个智能体框架本质上都是这个循环加上控制流。要了解其扩展,请比较 OpenAI Assistants vs LangGraphCrewAI vs AutoGen

    常见问题

    模型真的会执行我的函数吗? 不会——它只返回名称和参数。你的代码执行函数并返回结果。 它可以同时调用多个工具吗? 可以,并行调用;分别处理每个 tool_call_id如何保证有效的 JSON? 使用严格/结构化输出模式,并在执行前用 Pydantic 验证。 这仅适用于 OpenAI 吗? 不是——Claude 和其他模型也提供等效的工具使用 API,遵循相同的循环。

    总结

    函数调用将 LLM 从文本生成器转变为可以执行操作的控制器。将工具定义为 JSON Schema,运行调用循环,验证每个参数,并将结果反馈回去。掌握这一点,智能体、RAG 和工具增强型应用都成为同一模式的不同变体。


    *最后更新:2026 年 6 月。请查阅 OpenAI 文档以确认当前 API 形态。*

    相关工具

    LangChainOpenAIPython
    所属主题:OpenAI 开发实战