如何在 Python 中使用 ChatGPT API?

2025 年 1 月 5 日 | 阅读 9 分钟

要在 Python 中使用 ChatGPT API,您需要向 API 端点发出 POST 请求。以下是执行此操作的方法:

  1. 如果您还没有安装 `requests` 库,请在终端中运行 `pip install requests` 进行安装。
  2. 从 OpenAI 平台获取您的 API 密钥。
  3. 向 ChatGPT API 端点发送 POST 请求,该端点是 `https://api.openai.com/v1/engines/davinci-codex/completions`。您需要在请求标头中包含您的 API 密钥,并将输入提示作为数据传递。

以下是一个演示如何执行此操作的 Python 脚本示例:

Python

示例输入

示例输出

Bonjour, comment vas-tu ? 

请注意,您需要将 `YOUR_API_KEY` 替换为您的实际 API 密钥。

另外,请注意,数据中的 `max_tokens` 参数指定了应生成的最大 token 数。您可以根据需要调整此值。

我提供的示例 Python 脚本演示了如何使用 OpenAI ChatGPT API 基于给定的输入提示生成文本。以下是脚本工作原理的分步说明:

  1. 首先,我们导入 `requests` 库,我们将使用它来向 API 发出 HTTP 请求。
  2. 接下来,我们定义一个变量 `api_key` 并将其赋值为我们的实际 API 密钥。您需要将占位符值 `'YOUR_API_KEY'` 替换为您的实际 API 密钥,您可以从 OpenAI 平台获取。
  3. 然后,我们定义一个变量 `prompt` 并将其赋值为我们要发送到 API 的输入提示。在此示例中,提示是 `'将以下英语文本翻译成法语:“你好,你好吗?”'`。
  4. 我们定义一个变量 `url` 并将其赋值为 API 端点 URL,即 `'https://api.openai.com/v1/engines/davinci-codex/completions.'`
  5. 我们定义一个变量 `headers` 并将其赋值为一个包含 API 请求标头的字典。标头包括 `Content-Type` 标头,设置为 `'application/json'`,以及 `Authorization` 标头,设置为 `'Bearer {api_key}'`。`{api_key}` 是一个占位符,将由实际 API 密钥值替换。
  6. 我们定义一个变量 `data` 并将其赋值为一个包含 API 请求数据的字典。数据包括 `prompt` 键,设置为输入提示值,以及 `max_tokens` 键,设置为 `100`。`max_tokens` 参数指定了应生成的最大 token 数。您可以根据需要调整此值。
  7. 通过调用 `requests.post()` 函数并将 `url`、`headers` 和 `data` 变量作为参数传递来向 API 发出 POST 请求。
  8. 通过调用 `response.json()` 方法解析来自 API 的 JSON 响应。
  9. 通过访问响应 JSON 对象的 `['choices'][0]['text']` 键来提取生成的文本。我们还调用 `strip()` 方法对生成的文本进行处理,以删除任何前导或尾随空格。
  10. 最后,我们将生成的文本打印到控制台。

以下是关于脚本各个组件及其工作原理的更多信息:

  • `requests` 库是一个流行的 Python 库,用于发出 HTTP 请求。在此脚本中,我们使用 `requests.post()` 函数向 OpenAI ChatGPT API 发出 POST 请求。`requests.post()` 函数接受三个参数:API 端点的 URL、请求的标头以及请求的数据。
  • `api_key` 变量存储您的 OpenAI API 密钥。此密钥用于验证您对 API 的请求。您可以从 OpenAI 平台获取您的 API 密钥。
  • `prompt` 变量存储您要发送到 API 的输入提示。输入提示是一个字符串,指定您希望 ChatGPT 模型基于其生成文本。在此示例中,提示是将英语句子翻译成法语的请求。
  • `url` 变量存储 API 端点的 URL。API 端点是您发送请求的 URL。在这种情况下,端点是 `'https://api.openai.com/v1/engines/davinci-codex/completions'`。
  • `headers` 变量存储 API 请求的标头。标头用于指定请求的内容类型,并通过您的 API 密钥进行身份验证。`Content-Type` 标头设置为 `'application/json'`,表示请求正文为 JSON 格式,`Authorization` 标头设置为 `'Bearer {api_key}'` 以包含您的 API 密钥。
  • `data` 变量存储 API 请求的数据。数据是一个字典,指定输入提示和要生成的最大 token 数。`prompt` 键设置为输入提示值,`max_tokens` 键设置为 `100`。`max_tokens` 参数是可选的,但有助于限制生成文本的长度。
  • `response` 变量存储来自 API 的响应。响应是 `requests.post()` 函数返回的 `Response` 对象。
  • `response_json` 变量存储来自 API 的 JSON 响应。JSON 响应是一个字典,包含生成的文本和其他信息。我们通过在 `response` 对象上调用 `response.json()` 方法来获取 JSON 响应。
  • `generated_text` 变量存储来自响应的生成文本。生成文本是 ChatGPT 模型基于输入提示生成的文本字符串。我们通过访问 `response_json` 字典的 `['choices'][0]['text']` 键来获取生成文本。我们还调用 `strip()` 方法对生成文本进行处理,以删除任何前导或尾随空格。
  • 最后,我们使用 `print()` 函数将生成的文本打印到控制台。

