参考文档
GitHub – 869413421/chatgpt-web: 基于ChatGPT3.5 API实现的私有化web程序
systemd 自动重启挂掉的 golang 进程 – 运维 – 大象笔记
背景
随着AI技术的不断成熟,加上ChatGPT如火如荼的发布新版本迭代更新,人工智能的热度也升温到史无前例的高度。
我们有理由相信,现在身边还不愿主动去接触这项技术,深入了解的小伙伴,在不久的将来,一定会被时代淘汰,至少幸存下来的成本会比我们低很多。
言归正传,前段时间注册了ChatGPT的账号后,也尝试部署了Telegram版本的ChatGPT聊天功能,颇为成功,当时用的还是OpenAI的API。
最近想着既然ChatGPT发布了自己的API,民间会不会有些新的动作?
果不其然,网上已经有大神完成了私有的版本,这使得部署在本地,训练属于自己的AI成为可能!
部署
本地化部署起来并不难,有些网络和Linux基础的童鞋会更加容易些。
准备一个满足要求的Linux系统环境
我这里用的是以下环境:CentOS Linux release 7.9.2009 (Core)
这里假定读者都是没有安装OS的门槛的,同时也有自己可用的代理套件,就不再赘述。
进行部署
- 使用git将工程文件clone下来,进入到目录后,复制一份配置文件出来
git clone https://github.com/869413421/chatgpt-web.git
cd chatgpt-web/
cp config.dev.json config.json
- 编辑配置文件config.json
粘贴入以下信息,这里的api_key需要替换成你自己的。
port和proxy都是可以自行定义的。显然在国内不定义proxy基本上是没法用的。
{
"api_key": "sk-tnsMqcfmpyz6kExx5EuR88TbkFJ8OUzsCPyH2oIci",
"port": 9999,
"listen": "",
"bot_desc": "Kiss me more.",
"proxy": "http://10.11.100.44:1080",
"model": "gpt-3.5-turbo-0301",
"max_tokens": 512,
"temperature": 0.9,
"top_p": 1,
"frequency_penalty": 0.0,
"presence_penalty": 0.6,
"auth_user": "",
"auth_password": ""
}
- 安装go编译语言工具
由于该项目使用go语言编写,所以需要有相应的语言工具来执行程序。
yum install go
go mod download github.com/alecthomas/kong
go get github.com/869413421/chatgpt-web/bootstarp
go get github.com/869413421/chatgpt-web/app/http/controllers
- 执行以下命令即可启动服务
go run main.go
首次执行后,命令会卡10秒左右,然后看到这样的输出画面
启动后,就可以在本地浏览器里通过URL进行访问。
我这里Server的IP为10.21.100.94,那么网址就是http://10.11.100.19:9999
成功访问后,在后台是可以看到反馈的
设置为系统服务
每次都用那个命令启动服务,会比较繁琐。
我们一般都习惯于使用systemctl start/stop service_name
来开启和停止服务。
这里可以将执行语句定义为一个Service。
新建服务。
touch /lib/systemd/system/chat.service
然后编辑:
vi /lib/systemd/system/chat.service
[Unit]
Description=ChatGPT Test
[Service]
User=root
Group=root
Type=simple
Restart=always
RestartSec=20
StartLimitInterval=0
Nice=10
WorkingDirectory=/root/downloads/chatgpt-web/
ExecStart=/usr/lib/golang/bin/go "run" "https://b2.7b2.com/root/downloads/chatgpt-web/main.go"
StandardOutput=null
TimeoutStartSec=30
[Install]
RequiredBy=multi-user.target
注意:这里的WorkingDirectory和ExecStart是我自己的目录,你需要修改为你存放项目文件的目录。
这里的几个参数可以解释下:
Restart=always 进程挂了就重启
RestartSec=20 20秒检查一次
StartLimitInterval=0 无限次重启,忽略失败次数
最后重启守护进程,并且重启服务,并设置为自启动。
systemctl daemon-reload
systemctl restart chat
systemctl enable chat
查看状态可以看到已经Active,成功启动。当然也可以用netstat来验证下端口。
systemctl status chat
Troubleshooting
当然在配置过程中,因为种种环境因素等原因,大家配置未必都会一样顺利。
这里列举一些常见的问题,希望对大家有所帮助。
- 执行命令
go run main.go
后,网页依然打不开
这时可以先在Server上执行该命令查看服务对应的端口是否正常监听着:netstat -tnlp | grep 9999
如果没有结果,那就是服务压根没启动成功。如果有,则往下阅读
在访问网页的系统里用以下命令测试:telnet 10.21.100.94 9999
如果有反馈结果,则说明没问题,如果显示任何错误提示,例如connection refused或timeout之类等等,说明访问不到服务器。
一般可能的原因是防火墙挡住了。你可以粗暴地直接关闭防火墙来验证
systemctl stop iptables
systemctl stop firewalld
上面的两条必有一条生效。
验证后,可以通过以下命令添加防火墙策略并保存。
iptables -I INPUT 6 -p tcp --dport 9999 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
注意,不同的OS版本,保存配置的命令会有所不同。
- 在前端网页访问时,输入对话提示超时错误
错误语句为:请求出错,Post “ api.openai.com/v1/chat/com… “: dial tcp 185.45.6.57:443: connect: connection refused
这里的IP显然是ChatGPT的Server IP
原因是我们没有设置Proxy。这里需要设置为你自己的代理的IP。
设置格式语法如下:
"proxy": "http://10.21.100.46:1080",
"proxy": "socks5://127.0.0.1:10808"
视频教程
【本地化部署Chat GPT自己的AI小机器人 小白也能看懂的教程-哔哩哔哩】 b23.tv/lGnlb9J
Ok,就介绍到这儿,希望对大家能有帮助。