那一刻,许多 AI 开发者和爱好者一直在等待的已经到来: 聊天GPT API 现在可用。
准备好在未来几周和几个月内看到地球上几乎所有应用程序都尝试将 ChatGPT 集成到自己的应用程序中。这是否会让它们像 ChatGPT 一样引起病毒式传播还有待观察,但就目前而言……这确实令人兴奋。
在本文中,我们将介绍如何开始使用 ChatGPT API 并查看一些关键模型详细信息。具体来说,我们将详细介绍 OpenAI 的 ChatGPT API 发布文章和 OpenAI 提供的聊天完成指南。
请注意,在此版本中,OpenAI 还推出了对其语音识别模型 Whisper 的 API 访问,尽管在本文中我们将重点关注 ChatGPT API。
ChatGPT API 的早期使用
在我们讨论如何实际使用 ChatGPT API 之前,让我们看看开发人员如何开始将新模型集成到他们自己的应用程序中。
正如文档所强调的,ChatGPT API 的一些用例包括:
- 起草电子邮件或其他书面内容
- 回答有关一组文档的问题
- 创建会话代理
- 为一系列科目创建导师
- 翻译语言、编写代码等等......
以下是 OpenAI 重点介绍的获得早期访问权限并已将 ChatGPT 集成到其应用程序中的大公司:
- SnapChat 推出了 My AI for Snapchat+,这是一个可定制的聊天机器人,可基于 ChatGPT API 提供建议。
- Quizlet 推出了 Q-Chat,这是一款人工智能导师,通过 ChatGPT 支持的体验为学生提供相关的学习材料。
- Shopify 的消费者应用程序 Shop 使用 ChatGPT API 为其全新的人工智能购物助手提供支持,该助手可提供个性化购物建议。
除了早期访问用户之外,这里还有一些有趣的内容,它们是在 ChatGPT API 发布后数小时内发布的......WhatOnEarth 是一个基于新 ChatGPT API 构建的搜索引擎。
这是开发人员仅用 16 行 Python 代码构建命令行聊天机器人的另一个示例......
我们将发表一篇关于 ChatGPT API 更有趣的应用程序的文章,但现在让我们看看如何开始使用它。
ChatGPT API:模型详细信息
GPT-3.5-涡轮
首先,API 发布的一个稍微出乎意料的部分是它比以前的型号便宜多少......
通过一系列全系统的优化,自12月以来,我们已经为ChatGPT实现了90%的成本降低;我们现在正在将这些节省的费用转嫁给 API 用户。
具体来说,ChatGPT API 的定价为每 1000 个代币 0.002 美元,比现有 GPT-3.5 模型便宜 10 倍。
文本-davinci-003gpt-3.5-turbo
ChatGPT API 与以前的模型之间的一个关键区别在于它们使用文本的方式。具体来说,GPT-3 的早期版本将使用表示为令牌序列的非结构化文本。
如果您不熟悉令牌...
令牌可以被认为是单词的片段。在 API 处理提示之前,输入会被分解为标记。
进一步来说:
- 1 个标记 ~= 4 个英文字符
- 1,500 个单词 ~= 2048 个标记
例如,字符串“ChatGPT is Great!”被编码为六个标记:[“Chat”、“G”、“PT”、“is”、“great”、“!”]。
API 调用中的令牌总数很重要,因为它会影响:
GPT-3.5-turbo-0301
ChatGPT API 入门
现在让我们浏览一下 OpenAI 的 ChatGPT 文档,看看如何与新模型端点进行交互。
!pip install openaiopenai.api_key = "YOUR-API-KEY"
聊天完成
import openai response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个有用的助手。"}, {"role" : "user", "content": "谁赢得了 2020 年世界大赛冠军?"}, {"role": "assistant", "content": "洛杉矶道奇队赢得了 2020 年世界大赛冠军。"}, { "role": "user", "content": "在哪里播放的?"} ] )
完整的响应如下所示:
我们可以按如下方式访问响应的实际内容:
响应['选择'][0]['消息']['内容']
2020 年世界职业棒球大赛在德克萨斯州阿灵顿的 Globe Life Field 举行。
让我们来分解一下。
ChatGPT API 与之前的 GPT-3 模型之间的一个关键区别是,您可以发送一组消息来完成不同“角色”(例如“系统”、“用户”和“助理”)的操作。
主要输入是 messages 参数。消息必须是消息对象的数组,其中每个对象都有一个角色(“系统”、“用户”或“助理”)和内容(消息的内容)。对话可以短至 1 条消息,也可以占很多页。
以下是每个角色的详细介绍...
系统
“系统”消息设置助手的整体行为。在上面的示例中,ChatGPT 收到的指示是“你是一个有用的助手”。
换句话说,系统角色是一个温和的指令,例如这里是 OpenAI 用于 ChatGPT 的系统消息之一:
你是 ChatGPT,一个由 OpenAI 训练的大型语言模型。尽可能简洁地回答。知识截止日期:{knowledge_cutoff} 当前日期:{current_date}
用户
接下来,用户消息为助理提供具体指令。这主要由最终用户使用应用程序,但也可以由开发人员针对特定用例进行硬编码。
助手
辅助消息存储以前的 ChatGPT 响应,或者也可以由开发人员编写它们来提供所需行为的示例(有点像小规模微调)。
一个关键点是,每个 ChatGPT API 请求中都需要提供聊天对话历史记录。
在上面的示例中,我们需要传递“在哪里播放的?”之前的所有用户和助理消息。问题有意义。正如 OpenAI 所强调的:
由于模型没有过去请求的记忆,因此所有相关信息都必须通过对话提供。如果对话无法满足模型的令牌限制,则需要以某种方式缩短。
处理聊天历史的另一种方法是使用 LangChain 内存库,尽管我们将在即将发布的文章中更详细地讨论这一点。
提示 ChatGPT API 的工程最佳实践
与之前的模型类似,在涉及 ChatGPT API 时,有几个值得注意的提示工程最佳实践。
具体来说,他们指出,指示 ChatGPT 成为有用助手的“系统”消息并不总是受到关注:
总的来说,gpt-3.5-turbo-0301对系统消息的关注度并不高。
如前所述,系统消息只是轻轻推动您希望助手采取的方向,尽管更重要的指令应包含在“用户”消息中。
如果您没有获得想要的结果,OpenAI 建议采用以下即时工程最佳实践:
- 在您的指示中更加明确
- 指定您想要答案的确切格式
- 让模型一步步思考
- 在决定答案之前要求模型辩论利弊
我们很快就会更详细地讨论即时工程最佳实践的主题,不过现在,您可以查看 OpenAI 有关提高可靠性的技术指南。
ChatGPT 与完成情况
文本-达芬奇-003
正如我们所见,ChatGPT API 请求与 Completions 请求非常相似。例如,以下是将简单翻译助手从 Completions API 请求转换为 ChatGPT API 请求的方法:
GPT-3 完成请求
# 定义要翻译的文本 text = "Hello, how are you?" # 用于生成翻译响应的 Completions API 请求 = openai.Completion.create( engine="text-davinci-003",prompt=f"请将以下英文文本翻译成法文:'{text}'", max_tokens=60, n=1, stop=None,Temperature=0.7, ) # 打印翻译后的文本 Translation = response.choices[0].text.strip() print(translation)
ChatGPT API 请求
text =“你好,你好吗?” response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个将英语翻译成法语的助手。"}, { "role": "user", "content": f"将以下英文文本翻译为法语: '{text}'"} ] ) print(response['choices'][0]['message']['content '])
摘要:ChatGPT API 发布
正如我们所看到的,OpenAI 使从 Completions API 迁移到 ChatGPT API 变得非常简单。
通过添加多个“角色”的功能,ChatGPT API 可以更轻松地为更多特定领域的用例构建对话代理和助手。
毫无疑问,在接下来的几个月(甚至几年)内,看到此版本中的所有新应用程序以及集成 ChatGPT 功能的现有应用程序将会令人兴奋。
与此同时,我们将继续发布新的 ChatGPT 编程和提示工程教程,以帮助您充分利用这一主要版本。
您可以查看下面有关 ChatGPT API 入门的视频教程: