Flexus云服务器X实例赋能,用Python将微信公众号秒变智能聊天机器人

196 阅读6分钟

一、前言  

前面一些章节我们讲到了如何购买华为云flexusx实例,并且开启了一台4核12G的机器,今天我们继续开发一个极其实用的公众号程序,结合文心一言的消息自动回复的聊天功能,一起来体验AI的魅力。

恰逢华为云828 B2B企业节盛大庆典,Flexus X实例推出的特惠活动格外引人注目,强烈建议您深入探索这一盛宴。尤其针对那些既追求顶尖算力性能,又对自建MySQL、Redis、Nginx等关键服务性能有严格把控需求的企业与开发者而言,此次优惠无疑是千载难逢的良机,不容有失,赶紧把握!    

⭐⭐⭐点击此处进入华为云828专场⭐⭐⭐

近年来,随着人工智能技术的迅猛发展,各种自然语言处理(NLP)能力强大的大模型纷纷涌现。其中,百度的文心大模型因其卓越的性能和灵活的应用场景,被广泛应用于各类对话和交互场景中。本文将详细介绍如何在微信公众号中实现与百度文心大模型的交互,并给出完整的实现步骤及代码示例。要实现微信公众号与大模型的对话功能,我们需要将用户在公众号中输入的内容发送给大模型并获取其生成的回复。具体实现需要以下几个步骤:

1.注册并配置微信公众号;

2.搭建能够接受微信消息的后端服务;

3.接入百度文心大模型API;

4.实现消息的收发与处理。

以下将逐步展开详细的实现步骤。

二、功能实现  

2.1 注册并配置微信公众号  

首先,需要拥有一个微信公众平台账号,并注册一个公众号(服务号或订阅号皆可),以便后续获取日常开发所需的信息与权限。

2.1.1 注册公众平台账号  

1.访问微信公众平台,根据提示完成账号注册过程。    

2.注册完成后,登录进入公众号后台,记录AppID和AppSecret,这两个信息将在之后的开发中用到。

2.1.2 配置服务器  

要实现消息自动回复功能,微信公众号需要与开发者的服务器建立通讯。具体步骤如下:

1.在微信公众号管理后台,进入“基本配置”页面。

2.在“服务器配置”部分,启用消息接收并填写接口配置信息:

oURL:填写外网可访问的接口地址,示例:your_domain.com/wechat

oToken:自行设置或随机生成一个,用于微信验证开发者服务器

oEncodingAESKey:消息加解密密钥,自行生成

3.保存配置。微信将会发送请求到你配置的URL,以验证服务器的有效性。

2.2 搭建接受微信消息的后端服务  

有多种技术路径可以实现接受微信消息并回复的信息接口,此处以Flask框架为例:

2.2.1 搭建Flask后端  

这里我们用的CentOS7的系统,自带了Python3环境,所以安装flask库只需要执行下面命令就行。

# 先安装Flask,命令如下:            
pip3 install flask            

2.2.2 接收微信消息的Flask代码样例  

先创建我们的本次工作目录:

mkdir /var/web/http/gzh-reply            
cd /var/web/http/gzh-reply            
vim server.py            

然后主要是通过flask启动一个可以公网访问的服务,后面公众号请求这个api进行功能聊天,放入下面的代码:

from flask import Flask, request, jsonify            
import hashlib            

app = Flask(name)            

替换如下的TOKEN            

WECHAT_TOKEN = 'your_token'            

@app.route('/wechat', methods=['GET', 'POST'])            
def wechat():            
if request.method == 'GET':            
# 微信接口验证代码            
token = WECHAT_TOKEN            
query = request.args            
signature = query.get('signature', '')            
timestamp = query.get('timestamp', '')            
nonce = query.get('nonce', '')            
echostr = query.get('echostr', '')            

s = ''.join(sorted([token, timestamp, nonce]))            
if hashlib.sha1(s.encode('utf-8')).hexdigest() == signature:            
return echostr            
return ''            
elif request.method == 'POST':            
# 微信消息接收与处理代码            
data = request.data            
# 解析XML数据,这里可以使用xmltodict或其他工具进行解析            
# ...            
return ''            

if name == 'main':            
app.run(host='0.0.0.0', port=5000, debug=True)            

接下来启动服务:

python3 server.py            

为了更好的服务运行体验,我们通过一个sh脚本来后台运行脚本并记录访问日志。

vim server.sh            

放入如下内容

ps -elf | grep 'server.py' |awk '{print $4}' | xargs kill -9            
cd /var/web/http/gzh-reply            
nohup python3 -u server.py >> /var/web/http/gzh-reply/server.log 2>&1 &            

然后执行命令:

bash server.sh            

    

服务启动后请确保接口可从公网访问,以便微信服务器能够进行调用。

2.3 接入百度文心大模型API  

2.3.1 申请API访问权限  

为了与文心大模型进行交互,首先要申请使用其服务的访问权限。具体步骤包括:

1.登录百度云或文心大模型的官网,注册账户并获取API Key与相关文档。

3.通常会需要具体的调用权限,被授予后可以在“API管理”或者“开发者中心”查看相关API的信息。    

