当前位置:首页 » 《随便一记》 » 正文

站在巨人的肩膀上,用Node+ChatGPT模块实现一个接口

25 人参与  2023年03月30日 16:09  分类 : 《随便一记》  评论

点击全文阅读


目录

前言

准备工作

功能实现

写在最后


前言

蹭一下最近比较火的人工智能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


点击全文阅读


本文链接:http://zhangshiyu.com/post/57377.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1