OpenAI 训练了非常擅长理解和生成文本的尖端语言模型。我们的 API 提供对这些模型的访问,可用于解决几乎任何涉及处理语言的任务。
在本快速入门教程中,你将构建一个简单的示例应用程序。在此过程中,你将学习使用 API 完成任何任务的关键概念和技术,包括:
- 内容生成
- 归纳
- 分类、分类和情感分析
- 数据提取
- 翻译
- 更多
介绍
这个完成端点是我们 API 的核心,并提供了一个非常灵活和强大的简单接口。你输入一些文本作为提示,API 将返回一个文本完成,试图匹配你给定的任何指令或上下文。
提示:为冰淇淋店写一个标语。
完成:我们每次都提供微笑!
你可以将其视为一个非常先进的自动完成——模型处理你的文本提示,并尝试预测下一步最可能发生的情况。
- 从指令开始
想象你想创建一个宠物名字生成器。从头开始想名字很难!
首先,你需要一个提示,让你清楚你想要什么。让我们从指令开始。提交这个提示来生成你的第一个完成。
不错!现在,试着让你的指示更具体。
如你所见,在我们的提示中添加一个简单的形容词会改变生成的完成。设计提示本质上就是你“编程”模型的方式。
- 添加一些例子
制定好的说明对于取得好的结果很重要,但有时它们还不够。让我们试着让你的指令更复杂。
这个完成并不是我们想要的。这些名称非常通用,而且模型似乎没有接受我们指令中的马匹部分。让我们看看能否让它提出一些更相关的建议。
在许多情况下,向模型展示和告诉模型你想要什么是很有帮助的。在你的提示中添加示例可以帮助传达模式或细微差别。尝试提交此提示,其中包含几个示例。
好的!添加我们期望给定输入的输出示例有助于模型提供我们正在寻找的名称类型。
- 调整你的设置
提示设计并不是你所拥有的唯一工具。你也可以通过调整你你的设置来控制完成。其中最重要的设置被称为温度。
你可能已经注意到,如果你在上面的示例中多次提交相同的提示,模型将始终返回相同或非常相似的完成。这是因为你的温度设置为 0。
尝试将温度设置为 1 重新提交几次相同的提示。
看看发生了什么?当温度高于 0 时,每次提交相同的提示会导致不同的完成。
请记住,该模型预测哪个文本最有可能跟在它前面的文本之后。温度是一个介于 0 和 1 之间的值,基本上可以让你控制模型在进行这些预测时的置信度。降低温度意味着它将承担更少的风险,并且完成将更加准确和确定。升高温度将导致更多样化的完成。
我们的模型通过将文本分解为较小的单元来处理文本,这些单元称为令牌。令牌可以是单词、单词块或单个字符。编辑下面的文本以查看如何对其进行令牌化。
我有一只名叫Butterscotch的橙色猫。
像“猫”这样的普通单词通常是单个令牌,而不太常见的单词通常会被分解为多个令牌。 例如,“Butterscotch”被翻译为四个令牌:“But”、“ters”、“cot”和“ch”。 许多令牌以空格开头,例如“hello”和“bye”。
给定一些文本,模型确定哪个令牌最有可能接下来出现。例如,文本“Horses are my favorite”最有可能被令牌“animal”跟随。
这就是温度的作用。如果你提交这个提示 4 次,温度设置为 0,模型将始终返回“动物”,因为它具有最高的概率。如果你增加温度,它将采取更多的风险,并考虑低概率的令牌。
{/collapse-item}
对于你的宠物名称生成器,你可能希望能够生成很多名称想法。一个适度的温度 0.6 应该工作得很好。
构建你的应用程序
现在你已经找到了一个好的提示和设置,你已经准备好构建你的宠物名称生成器了!我们已经编写了一些代码来帮助你入门——按照下面的说明下载代码并运行应用程序。
设置
如果你没有安装 Node.js,从这里安装它。然后克隆该仓库
git clone https://github.com/openai/openai-quickstart-node.git
如果你不想使用 git,你也可以使用此 zip 文件下载代码。
添加你的 API 密钥
导航到项目目录并复制示例环境变量文件。
cd openai-quickstart-node
cp .env.example .env
复制你的秘密 API 密钥,并将其设置为新创建的 .env
文件中的 OPENAI_API_KEY
。如果你还没有创建秘密密钥,可以在下面进行操作。
重要提示:使用 Javascript 时,所有 API 调用都应该仅在服务器端进行,因为在客户端浏览器代码中进行调用将暴露你的 API 密钥。有关详细信息,请参阅此处。
运行应用
在项目目录中运行以下命令以安装依赖项并运行应用程序。
npm install
npm run dev
在浏览器中打开 http://localhost:3000
,你应该会看到宠物名称生成器!
理解代码
在 openai-quickstart-node/pages/api
文件夹中打开 generate.js
。在底部,你会看到生成我们在上面使用的提示的函数。由于用户将输入他们宠物的动物类型,因此它会动态换出指定动物的提示部分。
function generatePrompt(animal) {
const capitalizedAnimal = animal[0].toUpperCase() + animal.slice(1).toLowerCase();
return `Suggest three names for an animal that is a superhero.
Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: ${capitalizedAnimal}
Names:`;
}
在 generate.js
的第 9 行,你将看到发送实际 API 请求的代码。如上所述,它使用 temperature
为 0.6
的完成端点。
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: generatePrompt(req.body.animal),
temperature: 0.6,
});
就是这样!你现在应该完全了解你的宠物名称生成器如何使用 OpenAI API!
结束
这些概念和技术将有助于你构建自己的应用程序。尽管如此,这个简单的示例仅演示了可能性的一小部分!完成端点足够灵活,可以解决几乎任何语言处理任务,包括内容生成,摘要,语义搜索,主题标记,情感分析等等。
要记住的一个限制是,对于大多数模型,单个API请求仅可处理最多 2,048 个令牌(大约 1,500 个单词),从你的提示到完成。
我们提供了一系列不同功能和价格的模型。在本教程中,我们使用了text-davinci-003
,这是我们最强大的自然语言模型。我们建议在实验时使用此模型,因为它将产生最佳结果。一旦你完成了工作,就可以查看其他模型是否可以以更低的延迟和成本产生相同的结果。
单个请求(提示和完成)中处理的令牌总数不能超过模型的最大上下文长度。对于大多数模型,这是 2048 个令牌或约 1500 个单词。作为一个粗略的经验法则,1 个令牌大约是 4 个字符或 0.75 个单词的英文文本。
定价是按令牌支付,每 1,000 个令牌支付 5 美元,可在你的前 3 个月内使用。了解更多。
{/collapse-item}
下一步
要获得灵感并了解更多关于为不同任务设计提示的信息:
- 阅读我们的完成指南。
- 探索我们的示例提示库。
- 开始在 Playground 上进行实验。
- 在你开始构建时请记住我们的使用政策。
评论 (0)