记录ChatGLM接入微信公众号的过程,及错误总结(未解决)
一,起因
本人本来的意思是去搭建一个Chatgbt和微信公众号的一个个人聊天工具,但是由于需要租用海外服务器,以及海外服务器是否能够去满足GBT大模型的训练,因此如果想要省点钱,来进行搭建,就得换个法子,就跟着师哥了解了ChatGLM
二,过程
2.1 ChatGLM的部署
在了解了师哥的AI部署之后,我跟着b站的up主Joker大金宝,的视频教程,利用阿里云的免费机器学习的平台,可以给到大模型训练的GPU,刚开始还有使用三个月的名额
在阿里云上部署chatGLM-6B_哔哩哔哩_bilibili
网址就放在这了,金宝老师讲的很好,部署很简单。
主要记录一下出现的问题
2.1.1 免费使用
看评论有的人好像收费了,因此我们要是使用阿里云的机器学习平台,要点击这个免费使用
选择好使用的产品之后,点击试用再去平台去创建实例,就不用交钱了
2.1.2 部署出现错误
我的错误点就在于选择的镜像错误
一定要选择python39的,我好像选择了python36,当时出现了这样的问题
ERROR: Could not find a version that satisfies the requirement transformers==4.27.1 (from versions: 0.1, 2.0.0, 2.1.0, 2.1.1, 2.2.0, 2.2.1, 2.2.2, 2.3.0, 2.4.0, 2.4.1, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.9.1, 2.10.0, 2.11.0, 3.0.0, 3.0.1, 3.0.2, 3.1.0, 3.2.0, 3.3.0, 3.3.1, 3.4.0, 3.5.0, 3.5.1, 4.0.0rc1, 4.0.0, 4.0.1, 4.1.0, 4.1.1, 4.2.0, 4.2.1, 4.2.2, 4.3.0rc1, 4.3.0, 4.3.1, 4.3.2, 4.3.3, 4.4.0, 4.4.1, 4.4.2, 4.5.0, 4.5.1, 4.6.0, 4.6.1, 4.7.0, 4.8.0, 4.8.1, 4.8.2, 4.9.0, 4.9.1, 4.9.2, 4.10.0, 4.10.1, 4.10.2, 4.10.3, 4.11.0, 4.11.1, 4.11.2, 4.11.3, 4.12.0, 4.12.1, 4.12.2, 4.12.3, 4.12.4, 4.12.5, 4.13.0, 4.14.0, 4.14.1, 4.15.0, 4.16.0, 4.16.1, 4.16.2, 4.17.0, 4.18.0)
ERROR: No matching distribution found for transformers==4.27.1
这个就是选择版本的问题,transformers==4.27.1只支持3.7以上的版本,所以出现这个问题也要尤为注意
剩下就是部署成功啦,还挺简单的,似乎没啥毛病
2.2 接入微信公众号
因为之前从未接触过公众号的开发,所以第一时间就是去bing上去搜搜,看看有没有现成的,一搜还搜到了,有个老哥写了现成的
pli2014/chatGLM-wechat: 【技术篇】个人微信公众号对接chatGLM-6B (github.com)
老哥写的代码很好啊,就是乍一看啊,看不懂·
但是肯定可以确定的是需要自己去创建一个微信公众号,订阅号就可以,微信公众号的创建也没啥问题,建立好之后自然要去捣鼓捣鼓一下这个代码,了解里面的一些参数
然后将里面的APPID,APPSECRET的值进行修改,改一token的值,这些参数换成自己的,这些也就是代码的一个基础配置,并且学习代码是通过Flask应用机器人,来进行回复和微信token的验证的。
接入问题
2.2.1网络问题
一开始我是用这个运行web_demo.py的生成的网页进行,微信公众号基本配置的验证的,发现毫无意义,之后还是调试GitHub给的代码,让这个Flask应用运行起来,监听发出的端口,获取信息才能处理
这也出现了第一个问题,阿里云的免费试用平台是内网,如果微信想要通过URL来发送验证信息,则必须要公网访问,但是平台并没有公网IP
因此解决的第一个问题是公网IP问题
解决办法
我想到我之前在大学期间,利用frp,搭建校园网到服务器网的连接,实现利用微软的远程控制平台来实现,平板对笔记本的远程控制,达到内网穿透效果
目的利用frp来实现内网穿透。
再在免费试用里面领取ECS的云服务器,来获取这个公网IP
问题1 安全组的开放端口
在搭建过程中出现了,frp服务开启了,但是客户端接入不进去,frp的仪表盘打不开的情况。主要的一个问题就是,端口的开放
ECS和我之前在大学使用的轻量化的页面不一样,在配置安全网的时候,自己明明已经打开了这个端口,却仍旧连接不上的问题
安全网的配置,可以去C一下怎么配置的,我的主要问题就是这个
大家主要关注一下相关实例,我自己去配置了配置一,但是我自己服务器的实例没加入进去,全打开也没用
第二个问题就是这网络好像有区域的,在配置的时候注意一下,C过之后配置应该问题不大
问题2 frp的连接
既然端口一开发,Frp连接成功,我应该可以通过有公网IP的服务器,将信息传递到内网的机器学习平台,连接成功之后,我们就需要在Flask的app中去配置,让这个app去在那个端口上面等着信息发来,接受才对吧。
之后我们就应该按照公众号的提示
公众号只支持 80 端口和 443 端口,实际上这里有个大坑,感兴趣读一读
我肯定想让他们用默认端口的7000,去来回通信,所以我开放80端口,并将80端口的信息转接到7000端口,通过frp传递到客户端的7000端口,让我的Flask的app在7000端口监听,获取验证信息就可,这里其实关于这个Flask的应用配置,还得看看这个视频,去理解每个连接参数的意思
这个链接就会有详细了解,参数意义
这样得到应用在所有IP地址中监听6000号端口,获取信息,这里为啥是6000,先别急,我先接着说,我完成了上面的操作了之后,成功的解决了URL超时的问题
但是问题变成了token验证失败
紧接着出现我想到第二个问题
问题3 frp连接的属性
我根据FRP内网穿透实践教程 - 知乎 (zhihu.com)的教程,实现的win10的smb连接,而微信公众号发送的是http的get请求而非smb,或者TCP连接,因此我认为是我的连接类型问题
因此我改变了客户端的连接属性
改变了服务端的建立一个vhost_http_port的一个连接
我通过了解实际上frp是通过vhost_http_port来将信息传递到local_port的因此,localport和app的port相同即可,所以都设置了6000
问题4 域名
但是根据上面的图片,图片上面有域名,也就是我建立http的连接,必须要有自己的域名,接着去阿里云注册一个域名
注册域名没什么问题。也很便宜,建立完域名我只需要去将我的这个域名解析到我这个,公网服务器IP地址就可以完成这样http的连接
当我完成http连接之后,仍旧token验证失败