海外服务器接入ChatGPT - NodeJS篇

文章阅读时长:大约5分钟

需求分析:

OpenAI屏蔽了国内IP,国内网络直连ChatGPT会被block,如何国内自己使用呢?

解决方案:

国内连接海外服务器,海外服务器转接请求到ChatGPT

需要资源:

海外服务器 + 基础编程能力 + OpenAI的Key


\color{#888888}{ (以下所有代码是在MacOS系统操作,服务器为Linux。) }

准备一台海外服务器(这篇文章介绍如何白嫖一年Amazon服务器),先安装NodeJS环境。

服务器验证

ssh进入你的服务器,假如你的服务器ip为123.456.78.9
% ssh root@123.456.78.9

在你的服务器里,先试下使用cURL可不可以访问OpenAi。
(记得替换你的key: sk-xxxx,然后几行一起复制,在终端里输入以下代码)

curl "https://api.openai.com/v1/chat/completions" \
-X POST \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{ "model": "gpt-3.5-turbo", "messages": [ {"role": "user", "content": "软件工程师,如何在职场中增加影响力"} ] }'

这个时候返回ChatGPT的回答,就证明你的服务器可以用。如果有其他错误,要查查你的服务器,是不是海外ip了。

下面是服务器配置

安装NodeJS (LTS版本的)
% curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s lts

装完查看node版本号
% node -v

安装Nginx (NodeJS本身能运行web服务,为什么还要Nginx、Apache这些?可以看看这个文章,主要是因为Nginx有负载均衡、静态缓存这些优化。)
% yum install nginx

装完查看nginx版本号
% nginx -v

查看nginx配置
% nginx -t

启动nginx
% nginx

启动完nginx后,在浏览器输入你的服务器ip,访问到一个“Welcome to nginx!”的页面,证明服务器已经可以使用。

编写代码:

// 新建 server.js 文件,直接copy代码的话记得替换sk-xxxxx为你自己的key。

// server.js 文件

var express = require('express'); // 没有装过的话可以先安装: npm install express
var app = express();
var path = require('path');
const https = require('https');

// 要解析application/json
app.use(express.json()); 

app.post('/chat', (req, res) => {
    var auth = req.body.auth;
    // 这里是你自己的简单验证key,可以不要
    if (auth === 'aaa') {
        var msg = req.body.msg;
        try {
            PostTextToChat(msg, function(callbackString) {
                // 把openAi返回的字段全部透传给你
                res.send(callbackString);
            });
        } catch (error) {
            console.log('error: ' + error)
        }
    } else {
        res.send('Invalid Auth');
    }
});

// 向chatGPT发出Post请求
function PostTextToChat(msg, callback) {
    const apiKey = 'sk-xxxxx'; // 这里填写你的key
    const prompt = msg;

    const messages = [];
    messages.push({
        "role": "user",
        "content": prompt
    });
    const postData = JSON.stringify({
        "model": "gpt-3.5-turbo",
        "messages": messages,
//        "max_tokens": 200,
    });
    const options = {
        hostname: 'api.openai.com',
        port: 443,
        path: '/v1/chat/completions',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer ' + apiKey
        }
    };

    const req = https.request(options, (res) => {
        let response = '';
        res.on('data', (chunk) => {
            response += chunk;
        });
        res.on('end', () => {
            response = JSON.parse(response);
            callback(response);
        });
    });

    req.on('error', (error) => {
        console.error('error~~ ' + error);
        callback(error);
    });

    req.write(postData);
    req.end();
}

// 生成服务器并监听3000端口
var server = app.listen(3000, 'localhost', function () {
    var host = server.address().address
    var port = server.address().port
    console.log('应用实例,访问地址为 http://%s:%s', host, port)
});

使用工具,把server.js文件复制到你的服务器任意路径下。Mac端可以使用Transmit等工具

配置nginx

刚刚使用的命令 % nginx -t 可以获取配置路径,如 /etc/nginx/nginx.conf
修改nginx.conf文件
% vim /etc/nginx/nginx.conf

i键开始编辑;
编辑好后,按esc键,先输入: 再输入 wq 这样就会保存退出。

配置里主要是proxy_pass http://Localhost:3000; 这行,表示服务器在监听80端口(你平时在浏览器输入域名或者ip后,不另外加端口号的话,默认就是80端口),监听到80端口的请求后,会映射到3000端口。然后你的server.js在监听3000端口,这样请求就到你的server.js去了。

配置好后重启下nginx
% nginx -s reload

修改后大概长这样:
nginx.conf
启动你的server.js

% cd [server.js目录]
% node server.js

(开启后当前终端就一直挂在这里了。如果你关掉终端,server.js也会失效。这个时候可以用一个叫pm2的工具,它可以让js服务在后台开启。这个是后话,有空再写pm2的东西,现在先测试整个流程。)

这个时候,你已经配置好nginx:监听80端口,然后反向路由到3000端口;且开启了server.js;
当你向服务器发出请求的时候,就能收到响应了。

如何向服务器发出请求

可以在你电脑另外开一个终端,输入以下cURL代码 / 使用Postman

curl "http://123.456.78.9/chat" \
-X POST \
-H "Content-Type: application/json" \
-H 'Accept: application/json' \
-d  '{ "auth": "aaa", "msg": "软件工程师,如何在职场中增加影响力"}'

如果收到大洋彼岸的服务器的响应,恭喜你,成功解决了被block的问题了~🎉
(利用这个项目,你还能写App或小程序,给你的小伙伴无障碍使用chatGPT,去炫耀你的技术吧🐮)

cURL返回的结果
Postman返回的结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容