环境

  • Anaconda:v25.5.1
  • Python:v3.13.9

操作步骤

创建 OpenAI API 密钥

1、打开网址“https://platform.openai.com/api-keys”,点击【Create new secret key】按钮创建一个 API Key。

在这里插入图片描述

在打开的弹窗中填写一个自定义名称,点击【Create secret key】。

在这里插入图片描述

稍等片刻后可以看到 API Key 已经创建好了,这个时候不要着急关闭弹窗,而是先把创建好的 API Key 在本地计算机的记事本或笔记本中保存下来,因为后续一旦关闭弹窗,就看不到这个 API Key 了。

在这里插入图片描述

保存好之后点击【Done】按钮关闭弹窗,此时关于 OpenAI API 密钥创建的工作已经完成,接下来进行密钥的配置。

API 密钥配置

OpenAI API 密钥需要在每次调用 API 时都要在代码中配置的,但是如果直接配置在代码中跟随代码提交 push 到代码仓库后,很多人会剽窃你的 API Key,进而产生恶意费用,所以我们需要将 API Key 藏起来。

  • windows 用户:在计算机的环境变量配置界面,新建一个名称为“OPENAI_API_KEY”的系统变量,值为刚才创建的 API Key。
  • mac 用户:打开 ~/.zshrc 文件,添加如下一行配置。
export OPENAI_API_KEY='your-api-key-here'

通过配置 OPENAI_API_KEY 的环境变量后,后续所有的 API 调用我们就无需在代码中显示的配置自己的 API Key 了。

发送第一个请求

通过下述命令安装 openai 库:

pip3 install openai

安装完成后通过命令 jupyter notebook 启动本地 notebook。
在 notebook 里编写下述代码:

from openai import OpenAI;

client = OpenAI();

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        { "role": "user", "content": "四大文明古国分别有哪些" }
    ]
);

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

运行以上代码,会得到下面输出:

在这里插入图片描述

至此,第一个对 API 大模型的请求发送成功。
代码关键字段解释:

# role 角色
role 一般有 system、user、assistant 三个取值:
  - system:用来指定当前聊天的一些背景信息
  - user:用来指定我们发送给 openai 的信息
  - assistant:用来代表 openai 发送给我们的信息
  
# insufficient_quota 报错问题
网络上很多教程里面用的模型是 gpt-3.5-turbo,但是现在很多地区 gpt-3.5-turbo 已经逐步停用,容易触发限流。所以建议升级模型至 GPT-4.1-mini
或 GPT-4o-mini。

响应体结构及各个参数解释:

ChatCompletion
│     → OpenAI ChatCompletion 接口(也就是 ChatGPT API)返回的一个完整响应对象
├── id: string
│     → 本次请求的唯一 ID
├── object: "chat.completion"
│     → 表示返回对象类型
├── created: number
│     → Unix 时间戳,生成时间
├── model: string
│     → 使用的模型名称,如 gpt-4o-mini-2024-07-18
├── choices: [Choice]
│       │     → 模型的生成结果
│   └── Choice
│       ├── index: number
│       │     → 回答索引(一般为 0)
│       ├── finish_reason: string
│       │     → 模型结束输出的原因
│       │        stop | length | function_call | tool_calls
│       ├── logprobs: null
│       │     → 日志概率信息(通常为空)
│       └── message: ChatCompletionMessage
│             │     → 生成的内容
│             ├── role: string
│             │     → 消息角色(system / user / assistant)
│             ├── content: string
│             │     → 模型生成的文本内容(核心回答)
│             ├── refusal: null
│             │     → 若模型拒绝回答时,拒绝原因
│             ├── annotations: []
│             │     → 模型标注信息(如引用来源)
│             ├── audio: null
│             │     → 若模型生成音频,则为音频内容
│             ├── function_call: null
│             │     → 若模型触发函数调用,这里是调用信息
│             └── tool_calls: null
│                   → 若模型调用工具(例如检索或代码执行)
├── usage: CompletionUsage
│     │     → token 使用统计
│     ├── prompt_tokens: number
│     │     → 输入(提问部分)使用的 token 数
│     ├── completion_tokens: number
│     │     → 输出(模型回答)使用的 token 数
│     ├── total_tokens: number
│     │     → 总计使用的 token 数
│     ├── prompt_tokens_details: PromptTokensDetails
│     │     → 输入 token 详细信息
│     └── completion_tokens_details: CompletionTokensDetails
│           → 输出 token 详细信息(reasoning / audio / prediction 等)
├── system_fingerprint: string
│     → 模型运行版本指纹(用于识别具体 release)
└── service_tier: string
      → 服务等级(如 default / pro)

