Skip to content

OpenAI API详解 ​

版本基线:本文基于 OpenAI Python SDK ≥1.x(含 Responses API),示例模型为 gpt-5-mini,模型迭代快,以官方模型页为准。更新于 2026-09。

概述 ​

OpenAI API是OpenAI公司提供的大语言模型API服务,是目前最流行的LLM API之一。本章将详细介绍OpenAI API的核心概念、使用方法和最佳实践。

核心概念 ​

1. 模型类型 ​

OpenAI提供多种模型类型(模型迭代快,具体以官方模型页为准):

  • GPT-5 家族:当前主力模型系列,包括 gpt-5 / gpt-5-mini / gpt-5-nano,旗舰为 gpt-5.4
  • o 系列推理模型:o1、o3-mini 等为上一代推理模型,擅长复杂逻辑,能力已逐步并入 GPT-5 家族
  • DALL-E / 图像模型:图像生成模型(如 dall-e-3 仍可用)
  • Whisper:语音识别模型
  • Embeddings:文本嵌入模型(text-embedding-3-small / text-embedding-3-large)

2. API端点 ​

OpenAI API的主要端点:

  • Responses:2026 年的主力接口(推荐,见下文专门小节)
  • Chat Completions:聊天补全API(仍在维护,生态最广)
  • Images:图像生成API
  • Audio:音频处理API
  • Embeddings:文本嵌入API

3. 计费模型 ​

OpenAI API的计费方式:

  • Token计费:按输入输出token数量计费
  • 模型差异:不同模型价格不同
  • 批量折扣:Batch API有50%折扣

核心API ​

1. Chat Completions API ​

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 基础调用
response = client.chat.completions.create(
    model="gpt-5-mini",  # 日常开发推荐 gpt-5-mini
    messages=[
        {"role": "system", "content": "你是一个有用的助手。"},
        {"role": "user", "content": "你好!"}
    ],
    temperature=0.7,
    max_tokens=1000
)

print(response.choices[0].message.content)

2. Responses API(主力接口) ​

Responses API 是 OpenAI 2026 年的主力接口:它是一个有状态的 API(服务端可保存对话状态,用 previous_response_id 即可续写多轮),并内置了常用工具——web_search(联网搜索)、file_search(文件检索)、code_interpreter(代码执行)——无需自己定义和执行函数。

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 内置 web_search 工具:模型自动联网检索并标注来源
response = client.responses.create(
    model="gpt-5-mini",
    input=[
        {"role": "user", "content": "OpenAI 最近发布了哪些新模型?请给出信息来源。"}
    ],
    tools=[{"type": "web_search"}]
)

# 直接取最终文本输出
print(response.output_text)

Responses vs Chat Completions 如何选?

场景推荐
需要联网搜索、文件检索、代码执行等内置能力Responses API
多轮对话不想自己维护 messages 历史Responses API(有状态)
需要兼容大量第三方库/自建框架(LangChain 等)Chat Completions
只做简单的无状态补全、成本敏感两者皆可,Chat Completions 生态更成熟

TIP

新项目建议优先评估 Responses API;已有 Chat Completions 代码可以继续使用,两者模型通用。

3. 流式响应 ​

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 流式调用
stream = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[
        {"role": "user", "content": "写一个关于人工智能的故事"}
    ],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

4. Tool Calling(函数调用) ​

python
from openai import OpenAI
import json

client = OpenAI(api_key="your-api-key")

# 定义工具(推荐使用tools参数,替代旧的functions参数)
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市名称,如:北京"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "温度单位"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

# 调用API
response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[
        {"role": "user", "content": "北京今天天气怎么样?"}
    ],
    tools=tools,
    tool_choice="auto"
)

# 处理工具调用
message = response.choices[0].message
if message.tool_calls:
    tool_call = message.tool_calls[0]
    function_name = tool_call.function.name
    arguments = json.loads(tool_call.function.arguments)
    print(f"调用函数: {function_name}")
    print(f"参数: {arguments}")

5. Structured Outputs(结构化输出) ​

python
from openai import OpenAI
from pydantic import BaseModel
from typing import List

client = OpenAI(api_key="your-api-key")

# 定义输出格式
class MovieReview(BaseModel):
    title: str
    rating: float
    pros: List[str]
    cons: List[str]
    summary: str

# 结构化输出已转正:直接使用 parse(无需 beta 前缀)
response = client.chat.completions.parse(
    model="gpt-5-mini",
    messages=[
        {"role": "system", "content": "你是一个电影评论家。请以JSON格式输出电影评论。"},
        {"role": "user", "content": "请评论电影《流浪地球》"}
    ],
    response_format=MovieReview
)

