站在巨人的肩膀上,用Node+ChatGPT模块实现一个接口
创始人
2024-03-25 03:22:40
0

目录

前言

准备工作

起步

写在最后


前言

蹭一下最近比较火的人工智能ChatGPT的热度,最近看到许多小伙伴都在调戏ChatGPT,看到这我就坐不住了,这种事怎么能少了我,于是闲(划)暇(水)之余用node做了个api

准备工作

  • node环境(16或以上版本)
  • chatgpt模块
  • vpn(访问OpenAI及ChatGPT官网)
  • ChatGPT的账号

起步

登录ChatGPT后打开控制台,复制cookie里的session-token

初始化node项目,下载chatgpt模块

新建node server服务,代码如下:

import http from "http";
http.createServer((req, res) => {res.setHeader("Access-Control-Allow-Origin", "*"); //设置响应头解决跨域if (req.url !== "/sendMsg") return sendRes(res, "not find", 404);let _data = "";req.on("data", (d) => {_data += d;});req.on("end", () => {res.writeHead(200, {"Content-Type": "text/plain","Access-Control-Allow-Origin": "*",});res.write('椰丝');res.end();});}).listen(1024, () => {console.log("服务开启!");});

使用postman或者apiPost发起post请求

完成一个最简单的接口后,咱们接入ChatGPT

/*** @name:* @description: 封装了一下ChatGPT* @param {*} msg 发送的消息* @param {*} sessionToken 浏览器cookie拿到的令牌* @return {Promise}*/
const sendChatGPTMsg = async ({ msg, sessionToken }) => {const { promise, resolve, reject } = defer();const api = new ChatGPTAPI({sessionToken,markdown: false,});await api.ensureAuth().catch(reject); // 校验令牌api.sendMessage(msg).catch(reject).then(resolve);return promise;
};

这个defer是把promise处理了一下

/*** @name:* @description: promise扁平处理* @return {*}*/
const defer = () => {let resolve, reject;return {promise: new Promise((_resolve, _reject) => {resolve = _resolve;reject = _reject;}),resolve,reject,};
};

这个时候,我们在req.on("end")中调用这个api

http.createServer((req, res) => {res.setHeader("Access-Control-Allow-Origin", "*"); //设置响应头解决跨域if (req.url !== "/sendMsg") return sendRes(res, "not find", 404);let _data = "";req.on("data", (d) => {_data += d;});req.on("end", () => {const data = JSON.parse(_data);sendChatGPTMsg(data).then((r) => {res.writeHead(200, {"Content-Type": "text/plain","Access-Control-Allow-Origin": "*",});console.log(r)res.write(r);res.end();})});}).listen(1024, () => {console.log("服务开启!");});

并且在ApiPost中将之前浏览器中复制的sessionToken补充全,再填上想问的问题,发送请求,就会有以下效果

至此,一个ChatGPT的api就实现完了,我们可以用它接入飞书,企微的webhook机器人,或者接入内网穿透,参照这篇文章:没有云服务器?内网穿透了解一下_DieHunter1024的博客-CSDN博客

实现远程调用api

写在最后

感谢你看到了最后,如果文章对你有帮助的话,还请点赞支持一下博主,非常感谢

源码:chatGPT-api: 基于chatGPT模块实现一个api

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...