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

news2024/9/24 13:19:57

在这里插入图片描述

🏆作者简介,黑夜开发者,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)能力强大的大模型纷纷涌现。其中,百度的文心大模型因其卓越的性能和灵活的应用场景,被广泛应用于各类对话和交互场景中。本文将详细介绍如何在微信公众号中实现与百度文心大模型的交互,并给出完整的实现步骤及代码示例。
要实现微信公众号与大模型的对话功能,我们需要将用户在公众号中输入的内容发送给大模型并获取其生成的回复。具体实现需要以下几个步骤:

  1. 注册并配置微信公众号;
  2. 搭建能够接受微信消息的后端服务;
  3. 接入百度文心大模型API;
  4. 实现消息的收发与处理。

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

🚀二、功能实现

🔎2.1 注册并配置微信公众号

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

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

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

🍁2.1.2 配置服务器

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

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

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

    • URL:填写外网可访问的接口地址,示例:http://your_domain.com/wechat
    • Token:自行设置或随机生成一个,用于微信验证开发者服务器
    • EncodingAESKey:消息加解密密钥,自行生成
  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(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与相关文档。

在这里插入图片描述

  1. 通常会需要具体的调用权限,被授予后可以在“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工具如xmltodictET模块将微信消息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接收处理并与文心大模型交互,从而实现智能对话。这一解决方案不仅展示了现代大模型的灵活应用,也为各种自然语言处理任务提供了落地的实施方案。

希望本文所提供的方法及代码示例能够帮助其他有开发需求的技术人员更好地理解与实践这种集成方案。如有任何技术更新或更改,请及时参考相关官方文档进行调整与优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务——服务注册和发现(一)

服务注册和发现 1.1.服务注册背景 假如某项微服务被调用较多&#xff0c;为了应对更高的并发&#xff0c;我们进行了多实例部署&#xff0c;如图&#xff1a; 此时&#xff0c;每个item-service的实例其IP或端口不同&#xff0c;问题来了&#xff1a; item-service这么多实例…

【JUC】12-CAS

1. CAS compare and swap&#xff0c;比较并交换。 包含三个操作数&#xff1a;内存位置、预期原值及更新值。 执行CAS操作的时候&#xff0c;将内存位置的值与预期原值比较&#xff1a; 匹配&#xff0c;更新为新值。不匹配&#xff0c;不进行操作&#xff0c;多个线程同时…

SpringCloud开发实战(五):Feign的一些优化建议

目录 SpringCloud开发实战&#xff08;一&#xff09;&#xff1a;搭建SpringCloud框架 SpringCloud开发实战&#xff08;二&#xff09;&#xff1a;通过RestTemplate实现远程调用 SpringCloud开发实战&#xff08;三&#xff09;&#xff1a;集成Eureka注册中心 SpringCloud开…

nefu暑假集训5 KMP 个人模板+例题汇总

前言&#xff1a; KMP算法用于匹配字符串&#xff0c;假设长字符串为s&#xff0c;需要匹配的字符串是p。KMP算法的基础思想是利用一个next[n]数组&#xff1a;next[i]对应的是&#xff1a;以下标i为结尾的连续子串&#xff0c;与以第一个字符开始的子串&#xff0c;相等的最大…

UE 【材质编辑】自定义ShadingMode

【UE 4.27.2】 在UE中提供了多种多样的ShadingMode&#xff0c;相当于一种风格化的处理方案(整体全面的流程调整)&#xff0c;切换ShadingMode可以看到不同的显示效果&#xff1a; 通过简单的拓展&#xff0c;我们可以实现自定义的ShadingMode&#xff0c;使得我们切换到自己的…

JMeter:如何定制Http请求取样器

一般使用JMeter发送HTTP请求时都会用到HTTP Request取样器&#xff0c;这种取样器大多数时候能够满足压力测试的需要。 图1 但也有一些场景&#xff0c;可能需要更加强大的取样器&#xff0c;或者需要定制一些功能&#xff0c;这时就需要自己手动编写取样器。幸好JMeter为我们提…

leveldb源码剖析(二)——LSM Tree

LSM Tree LSM Tree&#xff1a;Log-Structured Merge Tree&#xff0c;日志结构合并树。是一种频繁写性能很高的数据结构。 LSM Tree将写入操作与合并操作分离&#xff0c;数据首先写入磁盘中的日志文件&#xff08;WAL&#xff09;&#xff0c;随后写入内存缓存&#xff0c;…

Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 SpannableString 在 Android 开发中是一个非常强大的工具&#xff0c;它允许你在单个字符串范围内应用多种样式。使用 SpannableString&#xf…

【 C++ 】 类和对象的学习 (二)

&#x1f618;我的主页&#xff1a;OMGmyhair-CSDN博客 目录 I、类的默认成员函数 一、构造函数 二、析构函数 三、拷贝构造函数 四、 运算符重载 赋值运算符重载 五、取地址重载_普通对象 六、取地址重载_const对象 I、类的默认成员函数 用户没有显示实现&#xff0…

Linux学习笔记5 值得一读,Linux(ubuntu)软件管理,搜索下载安装卸载全部搞定!(上)

本文记录Ubuntu操作系统的软件包管理。 一、背景 整个Linux系统就是大大小小的软件包构成的&#xff0c;在linux系统中&#xff0c;软件的管理非常重要&#xff0c;与其他操作系统不同&#xff0c;linux的软件包管理比较复杂&#xff0c;有时还需要处理软件包之间的冲突。本文…

Python | 泰勒图

写在前面 最近&#xff0c;开始对于CMIP6的一些数据进行评估。Talor图是一个很好展现模式间误差的方式&#xff0c;这里简单记录一下在python中的实现方式。 主要为半图的画法 参考的代码为&#xff1a; https://zenodo.org/records/5548061 效果大致下面这个样子 这边在原…

maven中如何配置多个仓库使其同时生效

场景 有一个项目&#xff0c;我把代码跟本地maven依赖包从同事那里拷贝过来&#xff0c;然后打包却一直打不了&#xff0c;一直报aliyun仓库找不到这个依赖的错误&#xff0c;无论我改成引用本地仓库还是线上aliyun仓库都不行。 依赖 <dependency><groupId>org.spr…

有三层交换机就不用路由器了?真的假的

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 在现代企业网络环境中&#xff0c;三层交换机因其高效的数据包处理能力和较低的延迟而受到广泛欢迎。 然而&…

Python 从入门到实战7(元组)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 之前的文章我们通过举例学习了python 中列表的定义及相关操作。今…

Echarts大屏可视化

构建可视化大屏&#xff1a; 构建布局&#xff1a;通过css和html对整个页面进行模块拆分&#xff0c;控制好每一张图的位置和大小&#xff0c;再将echarts实例化对象放到不同的盒子里 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en&quo…

斯普林格-《土木工程与结构抗震设计》 Springer-Civil Engineering and Structural Seismic Design

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus最终截稿&#xff1a;2024年9月2日23:59 三、大会介绍 四…

关于vue中v-model绑定radio表单元素的说明

在学习中&#xff0c;老师讲在v-model中&#xff0c;绑定的是radio的checked属性&#xff0c;起初看了例子后很不理解&#xff0c;于是开始寻找答案 老师所说的绑定关系 老师给的绑定代码&#xff0c;怎么看来&#xff0c;都不是实例的gender变量绑定radio的checked属性&…

2024 MongoDB 中国用户大会上海站成功举办圆满结束: 技术驱动未来,携手共创辉煌

一年一度 2024 MongoDB 中国用户大会上海站顺利举办&#xff0c;感谢大家的积极参与&#xff01; 在数字化浪潮的背景下&#xff0c;随着人工智能、物联网、5G等前沿技术的快速发展&#xff0c;如何利用这些技术实现业务创新&#xff0c;已成为中国企业在激烈市场竞争中保持领…

Vivado+PetaLinux 系统搭建教程

PetaLinux 是基于 Yocto project DDR SDRAM 双倍数据率同步动态随机存取存储器&#xff08;英语&#xff1a;Double Data Rate Synchronous Dynamic Random Access Memory&#xff0c;简称DDR SDRAM&#xff09;为具有双倍资料传输率的SDRAM&#xff0c;其资料传输速度为系统主…

Matplotlib | 绘制饼图

目录 简介安装 Matplotlib开始绘制简单饼图添加标签添加百分比修改显示方式突出扇形设置标题修改颜色实践&#xff1a;绘制七大洲面积比例图 简介 饼图&#xff08;Pie Chart&#xff09;&#xff0c;用扇形的面积&#xff0c;也就是圆心角的度数来表示数量。 饼图能够十分直…