OpenAI API 调用教程(Python):安装 SDK、第一个请求与常见报错

用 Python 调用 OpenAI API 的入门示例:安装官方 openai 库、用环境变量配置密钥、用 Responses API 发出第一个请求、读取 token 用量、流式输出,以及 401、429、连接失败等报错怎么排查。代码按官方文档 2026-10-07 版本整理。

NNathaniel bigo··原创首发·AI 辅助撰写
9 分钟读完
资料核对于 2026-10-07 · 依据官方文档与公开资料整理 其他 账号
本文根据 OpenAI 开发者文档(Quickstart、SDKs、Text generation、Streaming、Error codes)和 openai-python 官方仓库 README 整理,资料核对于 2026-10-07。代码里的模型名会随官方更新而变化,请以 Models 页面 为准。

适用于谁

  • 会一点 Python,想写出第一段调用 OpenAI 模型的代码的人;
  • 照着网上旧教程写代码,发现写法和现在的官方 SDK 对不上、运行就报错的人;
  • 想知道报错时先查哪里的人。

结论先说

  1. 准备:Python 3.10 及以上;一个 API Key(获取方法见 /guides/openai-api-key),并设为环境变量 OPENAI_API_KEY。
  2. 安装:pip install openai。
  3. 最小代码:client = OpenAI() → client.responses.create(model=..., input=...) → print(response.output_text)。官方现在推荐新项目用 Responses API;老的 Chat Completions 仍然可用。
  4. 报错先看状态码:401 是密钥问题,429 要区分「请求太快」和「余额 / 限额用完」,APIConnectionError 是网络连不上。

步骤

1. 建一个干净的环境并安装 SDK

bash
python -m venv .venv
# macOS / Linux 激活:source .venv/bin/activate
# Windows 激活:.venv\Scripts\activate
pip install openai

装完可以用 python -c "import openai; print(openai.__version__)" 查看版本。README 提醒:升级后看不到新功能,多半是当前环境还在用旧版本。

2. 配置密钥

官方 SDK 会自动读取环境变量 OPENAI_API_KEY,所以代码里不需要也不应该写密钥。

  • macOS / Linux:export OPENAI_API_KEY="你的密钥"
  • Windows PowerShell:setx OPENAI_API_KEY "你的密钥",然后重新打开终端

如果习惯用 .env 文件,README 推荐配合 python-dotenv 加载,并把 .env 加进 .gitignore,避免密钥进到代码仓库。

3. 发出第一个请求

新建 example.py:

python
from openai import OpenAI

client = OpenAI()  # 自动读取环境变量 OPENAI_API_KEY

response = client.responses.create(
    model="gpt-6-astra",  # 2026-10 官方 Quickstart 使用的模型,可换成其他模型
    instructions="你是一位说话简洁的中文助手。",
    input="用两句话解释什么是 API。",
)

print(response.output_text)

运行 python example.py,几秒后会打印模型回答。几个参数的意思:

  • model:模型 ID。Models 页面把 GPT-6 Astra 列为复杂推理和编程的旗舰,GPT-6.1 Sol 兼顾能力和成本,GPT-6 Luna 适合注重成本、大批量的任务。模型会更新换代,以页面为准。
  • instructions:高层级的行为要求(语气、角色、规则),优先级高于 input 里的内容。
  • input:可以是一段字符串,也可以是带 role 的消息列表。
  • output_text:SDK 提供的便捷属性,把所有文字输出拼成一个字符串。官方提醒 output 数组里经常不止一项(还有推理、工具调用等),不要硬写 output[0].content[0].text。

4. 看这次用了多少 token

python
print(response.usage.input_tokens, response.usage.output_tokens, response.usage.total_tokens)

Responses API 的用量字段是 input_tokens / output_tokens / total_tokens(Chat Completions 叫 prompt_tokens / completion_tokens)。推理模型的内部推理 token 不显示成文字,但按输出 token 计费,所以回答很短、用量却不小是正常的。费用怎么算见 /guides/openai-api-pricing-billing。

5. 流式输出(边生成边显示)

做聊天界面时,加 stream=True,然后按事件类型取文字增量:

python
from openai import OpenAI

client = OpenAI()

stream = client.responses.create(
    model="gpt-6-astra",
    input="写一首四行的小诗,主题是秋天。",
    stream=True,
)

