掌握GPT-4 和 ChatGPT 的 API 的使用方法,以便有效地将它们集成到 Python 应用程序中。首先,需要了解 OpenAI Playground。这将使你在编写代码之前更好地了解模型。接着,需要学习 OpenAI Python 库。这部分内容包括登录信息和⼀个简单的 Hello World 示例。然后,需要学习创建和发送 API 请求的过程,并了解如何处理 API 响应。这将确保你知道如何解释这些 API 返回的数据。最后,还会介绍诸如安全最佳实践和成本管理等考虑因素。随着学习的深入,我们将获得实用的知识,这对使用 GPT-4 和 ChatGPT 进行 Python 开发非常有帮助。在继续阅读之前,请查看 OpenAI 的使用规则。如果还没有账户,请在 OpenAI 主页上创建⼀个。
基本概念
OpenAI 提供了多个专为不同任务设计的模型,每个模型都有自己的定价。接下来,我们将详细地对比这些模型并讨论如何根据需求选择模型。需要注意的是,模型的设计目的——无论是用于补全文本、聊天还是编辑——会影响你如何使用其 API。比如,GPT-4 和 ChatGPT 背后的模型基于聊天目的,并使用聊天端点。提示词不仅适用于 OpenAI API,而且是所有 LLM 的入口点。简单地说,提示词就是用户发送给模型的输入文本,用于指导模型执行特定任务。对于 GPT-4 和 ChatGPT 背后的模型,提示词具有聊天格式,输入消息和输出消息存储在列表中。除了提示词,还有标记。标记是词或词的⼀部分。据粗略估计,100 个标记大约相当于 75 个英语单词。对 OpenAI 模型的请求是根据所使用的标记数量来定价的,也就是说,调用 API 的成本取决于输入文本和输出文本的长度。
OpenAI API 提供的可用模型
通过 OpenAI API,你可以使用 OpenAI 开发的多个模型。这些模型可通过API 作为服务使用(通过直接的 HTTP 调用或提供的库),这意味着 OpenAI 在远程服务器上运行模型,开发人员只需向其发送查询请求即可。每个模型都有自己的功能和定价。需要注意的是,这些模型是专有的,你不能根据自己的需求直接修改模型的代码。但是你可以通过 OpenAI API 在特定数据上微调其中的⼀些模型。⼀些较旧的 OpenAI 模型(包括 GPT-2 模型)并不是专有的。你可以直接从 Hugging Face 或 GitHub 下载 GPT-2 模型,但无法通过 API使用它。由于 OpenAI 提供的许多模型会不断更新,因此很难给出完整的列表。要了解最新的模型列表,请查看 OpenAI 的在线文档。
InstructGPT,这个模型系列可以处理许多单轮文本补全任务。text-ada-001 模型只能处理简单的文本补全任务,但它也是 GPT-3 系列中速度最快、价格最便宜的模型。text-babbage-001 模型和 text-curie-001 模型稍微强大⼀些,但也更昂贵。text-davinci-003 模型可以出色地执行所有文本补全任务,但它也是 GPT-3 系列 中最昂贵的。截至 2023 年 11 月下旬的消息,InstructGPT 系列已经在 2024 年 1 月 4 日统⼀替换为最新的 gpt-3.5-turbo-instruct 模型。
ChatGPT 背后的模型是 gpt-3.5-turbo。作为⼀个聊天模型,它可以将⼀系列消息作为输入,并生成相应的消息作为输出。虽然 gpt-3.5-turbo 的聊天格式旨在进行多轮对话,但它也可用于没有对话的单轮任务。在单轮任务中,gpt-3.5-turbo 的性能与 text-davinci-003 相当。由于 gpt-3.5-turbo 的价格只有 text-davinci-003 的十分之⼀ ,而且两者性能相当,因此建议默认使用它来进行单轮任务。gpt-3.5-turbo 模型的上下文窗口大小约为 4000 个标记,这意味着它可以接收约 4000 个标记作为输入。OpenAI 还提供了另⼀个模型,名为 gpt-3.5-turbo-16k。它具有与标准的 gpt-3.5-turbo 模型相同的功能,但上下⽂窗口大小是后者的 4 倍。截至 2023 年 11 月下旬,最新版本的 text-davinci-003 价格是每千个标记 0.0200 美元,gpt-3.5-turbo-0613 的价格是每千个输⼊标记 0.0030 美元 + 每千个输出标记 0.0040 美元。
这是迄今为止 OpenAI 发布的最大的模型。由于在⼴泛的文本和图像多模态语料库上进行了训练,因此它精通许多领域。GPT-4 能够准确地遵循复杂的自然语言指令并解决难题。它可用于聊天任务和单轮任务,并具有相当高的准确性。OpenAI 提供了两个 GPT-4 模型 :gpt-4 的上下文窗口大小为 8192 个标记,gpt-4-32k 的上下文窗口大小为 32 768 个标记。32 768 个标记大约相当于 24 576 个英语单词,即⼤约 40 页的上下文。截止 2023 年 11 月下旬,OpenAI 已提供 6 个 GPT-4 模型,包括 gpt-4-1106-preview、gpt-4-vision-preview、gpt-4、gpt-4-32k、gpt-4-0613、gpt-4-32k-0613。无论是 GPT-3.5 Turbo 还是 GPT-4,都在持续更新。当提到 gpt-3.5-turbo、gpt-3.5-turbo-16k、gpt-4 和 gpt-4-32k 时,我们指的是这些模型的最新版本。截止 2023 年 11 月下旬,文中提到的模型版本已更新至 gpt-3.5-turbo-1106、gpt-3.5-turbo-0613、gpt-4-1106-preview、gpt-4-32k-0613。
开发人员通常希望 LLM 版本具有良好的稳定性和可见性,以便在应用程序中使用它。对于开发人员来说,如果模型的版本在⼀夜之间发生变化,并且针对相同的输入给出截然不同的回答,那么这样的模型使用起来很困难。为此,OpenAI 提供了这些模型的静态快照版本。上述模型最新的静态快照版本分别是 gpt-3.5-turbo-0613、gpt-3.5-turbo-16k-0613、gpt-4-0613 和 gpt-4-32k-0613。OpenAI 建议使用 InstructGPT 系列而不是原始的 GPT-3模型。这些模型仍然在 API 中以 davinci、curie、babbage 和 ada 的名称提供。鉴于这些模型可能给出奇怪、错误和具有误导性的回答,建议在使用时要谨慎。然而,由于这些模型是仅有的几个可以针对你的数据进行微调的模型,因此它们仍然可用。截OpenAI 已宣布将于 2024 年提供 GPT-3.5 Turbo 和 GPT-4 的微调功能。截止 2023 年 11 月下旬,GPT-3.5 微调功能已完全开放,GPT-4 微调功能可通过申请权限开放。在经过 SFT 阶段后获得,该模型没有经过 RLHF 阶段,也可以通过 API 以 davinci-instruct-beta 的名称使用。
在 OpenAI Playground 中使用 GPT 模型
OpenAI Playground 是⼀个基于 Web 的平台。你可以使用它直接测试 OpenAI 提供的语言模型,而无须编写代码。在 OpenAI Playground 上,你可以编写提示词,选择模型,并轻松查看模型生成的输出。要测试 OpenAI提供的各种 LLM 在特定任务上的表现,OpenAI Playground 是绝佳的途径。以下是访问 OpenAI Playground 的步骤。
- 访问 OpenAI 主页,然后依次单击 Developers → Overview。
- 如果你已经拥有⼀个账户但未登录,请单击屏幕右上方的 Log in。如果还没有 OpenAI 账户,那么你需要创建账户才能使用 Playground 和 OpenAI 的大部分功能。请注意,由于 Playground 和 API 是收费的,因此你在注册账户时需要提供支付方式。
- 登录后,你将在网页的顶部看到加入 Playground 的链接。单击该链接,你应该会看到下图所示的内容。
ChatGPT Plus 选项与使用 API 或 Playground 无关。如果你是 ChatGPT Plus 用户,那么仍需要支付费用才能使用 API 和 Playground。
OpenAI Playground 在 2023 年 11 月 7 日的 OpenAI 首届开发者大会后已更新版本。最新版本的界面与上图中的界面存在差异,请以最新版本为准。界面中的主要空白处用于输入消息。编写完消息后,单击 Submit 按钮以生成输出。在上图所示的示例中,我们编写消息“As Descartes said, I think therefore”(正如笛卡儿所说,我思故),然后单击 Submit 按钮。模型用“I am”(我在)补全了文本。每次单击 Submit 按钮时,OpenAI 都会收取相应的费用。就本例而言,成本约为 0.0002 美元。界面的底部和右侧有许多选项。我们从底部开始。在 Submit 按钮右侧的是撤销按钮(在图中标记为 A),用于删除最后生成的文本。在本例中,它将删除“I am”。接下来是重新生成按钮(在图中标记为 B),用于重新生成刚刚删除的文本。再往后是历史按钮(在图中标记为 C),它会给出过去30 天内的所有请求。请注意,⼀旦进⼊历史菜单,你就可以出于隐私原因轻松地删除请求。
右侧的选项面板提供与界面和所选模型相关的各种设置。我们在此只解释其中的⼀些选项,后文会陆续介绍其他选项。右侧的第⼀个下拉列表是模式列表(在图中标记为 D)。可用的模式有聊天(默认选项)、补全和编辑。补全模式和编辑模式已被标记为遗留模式,现在已经消失。如图所示,语言模型在 Playground 的补全模式下努力补全用户的输入。下图展示了在聊天模式下使用 Playground 的示例。界面左侧是系统面板(在图中标记为 E)。在这里,你可以描述聊天系统的行为方式。比如,在下图中,我们要求它成为⼀个喜欢猫的有用助手。我们还要求它只谈论猫,并给出简短的回答。根据设置的这些参数所生成的对话显示在界面中央。如果想继续与系统对话,你可以单击 Add message(在图中标记为 F),输入消息,然后单击 Submit 按钮(在图中标记为 G)。还可以在右侧定义模型(在图中标记为 H),这⾥使用 GPT-4。请注意,并非所有模型在所有模式下都可用。比如,只有 GPT-4 和 GPT-3.5 Turbo 在聊天模式下可用。截止 2023 年 11 月下旬,OpenAI Playground 聊天模式可用的模型包括 gpt-3.5-turbo、gpt-3.5-turbo-0301、gpt-3.5-turbo-0613、gpt-3.5-turbo-1106、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613。
Playground 还提供了编辑模式。在这种模式下,你提供⼀些文本(在图中标记为 I)和指令(在图中标记为 J),模型将尝试修改文本。在下图所示的例子中,我们给出了⼀段描述⼀个年轻男子要去旅行的文本。同时,我们指示模型将文本中的主人公更改为⼀位年长的女士。可
以看到,结果(在图中标记为 K)符合指令。如下图所示。
在 Playground 界面的右侧、模式下拉列表下方的是模型下拉列表(在图中标记为 L)。正如你已经看到的,这是你选择 LLM 的地方。该下拉列表中可用的模型取决于所选的模式。在模型下拉列表下方的是参数,例如温度(在图中标记为 M),它定义模型的行为。我们不会在此详细讨论这些参数。在详细讨论不同模型的工作原理时,我们会探索这里的大部分参数。界面顶部有⼀个加载预设项的下拉列表(在图中标记为 N)和 4 个按钮。在上图中,我们使用 LLM 来补全句子,但是通过使用适当的提示词,我们也可以让模型执行特定的任务。下图显示了模型可以执行的常见任务。
应注意,预设项不仅定义了提示词,还定义了界面右侧的⼀些选项。如果选择“Grammatical Standard English”(语法标准的英语),那么你将在主窗口中看到下图所示的提示词。
如果单击 Submit 按钮,那么你将得到以下结果:“She did not go to the market”(她没有去市场)。虽然可以从下拉列表中的提示词入手,但是你应该修改它们以使其适合你的问题。OpenAI 为不同的任务提供了完整的示例列表,详见 OpenAI 网站的 Examples 页面。在上图中的“Load a preset”下拉列表旁边的是 Save 按钮(在图中标记为O)。想象⼀下,你已经为任务定义了有价值的提示词,也选择了模型及其参数,并且希望以后在 Playground 中轻松复用它们。Save 按钮的功能是把Playground 的当前状态保存为⼀个预设状态。你可以为预设状态命名并添加描述信息。⼀旦保存,你的预设状态就将出现在“Load a preset”下拉列表中。Save 按钮右侧的是 View code 按钮(在图中标记为 P)。它提供了在 Playground 中直接运行测试代码的脚本。你可以请求Python、Node.js 或cURL 代码,以便在 Linux 终端中直接与 OpenAI 远程服务器交互。如果用Python 代码给出提示词“As Descartes said, I think therefore”,那么我们将得到以下结果:
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(
model="text-davinci-003",
prompt="As Descartes said, I think therefore",
temperature=0.7,
max_tokens=3,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
)
现在你应该了解了如何在没有编码的情况下使用 Playground 来测试 OpenAI 的语言模型。