OpenAI 提供了一系列强大的 AI 模型(如 GPT 系列、DALL-E、Whisper 等),并通过官方 Python 库
openai 开放 API 接口,方便开发者在 Python 中集成这些能力。本文将详细讲解
openai 库的安装、核心功能、常用 API 调用及高级用法,帮助你快速上手。
OpenAI 官方 Python 库已更新至 v1 版本(2023 年底发布),与旧版本(v0.x)接口差异较大,推荐使用最新版本:
pip install openai --upgrade
使用 OpenAI API 需先获取 API 密钥,步骤如下:
- 注册 / 登录 OpenAI 账号
- 进入 API 密钥页面
- 点击 "Create new secret key" 生成密钥(注意:密钥仅显示一次,需妥善保存)
在代码中通过 API 密钥初始化 OpenAI 客户端,推荐将密钥存储在环境变量中(避免硬编码泄露):
import os
from openai import OpenAI
若临时测试,也可直接传入密钥(不推荐生产环境):
client = OpenAI(api_key="sk-你的API密钥")
GPT-3.5-turbo、GPT-4 等模型是 OpenAI 最常用的对话模型,通过 chat.completions.create 接口调用,支持多轮对话。
发送一个用户问题,获取模型回复:
输出示例:
机器学习简单说就是让电脑自己"学习"怎么做事情,而不是我们一步一步教它。比如,你想让电脑认出照片里是不是猫,不用告诉它"猫有尖耳朵、长胡须",而是给它看成千上万张猫的照片和不是猫的照片,电脑会自己总结出"猫的特征",之后再看到新照片,就能判断是不是猫了。
通过在 messages 列表中追加历史消息,实现上下文连贯的多轮对话:
输出示例:
模型回复:10以内的质数有2、3、5、7。注意1不是质数哦,因为它只有1一个因数~
model:模型名称,常用选项:
gpt-3.5-turbo:性价比高,适合日常对话、简单任务(支持 4k tokens)。
gpt-3.5-turbo-1106:支持 16k tokens,上下文更长。
gpt-4:更强的推理能力,适合复杂任务(支持 8k/128k tokens)。
temperature:控制生成随机性(0-2):
- 0:生成内容固定、确定(适合事实性问答)。
- 1:中等随机性(适合创意生成)。
- 2:高度随机(可能生成离奇内容)。
max_tokens:限制生成内容长度(输入 tokens + 输出 tokens 不能超过模型上限)。
stream:是否流式返回(stream=True 时,内容会逐字生成,适合实时聊天界面)。
通过 images.generate 接口调用 DALL-E 模型生成图像:
response = client.images.generate(model="dall-e-3",
提示:若需要修改已有图像,可使用 images.edit 接口(需提供原始图像和蒙版)。
通过 audio.transcribe 接口调用 Whisper 模型,将音频文件转为文字:
若需要翻译(如将其他语言转为英文),使用 audio.translations.create:
with open("test_spanish.m4a", "rb") as audio_file:response = client.audio.translations.create(model="whisper-1",file=audio_file)
print("翻译结果(英文):", response.text)
当 stream=True 时,模型会逐块返回内容,适合构建实时聊天界面:
messages = [{"role": "user", "content": "用 100 字描述春天的景色"}]
输出效果:内容会逐字显示,类似人类打字的过程。
当需要模型调用外部工具(如查天气、调用 API)时,可通过函数调用功能实现。核心步骤:
- 定义函数描述(告诉模型有哪些工具可用)。
- 模型判断是否需要调用工具,返回调用指令。
- 执行工具调用,将结果返回给模型,获取最终回答。
示例(调用 “查天气” 函数):
输出示例:
最终回答:北京今天天气晴朗,气温在20到28℃之间,伴有微风,适合户外活动~
API 调用可能因密钥错误、网络问题、参数错误等失败,需捕获异常:
from openai import OpenAIError, AuthenticationError, RateLimitErrortry:response = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": "Hello"}])
except AuthenticationError:print("API 密钥错误,请检查密钥是否正确")
except RateLimitError:print("超过速率限制,请稍后再试")
except OpenAIError as e:print(f"API 调用失败:{e}")
- 保护 API 密钥:避免硬编码在代码中,使用环境变量(
os.getenv)或配置文件管理。
- 控制成本:GPT-4 等模型价格较高,测试时可先用
gpt-3.5-turbo,并通过 max_tokens 限制输出长度。
- 处理速率限制:OpenAI 对 API 调用频率有限制(如免费账号每分钟 3 次),可通过重试机制(如
tenacity 库)处理。
- 优化 prompt:清晰描述需求(如 “用 3 句话总结”“以列表形式输出”),提升模型响应质量。