review = response.choices[0].message.parsed
print(f"电影: {review.title}")
print(f"评分: {review.rating}")

旧写法对照

早期版本需要通过 client.beta.chat.completions.parse(beta 前缀)调用结构化输出,现已转正为 client.chat.completions.parse,请移除 beta。

6. Embeddings API ​

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 获取文本嵌入(推荐使用text-embedding-3-small,ada-002已过时)
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="这是一段测试文本"
)

embedding = response.data[0].embedding
print(f"嵌入维度: {len(embedding)}")  # 1536维
print(f"前5个值: {embedding[:5]}")

7. 图像生成API ​

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 生成图像(dall-e-3 仍可用;图像模型迭代快,以官方模型页为准)
response = client.images.generate(
    model="dall-e-3",
    prompt="一只可爱的猫咪在花园里玩耍",
    size="1024x1024",
    quality="standard",
    n=1
)

image_url = response.data[0].url
print(f"图像URL: {image_url}")

高级功能 ​

1. 多轮对话 ​

python
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

# 多轮对话
messages = [
    {"role": "system", "content": "你是一个有用的助手。"},
    {"role": "user", "content": "你好!"},
    {"role": "assistant", "content": "你好!有什么可以帮助你的吗?"},
    {"role": "user", "content": "请介绍一下人工智能。"}
]

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=messages
)

print(response.choices[0].message.content)

2. JSON模式 ​

python
from openai import OpenAI
import json

client = OpenAI(api_key="your-api-key")

# 强制JSON输出
response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[
        {"role": "system", "content": "你是一个数据助手。请以JSON格式回复。"},
        {"role": "user", "content": "列出3种编程语言及其特点"}
    ],
    response_format={"type": "json_object"}
)

data = json.loads(response.choices[0].message.content)
print(data)

3. 错误处理 ​

python
from openai import OpenAI
from openai import (
    APIError,
    RateLimitError,
    APIConnectionError,
    AuthenticationError
)

client = OpenAI(api_key="your-api-key")

try:
    response = client.chat.completions.create(
        model="gpt-5-mini",
        messages=[{"role": "user", "content": "你好!"}]
    )
    print(response.choices[0].message.content)
except AuthenticationError as e:
    print(f"认证错误: {e}")
except RateLimitError as e:
    print(f"速率限制: {e}")
except APIConnectionError as e:
    print(f"连接错误: {e}")
except APIError as e:
    print(f"API错误: {e}")
except Exception as e:
    print(f"未知错误: {e}")

模型选择指南 ​

模型迭代快,下表仅反映 2026-09 的相对定位,选型请以 OpenAI 官方模型页与定价页为准。

模型特点适用场景价格
gpt-5.4当前旗舰,能力最强复杂任务、高难度推理高
gpt-5主力通用模型绝大多数生产任务中
gpt-5-mini快速便宜日常对话、简单任务低
gpt-5-nano最轻量高并发、低延迟场景最低
o1 / o3-mini上一代推理模型历史项目维护(新项目建议用 GPT-5 家族)高/中等

最佳实践 ​

1. 提示设计 ​

  • 明确指令:清晰明确地描述任务
  • 提供上下文:提供必要的背景信息
  • 指定格式:明确输出格式要求
  • 使用示例:通过示例引导模型行为

2. 性能优化 ​

  • 缓存结果:缓存重复查询结果
  • 批量处理:使用Batch API处理大量请求
  • 异步调用:使用异步API提升并发性能
  • 模型选择:简单任务用gpt-5-mini,复杂任务用gpt-5 / gpt-5.4

3. 成本控制 ​

  • 监控使用量:跟踪API调用次数和费用
  • 优化提示:减少不必要的token消耗
  • 使用缓存:缓存常见问题的回答
  • 选择合适模型:不要过度使用高端模型

常见问题 ​

1. 认证问题 ​

  • API密钥错误:检查API密钥是否正确
  • 密钥过期:重新生成API密钥
  • 权限不足:检查API密钥权限

2. 速率限制 ​

  • 请求过快:降低请求频率
  • 并发过高:减少并发请求数量
  • 使用重试:实现指数退避重试

3. 响应质量问题 ​

  • 输出不准确:优化提示设计
  • 格式错误:使用Structured Outputs
  • 内容重复:调整temperature参数

下一步学习 ​