美文网首页
海外服务器接入ChatGPT - NodeJS篇

海外服务器接入ChatGPT - NodeJS篇

作者: iRonCheng | 来源:发表于2024-03-17 20:05 被阅读0次

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

    \color{#666666}{ 需求分析:OpenAI屏蔽了国内IP,国内网络直连ChatGPT会被block,如何国内自己使用呢? }

    \color{#666666}{ 解决方案:国内连接海外服务器,海外服务器转接请求到ChatGPT }

    \color{#666666}{ 需要资源:海外服务器 + 基础编程能力 + 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返回的结果

    相关文章

      网友评论

          本文标题:海外服务器接入ChatGPT - NodeJS篇

          本文链接:https://www.haomeiwen.com/subject/hezozdtx.html