🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,AWS/阿里云资深使用用户
,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏
文章目录
- 🚀一、前言
- 🚀二、功能实现
- 🔎2.1 注册并配置微信公众号
- 🍁2.1.1 注册公众平台账号
- 🍁2.1.2 配置服务器
- 🔎2.2 搭建接受微信消息的后端服务
- 🍁2.2.1 搭建Flask后端
- 🍁2.2.2 接收微信消息的Flask代码样例
- 🔎2.3 接入百度文心大模型API
- 🍁2.3.1 申请API访问权限
- 🍁2.3.2 调用API接口
- 🔎2.4 实现消息的收发与处理
- 🍁2.4.1 解析与响应微信消息
- 🍁2.4.2 发送消息至文心大模型并获取回复
- 🍁2.4.3 构建微信响应消息
- 🍁2.4.4 集成消息处理逻辑
- 🚀三、结束语
🚀一、前言
前面一些章节我们讲到了如何购买华为云flexusx实例,并且开启了一台4核12G的机器,今天我们继续开发一个极其实用的公众号程序,结合文心一言的消息自动回复的聊天功能,一起来体验AI的魅力。
正值华为云828 B2B企业节盛惠之际,Flexus X实例的优惠活动异常诱人,强烈推荐您一探究竟。尤其是对于那些在追求极致算力性能的同时,也严格要求自建MySQL、Redis、Nginx等服务表现力的企业与开发者来说,这绝对是不容错过的绝佳机会!
⭐⭐⭐点击此处进入华为云828专场⭐⭐⭐
近年来,随着人工智能技术的迅猛发展,各种自然语言处理(NLP)能力强大的大模型纷纷涌现。其中,百度的文心大模型因其卓越的性能和灵活的应用场景,被广泛应用于各类对话和交互场景中。本文将详细介绍如何在微信公众号中实现与百度文心大模型的交互,并给出完整的实现步骤及代码示例。
要实现微信公众号与大模型的对话功能,我们需要将用户在公众号中输入的内容发送给大模型并获取其生成的回复。具体实现需要以下几个步骤:
- 注册并配置微信公众号;
- 搭建能够接受微信消息的后端服务;
- 接入百度文心大模型API;
- 实现消息的收发与处理。
以下将逐步展开详细的实现步骤。
🚀二、功能实现
🔎2.1 注册并配置微信公众号
首先,需要拥有一个微信公众平台账号,并注册一个公众号(服务号或订阅号皆可),以便后续获取日常开发所需的信息与权限。
🍁2.1.1 注册公众平台账号
-
访问微信公众平台,根据提示完成账号注册过程。
-
注册完成后,登录进入公众号后台,记录
AppID
和AppSecret
,这两个信息将在之后的开发中用到。
🍁2.1.2 配置服务器
要实现消息自动回复功能,微信公众号需要与开发者的服务器建立通讯。具体步骤如下:
-
在微信公众号管理后台,进入“基本配置”页面。
-
在“服务器配置”部分,启用消息接收并填写接口配置信息:
- URL:填写外网可访问的接口地址,示例:http://your_domain.com/wechat
- Token:自行设置或随机生成一个,用于微信验证开发者服务器
- EncodingAESKey:消息加解密密钥,自行生成
-
保存配置。微信将会发送请求到你配置的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(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访问权限
为了与文心大模型进行交互,首先要申请使用其服务的访问权限。具体步骤包括:
- 登录百度云或文心大模型的官网,注册账户并获取API Key与相关文档。
- 通常会需要具体的调用权限,被授予后可以在“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 = 'https://aip.baidubce.com/oauth/2.0/token'
# 调用文心一言对话API的URL(请替换为实际URL)
CHAT_API_URL = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions'
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 实现消息的收发与处理
🍁2.4.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.4.2 发送消息至文心大模型并获取回复
使用在第三步中定义的get_wenxin_response
函数,获取文心大模型的回复:
def generate_wechat_response(user_message):
response_text = get_wenxin_response(user_message)
return response_text
🍁2.4.3 构建微信响应消息
构造符合微信接口规范的XML格式回复:
def build_wechat_reply(to_user, from_user, content):
reply = f"""
<xml>
<ToUserName><![CDATA[{to_user}]]></ToUserName>
<FromUserName><![CDATA[{from_user}]]></FromUserName>
<CreateTime>{int(time.time())}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{content}]]></Content>
</xml>
"""
return reply
🍁2.4.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
🚀三、结束语
希望华为云越来越好,希望中国的云事业更上一层楼,我作为一个普通开发者,也将不断参与与见证这一伟大的技术探索与变革。
⭐⭐⭐点击此处进入华为云828专场⭐⭐⭐
通过上述步骤,我们实现了一个简单的与百度文心大模型进行对话的微信公众号后端服务。用户在微信公众号输入信息后,通过Flask接收处理并与文心大模型交互,从而实现智能对话。这一解决方案不仅展示了现代大模型的灵活应用,也为各种自然语言处理任务提供了落地的实施方案。
希望本文所提供的方法及代码示例能够帮助其他有开发需求的技术人员更好地理解与实践这种集成方案。如有任何技术更新或更改,请及时参考相关官方文档进行调整与优化。