开源地址

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 应用,自动“续航”回复超长文本消息的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

    为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明

    微信官方的多客服接口原理是通过用户发送的信息,开发者服务器返回一条指定类型的响应信息,使用户的对话状态切换到官方的多客服状态(持续一段时间),这段时间内用户发送的所有信息都不会到达开发者的服务器,而是 ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理

    这是<微信开发深度解析:微信公众号.小程序高效开发秘籍>出版之后写的第一篇微信相关的文章.从这一篇开始,将介绍第一版出版之后添加或修改的功能,或者对书上内容需要做的补充. MP v14.8 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

    前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World

    =============  以下写于2013-07-20 ============= 这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.W ...

随机推荐

  1. Shell在日常工作中的应用实践

    作者:京东物流 李光新 1 Shell可以帮我们做什么 作为一名测试开发工程师,在与linux服务器交互过程中,大都遇到过以下这些问题: •一次申请多台服务器,多台服务器需要安装相同软件,配置相同的环 ...

  2. SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析

    前言 浏览器有跨域限制,非同源策略(协议.主机名或端口不同)被视为跨域请求,解决跨域有跨域资源共享(CORS).反向代理和 JSONP的方式.本篇通过 SpringBoot 的资源共享配置(CORS) ...

  3. Java的static修饰符

    静态域 如果将域定义为 static,每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.例如,假定需要给每一个雇员赋予唯一的标识码.这里给 Employee 类添加一个实例域 ...

  4. [Pytorch框架] 5.1 kaggle介绍

    文章目录 5.1 kaggle介绍 5.1.1 Kaggle 平台简介 比赛介绍 5.1.2 Kaggle板块介绍 Data Rules Team Kernels Discussion Leaderb ...

  5. pip 国内源地址

    1.使用方式 pip install 包名 -i 国内源地址 2.国内源地址 豆瓣(douban)  http://pypi.douban.com/simple/ 清华大学 https://pypi. ...

  6. JUC并发常用工具学习

    今天主要来和大家分享一下JUC相关的一些简单知识,线程池文章就不介绍了,前面的文章有介绍,本文主要介绍Lock和认识synchronized和并发的一些工具类的使用. Lock 传统的锁有synchr ...

  7. JavaScript封装大全

    JavaScript封装大全-持续更新 Ajax封装 // 使用该封装需注意 // Ajax(method(默认GET), url(网址 必传), success(res){(成功时数据处理函数 必传 ...

  8. 武装你的WEBAPI-OData与DTO

    前面写了很多有关OData使用的文章,很多读者会有疑问,直接将实体对象暴露给最终用户会不会有风险?$expand在默认配置的情况下,数据会不会有泄露风险? 答案是肯定的,由于OData的特性,提供给我 ...

  9. OpenResty学习笔记03:再探WAF

    一. 再谈WAF 我们上一篇安装的WAF来自另一位技术大神 赵舜东,花名 赵班长,一直从事自动化运维方面的架构设计工作.阿里云MVP.华为云MVP.中国SaltStack用户组发起人 .新运维社区发起 ...

  10. 2022-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最

    2022-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最好的j位置, ...