这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而更好的帮助他理解我们想要干什么,还有一个就是调整参数,来控制生成结果的离散性。示例中给出的模型是通用模型,如果想要针对特定场景给更多的示例进行训练,则可以采用微调模型。目前国内在调用的时候可能要麻烦一些主要是网络问题以及密匙的生成。
在本篇文章中将上一篇中定义的“代币符号”改为了令牌,令牌更符合行业的一个主流称呼,代币符号则可以帮助理解它的作用于含义。
OpenAPI训练出了非常擅长理解和文本生成的语言模型,同通过API的形式给用户提供对这些模型的访问,从而来解决几乎设计任何领域的文本生成任务。
在本篇快速入门教程中你将通过构建一个简单的示例应用程序,来学习日后更复杂场景下使用API的基本概念和技术,他包括:内容生成、摘要、实体分类、情感分析、数据提取、翻译......
模型使用
提示词补全是API的核心,他通过提供一个异常灵活且强大的接口,通过你输入的一些文本或提示,来为你补全对话的上下文。如同你给他输入一个"为一家冰淇淋店写一个标语"他则会回复一个"融化你的心,一个甜蜜的口感"
你可以认为这是一个非常高级的自动补全工具——他会处理你输入的内容从而预测接下来最有可能发生的内容。
(一)一个简单的提示词
假如你想要为一个宠物起一个名字,毫无头绪从零开始的时候他将会是非常难的,而这些OpenAPI可以帮你。首先你需要给他一个提示词来明确你想要干什么。如果你给他的说的是“给我的马起一个名字”与“给我的黑马起一个名字”那么他们得到的结果将会是不一样的,而这一切仅仅是因为一个形容词的改变。设计恰当的提示词本质上就是你如何训练这个“模型”,从而让他告诉你你所想要的结果。
创建好的提示词对于获取一个好的结果是重要的,但是这往往并不能够满足我们的需求。接下来我们尝试设计一些更复杂的提示词:
给一匹超级英雄马起三个名字
这时得到的结果并不是我们想要的,他所给出我们的答案都非常的通用似乎模型并有没识别到我们模型中关于马的这部分。接下来让我们尝试一下让他提出一些更加符合预期的结果。
(二)给模型添加一些示例
在很多时候,告诉模型我们想要的是什么是非常有帮助的。例如我们可以在提示词中给出一些例子可以帮助模型识别出我们提示词中细微的差别。现在我们尝试提交一个包含一些示例的提示词:
给超级英雄的动物起三个名字
动物:猫
名字:Sharpclaw船长,Fluffball探员,不可思议的猫
动物:狗狗
名字:护国公拉夫,神奇犬,狂吠爵士
动物:马
的名字:
这样的输入我们就会容易获得一个符合我们期望的结果。就像上面说的给模型添加我们期望的输出示例,可以帮助模型提供我们正在寻找的名称类型。
(三)调整参数
通过设计合适的提示词来提升输出结果质量并不是唯一的手段,我们也可以通过设置一些相关的参数来控制模型的输入内容,其中一个重要的设置就是temperature,它的值在0到1之间。当为零的时候当我们在一个回话中多次输入相同的提示词时返回的结果也总是相同的或是相似的。但是当我们设置为1那么相同的提示词输入往往就会返回不通的结果。
在使用中应该记得OpenAPI模型主要就是根据前面的提示词来预测后面肯能跟的文本。通过调节temperature,可以控制模型在进行这些预测时的自信度,如果要是值更小甚至为0模型就会认为他前面输出的结果是符合预期的所以后面的输出还会与前面高度相似,甚至一样。当设置的值高甚至为1则重复的输入相同提示词模型会认为前面的输出结果与用户预期较远,所以就会大幅调整输出结果。
构建应用
现在你已经可以很好地构造提示词并设置关键参数,掌握了构建你自己的宠物名字生成器关键技能。这里有一些官方提供的由Node.js/Python实现的示例代码,你可以下载先来来构建自己的应用程序。
(一)Node.js版本
如果要是本地没有Node.js环境,需要先安装一下相关环境。然后从这个仓库中下载或是克隆代码
git clone https://github.com/openai/openai-quickstart-node.git
如果你不习惯用git也可以通过链接直接下载zip格式的压缩包,在程序运行之前我们需要一个API密匙,你可以通过注册账号获得一个。接下来就是解压zip文件,在项目目录下运行下面的指令进行项目初始化引入相关依赖,之后运行程序
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:`;
}
在genreate.js的第九行,你会看到实际发送请求的代码,如同我们在序言中讲到的在请求的信息中将参数temperature设置为了0.6
const completion = await openai.createCompletion({model: "text-davinci-003",prompt: generatePrompt(req.body.animal),temperature: 0.6,
});
到现在你对如何调用OpenAIP应该对调用OpenAI API接口实现宠物名生成器有了清楚的认识。
(二)Python版本
接下来我们看看Python代码的实现,主要是就是仓库地址以及项目启动存在差异:
git clone https://github.com/openai/openai-quickstart-python.git
代码启动运行的指令:
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
flask run
关于提示词以及temperature参数的设置与Node.js中都是相似的,也可以通过全局搜索找到相关的代码。
结束语
这些概念和技术将在很大程度上帮助我们构建自己的应用程序。宠物名生成器的示例只演示了可以实现的功能的一小部分!OpenAI API是非常灵活的,几乎可以解决任何语言处理任务,包括内容生成、摘要、语义搜索、主题标记、情感分析等等。要记住的一个限制是,对于大多数模型,在提示和完成之间,单个API请求最多只能处理2048个令牌(大约1500个单词)。
模型收费标准
OpenAI提供不同性能不通收费标准的一些列模型。在本教程中使用的是自然语言处理能力最强的模型text-davinci-003。建议在试用时使用这个模型因为它他提供的结果最为准确、贴合预期。一旦事情运转了起来,你可以关注一些其他的模型看看是否能够更低成本、更低延迟但依旧能实现满足预期的功能。
在单个请求的处理中令牌不能超过模型的最大上下文长度。同通常是2048个令牌或是1500个单词。通常都是以1000个Token为单位进行收费,详细的收费标准可以参考:收费保准
GPT-4模型的收费标准为:
对于更高级的任务,你会需要提供更多的例子或是上线文,而不是上面简单示例那样受限于最大的上线文长度。面对更高级的任务微调模型是一个很好地选择,他可以允许你提供数百甚至上千个示例,以便改模型在特定的领域内产生更好的效果。
为了获取更多的学习灵感,设计不同的任务提示,接下来可以:
- 阅读指南
- 探索实例库
- 动手操作实验
- 构建你自己的应用程序时牢记使用策略