画面较友善的连结:https://hello-kirby.hashnode.dev/openai-quickstart
来源:https://beta.openai.com/docs/quickstart
OpenAI已经训练了前沿的语言模型,它们非常擅长理解和生成文本。
我们的API提供了对这些模型的访问,
可以用来解决几乎任何涉及处理语言的任务。
在这个快速入门教程中,你将构建一个简单的範例应用程序。
一路上,你将学习使用API进行任何任务所必需的关键概念和技术,包括:
介绍
补全系统是我们API的核心,他提供了一个简单的介面,非常弹性且强大。
你可以输入一些文本作为提示,API将返回一个文本补全,
试图匹配你给定的任何指令或情境。
-- Prompt --
Write a tagline for an ice cream shopa-- Completion --
We serve up smiles with every scoop!
你可以把它想象成一个非常先进的自动补全 -
模型会处理你的文本提示,
并尝试推测出下一步最有可能发生的事情。
从一个指令开始
想像一下,你想打造一个宠物名称产生器。
因为从零开始想名字很难!
首先,您需要一个提示可以清楚地表明您想要什么。
让我们从一个指令开始。
提交这个提示以生成你的第一个补全。
以下请到这里去玩。
--- Prompt ---
Suggest one name for a horse.--- Completion ---
Lightning
不错!现在,尝试使你的指令更具体。
--- Prompt ---
Suggest one name for a black horse.--- Completion ---
Midnight
如你所见,
在我们的提示中添加一些简单的形容词会改变补全的结果。
设计你的提示在本质上就是如何对模型进行“编程”。
添加一些示例
对于获得好结果,把指令设计好是很重要的,
但有时候它们仍然是不够的。
让我们尝试使你的指令变得更加複杂。
--- Prompt ---
Suggest three names for a horse that is a superhero.--- Completion ---
Super StallionCaptain ColtMighty Mustang
这个补全并不是我们想要的。
这些名字很普通,
而且似乎模型并没有捕捉到我们指令中马的部分。
让我们看看我们是否可以让它想出一些更相关的建议。
在许多情况下,
同时展示和告诉模型你想要什么是有帮助的。
在你的提示中添加範例可以帮助你表达一些规律模式或是细节。
尝试提交以下包含了几个範例的提示。
--- Prompt ---
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: Horse
Names:--- Completion ---
Super Stallion, Mighty Mare, The Magnificent Equine
这次结果更好了。
模型似乎更好地理解了我们的提示,并生成了一些更相关的建议。
请注意,这些名字不仅符合我们的要求,而且还与示例相似。
这显示了添加示例可以更好地沟通您的要求。
调整你的设置
提示设计不是您唯一的工具。您还可以通过调整设置来控制完成情况。其中一个最重要的设置称为温度。
你可能已经注意到,
如果您在上面的示例中多次提交相同的提示,
模型将始终返回相同或非常相似的完成情况。
这是因为您的温度被设置为0。
尝试重新提交相同的提示几次,温度设置为1。
--- Prompt ---
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: Horse
Names:
--- Completion ---
Wondersteed, Sir Noblemane, Galloping Guardian
看到了吗?
当温度值高于0时,提交相同的提示将导致每次的补完结果不同。
请记住,模型会推测哪一些文本最有可能出现在哪些文本之后。
温度是一个介于0和1之间的值,
实际上可以让你控制模型在进行这些推测时应该有多自信。
降低温度表示它将采取更少的风险,完成的情况将更精确和确定。
提高温度将导致更多变的补全结果。
对于你的宠物名字产生器,你可能会希望能够产生很多命名想法。
将温度值设为0.6应该不错。
深入了解:理解 Token 和机率
打造你的应用程式
现在你已经找到了一些好提示跟设置,
那么就可以準备建立你的宠物名字产生器了!
我们已经写了一些程式码来帮助你开始-
按照下面的说明下载程式码并运行应用程序。
以下用 Node.js 示範。
设置
如果您没有安装 Node.js,可以从这里安装它。
然后 clone 这个 repo。
git clone https://github.com/openai/openai-quickstart-node.git
添加你的 API Key
切到专案目录并複製範例的环境变量档案。
cd openai-quickstart-nodecp .env.example .env
複製你的 API Key,
并在 .env
档案写到 OPENAI_API_KEY
上。
如果你目前没有任何 API Key,请到这里建立一个。
重要提示:使用JavaScript时,应该只在 Server端进行所有API调用,
因为在Client端浏览器进行调用将会暴露你的API Key。
有关更多细节,请参阅此处。
运行应用程式
在转案目录中运行以下命令,安装 Dependencie 并运行应用程式。
npm installnpm 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: CatNames: Captain Sharpclaw, Agent Fluffball, The Incredible FelineAnimal: DogNames: Ruff the Protector, Wonder Canine, Sir Barks-a-LotAnimal: ${capitalizedAnimal}Names:`;}
在 generate.js
中的第9行,
你将看到实际发送API请求的代码。
如上所述,它使用了温度为0.6的补全系统。
const completion = await openai.createCompletion({ model: "text-davinci-003", prompt: generatePrompt(req.body.animal), temperature: 0.6,});
就这样!现在你应该对你的(超级英雄)宠物名称产生器
会如何使用OpenAI API有了充分的理解!
结尾
这些概念和技术将有助于帮助你构建自己的应用程式。
不过,这个简单的範例只展示了可能性的一小部分!
补全系统非常弹性,可以解决几乎所有的语言处理任务,
包括内容生成,摘要,语义搜索,主题标记,情感分析等等。
请记住,对于大多数模型而言,
单个API请求只能处理你的提示加补全最多2,048个 Token(约1,500个单词)。
对于更高级的任务,你可能会发现自己希望能够提供更多的範例或情境,
而不能只放单个提示。
在处理更高级任务时使用 微调API 是一个更好的选择。
微调允许你提供数百甚至数千个範例,以客製化特定用途的模型。
深入了解
DeepDive1
理解 Token 和机率
我们的模型通过将文本分解为较小的单元(称为Token)来处理文本。
Token可以是单词、单词块或单个字符。
常见的单词,如“cat”,是一个单个 Token,
而不太常见的单词往往被分解成多个 Token。
例如,“Butterscotch”转换成四个 Token:
“but”,“ ters”,“ cot”和“ ch”。
许多Token以空格为开头,例如“ hello”和“ bye”。
给定一些文本,模型会决定下一个最可能的Token是什么。
例如,“Horses are my favorite” 之后最有可能可以接的 Token 就是“ animal”。
这就是温度的作用。
如果你将此温度设置为0并重複提交相同提示4次,
模型将始终返回“ animal”,
因为它具有最高的概率。
如果你增加温度,它就会冒更大的风险并开始考虑更低概率的 Token。
对于希望输出结果準确的任务,通常设置较低的温度比较好。
若是在希望多样性或是创造性质的任务中,
或者如果你希望生成多个版本给你的用户或是专家选择,
那更高的温度可能更有用处。
DeepDive2
模型与价位
我们提供了一系列具有不同功能和价格的模型。
在本教程中,我们使用了text-davinci-003
,
它是我们最能干的自然语言模型。
我们建议在实验时使用这个模型,因为它会产生最佳结果。
一旦你了解如何使用,
你也可以看看其他模型是否可以以更低的延迟和成本产生相同的结果。
在单次请求中可以处理的总 Token 数(提示加补全)
不能超过模型的最大上下文长度。
对于大多数模型而言,就是2,048个 Token 或 约1,500个单词。
作为一个粗略的经验法则,1个 Token 大约是4个字符或0.75个英文单词。
价格是按使用量收费的,
每 1000 个 Token 收费 1 元,
前 3 个月内可享有 18 美元的免费额度。
到这里了解更多。
注解
注1
温度是一个衡量模型偏离正常输出的程度的参数。
如果温度值较高,模型就会生成更为创新和不确定的输出。
相反,如果温度值较低,模型就会生成更为预测和可靠的输出。