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);
});
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);
}
public override async Task<IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage)
{
this.TextResponseLimitOptions = new TextResponseLimitOptions(2048, "AppId");
//...
}
[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 統一架構標準,公眾號、小程式、企業微信可以輕鬆同步實現超長文字的「續航」功能。
所有原始碼及範例已經上傳至開源專案:
GitHub:https://github.com/JeffreySu/WeiXinMPSDK
Gitee:https://gitee.com/JeffreySu/WeiXinMPSDK
也可以直接通過 Nuget 包進行參照,可通過線上 Sample 檢視:https://sdk.weixin.senparc.com/
轉載請註明出處和作者,謝謝!
作者:JeffreySu / QQ:498977166
部落格:http://szw.cnblogs.com/
Senparc官方教學《微信開發深度解析:微信公眾號、小程式高效開發祕籍》,耗時2年精心打造的微信開發權威教學,點選這裡,購買正版!