uniapp微信小程序端接收ai模型返回的SSE流式数据

文章目录


前言

微信小程序原本不支持接收SSE数据,但是request提供了一个enableChunked的属性可以监听到SSE数据


一、将enableChunked属性改为true

javascript 复制代码
    const requestTask = uni.request({
      url: "https://xxx",
      enableChunked: true,
      method: "POST",
      data: data,
      header: {
        token: uni.getStorageSync("token"),
      },
      success(res) {
        // console.log("请求成功:", res);
        // console.log("最终结果:", fullResponse.value);
      },
    });

二、通过onChunkReceived监听分段的数据

因为微信小程序端本身不支持流式数据,所以处理起来很麻烦,需要先把获取到的ArrayBuffer转为Uint8Array之后还要把Uint8Array转成字符串,最后将解码之后的字符串转换为JSON对象才是我们真正需要的

javascript 复制代码
     // 创建一个AI消息占位符
    let aiMessageIndex = messages.value.length;
    messages.value.push({
      role: "ai",
      content: "正在思考中...",
    });

    requestTask.onChunkReceived((res) => {
      // 1. 将ArrayBuffer转换为Uint8Array
      const u8a = new Uint8Array(res.data);

      // 2. 将Uint8Array转换为字符串
      var str = String.fromCharCode.apply(null, u8a);
      str = decodeURIComponent(escape(str));
      // console.log("接收到数据", str);
      //将解码后的字符串转换为JSON对象
      let data = parseEventString(str);
      let parsedContents = JSON.parse(data.contents);
      let con = "";
      if (parsedContents) {
        if (Array.isArray(parsedContents)) {
          // 如果是数组,尝试获取最后一个元素的内容
          const lastItem = parsedContents[parsedContents.length - 1];
          con = (lastItem && lastItem.content) || "";
        } else if (parsedContents.content) {
          // 如果是单个对象且有content属性
          con = parsedContents.content;
        }
      }
      if (con == "") {
        con = "正在思考中...";
      }
      messages.value[aiMessageIndex].content = con;

      scrollToBottom();
    });
相关推荐
2501_916007473 小时前
在 CICD 中实践 Fastlane + Appuploader 命令行,构建可复制的 iOS 自动化发布流程
android·运维·ios·小程序·uni-app·自动化·iphone
一匹电信狗3 小时前
【Linux我做主】进程实践:手动实现Shell
linux·运维·服务器·c++·ubuntu·小程序·开源
qq_316837753 小时前
uniapp 缓存指定接口的响应,在无网络时使用缓存数据
前端·uni-app
奺儿3 小时前
uniapp 小程序 报错 TypeError: Cannot convert undefined or null to object
小程序·uni-app
2501_915921433 小时前
从 HBuilder 到 App Store,uni-app 与 HBuilder 项目的 iOS 上架流程实战解析
android·ios·小程序·https·uni-app·iphone·webview
qq_316837753 小时前
uniapp 缓存请求文件时 判断是否有文件缓存 并下载和使用
前端·缓存·uni-app
一只一只妖4 小时前
Taro+Vue3+TS+Vite 小程序开发底座搭建流程
vue.js·小程序·taro
随笔记4 小时前
uniapp开发app使用海康威视播放监控视频流如何使用以及遇到了什么问题
vue.js·uni-app·视频编码
#微爱帮#4 小时前
微爱帮监狱写信寄信小程序图片木马等保三级防控方案
小程序