手把手ChatGPT私有化部署

12,978 阅读4分钟

参考文档

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的门槛的,同时也有自己可用的代理套件,就不再赘述。

进行部署

  1. 使用git将工程文件clone下来,进入到目录后,复制一份配置文件出来
git clone https://github.com/869413421/chatgpt-web.git
cd chatgpt-web/
cp config.dev.json config.json
  1. 编辑配置文件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": ""
}
  1. 安装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
  1. 执行以下命令即可启动服务 go run main.go 首次执行后,命令会卡10秒左右,然后看到这样的输出画面

6F01D6B9-5CE9-4877-A267-9887E1761F5B.png 启动后,就可以在本地浏览器里通过URL进行访问。 我这里Server的IP为10.21.100.94,那么网址就是http://10.11.100.19:9999

6637220B-EC6F-4CE9-A391-7969293C9F38.png 成功访问后,在后台是可以看到反馈的

B85575FF-AC81-4FAC-AAB6-1195AA997202.png

设置为系统服务

每次都用那个命令启动服务,会比较繁琐。 我们一般都习惯于使用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" "/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

3CDEECC1-FF3F-495D-99F6-ED0C53163C21.png

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

4EA4DBDB-204A-48EC-BDA1-702F1F6DDBF1.png

原因是我们没有设置Proxy。这里需要设置为你自己的代理的IP。 设置格式语法如下: "proxy": "http://10.21.100.46:1080", "proxy": "socks5://127.0.0.1:10808"

视频教程

【本地化部署Chat GPT自己的AI小机器人 小白也能看懂的教程-哔哩哔哩】 b23.tv/lGnlb9J

Ok,就介绍到这儿,希望对大家能有帮助。