计算文本 token 数量

API Key 的调用是按照 token 计数的,所以我们有必要了解下当前输入文本的 token 数量,从而估算成本。
通过下述命令安装 tiktoken 库:

pip3 install tiktoken

安装完成后通过下述代码可获得当前输入文本的 token 数量:

import tiktoken;

encoding = tiktoken.encoding_for_model("gpt-4o-mini");
print(encoding.encode("四大文明古国分别有哪些"));

# 输出结果:[11455, 1640, 132115, 27709, 3052, 103651, 100680]

结合文本的 token 数量和当前所用模型的价格,我们可以大致估算出当前对话的成本。

基础参数介绍

  • max_tokens
    控制回答所消耗 tokens 的最大值。它不会自动将回复的篇幅大小控制在这个值内,而是在到达这个 tokens 数量时直接截断。如果我们想实现“将回复的篇幅大小控制在这个值内”,就需要每次在提示语中增加类似于“回复在 500 字以内”这样的提示。
  • temperature(值为 0~2,默认值为 1)
    控制回答的随机性或创造性。值越低时每次回复的都基本保持不变,值越高时每次都会收到一些出人意料的回答。
  • top_p(值为 0~1)
    控制回答的随机性或创造性。与 temperature 原理不同的是,它不改变回答中每个词的概率分布,而是关注于截取概率分布的一个子集,这个词的子集会包含排名在前的最可能的词,并且子集的累计概率刚好大于或等于 top_p 的值。
    由于 temperature 和 top_p 都会控制回答的随机性或创造性,所以官方建议不要同时修改两个值。
  • frequency_penalty(值为 -2~2,默认值为 0,一般设置为 0~1 之间)
    频率惩罚,代表多大程度上惩罚重复内容。正数值表示会基于已生成文本里词的频率对出现过的词进行惩罚,从而降低该词后续出现的概率,这会导致 AI 倾向于避免使用已经出现过的词,从而增加文本的多样性。
  • presence_penalty(值为 -2~2,默认值为 0)
    存在惩罚,也是用于控制生成内容的重复性,但与 frequency_penalty 不同的是,当值为正数时 frequency_penalty 会看词在前面已出现的频率,出现的越频繁,它再次被选中的概率就降低得越多;而 presence_penalty 只看词是否出现,只要出现了就降低频率,不管出现了多少次。换句话说,frequency_penalty 影响的是生成文本里词重复出现的频率,而 presence_penalty 影响的是生成内容是否包含更多的新词。

示例代码如下:

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "四大文明古国分别有哪些"}
    ],
    max_tokens=300,
    temperature=0.1,
    #top_p=1,
    frequency_penalty=0,
    presence_penalty=0
)

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

总结

本文首先介绍了如何申请 OpenAI API Key 以及将生成的 API Key 如何在本地计算机的环境变量中进行配置,然后介绍了如何发送第一个 OpenAI API 的调用请求,同时也简单介绍了文本 token 数量的计算及大概的价格预估,文章最后简单介绍了几个典型的 API 参数用法。相信大家对 OpenAI API 有了一个基础的认识,下一篇文章我们将介绍一下提示工程,从而让我们可以更好地向 AI 进行提问。

本节代码使用的库版本(requirements.txt):

annotated-types==0.7.0
anyio==4.11.0
certifi==2025.10.5
charset-normalizer==3.4.4
distro==1.9.0
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
idna==3.11
jiter==0.11.1
openai==2.6.1
pydantic==2.12.3
pydantic_core==2.41.4
regex==2025.10.23
requests==2.32.5
setuptools==80.9.0
sniffio==1.3.1
tiktoken==0.12.0
tqdm==4.67.1
typing-inspection==0.4.2
typing_extensions==4.15.0
urllib3==2.5.0
wheel==0.45.1
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