ChatGPT API入门探索,制作AI孙子
最近ChatGPT的热度非常高,OPEN AI也是在不久前刚刚宣布开放ChatGPT商用API。
写这篇文章的契机在于前几天一位群友分享了一个日本程序员基于ChatGPT开发了一个AI佛:HOTOKE AI
例如当用户提问“我不知道生存的目的”,AI佛会做出如下回答:
感觉还是挺有意思的,他会从佛教及心理学的角度去给你分析与解释。
但作为一名程序员,我们肯定对背后的原理更感兴趣,于是我又问了他和GPT有什么区别:
这个回答还是有点出乎我的意料的,于是我更感兴趣了,直接网上找起了教程,也研读了一下OPEN API的文档。所以这篇文章更像是一个学习笔记,也希望能吸引到一些同样感兴趣的小伙伴。
文章最后我们会开发一个基于ChatGPT的AI孙子(就是培养出高启强的那个孙子)
ChatGPT
相信大家能点进来的都知道ChatGPT是啥, 这part就过了吧。
OPEN AI API
Examples
OPEN AI API提供了很多种模型供用户选择,在官网上也提供了很多示例,包括各种各样的模型及其生成的结果。
这是官网示例的地址:platform.openai.com/examples
我们以Q&A为例:
可以看到它用的模型是text-davinci-003,然后他说"我是一个高度智能的问答机器人。如果你问的问题有确切答案,我就会给出答案,如果你问的问题是在搞我或者没有明确答案,我会回答不知道"。然后下面就是一些示例。
提示工程(Prompt Engineering)
我们还可以点右上角的Open in Playground来自己尝试下
可以看到右侧侧边栏有许多参数可以调节,根据调节的参数不同,生成的答案也会有所区别。参数就不细说了,感兴趣的同学可以自己去看,当你鼠标移到那个参数上时,会有对应的解释框弹出来解释这个参数的作用。
这里简单演示了如何去通过提示,引导AI之后回答出你所想要的答案,所以提示(Prompt)就变的尤为重要。事实上,现在提示工程师(Prompt Engineer)已经成为一个炙手可热的岗位,他们的主要任务就是引导AI去学习及训练。
官方文档也用了相当大的篇幅去介绍如何去提示:platform.openai.com/docs/guides…
这里就简单翻译一下开头:
概述
我们的模型可以做任何事情,从生成原创故事到执行复杂的文本分析。因为它们可以做这么多事情,所以你必须明确描述你想要什么。告诉他该怎么做,而不只是简单陈述,这就是一个好提示的秘籍。
创作提示有三个基本准则。
展示和讲述。通过指示、例子或两者的结合,明确你想要什么。如果你想让模型按字母顺序排列一个项目清单,或按情绪对一个段落进行分类,就向它展示你想要的东西。
提供高质量的数据。如果你试图建立一个分类器或让模型遵循一个模式,确保有足够的例子。确保校对你的例子 —— 模型足够聪明,它可以识别拼写错误,并且告诉你,但它也可能认为这是你故意写错的,这都会影响他的回答。
检查你的设置。temperature和top_p参数控制了模型在产生响应方面的确定性。如果你要求它产生一个只有一个正确答案的响应,那么你就想把这些设置得低一些。如果你在寻找更多不同的反应,那么你可能想把它们设置得更高。人们使用这些设置的第一大错误是,假定它们是对"聪明"或"创造性"控制。
到这里大家应该也就知道了,那个AI佛就是通过程序员选择合适的模型,以及对他加以训练,比如告诉他当用户提问时,他需要从佛教及心理学的角度去回答用户的问题。
模型(Models)
模型可以说是非常重要的一部分,也是Open AI的核心。
ChatGPT用的就是GPT-3.5模型,他主要是面向大众,所以被训练的更加安全,不会输出一些出格的内容。
在GPT-3.5中又包含了几个子模型:
目前官方推荐的是gpt-3.5-turbo
,称此模型能生成最好的结果,并且只需要text-davinci-003
十分之一的算力。
价格
目前gpt-3.5-turbo
的价格是每一千个token需要0.002🔪。所谓token可以理解为他处理的单词数,1000个token大概可以生成750个单词。
AI孙子
接下来我们尝试简单写一个AI孙子。
首先当然是创建一个项目,我用的就是简单的create-react-app去创建一个react应用:npx create-react-app ai-sunzi
使用express写一个简单的服务端:
重写App.js,我们只需要一个textarea和一个提交按钮
访问http://localhost:3000 确保可以访问服务端,返回“Hello World!”:
接下来我们需要去Open AI官方文档中查看如何使用它的API,文档中有一个例子,如何在nodejs中引入包:
我们把他复制到我们代码中,有些地方还是需要改动一下,比如包的引入不能直接使用import。再将API Key复制到configuration中(API Key需要注册并登录OpenAI,可以免费领取):
然后我们再查看文档中Completion部分:
将其复制到我们代码中并测试:
此处我将max_token修改为100,因为中文字符所占字节数长一些。随后将prompt参数改为“无论用户输入什么,只需回答这是一个测试”
再次访问localhost:3000可以看到确实可以返回“这是一个测试”。
说明我们的后端已经从OPEN AI得到了返回的数据。
再接下来就简单了,我们只需要把前端和后端连上,再修改prompt,让这个AI表现的像孙子:
将textarea中的message传入至prompt参数中,再从OPEN AI得到返回的答案,就大功告成了。
以下为一些测试:
Reference: http://www.youtube.com/watch?v=bB7…
来源:juejin.cn/post/7209862607976644645