for event in stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)
    elif event.type == "response.completed":
        print()

Responses 的流式返回是带类型的事件,常用的有 response.created、response.output_text.delta、response.completed 和 error。

6. 加上错误处理

python
import openai
from openai import OpenAI

client = OpenAI()

try:
    response = client.responses.create(model="gpt-6-astra", input="你好")
    print(response.output_text)
except openai.AuthenticationError:
    print("401:密钥无效或已被删除,检查 OPENAI_API_KEY")
except openai.RateLimitError as e:
    print("429:", e.code, e.message)  # 先看 code 判断是限速还是余额/限额问题
except openai.APIConnectionError:
    print("连不上 API:检查网络、防火墙或证书设置")
except openai.APIStatusError as e:
    print("其他错误:", e.status_code, e.request_id)

SDK 默认会对连接错误、408、409、429 和 5xx 自动重试 2 次(短暂的指数退避),可以用 OpenAI(max_retries=0) 关掉或改次数;默认超时是 10 分钟,可以用 timeout= 调整。

常见报错速查

报错常见原因处理
401 Incorrect API key provided密钥复制不全、有空格、已删除,或用了别的组织 / 项目的密钥重新复制或生成新密钥
403 Country, region, or territory not supported所在地区不在支持列表查看官方支持国家和地区
429 + credit_balance_exhausted预付额度用完去 Billing 充值,重试没用
429 Rate limit reached请求或 token 发得太快降速、按 Retry-After 等待,详见 /guides/openai-api-429-error
400 BadRequestError参数名、类型写错,或模型不支持该参数读报错信息,对照 API Reference
APIConnectionError / APITimeoutError网络不稳、防火墙拦截、证书问题、请求太大太慢检查网络环境后重试

排查时记下返回的 request ID(SDK 里是 response._request_id,出错时是 e.request_id),联系官方支持时会用到。

常见问题

Q:还能用 client.chat.completions.create 吗?

可以。README 说明 Chat Completions 会长期支持;但官方建议新项目用 Responses API。两者的区别和迁移方法见 /guides/openai-responses-api。

Q:想先不写代码、在网页上试效果?

用 OpenAI Playground,见 /guides/openai-playground。注意 Playground 的调用同样计入 API 用量和费用。

Q:异步怎么写?

把 OpenAI 换成 AsyncOpenAI,每次调用前加 await,其余参数一样。

Q:能把密钥直接写在 OpenAI(api_key="...") 里吗?

技术上可以,但官方不推荐:代码一旦分享或上传仓库,密钥就泄露了。

参考资料

  • OpenAI 开发者文档:Developer quickstart — https://developers.openai.com/api/docs/quickstart
  • OpenAI 开发者文档:SDKs and CLI — https://developers.openai.com/api/docs/libraries
  • openai-python 官方仓库 README — https://github.com/openai/openai-python
  • OpenAI API Reference:Create a response — https://developers.openai.com/api/reference/resources/responses/methods/create
  • OpenAI 开发者文档:Text generation — https://developers.openai.com/api/docs/guides/text
  • OpenAI 开发者文档:Streaming API responses — https://developers.openai.com/api/docs/guides/streaming-responses
  • OpenAI 开发者文档:Error codes — https://developers.openai.com/api/docs/guides/error-codes
  • OpenAI 开发者文档:Models — https://developers.openai.com/api/docs/models
  • OpenAI 帮助中心:Reviewing API usage and costs — https://help.openai.com/en/articles/10478918-reviewing-api-usage-and-costs
需要开通或续费?ChatGPT Plus 充值 →