错误处理

最好为您的脚本添加错误处理,以防 API 请求失败。您可以检查响应的状态代码来确定请求是否成功。例如,您可以添加一个 `if` 语句来检查响应状态代码是否为 `200`,这表示请求成功。如果状态代码不是 `200`,您可以引发异常或向控制台打印错误消息。

Python

示例输入

示例输出

Comment te sens-tu aujourd'hui ?

处理较长的提示

如果您的输入提示非常长,可能会超过模型的最大 token 限制,对于 `davinci-codex` 引擎来说,这个限制是 4096 个 token。在这种情况下,您可能需要截断或以其他方式缩短提示,使其符合 token 限制。

价格

请记住,OpenAI API 是一项付费服务,使用 API 的成本取决于 API 处理的 token 数。每个 API 请求都会消耗一定数量的 token,这取决于输入提示中的 token 数和生成文本中的 token 数。请务必查阅 OpenAI 定价文档以获取有关使用 API 成本的更多信息。

模型选择

示例脚本使用 `davinci-codex` 引擎,这是一个强大而通用的模型。但是,OpenAI 提供了许多其他模型,您可以根据您的具体需求进行选择。您可以尝试不同的模型,看看哪种模型最适合您的用例。

处理长响应

如果生成的文本过长,并且超出了模型的最大 token 限制,您可以截断或以其他方式缩短文本以使其符合限制。您也可以尝试减小 API 请求中的 `max_tokens` 参数来限制生成文本的长度。

温度和 Top P

`temperature` 和 `top_p` 参数可用于控制生成文本的随机性。`temperature` 参数控制随机性的程度,值越高,文本越随机,值越低,文本越确定。`top_p` 参数控制采样 token 时要考虑的概率质量的比例,值越高,考虑的 token 越多,值越低,考虑的 token 越少。您可以尝试这些参数的不同值,看看它们如何影响生成的文本。

Python

系统消息

您可以在提示中包含系统消息,为模型提供额外的上下文或说明。例如,您可以包含一个指定生成文本所需格式的系统消息,或为模型提供其他说明。系统消息应放在提示的开头,后面跟着用户消息。

Python

对话上下文

如果您正在构建一个会话式应用程序,可以在提示中包含会话历史记录,为生成的文本提供上下文。会话历史记录应同时包含用户消息和模型响应,每条消息之间用换行符分隔。这将有助于模型生成更连贯且与上下文相关的响应。

Python

速率限制

请记住,OpenAI API 有速率限制,限制您在给定时间段内可以发出的请求数量。速率限制取决于您的订阅计划。如果您超过速率限制,您可能会收到 `429 Too Many Requests` 错误。您可以通过在脚本中添加延迟或重试机制来处理速率限制错误。

请求超时

您可以通过向 `requests.post()` 函数添加 `timeout` 参数来为 API 请求指定超时。timeout 参数指定请求在引发超时错误之前等待响应的最大秒数。例如,您可以将超时设置为 10 秒,如下所示:

Python

输入和输出编码

OpenAI API 期望输入数据为 JSON 格式,输出数据也为 JSON 格式。在将数据发送到 API 时,您应该使用 `requests.post()` 函数的 `json` 参数将数据转换为 JSON 格式。在从 API 接收数据时,您应该使用 `response.json()` 方法解析 JSON 响应。

处理特殊字符

如果您的输入提示包含特殊字符,例如引号或换行符,您应该在提示字符串中正确转义它们。例如,您可以使用 `\"` 转义序列在提示字符串中包含双引号字符,并使用 `\n` 转义序列包含换行符。

API 文档

OpenAI API 文档是一个宝贵的资源,它提供了有关如何使用 API 的详细信息,包括可用的模型、参数和响应格式。我建议阅读文档以更好地了解 API 的工作原理,并了解任何新功能或更新。