Senparc.Weixin SDK 微信平臺開發教學(二十四):順應 AIGC 應用,自動「續航」回覆超長文字訊息

2023-07-14 18:00:40

開源地址

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 統一架構標準,公眾號、小程式、企業微信可以輕鬆同步實現超長文字的「續航」功能。

 

開源

所有原始碼及範例已經上傳至開源專案:

GitHub:https://github.com/JeffreySu/WeiXinMPSDK

Gitee:https://gitee.com/JeffreySu/WeiXinMPSDK

 

也可以直接通過 Nuget 包進行參照,可通過線上 Sample 檢視:https://sdk.weixin.senparc.com/

 

更多說明檔案