Python中的ChatGPT库2025 年 1 月 5 日 | 阅读 14 分钟 OpenAI发布了一个官方的ChatGPT API Python客户端库,名为 `openai`。这个库提供了一个易于使用的界面,用于与ChatGPT API交互和生成文本补全。 要使用 `openai` 库,您首先需要安装它。您可以使用 `pip` 来完成安装: 安装完库后,您就可以使用它来生成ChatGPT的文本补全。以下是您如何使用该库生成文本补全的示例: Python 示例输入 示例输出 there lived a young boy named Jack. He was adventurous and always eager to explore new places. One day, while wandering through the forest, he stumbled upon a mysterious cave. Curiosity getting the best of him, Jack decided to venture inside... 说明 在此示例中,我们首先设置了OpenAI API密钥,然后使用 `openai.Completion.create()` 方法来生成文本补全。`engine` 参数指定了要使用的GPT模型,`prompt` 参数指定了要补全的文本。`max_tokens` 参数控制了生成文本的最大长度。 API的响应是一个字典,其中包含生成的文本,我们可以通过 `response['choices'][0]['text']` 访问它。 您可以在官方OpenAI API文档中找到更多关于如何使用 `openai` 库的信息和示例:https://beta.openai.com/docs/ 安装完库后,您就可以使用它来生成ChatGPT API的文本补全。为此,您需要从OpenAI网站创建API密钥,并使用该密钥对API请求进行身份验证。 API的响应是一个字典,其中包含生成的文本,我们可以通过 `response['choices'][0]['text']` 访问它。 您还可以指定其他参数来控制文本生成的行为,例如 `temperature` 参数,它控制生成文本的随机性;以及 `top_p` 参数,它控制包含更多样化补全的概率。 除了我之前提到的参数之外,还有其他几个参数可用于自定义ChatGPT API的文本生成行为。以下是一些最常用的参数:
以下是您如何使用这些参数生成文本补全的示例: Python 示例输入 示例输出 1. there was a kingdom ruled by a wise king who had a magical sword that could grant wishes. 2. in a faraway land, there lived a princess who had the power to control the elements. 说明 在此示例中,我们指定了 `n` 参数来生成两个补全,`temperature` 参数来控制生成文本的随机性,以及 `stop` 参数来指示文本的结束。 您可以尝试使用这些参数的不同值,看看它们如何影响文本生成的行为。请记住,这些参数的最佳值可能因您的具体用例和所使用的提示而异。 `openai.Completion.create()` 方法详解正如我在之前的消息中提到的,`openai.Completion.create()` 方法用于使用ChatGPT模型为给定提示生成补全。该方法接受多个参数,允许您自定义文本生成的行为。 使用其他模型 除了 `text-davinci-003` 模型之外,OpenAI还提供了几个其他的GPT模型,您可以使用它们来生成文本补全。每个模型都有其优点和权衡,您可以选择最适合您特定用例的模型。一些可用的模型包括:
您可以通过将模型名称传递给 `openai.Completion.create()` 方法的 `engine` 参数来指定要使用的模型,如下所示: Python 错误处理在向ChatGPT API发出请求时,可能会发生错误。例如,如果您的API密钥无效,或者您已超出使用限制,API可能会返回错误。您可以通过捕获 `openai.error.OpenAIError` 异常来处理错误,如下所示: Python 在此示例中,我们捕获 `OpenAIError` 异常并将错误消息打印到控制台。 批量请求您可以通过将提示列表传递给 `openai.Completion.create()` 方法的 `prompts` 参数来向ChatGPT API发出批量请求。这使您可以在一次API调用中为多个提示生成补全。以下是一个示例: Python 示例输入 示例输出 1. there was a young girl named Alice who lived in a small village. 2. jumps over the lazy dog. The quick brown fox jumps over the lazy dog's back. 说明 在此示例中,我们将两个提示的列表传递给 `prompts` 参数,API返回一个补全列表,每个提示一个。 流式传输`openai` 库还支持流式传输,允许您实时接收模型生成的补全。您可以通过将 `stream=True` 参数传递给 `openai.Completion.create()` 方法来启用流式传输,如下所示: Python 示例输入 示例输出 there lived a beautiful princess named Cinderella. She had a kind heart and was loved by all who knew her. 说明 在此示例中,我们通过传递 `stream=True` 参数启用了流式传输,API返回一个生成器对象,我们可以对其进行迭代以获取接收到的生成文本。 语言支持ChatGPT模型支持多种语言的文本生成。虽然该模型主要是在英语文本上训练的,但它在一定程度上仍然可以生成其他语言的文本。您可以通过在提示中包含语言来指定语言,如下所示: Python 示例输入 示例输出 una princesa llamada Aurora que vivía en un castillo encantado en lo alto de una colina. 说明 在此示例中,我们指定了一个西班牙语的提示,API生成了一个西班牙语的文本补全。 以下是一些在使用 `openai` Python客户端库时可能很有用的更多主题和技巧: 提示工程您使用的提示对ChatGPT模型生成的补全的质量和相关性有很大影响。提示工程是设计和微调提示以从模型中获得所需输出的过程。关于提示工程的一些技巧包括:
速率限制ChatGPT API有速率限制,限制您在一定时间内可以发出的请求数量。速率限制取决于您的订阅计划,并且可以在OpenAI API文档中找到。跟踪您的使用情况并妥善处理速率限制错误非常重要。 费用 使用ChatGPT API的成本取决于模型处理的令牌数量。输入和输出令牌都计入总成本。您可以使用 `openai.Util.count_tokens()` 方法计算文本字符串中的令牌数量,如下所示: Python 示例输入 示例输出 The text contains 4 tokens 说明 在此示例中,我们计算了输入文本中的令牌数量并将结果打印到控制台。 清理和格式化ChatGPT API返回的生成文本可能包含前导和尾随空格、换行符或其他格式字符。您可以使用标准的Python字符串操作函数根据需要清理和格式化生成的文本。 异步请求 如果您需要并行发出多个ChatGPT API请求,可以使用 `openai.AsyncCompletion.create()` 方法发出异步请求。这使您可以通过一次发送多个请求而无需等待每个请求完成来更有效地生成补全。以下是一个示例: Python 示例输入 示例输出 1. there was a young girl named Alice who lived in a small village. 2. jumps over the lazy dog. The quick brown fox jumps over the lazy dog's back. 3. there was a rebellion against the tyrannical empire led by a group of brave rebels. 说明 在此示例中,我们定义了一个提示列表和一个为每个提示生成补全的函数。然后,我们创建了一个任务列表来为每个提示生成补全,并使用 `asyncio.gather()` 来并行运行任务。最后,我们打印每个提示的生成文本。 错误处理 在向ChatGPT API发出请求时,妥善处理错误非常重要。除了我之前提到的 `OpenAIError` 异常之外,您还可能遇到其他一些异常,例如 `openai.error.RequestError`、`openai.error.RateLimitError` 和 `openai.error.OpenAIAPIError`。您可以单独捕获这些异常,或者捕获基础的 `openai.error.OpenAIError` 异常来处理所有错误。 模型微调 除了使用OpenAI提供的预训练GPT模型之外,您还可以使用OpenAI微调API来微调自己的模型。微调允许您通过在自己的数据上训练模型来定制模型的行为。您可以在OpenAI微调指南中找到更多关于微调的信息:https://beta.openai.com/docs/guides/fine-tuning 文件上传 OpenAI API还允许您上传文件,这对于微调自己的模型或执行基于文件的搜索等任务非常有用。您可以使用 `openai.File.create()` 方法来上传文件,如下所示: Python 示例输入 假设您有一个名为“myfile.txt”的文件,其中包含您想要上传的一些文本或数据。 示例输出 File uploaded successfully with ID: your-file-id 说明 在此输出中,“your-file-id”将替换为OpenAI API分配给已上传文件的实际ID。此ID稍后可用于微调模型中使用此文件内容的任务。 在此示例中,我们上传了一个名为 `myfile.txt` 的文件,其目的为 `fine-tune`。`purpose` 参数指定了文件的预期用途。 使用模型 `openai` 库提供了一个 `Model` 类,允许您检索有关可用模型及其功能的信息。您可以使用 `openai.Model.retrieve()` 方法来获取有关特定模型的信息,如下所示: Python 示例输入 假设您想检索有关名为“text-davinci-003”的模型的信息。 示例输出 { "id": "text-davinci-003", "created_at": 1621232514, "owner": "openai", "permissions": null, "name": "Davinci Codex", "description": "The davinci-codex engine is a successor to the davinci model, trained on a large-scale dataset sourced from the internet that includes a mixture of licensed data, data created by human trainers, and publicly available data. The model has been trained to work with the codex completion model class.", "is_real_time": false, "is_owner": true, "nlp_version": "1.0.0", "display_name": "Davinci Codex", "training_time": "2018-05-01T00:00:00Z", "fine_tunable": false, "credentials_needed": ["api_key"] } 在此示例中,该代码从OpenAI API检索有关“text-davinci-003”模型的信息,并打印出模型信息,包括其ID、名称、描述、创建日期以及其他相关详细信息。在此示例中,我们检索有关 `text-davinci-003` 模型的信息并将模型信息打印到控制台。 资源和学习
处理长文档 如果您需要为长文档生成补全,务必注意令牌限制。单个API调用中的总令牌数(输入和输出)必须低于模型的最大令牌限制,对于基础GPT-3模型,通常约为4096个令牌。如果您的内容超过此限制,您需要将其拆分成更小的块并发出多个API调用。您可以使用 `openai.Completion.create()` 方法的 `max_tokens` 参数来控制响应的长度。 自定义提示 您可以尝试不同的提示样式来获得所需的输出。例如,您可以使用“将以下英文文本翻译成法文:”或“编写一个Python代码片段来执行以下操作:”等说明。您如何措辞您的提示会影响模型的行为。 上下文管理 您可以通过在提示中包含对话历史来与模型保持对话或上下文。这允许您在前一个响应的基础上进行构建,并与模型进行更具交互性和动态性的交互。例如: Python 多文档摘要 您可以使用ChatGPT模型为多个文档生成摘要,方法是将文档提供在提示中并指示模型进行摘要。例如: Python 后处理 在生成文本补全后,您可以执行后处理来根据需要清理和格式化输出。这可能包括删除不必要的空格、更正语法或重新格式化文本。 实验和微调 不要犹豫尝试不同的提示、参数和方法,以针对您的特定用例微调模型的行为。微调您的提示和参数可以帮助您获得最准确和最相关的结果。 版本控制 `openai` 库有多个版本,在代码中指定您正在使用的库版本非常重要。您可以通过将 `version` 参数传递给 `openai.api_version` 属性来做到这一点,如下所示: Python 这确保您的代码使用的是正确版本的库,并且API的行为符合您的预期。 缓存 如果您使用相同的提示对ChatGPT API进行重复请求,则可以使用缓存来存储结果并避免不必要的API调用。缓存可以帮助提高应用程序的性能并减少API使用量。您可以使用诸如 `diskcache` 或 `cachetools` 之类的缓存库在代码中实现缓存。 速率限制处理 为了有效地处理速率限制,您可以将 `ratelimit` 库与 `backoff` 库结合使用来实现指数退避和重试逻辑。这使您可以在一定的延迟后自动重试失败的请求,并逐渐增加重试之间的延迟,以避免命中速率限制。 安全性 在使用 `openai` 库时,确保您的代码和API密钥是安全的非常重要。避免在代码中硬编码API密钥,并使用环境变量或配置文件来安全地存储API密钥。此外,请确保遵循保护代码和基础架构的最佳实践,例如使用HTTPS、保护服务器以及保持依赖项的更新。 文档 `openai` 库文档齐全,官方OpenAI API文档提供了有关如何使用该库和ChatGPT API的详细信息。请务必参考文档以获取有关最佳实践、用法示例和故障排除技巧的指导。 |
我们请求您订阅我们的新闻通讯以获取最新更新。