Nathaniel 的更多内容

  1. 01

    Hugging Face 怎么下载模型:hf 命令行下载单个文件、指定目录与受限模型申请

    Hugging Face 怎么下载模型?本文按官方文档讲清网页下载、hf download 命令行(单个文件、整个仓库、按通配符筛选、下载到指定目录)、访问令牌怎么建、受限模型怎么申请权限,以及缓存目录和超时怎么调。

    其他 AI 工具0
  2. 02

    Claude 提示词缓存(Prompt Caching)入门:缓存时间、价格倍率与命中率

    Claude API 的提示词缓存能把重复的长前缀(系统提示、工具定义、长文档、对话历史)缓存起来,读缓存只收少量费用。本文讲自动缓存与断点写法、5 分钟和 1 小时两种时长、价格倍率、最短长度、怎么看命中率以及命中率低的原因。

    Claude0
  3. 03

    Google AI Studio 怎么用:界面入口、选模型、发第一条提示与获取代码(入门)

    Google AI Studio 是 Google 给开发者试用 Gemini 模型的网页工具。本文讲清它和 Gemini 应用的区别、Playground 与 Build 入口、发第一条提示、运行设置、获取代码,以及免费边界和可用地区。

    Gemini0
  4. 04

    ChatGPT 取消订阅与关闭自动续费:网页、iPhone、安卓分别怎么操作,能退款吗

    ChatGPT Plus / Pro 不想续费了怎么取消?要在哪里买的就在哪里取消。本文按官方帮助中心讲清网页、iPhone、Google Play 和 Business 的取消步骤、要提前多久取消、取消后还能用多久、退款政策,以及重复扣费怎么处理。

    ChatGPT0
  5. 05

    扣子工作流怎么搭建:入口在哪、节点类型、变量引用、试运行与发布

    扣子工作流怎么搭建、入口在哪?本文按扣子官方文档讲清两种做法:新用户在扣子编程里用一段话生成工作流,老用户在旧版低代码画布上拖节点;并说明大模型、代码、选择器节点的配置要点、变量引用写法、试运行和官方限制。

    其他 AI 工具0
  6. 06

    长文档怎么问 AI:资料放前面、问题放最后、先引用再回答(官方长文本提示词技巧)

    把几十页的报告、合同丢给 AI,为什么总是答得笼统或漏掉重点?本文整理 Anthropic、Google、OpenAI 官方文档里针对长文本的提示词建议:资料与问题的摆放顺序、多份文档怎么用标签区分、先摘录原文再作答,并给出可照抄的模板。

    ClaudeGemini0

同产品的其他教程

  1. 01

    ChatGPT 定时任务怎么设置:每天自动提醒、汇总、监控变化与事件触发

    ChatGPT 的定时任务(Scheduled tasks)可以按时提醒、每天推送简报、监控网页或邮箱变化,Plus 起还能由 Gmail、Slack、GitHub 事件触发。本文按官方帮助中心讲清怎么创建、各套餐能建几个、多久能跑一次、通知怎么开、怎么分享。

    ChatGPT0
  2. 02

    ChatGPT 自定义指令怎么设置:个性化设置、回答风格与写法示例

    ChatGPT 的自定义指令、个性(Personality)和特征(Characteristics)分别管什么?本文按官方帮助中心讲清网页和手机的设置入口、字数上限、生效范围,并给出几段可直接改用的自定义指令示例。

    ChatGPT0
  3. 03

    ChatGPT 学习模式怎么用:开启方法、找不到怎么办,配合闪卡和测验复习

    ChatGPT 学习模式(Study mode)不直接给答案,而是一步步提问引导你学懂。本文按官方帮助中心讲清网页和手机怎么开启、为什么找不到、第一条消息怎么写,以及怎么配合 2026 年新增的交互式测验和闪卡复习备考,附可直接复制的提问模板。

    ChatGPT0
  4. 04

    提示词 XML 标签怎么用:用标签和 Markdown 给长提示词分区(官方写法与模板)

    提示词里的 XML 标签有什么用?本文按 Anthropic、OpenAI、Google 官方文档讲清为什么要给提示词分区、标签和 Markdown 标题各适合做什么、标签怎么命名和嵌套,并附通用模板。

    ChatGPTClaude0
  5. 05

    OpenAI Responses API 是什么:和 Chat Completions 的区别与迁移要点

    Responses API 是 OpenAI 现在推荐新项目使用的接口,Chat Completions 仍然支持,Assistants API 已于 2026-08-26 下线。本文用对照表讲清两者在输入输出、多轮对话、函数调用、结构化输出、流式事件上的区别,并按官方迁移指南列出改代码时最容易出错的地方。

    ChatGPT0
  6. 06

    AI生成Logo怎么做:提示词模板、透明背景、矢量化与商标注意事项

    用 ChatGPT、Gemini、Midjourney 生成 Logo,提示词怎么写、怎么出透明背景、为什么还要做矢量化、能不能注册商标?本文按 OpenAI、Google、Midjourney 官方指南和《商标法》整理成从构思到落地的完整流程。

    ChatGPT其他 AI 工具0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~