OpenAI SDK

image

1. OpenAI SDK

[!note] 版本说明
本文代码已更新至 OpenAI Python SDK v1.x。旧的 openai.Completion 接口及 text-davinci-003、code-davinci-002 等模型已于 2024 年初退役,请使用新的 client.chat.completions 接口。

1.1. 图表说明

为了更好地理解 API 调用流程,以下是一个简单的流程图:

+----------------+       +----------------+       +----------------+
| 用户输入提示   | ----> | 调用OpenAI API | ----> | 返回生成的响应 |
+----------------+       +----------------+       +----------------+

1.2. 步骤 1:获取 API 密钥

官网:openai

首先,你需要注册一个 OpenAI 账号并获取 API 密钥。访问 OpenAI 官网并登录后,导航到 API 密钥页面(platform.openai.com/api-keys)生成一个新的 API 密钥。

1.3. 步骤 2:安装 OpenAI SDK

根据你使用的编程语言,安装相应的 OpenAI SDK。以下是 Python 的安装示例:

1.3.1. 创建一个新的 conda 环境

[!note] 说明
这是可选的,但推荐这样做以避免潜在的包冲突。

conda create -n openai_env python=3.9
conda activate openai_env

1.3.2. 使用 conda 安装 OpenAI SDK

这个命令会从 conda-forge 频道安装 OpenAI 包:

conda install -c conda-forge openai

[!note] 提示
如果上述命令执行较慢或遇到问题,也可以尝试使用 pip 安装:

pip install openai

1.3.3. 验证安装

安装完成后,你可以在 Python 中导入并使用 OpenAI SDK:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"),
)

# 使用 SDK 的功能

1.4. 步骤 3:配置客户端

在新的 SDK 中,通过创建 OpenAI 客户端来完成配置。API 密钥建议从环境变量读取,避免硬编码泄露:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"),  # 推荐从环境变量读取
    # base_url="http://localhost:3000/v1",     # 可选:使用兼容 OpenAI 接口的中转/本地服务
)

1.5. 步骤 4:调用 API

使用客户端的接口调用 API。以下是一个调用聊天模型进行文本翻译的示例:

response = client.chat.completions.create(
    model="gpt-4o-mini",  # 使用的模型
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Translate the following English text to French: 'Hello, how are you?'"},
    ],
    max_tokens=60,  # 生成的最大 token 数
)

# 打印生成的文本
print(response.choices[0].message.content.strip())

1.6. 步骤 5:处理响应

解析和处理 API 响应,以便在你的应用程序中使用。例如,通过 response.choices[0].message.content 提取生成的文本并显示给用户。

1.7. 步骤 6:集成到应用程序

将上述代码集成到你的应用程序逻辑中。例如,如果你在开发一个聊天机器人,可以将用户输入传递给 OpenAI API,并将 API 的响应返回给用户。

1.8. 步骤 7:优化和调试

根据实际使用情况优化 API 调用和响应处理。你可以调整 API 参数,如 max_tokens、temperature 等,以获得更符合需求的结果。同时,启用调试模式(如设置环境变量 OPENAI_LOG=debug)以获取更多关于请求和响应的信息,帮助你解决集成过程中遇到的问题。

2. 详细的环境配置

在实际操作中,用户可能会遇到环境配置的问题。以下是配置 Python 环境的详细步骤,例如安装 Python、创建虚拟环境等:

# 安装 Python
sudo apt-get install python3

# 创建虚拟环境
python3 -m venv myenv

# 激活虚拟环境
source myenv/bin/activate

# 安装 OpenAI SDK
pip install openai

3. 实操案例

3.1. 简单的聊天机器人

以下是一个完整的 Python 示例,展示了如何集成 OpenAI 的语言模型到一个简单的聊天应用中:

from openai import OpenAI

client = OpenAI(api_key="你的API密钥")

def get_response(prompt):
    """
    调用 OpenAI API 生成响应
    :param prompt: 用户输入的提示
    :return: AI 生成的响应
    """
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=150,
    )
    return response.choices[0].message.content.strip()

# 示例用户输入
user_input = "Tell me a joke."
response = get_response(user_input)
print("AI:", response)

3.2. 生成新闻摘要

from openai import OpenAI

client = OpenAI(api_key="你的API密钥")

def summarize_article(article_text):
    """
    调用 OpenAI API 生成新闻摘要
    :param article_text: 文章内容
    :return: 生成的摘要
    """
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "user", "content": f"Summarize the following article: {article_text}"},
        ],
        max_tokens=100,
    )
    return response.choices[0].message.content.strip()

# 示例文章内容
article = "OpenAI has released a new model that can generate human-like text. This model is based on the GPT architecture and has been trained on a diverse range of internet text."
summary = summarize_article(article)
print("Summary:", summary)

3.3. 生成代码

from openai import OpenAI

client = OpenAI(api_key="你的API密钥")

def generate_code(prompt):
    """
    调用 OpenAI API 生成代码
    :param prompt: 用户输入的提示
    :return: 生成的代码
    """
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "You are an expert programmer."},
            {"role": "user", "content": prompt},
        ],
        max_tokens=150,
    )
    return response.choices[0].message.content.strip()

# 示例用户输入
code_prompt = "Write a Python function to calculate the factorial of a number."
generated_code = generate_code(code_prompt)
print("Generated Code:", generated_code)

4. 常见问题解答(FAQ)

4.1. 如何处理 API 请求超时?

可以设置请求的超时时间,确保在网络不稳定时不会无限等待:

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "Translate the following English text to French: 'Hello, how are you?'"},
    ],
    max_tokens=60,
    timeout=10,  # 设置超时时间为 10 秒
)

4.2. 如何处理 API 调用次数限制?

OpenAI API 有调用次数限制(Rate Limit),触发时会返回 429 错误。可以通过优化请求、减少不必要的调用来应对,并配合指数退避进行重试:

import time
import openai

for attempt in range(5):
    try:
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": "Tell me a joke."}],
        )
        print(response.choices[0].message.content)
        break
    except openai.RateLimitError:
        time.sleep(2 ** attempt)  # 指数退避:1s、2s、4s、8s...