手把手教你开发Chatgpt应用

9,099 阅读8分钟

本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动

为什么写篇文章

最近chatgpt很火,我其实也基于chatgpt开发了两款应用。但是我不太想去表达这些东西,因为我觉得我开发的过程过于简单,都是花了一上午。

第一款应用是一个生成英语题目的应用,主要是根据关键字生成文章,可以选择文体和内容,配有填空题,问答题,翻译等题目。我的本意是想用于表弟的英语学习教学。界面,文章和github地址如下:

gen.png

我用chatgpt给熊孩子生成英语试卷

github地址,欢迎试用点赞

第二款应用是给B站的视频生成摘要,避免花太多时间获取无效内容。

1676802769323.png

github地址,欢迎试用点赞

我贴出这些的原因:

第一是想吸引关注,我个人比较没动力,需要激励

第二是说我确实有写文章的基础。

第三是我看到如下截图:

微信图片_20230219202320.jpg

我感觉到很多人被收智商税了,而且我觉得倒卖api是最低级的应用,最可耻的是还收费,我觉得有些知识应该是免费的。

接下来我会写三到四篇文章来分享我的经验。

第一篇:也是大家最关心的,如何获取到chatgpt的能力,大概有4种方式。

第二篇:我要从开发者的角度谈谈什么是Prompt Engineering, 我们普通开发者如何使用它开发应用。

第三篇:假如大家想看的话,我会说一说我是如何构思和开发我的项目的。

第四篇:作为前端工程师,我想和大家聊聊chatgpt背后,我对人机交互,信息损失的看法。

常见的chatpgt应用的架构

image.png

信息收集

很多应用只是单纯地收集用户语言文字,这是比较简单地应用。

其实我们可以帮助用户收集他们收集不到地信息。比如说我的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字的语言为中文的笑话

1676810793432.png

使用ui界面去获取用户的输入,words,count,lang,type,你就完成了文章生成器了。你可以将笑话改成任何一种文体。其他参数都可以让用户调整。

微调模型或者训练,或者接入

目前我还没有实现过微调模型或者训练这些部分,有计划去学习,但是可以告诉大家这个肯定是核心。

没有这个能力咋办,那就只能通过各种技术手段接入api呗。下面的文章中,我将介绍4种api的接入技巧

输出

比如说 Prompt Engineering 里面 文章生成器的例子, 你可以提供个文件下载功能,或者语音输出功能。

一切任君想象。

接入chatgpt的4种方式

GPT3

其实openai将GPT3模型做成服务公开出来了。模型的名字为text-davinci-003。

缺点:但是由于是CPT3,效果比较差。

好处:好在有18美金的免费额度。配合无限买号就能提供服务。

文档地址

下图是可用的模型列表:

image.png

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方案:transitive-bullshit/chatgpt-api: Node.js client for the unofficial ChatGPT API. 🔥 (github.com)

集成方案:

nodejs容器化部署:bytemate/chatapi-single: Simple and powerful ChatGPT-API-Server (github.com)

浏览器扩展方案

优点:免费的,体验比较好,是真正的chatpgt模型,不用需要购买账号,直接使用用户的账号为用户服务。

缺点:一次只能发送一条信息,一个小时只能用60次,无法使用多账户提高接入能力。太频繁使用有被封的风险,这一点必须告诉用户,因为你用的是他们的账号。

浏览器扩展方案

个人还是推荐大家给这个库点个小星星,作者就是我本人,小弟谢谢了。

官方方案

cbb0b4f313c9b82f996a45d5d924af0.png

aaef13273fe8bca9df3dfa3cfb02f2e.png

cd38cb855acc2af208ec7ec47608e13.png

英文不好的朋友我翻译一下,就是openai要推出免费的方案了,但是后面可能收费,而且这次的模型不是gpt3。

好处:正版,稳定,安心,模型性能好 坏处:收费,可能国内不能用。

已经无效的方案,仅供技术参考

模型泄漏

text-chat-davinci-002-20221122这个模型被穷举出来了,现在已经失效。同时这个库也支持bing。

waylaidwanderer/node-chatgpt-api: A ChatGPT implementation with support for Bing's GPT-4 version of ChatGPT, plus the official ChatGPT model via OpenAI's API. Available as a Node.js module, REST API server, and CLI app. (github.com)

反向代理

好多人都说使用反向代理能帮助我们 passby CloudFlare 网关。但是全部都失效了,而且说避免openai发现,代码都是闭源的,不推荐哈。

贴链接:

PawanOsman/chatgpt-io: ChatGPT Client API, Blazing Fast, without using browser (github.com)

waylaidwanderer/node-chatgpt-api: A ChatGPT implementation with support for Bing's GPT-4 version of ChatGPT, plus the official ChatGPT model via OpenAI's API. Available as a Node.js module, REST API server, and CLI app. (github.com)

Bing Hacking

Bing 现在已经限制聊天次数了,是不是还有人和我一样在等待队列中。/(ㄒoㄒ)/~~

下面是Bing 接入库:

KeJunMao/edgegpt: The reverse engineering the chat feature of the new version of Bing.新必应聊天功能的逆向工程 (github.com)

transitive-bullshit/bing-chat: Node.js client for Bing's new AI-powered search. It's like ChatGPT on steroids 🔥 (github.com)

接入技术解析

协议解析

协议解析的思路主要是用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种可用的接入方式。

  1. GPT3
  2. 使用无头浏览器模型登录
  3. 浏览器扩展方案
  4. 官方方案

最后,提供一个多账号登录模拟浏览器登录方法的方案。

声明

以上接入方案仅作为技术探讨,本人不提供任何接入chatgpt的账号或接入者服务。

其实Prompt Engineering 才是普通开发者最需要关心的技术部分,因为api的接入总有一天会解决,模型微调又太难了,只能在这个部分发发力。大家感兴趣的话,我下篇文章就写一下。

用心创作,大家觉得有用的话,可以评论,转发,注意要注明出处。谢谢了。

本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动