目录

前言

准备工作

功能实现

写在最后


前言

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

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

  1. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义

    米老师按:觉得值得讨论的小文!我还要认真地想一想 主题:围绕职责链设计模式-计算收费有效时间博客展开讨论 参与人: 讨论时间: 讨论内容 这次讨论主要分为以下几点: 一.职责链模式应用于机房收费系统计 ...

  2. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)

    前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...

  3. “站在巨人的肩膀上”

    站在巨人的肩膀上需要拥有巨人的实力 容易错误理解成:"盗取"巨人的成果并漠视了巨人

  4. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们<Visual C++游戏开发>专栏的游戏引擎导论,也 ...

  5. 3小时快速入门数学建模竞赛-建模技巧2:追根溯源,站在巨人的肩膀上

    我们要检索哪些信息?和怎样获得快速.准确的信息?这两个问题. 首先回答第一个问题,我们需要检索哪些信息?我们从我们需要求解的内容入手,请看思维导图和系统框图,我们需要求解35年寿命期内的发电总量.经济 ...

  6. 知识就是力量,让机器站在巨人的肩膀上

    作者:微软亚洲研究院 闫峻博士 知识是什么?抽象来说,是人类对世界的认知,对宏观及微观世界客观规律的总结.具体来说,大到牛顿定律.量子力学中的科学发现,小到自家孩子的生日.太太做饭常用的酱油颜色,都是 ...

  7. 站在巨人的肩膀上看世界,MySQL初步使用语法

    站在巨人的肩膀上看世界,MySQL初步使用  MySQL是一个常用的数据库,对于他的使用,我们需要尽量的了解它,但是掌握初步的语法,也可以勉强使用它,这都归功于它的研发者们.正是因为这些大佬,写好了软 ...

  8. 游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057 作者:毛星云(浅墨 ...

  9. 站在巨人的肩膀上:C#编写WindowsService

    本文将为大家详细介绍如何用C#编写一个系统服务,当然肯定不是教大家从头写,而是在一个搭建好的框架上进行自我创作! 一.项目整体架构 本项目的开发是针对某设备的开启异常情况进行邮件提醒,针对监控到的未开 ...

最新文章

  1. 10 个开源 Python OpenCV 小项目,YouTube热门
  2. nginx中的502错误
  3. static 用法www
  4. HDU5773-The All-purpose Zero-多校#41010-最长上升子序列问题
  5. python数据清理的实践总结_Python数据清洗实践
  6. 提高python 程序运行速度_3个Python函数帮程序员们避免编写循环,提高运行速度...
  7. SetNamedPipeHandleState
  8. android进阶(三)数据存储之Internal Storage
  9. 数据库导出换行mysql_数据库导出excel 换行
  10. STM32智能家居系统设计(门禁、人体感应、GSM远程控制)
  11. BF算法与KMP算法
  12. 计算机之家 Vista Ulite 完美安装版 (Vista旗舰版)
  13. 2019 年第 25 周 DApp 影响力排行榜 | TokenInsight
  14. Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询
  15. 南京大学交叉培养计算机与金融招生人数,教务处组织召开计算机与金融工程实验班师生见面会...
  16. BitLocker上锁
  17. 阿里王坚:别把智慧城市做成怪物
  18. 【LaTeX 问题解决方案】I couldn‘t open file name `.aux‘
  19. NVIDIA显卡,显卡驱动和CUDA版本之间的关系
  20. STM32------ADC(电压检测)

热门文章

  1. 小程序 js把本地或取得临时的视频或者图片路径封装成file文件流
  2. dell跳过开机硬件检测_戴尔笔记本关闭开机硬件自检
  3. speedoffice(Excel)如何隐藏网络线
  4. java 父委托机制优点_Java虚拟机父类委托机制设计的优点
  5. OSI七层模型的功能以及设备
  6. 大学生创新创业项目管理系统
  7. 深度学习实战(十):使用 PyTorch 进行 3D 医学图像分割
  8. FaceX-Zoo | 使用PyTorch Toolbox进行人脸识别(附源代码)
  9. amis eureka_如何构建量身定制的amis来升级您的基础架构
  10. c语言俄罗斯方块程序设计论文,c语言俄罗斯方块游戏程序设计报告