Skip to content

OpenAI API详解

概述

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

核心概念

1. 模型类型

OpenAI提供多种模型类型:

  • GPT-4o系列:最新的多模态模型,速度快、能力强
  • GPT-4o mini:轻量级模型,性价比高
  • o1/o3系列:推理模型,擅长复杂逻辑
  • DALL-E 3:图像生成模型
  • Whisper:语音识别模型
  • Embeddings:文本嵌入模型

2. API端点

OpenAI API的主要端点:

  • Chat Completions:聊天补全API(主要使用)
  • Responses:新的响应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-4o-mini",  # 推荐使用gpt-4o-mini
    messages=[
        {"role": "system", "content": "你是一个有用的助手。"},
        {"role": "user", "content": "你好!"}
    ],
    temperature=0.7,
    max_tokens=1000
)

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

2. 流式响应

python
from openai import OpenAI

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

# 流式调用
stream = client.chat.completions.create(
    model="gpt-4o-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="")

3. 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-4o-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}")

4. 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

# 使用JSON模式
response = client.beta.chat.completions.parse(
    model="gpt-4o-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}")

5. Embeddings API

python
from openai import OpenAI

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

# 获取文本嵌入(推荐使用text-embedding-3-small)
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]}")

6. 图像生成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-4o-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-4o-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-4o-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}")

模型选择指南

模型特点适用场景价格
gpt-4o最强多模态复杂任务、图像理解较高
gpt-4o-mini快速便宜日常对话、简单任务
o1推理能力强数学、编程、逻辑
o3-mini推理+性价比中等复杂度推理中等

最佳实践

1. 提示设计

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

2. 性能优化

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

3. 成本控制

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

常见问题

1. 认证问题

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

2. 速率限制

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

3. 响应质量问题

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

下一步学习