目录
前言
准备工作
起步
写在最后
前言
蹭一下最近比较火的人工智能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