2.3.2 调用API接口  

与文心大模型通信通常是通过RESTful API实现的。以下是可能的调用示例(注意:具体的API地址和参数可能会有变化,请参考官方文档):

import requests             
import json             

你的API Key和Secret Key             

API_KEY = ''             
SECRET_KEY = ''             

获取access token的URL(请替换为实际URL)             

TOKEN_URL = 'aip.baidubce.com/oauth/2.0/t…          

调用文心一言对话API的URL(请替换为实际URL)             

CHAT_API_URL = 'aip.baidubce.com/rpc/2.0/ai_…          

def get_access_token():             
"""获取access token"""             
payload = {             
'grant_type': 'client_credentials',             
'client_id': API_KEY,             
'client_secret': SECRET_KEY             
}             
response = requests.post(TOKEN_URL, data=payload)             
if response.status_code == 200:             
result = response.json()             
return result.get('access_token')             
else:             
return None             

def chat_with_ernie_bot(access_token, user_query):             
"""与文心一言聊天"""             
headers = {             
'Content-Type': 'application/json'            
}             
user_history = []            

# 将用户输入添加到对话历史中            
user_history.append({"role": "user", "content": user_query})            
# 调用ERNIE-Bot聊天接口            
payload = {"messages": user_history}            
response = requests.post(CHAT_API_URL + '?access_token=' + access_token, headers=headers, json=payload)             
if response.status_code == 200:             
result = response.json()             
print(result)            
# 假设回复在result['result']中,具体字段根据API返回结果调整             
return result.get('result')             
else:             
return 'Error: Failed to get response from API.'             

使用示例             

access_token = get_access_token()             
if access_token:             
user_query = "你好,文心一言,最近有什么新进展吗?"             
reply = chat_with_ernie_bot(access_token, user_query)             
print(f"文心一言回复: {reply}")             
else:             
print("Failed to get access token.")            

下面是我测试回答结果,通过上面的代码就可以直接跑通了。

2.4 配置nginx  

2.4.1 配置nginx指向5000端口  

在目录/etc/docker-nginx/conf.d下面添加一个chat.conf,内容如下。

server {            
listen 80;            
#root /usr/share/nginx/html;            
error_log  /var/log/nginx/error1.log warn;            
server_name chat.xxx.wang;            
location / {            
proxy_pass http://172.22.0.1:5000;  # 假设你的Flask应用运行在本地的5000端口            
proxy_set_header Host host;              proxysetheaderXForwardedForhost;                     proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;            
proxy_set_header X-Real-IP $remote_addr;            
}            
}            

然后重启nginx。

docker restart e3910cda9818            

2.4.2 测试公网访问  

然后我们通过PostMan来试一下能不能获取到正确的结果。

如上图所属,是通畅的。下面我们来与微信公众号集成。

2.5 实现消息的收发与处理  

在进行这一步操作之前要先去公众号后台配置一下接口地址和验证啥的,如下图,自行操作便是,不在赘述,有问题可与我交流。

2.5.1 解析与响应微信消息  

使用Python工具如xmltodict或ET模块将微信消息XML格式解析,获取用户发送的信息:

import xmltodict            

def parse_wechat_message(xml_data):            
msg = xmltodict.parse(xml_data)            
user_message = msg['xml']['Content']            
return user_message            

2.5.2 发送消息至文心大模型并获取回复  

使用在第三步中定义的get_wenxin_response函数,获取文心大模型的回复:

def generate_wechat_response(user_message):            
response_text = get_wenxin_response(user_message)            
return response_text            

2.5.3 构建微信响应消息  

构造符合微信接口规范的XML格式回复:

def build_wechat_reply(to_user, from_user, content):            
reply = f"""            


"""            
return reply            

2.5.4 集成消息处理逻辑  

将上述步骤集成在Flask路由中实现响应:

@app.route('/wechat', methods=['POST'])            
def wechat():            
data = request.data            
user_message = parse_wechat_message(data)            
response_text = generate_wechat_response(user_message)            

msg = xmltodict.parse(data)            
to_user = msg['xml']['FromUserName']            
from_user = msg['xml']['ToUserName']            

reply = build_wechat_reply(to_user, from_user, response_text)            
return reply            

到这里,代码就写的差不多了,我们现在来公众号上面测试一下。

成功了,服务控制台也给出了反馈。

三、结束语  

通过上述步骤,我们实现了一个简单的与百度文心大模型进行对话的微信公众号后端服务。用户在微信公众号输入信息后,通过Flask接收处理并与文心大模型交互,从而实现智能对话。这一解决方案不仅展示了现代大模型的灵活应用,也为各种自然语言处理任务提供了落地的实施方案。如有有疑问的也可以评论区或者私信与我交流。

对了,最近华为云有关于Flexus云服务器X实例的促销专场,下方点击直达。

⭐⭐⭐点击此处进入华为云828专场⭐⭐⭐

希望华为云越来越好,希望中国的云事业更上一层楼,我作为一个普通开发者,也将不断参与与见证这一伟大的技术探索与变革。