记录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的应用配置,还得看看这个视频,去理解每个连接参数的意思

05_接入微信公众号服务器开发_哔哩哔哩_bilibili

这个链接就会有详细了解,参数意义

 这样得到应用在所有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验证失败

三 问题的猜测

问题1 我之前将80端口的信息转到7000端口这个操作是否还在,是否影响到我后面的操作
问题2 我服务器接受到这个验证,并return的时候能不能传递回来,对于微信验证的完整流程frp是否能昨晚,是否需要nignx的转发
问题3 我的客户端是否有防火墙
问题4 这个问题比较难受就是我这个域名是否备案,很明显没有备案,所以这个先做着