likes
comments
collection
share

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

作者站长头像
站长
· 阅读数 9

前段时间比较火🔥的Open AI公司的Chat GPT项目,相信大家都可能早已从以下渠道接触过:

  • 官网注册账号使用;
  • 公众号、微信机器人等各种机器人

在ChatGPT发布的将近一个月里,虽然官方并没有提供公共的API给大家使用,但社区早已有了大佬们的Idea🌟,比如非官方API仓库、微信机器人🤖️、qq机器人🤖️、Chrome扩展、Vscode扩展等等

今天就给大家介绍一下用Nodejs实现的ChatGPT API: chatgpt-api

仓库作者:Travis Fischer

注:本文介绍的是比较早的v2.0.1版本,主要是通过cookie认证的方式,去调用接口;

而lastest版本已经采用的是puppeteer来绕过和自动化登录流程

仓库地址: github.com/transitive-…


首先来看一看该仓库的描述:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

“一个非官方的Nodejs实现的ChatGPT API”

因为官方没有公共的API,v2.0.1版本采用的只能是Cookie认证的方式,基于此,我们来看一看运行流程是怎么养的:

官方使用例子🌰:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

整体运行流程🌠:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

给大家分别解释一下:

  • 第一步:使用入口类ChatGPTAPI创建实例,初始化了Token、请求的url地址、userAgent、超时时间等参数,如图:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

  • 第二步:根据传入的Token调用构造Auth请求,获取返回的AccessToken并保存到缓存里面;
  • 实际步骤就是:
  1. 从缓存中获取token
  2. 调用Auth接口
  3. 保存token
  • 代码如图(标注上了注释): 看看4.4k🔥stars的chatGPT API仓库到底做对了啥 看看4.4k🔥stars的chatGPT API仓库到底做对了啥
  • 第三步:依赖上一步得到的AccessToken,直接调用sendMessage方法去和AI对话
  • 具体步骤就是:
  1. 获取token
  2. 调用和AI对话的接口
  • 代码如图(标注上了注释): 看看4.4k🔥stars的chatGPT API仓库到底做对了啥

值得关注的几个地方:

  1. 大家都知道ChatGPT是有会话功能的,能够维持上下文,那是如何实现的呢?

    其实在发送消息的请求中用了两个id来维持

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

  • conversationId代表的是此次会话的id

  • parentMessageId代表的是此次会话上一条消息的id

    通过这两个参数,就能在请求里维持上下文信息。

  1. 发送消息的接口采用了SSE

SSE 是 Server-Sent Events 的简称, 是一种服务器端到客户端(浏览器)的单项消息推送。对应的浏览器端实现 Event Source 接口被制定为HTML5 的一部分。

该仓库中使用了Fetch实现了从Response流不断获取消息数据,如图

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

以下为streamAsyncIterable方法读取流的方式:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

  1. 仓库目录结构

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

  • docs/media:存放了项目的一些说明文档和图片等媒介资源
  • src:

看看4.4k🔥stars的chatGPT API仓库到底做对了啥

可以看到,其实src目录一开始也比较混乱,入口js、不同API模块、types文件、工具函数都放在一起

  • 其他的就是一些基本的项目配置文件了,按需引入即可
  1. 自定义错误类
export class ChatGPTError extends Error {
  statusCode?: number
  statusText?: string
  response?: Response
  originalError?: Error
}

// instantiation
const error = new types.ChatGPTError('ChatGPT invalid email')
error.statusCode = 401
throw error
  1. token缓存: 用到了可以设置缓存过期时间的NPM库:expiry-map,大家可以了解一下。

看看4.4k🔥stars的chatGPT API仓库到底做对了啥


🌊总结:

  1. 可以看出该仓库的作者Travis Fischer是比较有行动力的, 在ChatGPT发布后的几天就发布了这个Nodejs实现的API库,idea转化成实际的东西能力比较强,仓库的成功一方面也抓住热点,付出了行动,值得自己学习;
  2. 阅读源码的过程更像是一个个零散知识点的不断补充,完善,汇聚成体系的过程,需要多思考,多总结。

我也将💪持续阅读好的代码库,思考学习好的代码,把自己的成长分享出来。