OpenAI提供了先进的语言模型,擅长理解和生成文本,其API提供访问这些模型的方式,可用于解决涉及处理语言的任何任务。本教程主要构建一个简单的样例应用程序,将介绍使用API对于任何任务都是基础的关键概念和技术,包括:
- 内容生成
- 摘要
- 分类、归类和情感分析
- 数据提取
- 翻译
- 等等
一、补全
Completions(补全)是OpenAI API的核心,提供了一个非常灵活和强大的简单接口。将一些文本作为提示(Prompt)输入,API将返回一个文本补全(Completion),试图匹配给它的任何指令或上下文。
Prompt
为一个冰淇淋店写一个标语。
Completion
OpenAI每勺都掌握微笑!
可以把它想象成一种非常先进的自动完成——模型处理文本提示并尝试预测最有可能出现的内容。
二、从指令开始
例如想创建一个宠物名字生成器。首先,需要一个清晰表明想要什么的提示。让OpenAI从一个指令开始。提交此提示以生成第一个完成。
提示:为一匹马建议一个名字。 AmazingGrace. 不错!现在,试着让指令更加具体。 提示:为一匹黑色的马建议一个名字。 Shadowfax.
正如大家所看到的,向OpenAI的提示添加一个简单的形容词会改变结果。设计提示本质上就是如何“编程”模型。
三、添加示例
制作好的指导说明对于获得良好的结果很重要,但有时候它们还不足够。让OpenAI试着让你的说明更加复杂。
为一只超级英雄马建议三个名字。
这个完成度还不太是OpenAI想要的。这些名称非常通用,似乎模型没有注意到OpenAI说明中的马部分。让OpenAI看看是否可以让它提供一些更相关的建议。在许多情况下,向模型展示并告诉你想要什么都是有帮助的。向提示添加示例可以帮助传达模式或细微差别。尝试提交这个包含几个示例的提示。
为一只超级英雄动物建议三个名字。 动物:猫 名字:锐爪队长、毛球特工、无敌猫 动物:狗 名字:保护者拉夫、神奇犬、多吠犬爵士
添加OpenAI期望对于给定输入的输出的示例,帮助模型提供了OpenAI想要的类型的名称。
四、调整设置
提示设计不是你所拥有的唯一工具。通过调整设置,你还可以控制补全。最重要的设置之一叫做温度。大家可能已经注意到,如果在上面的示例中提交了相同的提示多次,模型总是返回相同或非常相似的完成度。这是因为你的温度设置为0。
尝试将温度设置为1,再次提交相同的提示几次:
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
当温度高于0时,提交相同的提示会产生不同的完成度。
模型预测哪些文本最有可能跟随它之前的文本。温度是一个介于0和1之间的值,它本质上能让你控制模型在做出这些预测时的信心程度。降低温度意味着它将采取更少的风险,补全将更准确和确定性。增加温度将产生更多样化的完成度。
对于你的宠物名生成器,你可能希望能够生成很多的名字想法。0.6的适度温度应该效果不错。
五、构建应用程序
OpenAI编写了一些代码,帮助你入门——根据以下说明下载代码并运行应用程序。
1、安装
如果你还没有安装Node.js,请从这里安装。然后通过克隆这个仓库来下载代码。
git clone https://github.com/openai/openai-quickstart-node.git
2、添加APIkey
为了让应用程序正常工作,需要一个API密钥。可以通过注册一个账户并返回到这个页面来获得一个。
3、启动程序
在项目目录中运行以下命令来安装依赖项和运行应用程序。
npm install npm run dev
在你的浏览器中打开http://localhost:3000,你应该会看到宠物名生成器!
4、理解代码
打开openai-quickstart-node/pages/api文件夹中的generate.js。在底部,将看到生成OpenAI上面使用的提示的函数。由于用户将输入他们宠物的类型,它动态地替换指定动物的提示部分。
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请求的代码。如上所述,它使用completions端点(Completion),并使用0.6的温度值。
const completion = await openai.createCompletion({ model: "text-davinci-003", prompt: generatePrompt(req.body.animal), temperature: 0.6, });
六、价格
OpenAI提供一系列具有不同能力的模型,并提供相应的价格。在本教程中,OpenAI使用了text-davinci-003。OpenAI建议在实验时使用此模型或gpt-3.5-turbo,因为它们会产生最好的结果。一旦工作正常运行,可以查看其他模型是否能以更低的延迟和成本产生相同的结果。或者是否需要升级到更强大的模型,例如gpt-4。
单个请求(包括提示和完成)中处理的标记总数不能超过模型的最大上下文长度。对于大多数模型,这是4096个标记或约3000个单词。粗略的经验法则是,对于英文文本,1个标记约等于4个字符或0.75个单词。按每1,000个标记付费,前3个月免费提供价值5美元的信用额。