Senparc.Weixin.MP SDK 微信公众平台开发教程(二十四):顺应 AIGC 应用,自动“续航”回复超长文本消息
开源地址
GitHub:https://github.com/JeffreySu/WeiXinMPSDK
Gitee:https://gitee.com/JeffreySu/WeiXinMPSDK
概述
随着大预言模型应用的进一步流行,以及最大 Token 支持数量的不断上升,自动生成的文本长度也在不断增加。
微信作为国内国民级机器对话的最佳选择,成为了许多机器人首选的交互端口。然而,微信出于各方面的考虑,为消息回复的文字容量做了限制(常规为 2048 个字符,经过测试,按照微信的算法大约 680 个汉字左右,半角英文任然可到 2048 个字符)。在我们实际的项目落地过程中,这种限制一定程度上影响了大模型的使用和用户体验,为此,Senparc.Weixin SDK 推出了可自动判断回复文本长度,并全自动判断最合理的消息回复方式(消息接口或客服接口)——“自动续航”功能。
由于 Senparc.Weixin SDK 早在很多年前就分离了一整套底层的统一标准架构(NeuChar),本次升级将同时惠及微信公众号、小程序、企业微信及其开放平台的代理接口,并对其行为保持了高度的一致性。基于 NeuChar 标准,您还可以将此能力扩展应用在抖音、头条、QQ、钉钉等不同平台的小程序及公众账号中。

基于 CO2NET 和 NeuChar 标准支持的的全平台统一架构
由于 NeuChar 的前瞻性架构,所有包含文字回复的地方都将同时完成升级,包括:公众号、小程序、企业微信。所有的用法和规则均保持高度一致,以下仅以公众号为例介绍。
超长消息处理机制
客服消息自动启用超长判断,当回复内容超长时,自动切割成多个消息片段进行发送。
消息接口(MessageHandler)默认不启用,启用后整体整体流程如下:

MessageHadler 超长信息处理流程
上图中“使用客服接口发送”将自动给超长字符串进行切割,确保每一片都在约定字符数以内,并依次发送。
如何启用
对于客服消息,超长判断自动启用,可以通过自定义 limitedBytes 参数修改其默认值(2048 字节是微信约定的最大数)
await Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendTextAsync("appId", "openId", "消息内容", limitedBytes: 2048);
对于消息接口,可以在返回 MessageHandler 结果之前的的任意地方,设置其 TextResponseLimitOptions 属性(包括启动代码中、MessageHandler 构造函数、OnTextRequest 事件方法中、甚至 Controller 中都可以):
- 启动代码(中间件):
app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options =>
{
//[必须] 此处为委托,可以根据条件动态判断输入条件
options.AccountSettingFunc = context => senparcWeixinSetting.Value; //[可选] 设置最大文本长度回复限制(超长后会调用客服接口分批次回复)
options.TextResponseLimitOptions = new TextResponseLimitOptions(2048, senparcWeixinSetting.Value.WeixinAppId);
}); - MessageHandler 构造函数
public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, bool onlyAllowEncryptMessage = false, IServiceProvider serviceProvider = null)
: base(inputStream, postModel, maxRecordCount, onlyAllowEncryptMessage, serviceProvider: serviceProvider)
{
this.TextResponseLimitOptions = new TextResponseLimitOptions(2048, postModel.AppId);
} - OntextRequest 方法
public override async Task<IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage)
{
this.TextResponseLimitOptions = new TextResponseLimitOptions(2048, "AppId");
//...
} - Controller
[HttpPost]
[ActionName("Index")]
public async Task<ActionResult> Post(PostModel postModel)
{
var messageHandler = new CustomMessageHandler(await Request.GetRequestMemoryStreamAsync(), postModel);
messageHandler.TextResponseLimitOptions = new TextResponseLimitOptions(2048, "AppId");
//...
}
总之:只需要设置 messageHandler.TextResponseLimitOptions 即可。
效果体验
1、关注公众号“盛派网络小助手”

2、发送文字“超长”

3、关注“盛派网络小助手”小程序


4、点击“进入客服”,并发送文字“超长”

基于 NeuChar 统一架构标准,公众号、小程序、企业微信可以轻松同步实现超长文本的“续航”功能。
Senparc.Weixin.MP SDK 微信公众平台开发教程(二十四):顺应 AIGC 应用,自动“续航”回复超长文本消息的更多相关文章
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
微信官方的多客服接口原理是通过用户发送的信息,开发者服务器返回一条指定类型的响应信息,使用户的对话状态切换到官方的多客服状态(持续一段时间),这段时间内用户发送的所有信息都不会到达开发者的服务器,而是 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理
这是<微信开发深度解析:微信公众号.小程序高效开发秘籍>出版之后写的第一篇微信相关的文章.从这一篇开始,将介绍第一版出版之后添加或修改的功能,或者对书上内容需要做的补充. MP v14.8 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
============= 以下写于2013-07-20 ============= 这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.W ...
随机推荐
- scikit-learn 中 Boston Housing 数据集问题解决方案
scikit-learn 中 Boston Housing 数据集问题解决方案 在部分旧教程或教材中是 sklearn,现在[2023]已经变更为 scikit-learn 作用:开源机器学习库,支持 ...
- Golang一日一库之logrus
前言 之前一篇文章介绍了 日志库zap https://www.cnblogs.com/zichliang/p/17311480.html 毋庸置疑,zap库无论是Golang在项目中 还是生产中都极 ...
- 官宣 | Hugging Face 中文博客正式发布!
作者:Tiezhen.Adina.Luke Hugging Face 的中国社区成立已经有五个月之久,我们也非常高兴的看到 Hugging Face 相关的中文内容在各个平台广受好评,我们也注意到,H ...
- 对dubbo的DubboReference.check的参数进行剖析
背景 在使用dubbo的时候,发现当消费者启动的时候,如果提供者没有启动,即使提供者后来启动了,消费者也调不通提供者提供的接口了. 注册中心使用都是nacos dubbo版本是3.0.4 例子 接口 ...
- 一文理解TS泛型
当我们在编写 TypeScript 代码时,经常会遇到需要通用(Generic)的情况,这时候,泛型就是我们的好帮手了.在本篇文章中,我们将深入介绍 TypeScript 泛型的概念以及如何使用. 什 ...
- dede网站flash中图片不能正常显示解决办法
专业微信开发 网站制作 就在西安格创网络 联系电话:18009249661 原因:因为服务器或虚拟主机用了CDN加速,导致图片是调用远程缓存,只能显示FLASH控件,但图片不能正常显示,常见于西 ...
- 基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例
最近在一家某电力外派公司开发相关于GIS的功能,在实现代码的过程中出现了一些常见的问题比如: 1.跨线程执行窗体或控件操作(直接使用委拖) 2.异步模式执行某长时间耗时方法 经过一系列摸索可算找到解决 ...
- python Unitest和pytest 介绍和安装
前言 目前有两种纯测试的测试框架,pytest和unittest,这系列文章主要介绍pytest为主 UnitTest测试框架理论 python 自带的单元测试框架,常用在单元测试 在自动化测试中提供 ...
- vue 事件中的 .native你搞清楚了吗
native是什么? .native - 监听组件根元素的原生事件. 主要是给自定义的组件添加原生事件. 官网的解释: 你可能想在某个组件的根元素上监听一个原生事件.可以使用 v-on 的修饰符 .n ...
- 2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值. 福大大 答案2021-08-15: 返回值=上+新-修正. 时间复杂度:O(N) 空间复杂度:O(N). 代码 ...