本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动
为什么写篇文章
最近chatgpt很火,我其实也基于chatgpt开发了两款应用。但是我不太想去表达这些东西,因为我觉得我开发的过程过于简单,都是花了一上午。
第一款应用是一个生成英语题目的应用,主要是根据关键字生成文章,可以选择文体和内容,配有填空题,问答题,翻译等题目。我的本意是想用于表弟的英语学习教学。界面,文章和github地址如下:
第二款应用是给B站的视频生成摘要,避免花太多时间获取无效内容。
我贴出这些的原因:
第一是想吸引关注,我个人比较没动力,需要激励
第二是说我确实有写文章的基础。
第三是我看到如下截图:
我感觉到很多人被收智商税了,而且我觉得倒卖api是最低级的应用,最可耻的是还收费,我觉得有些知识应该是免费的。
接下来我会写三到四篇文章来分享我的经验。
第一篇:也是大家最关心的,如何获取到chatgpt的能力,大概有4种方式。
第二篇:我要从开发者的角度谈谈什么是Prompt Engineering, 我们普通开发者如何使用它开发应用。
第三篇:假如大家想看的话,我会说一说我是如何构思和开发我的项目的。
第四篇:作为前端工程师,我想和大家聊聊chatgpt背后,我对人机交互,信息损失的看法。
常见的chatpgt应用的架构
信息收集
很多应用只是单纯地收集用户语言文字,这是比较简单地应用。
其实我们可以帮助用户收集他们收集不到地信息。比如说我的B站视频摘要,就是实现了这么一个功能。
我们也可以转化输入,让用户进行语音输入,然后转为文字。voice-control-for-chatgp就实现了语音输入和输出。
当然我们也可以让用户输入地更加愉快,设计好输入界面。
这些都是我们前端工程师能做地点。
Prompt Engineering
在收集到用户的输入后,我们可以将其和我们的模板混合。达到更好的效果。我简单举一个例子,实际上这个没有这么简单。
// 生成文章应用,我们可以设计界面让用户输入字数限制,关键词,语言,文体
const words = "牛,马,车,开心"
const count = 100
const lang = "中文"
const type = "笑话"
function getPrompt(words,count,lang,type) {
return `使用下列关键词:${words},生成字数${count}字的语言为${lang}的${笑话}`
}
// 输出:使用下列关键字:牛,马,车,开心,生成字数100字的语言为中文的笑话
使用ui界面去获取用户的输入,words,count,lang,type,你就完成了文章生成器了。你可以将笑话改成任何一种文体。其他参数都可以让用户调整。
微调模型或者训练,或者接入
目前我还没有实现过微调模型或者训练这些部分,有计划去学习,但是可以告诉大家这个肯定是核心。
没有这个能力咋办,那就只能通过各种技术手段接入api呗。下面的文章中,我将介绍4种api的接入技巧
输出
比如说 Prompt Engineering 里面 文章生成器的例子, 你可以提供个文件下载功能,或者语音输出功能。
一切任君想象。
接入chatgpt的4种方式
GPT3
其实openai将GPT3模型做成服务公开出来了。模型的名字为text-davinci-003。
缺点:但是由于是CPT3,效果比较差。
好处:好在有18美金的免费额度。配合无限买号就能提供服务。
下图是可用的模型列表:
nodejs
$ npm install openai
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Say this is a test",
temperature: 0,
max_tokens: 7,
});
python
$ pip install openai
import os
import openai
# Load your API key from an environment variable or secret management service
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(model="text-davinci-003", prompt="Say this is a test", temperature=0, max_tokens=7)
使用无头浏览器模型登录
主要思路还是使用Puppeteer模拟+js注入来使用。
好处:免费的,体验比较好,是真正的chatpgt模型。
坏处:cloudFlare有时候要验证你是不是人类。而且一次只能发送一条信息,一个小时只能用60次,只能配合多账号使用,但是这样资源消耗更加大
目前还有两家可以用:
python方案:acheong08/ChatGPT: Reverse engineered ChatGPT API (github.com)
集成方案:
nodejs容器化部署:bytemate/chatapi-single: Simple and powerful ChatGPT-API-Server (github.com)
浏览器扩展方案
优点:免费的,体验比较好,是真正的chatpgt模型,不用需要购买账号,直接使用用户的账号为用户服务。
缺点:一次只能发送一条信息,一个小时只能用60次,无法使用多账户提高接入能力。太频繁使用有被封的风险,这一点必须告诉用户,因为你用的是他们的账号。
个人还是推荐大家给这个库点个小星星,作者就是我本人,小弟谢谢了。
官方方案
英文不好的朋友我翻译一下,就是openai要推出免费的方案了,但是后面可能收费,而且这次的模型不是gpt3。
好处:正版,稳定,安心,模型性能好 坏处:收费,可能国内不能用。
已经无效的方案,仅供技术参考
模型泄漏
text-chat-davinci-002-20221122这个模型被穷举出来了,现在已经失效。同时这个库也支持bing。
反向代理
好多人都说使用反向代理能帮助我们 passby CloudFlare 网关。但是全部都失效了,而且说避免openai发现,代码都是闭源的,不推荐哈。
贴链接:
PawanOsman/chatgpt-io: ChatGPT Client API, Blazing Fast, without using browser (github.com)
Bing Hacking
Bing 现在已经限制聊天次数了,是不是还有人和我一样在等待队列中。/(ㄒoㄒ)/~~
下面是Bing 接入库:
接入技术解析
协议解析
协议解析的思路主要是用chrome去打断点,单步调试来解析的,下面我简单说一下:
accessToken的获取
当用户登录完openai后,就会去访问:chat.openai.com/api/auth/se… 然后在返回的数据中获取到accessToken这个字段。
关键是accessToken的获取,不同的方案有不同的获取方法。可以在chrome扩展内部获取,也可以开启无头浏览器获取。
利用accesstoken创建对话
访问:chat.openai.com/backend-api…
将header和body设置如下
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({
action: "next",
messages: [
{
id: uuidv4(),
role: "user",
content: {
content_type: "text",
parts: [question],
},
},
],
model: "text-davinci-002-render-sha",
parent_message_id: uuidv4(),
}),
就能实现访问。
成熟方案
当然如果你觉得太麻烦,可以使用如下方案:
值得注意的是这里使用的账号是在浏览器内部使用用户的账号获取api能力,这样规避了风险,但是必须提醒用户必须对自己的行为导致的封号等后果负责。
个人还是推荐大家给这个库点个小星星,作者就是我本人,小弟谢谢了。
多账号
为了使用模拟浏览器登录方法,必须使用支持多账号登录。
我写过一个,但是后面放弃更新了,现在贴出来供大家交流。
不能保证性能,能运行,仅供思路分享,欢迎点星星。
总结
本文主要提出了常见的chatgpt类型的应用架构,提出里面关键的技术点,ui交互, Prompt Engineering,api接入。
更进一步,本文章介绍了4种可用的接入方式。
- GPT3
- 使用无头浏览器模型登录
- 浏览器扩展方案
- 官方方案
最后,提供一个多账号登录模拟浏览器登录方法的方案。
声明
以上接入方案仅作为技术探讨,本人不提供任何接入chatgpt的账号或接入者服务。
其实Prompt Engineering 才是普通开发者最需要关心的技术部分,因为api的接入总有一天会解决,模型微调又太难了,只能在这个部分发发力。大家感兴趣的话,我下篇文章就写一下。
用心创作,大家觉得有用的话,可以评论,转发,注意要注明出处。谢谢了。
本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动