小言_互联网的博客

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

731人阅读  评论(0)

目录

前言

准备工作

功能实现

写在最后


前言

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

准备工作

功能实现

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

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

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


  
  1. import http from "http";
  2. http
  3. . createServer( (req, res) => {
  4. res. setHeader( "Access-Control-Allow-Origin", "*"); //设置响应头解决跨域
  5. if (req. url !== "/sendMsg") return sendRes(res, "not find", 404);
  6. let _data = "";
  7. req. on( "data", (d) => {
  8. _data += d;
  9. });
  10. req. on( "end", () => {
  11. res. writeHead( 200, {
  12. "Content-Type": "text/plain",
  13. "Access-Control-Allow-Origin": "*",
  14. });
  15. res. write( '椰丝');
  16. res. end();
  17. });
  18. })
  19. . listen( 1024, () => {
  20. console. log( "服务开启!");
  21. });

使用postman或者apiPost发起post请求

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


  
  1. /**
  2. * @name:
  3. * @description: 封装了一下ChatGPT
  4. * @param {*} msg 发送的消息
  5. * @param {*} sessionToken 浏览器cookie拿到的令牌
  6. * @return {Promise}
  7. */
  8. const sendChatGPTMsg = async ( { msg, sessionToken }) => {
  9. const { promise, resolve, reject } = defer();
  10. const api = new ChatGPTAPI({
  11. sessionToken,
  12. markdown: false,
  13. });
  14. await api. ensureAuth(). catch(reject); // 校验令牌
  15. api. sendMessage(msg). catch(reject). then(resolve);
  16. return promise;
  17. };

这个defer是把promise处理了一下


  
  1. /**
  2. * @name:
  3. * @description: promise扁平处理
  4. * @return {*}
  5. */
  6. const defer = ( ) => {
  7. let resolve, reject;
  8. return {
  9. promise: new Promise( (_resolve, _reject) => {
  10. resolve = _resolve;
  11. reject = _reject;
  12. }),
  13. resolve,
  14. reject,
  15. };
  16. };

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


  
  1. http
  2. . createServer( (req, res) => {
  3. res. setHeader( "Access-Control-Allow-Origin", "*"); //设置响应头解决跨域
  4. if (req. url !== "/sendMsg") return sendRes(res, "not find", 404);
  5. let _data = "";
  6. req. on( "data", (d) => {
  7. _data += d;
  8. });
  9. req. on( "end", () => {
  10. const data = JSON. parse(_data);
  11. sendChatGPTMsg(data)
  12. . then( (r) => {
  13. res. writeHead( 200, {
  14. "Content-Type": "text/plain",
  15. "Access-Control-Allow-Origin": "*",
  16. });
  17. console. log(r)
  18. res. write(r);
  19. res. end();
  20. })
  21. });
  22. })
  23. . listen( 1024, () => {
  24. console. log( "服务开启!");
  25. });

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

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

实现远程调用api

写在最后

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

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


转载:https://blog.csdn.net/time_____/article/details/128224527
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场