ChatGLM接入微信公众号(cpolar的使用)

一,尝试

  继上利用frp加上阿里云服务器,借助公网ip实现内网穿透,再加上申请域名,解析云服务器,再frp上建立http连接,但是由于阿里云免费的服务器,不支持备案,所以域名解析的服务器无法通过域名访问,所以我尝试去购买便宜的香港的服务器免去备案的麻烦,但是连接完之后,token依旧验证失败。

二,方法

2.1 解决验证问题

  我的连接问题我认为很大概率是我的域名和服务器的问题,所以得找到一个替代省去麻烦,最好就是找一个内网穿透的工具,可以建立http连接并且能够提供备案域名实现连接。

2.2 cpolar的使用

  我看到b站视频cpolar,这个工具可以免费进行内网穿透并提供备案域名,但是备案域名只是24h内随机域名,需要固定域名可以购买基础套餐

进入cpolar的官网

cpolar - secure introspectable tunnels to localhost

登录注册之后

 按照图片要求操作,下载对应版本的cpolar,解压缩之后,连接自己的账户

 ./cpolar http 80

开放端口进入

 实际效果应该是这样

只需要将对应的连接80端口的提供好的给你的域名,填入微信公众号验证就行,在加上token的验证代码,上一个文章也有,我粘贴部分

def wechat():
    timestamp = request.args.get("timestamp")
    nonce = request.args.get("nonce")
    echostr = request.args.get("echostr")
    signature = request.args.get("signature")
    if request.method == "GET":
        if not all([signature, echostr, nonce, timestamp]):
            abort(404)
        li = [wechatToken, timestamp, nonce]
        li.sort()
        tmp_str = "".join(li)
        sign = hashlib.sha1(tmp_str.encode("utf-8")).hexdigest()
        if signature != sign:
                abort(403)
        else:
            return echostr

因为微信在给你发送验证请求的是get请求,所以分开执行后面的post发送也会比较方便

2.3 验证成功

  输入对应的网址和运行代码就可以验证成功

 

 对应的也会有这个显示,代表了验证成功,可以去对接微信接口进行开发

三, 运行ChatGLM

3.1 公众号的选择

  因为当时在创建公众号的时候并没有过多的考虑,不经过微信认证的公众号所开的接口十分有限,在消息回复当中只有自动回复的接口可以使用。可以在接口权限中找到,我放一下我自己的公众号。

 3.2 实现聊天

github老哥的代码 ,完整代码在

pli2014/chatGLM-wechat: 【技术篇】个人微信公众号对接chatGLM-6B (github.com)

我截取部分

        xml = request.data
        if xml:
            try:
                msg = parse_message(xml)
                print("message from wechat msg:{}".format(msg))
                t1 = Thread(target=asyncTask, args=(msg.source, msg.content))
                t1.start()

这里是一个xml的一个解析,此刻一定要注意,老哥的代码使用的是明文模式,不能选择其他模式,否则就会出现找不到MsgType的情况,这个也弄了我好长时间,此处老哥的代码是一个线程运行,调用asyncTask的函数,后面的就是传进函数的参数,然后线程执行

问题1 老哥的代码使用权限问题

无论是这种

tokenizer = AutoTokenizer.from_pretrained("model/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("model/chatglm-6b", trust_remote_code=True).float()


def asyncTask(userId, content):
    print("ask a quesion with userId:{}, content:{}".format(userId, content))
    response, history = model.chat(tokenizer, content, history=[])
    print("chat-GLB replay:{}".format(response))
    reply = create_reply('这是条文字消息', msg)
    return reply.render()

还是这种

tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()


def asyncTask(userId, content):
    print("ask a quesion with userId:{}, content:{}".format(userId, content))
    response, history = model.chat(tokenizer, content, history=[])
    print("chat-GLB replay:{}".format(response))
    client.message.send_text(userId, response)

里面涉及到的消息转发的函数微信认证的公众号都不可以使用,所以我们需要利用xml的格式进行post转发

        xml = request.data
        if xml:
            try:
                xml = ET.fromstring(request.data)
                fromUser = xml.find('FromUserName').text
                toUser = xml.find('ToUserName').text
                msgType = xml.find("MsgType").text
                createTime = xml.find("CreateTime")
                content = xml.find('Content').text
                xml_sta = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>'
                GLM_Reply = reply(content)
                res = make_response(xml_sta % (fromUser, toUser, str(int(time.time())), GLM_Reply))
                res.content_type = 'application/xml'
                return res

这样就不会报,没有接口权限的错误了

3.3 问题

  进行到这里,依旧出现了一个问题,当我向客户端发送你好的时候,GLM也作出了回答,但是传递公众号上却不显示,问题的点在于没有报错,所以也没弄明白原因,并且CPU和内存的占有率非常高,但是GPU性能却一点没用,也让我很困惑

这个CPU和内存访问超时的问题已经解决,核心就是在接口的调用错误,阿里云机器学习平台的现存是32G完全够用,然而老哥的代码时使用CPU本地部署,而且微信公众号也是微信认证的。

应仿照官方文档调用模型

问题1 因为是否可能是这个响应的问题超过五秒了,服务器拒绝了

这个问题已经有方法了,如果你们需要接入微信公众号,那么就必须要进行微信认证,获得24h的客服回复接口,才能避免生成结果超过5s的问题。

问题2 在尝试调用ChatGLM的api也会有响应问题,通过建立流式api,但在服务器运行过程中卡住,这个问题也没有解决,运行卡住了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值