微信小程序ChatGpt流式响应

最近用微信小程序做chatGpt的Ai对话,其中重要的一点就是流式响应,现在分享处理逻辑,先给演示图。

 下面是关键代码实现逻辑

      const that = this;
      const requestTask = wx.request({
        url: 'xxxxx',
        responseType: "arraybuffer",
        method: 'POST',
        enableChunked: true,
        header: {
          'content-type': 'application/json'
        },
        data: {
          'prompt': '青椒肉丝怎么做'
        },
        success: (res) => {
          console.log("request success", res);
          common_vendor.index.showToast({
            title: "请求成功",
            icon: "success",
            mask: true,
            duration
          });
          // this.res = "请求结果 : " + JSON.stringify(res);
        },
        fail: (err) => {
          console.log("request fail", err);
          common_vendor.index.showModal({
            content: err.errMsg,
            showCancel: false
          });
        },
        complete: () => {
          this.loading = false;
        }
      });
      requestTask.onHeadersReceived(function (r) {
        console.log(r);
      });
      requestTask.onChunkReceived(function (r) {
        // let decoder = new TextDecoder('utf-8');
        // let str = decoder.decode(new Uint8Array(r.data));

        // let en = String.fromCharCode.apply(null,new Uint8Array(r.data));
        // let de = decodeURIComponent(escape(en));

        // console.log("onChunkReceived", str);

        const data16 = that.buf2hex(r.data)	// ArrayBuffer转16进制
        const requestData = that.hexToStr(data16) // 16进制转字符串
        console.log(requestData); 
        that.res +=requestData;
      });

其中有两个关键点需要注意

1.enableChunked: true流式响应开关,会自动在header中加入transfer-encoding chunked

2.arraybuffer转字符串问题,有TextDecoder就很好处理,没有也可以参照我上面的示例。

最后提供免费源码下载地址和演示二维码,全量保真。

源码下载 ChatGpt插件,支持聊天,流式输出,UI漂亮,有小程序演示 - DCloud 插件市场

 

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 微信小程序对外提供了开发者工具和相应的 API,使得开发者可以通过微信小程序框架开发出具有特定功能的应用程序。其中,enableChunked 是一个用于设置网络请求传输方式的方法。 在微信小程序中,网络请求可以选择使用 enableChunked 方法进行设置,以实现流式传输。流式传输是指在发送网络请求数据时,将数据分成多个小块(chunk)逐渐传输的方式。相较于一次性传输所有数据,流式传输可以提升网络传输的效率和性能。 通过 enableChunked 方法,开发者可以将网络请求的数据根据需要分成适当的大小的块,并逐个发送。这种分块传输可以减少网络传输的等待时间,提高数据的及时性和实时性。同时,因为每个小块的数据量较小,也能更好地适应网络传输的变化和抖动。 在使用 enableChunked 方法时,开发者需要传入一个布尔类型的参数来决定是否启用流式传输。通过设置为 true,即 enableChunked(true),开发者可以启用流式传输。如果设置为 false,则会禁用流式传输,按照传统的方式进行数据传输。 总之,通过微信小程序提供的 enableChunked 方法,开发者可以灵活选择是否启用流式传输,以满足不同应用场景对网络传输的需求。同时,流式传输也能更好地提升小程序的性能和用户体验。 ### 回答2: 微信小程序enableChunked流式传输(也称为分块传输)是指在小程序中使用的一种数据传输方式。当我们向服务器请求大量数据时,如果使用传统的一次性传输方式,可能会导致传输时间过长、占用大量内存等问题。而启用了enableChunked流式传输,可以将数据分块传输,即边传输边解析数据。 在微信小程序中启用enableChunked流式传输的关键步骤如下: 1. 在代码中创建一个 WebSocket 对象,用于建立与服务器的连接。 ``` const socket = wx.connectSocket({ url: '服务器地址' }); ``` 2. 监听WebSocket连接成功事件,当连接成功后,可以进行下一步操作。 ``` socket.onOpen(() => { // 连接成功后的操作 }); ``` 3. 向服务器发送请求,并设置请求头中的"accept-encoding"参数为"chunked"。 ``` const header = { "accept-encoding": "chunked" }; socket.send({ data: '请求数据', header: header }); ``` 4. 监听WebSocket的message事件,当服务器返回数据时,通过该事件进行数据的接收和处理。这里的数据是以分块形式传输的。 ``` socket.onMessage((res) => { // 对接收到的数据进行处理 }); ``` 通过以上步骤,我们可以实现微信小程序中的enableChunked流式传输。这种方式可以提高数据传输和解析的效率,减少对内存的占用,提升用户体验。同时,对于一些需要大量数据的小程序功能,如音视频播放、文件下载等,流式传输也能够较好地满足需求。 ### 回答3: 微信小程序enablechunked流式传输是一种功能,它允许小程序在数据传输过程中以分块的方式发送和接收数据。传统的数据传输方式是将所有的数据一次性发送或接收完毕,而enablechunked流式传输可以使得数据的传输更加灵活和高效。 通过启用enablechunked流式传输,小程序可以将较大的数据切割成多个块进行传输,而不需要等待数据完全准备好才进行传输。这种分块传输的方式可以提高数据传输的效率,减少传输的延迟。 enablechunked流式传输在小程序开发中有多重优势。首先,它可以提升小程序的用户体验,因为分块传输可以快速展示页面内容,而不需要等待所有数据加载完毕。其次,它可以减少小程序对网络带宽的占用,通过分块传输可以减少数据传输量,从而节省用户流量。此外,由于enablechunked流式传输可以将数据分块发送,即使在网络不稳定的情况下仍然可以保证数据的正常传输。 为了使用enablechunked流式传输,开发者需要在微信小程序中进行相关配置。具体的配置方式可以参考微信小程序的开发文档和相关示例代码。在实际开发中,开发者需要考虑数据的切割和组合,确保分块数据的正确传输和接收。 总之,enablechunked流式传输是微信小程序提供的一项优秀功能,能够提高小程序的性能和用户体验。通过启用这个功能,开发者可以更好地处理和传输大量数据,为用户提供更好的服务。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值