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();
    });
相关推荐
LT101579744414 小时前
2026年在线兼容性测试工具推荐|零部署网页 / APP / 小程序实测对比
测试工具·小程序
码农客栈17 小时前
小程序学习(二十八)之“订单列表”
小程序
天丁o1 天前
Spring Boot + uni-app 智慧考勤闭环 Demo:打卡记录、异常状态和日统计如何复用到企业系统
spring boot·uni-app·mybatis plus·企业管理系统·考勤系统
这是个栗子1 天前
uni-app 微信小程序开发:常用事件指令(@xxx)(一)
微信小程序·小程序·uni-app
2601_962344622 天前
计算机毕业设计之基于大数据的投保数据的分析系统的设计与实现
大数据·人工智能·深度学习·机器学习·信息可视化·小程序·课程设计
黑黑的独立开发笔记2 天前
「 简记往来」第十五篇:小程序性能优化——首屏从2.5秒到1.2秒
性能优化·小程序·首屏优化·分包加载·setdata·简记往来
tcdos4 天前
不止扫码 — 微信生态深度融合(登录 + 支付 + 消息)
后端·微信小程序
小徐_23334 天前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
宸翰6 天前
解决 uni-app App 端 vue-i18n 占位符丢失:封装跨端可用的 tf 格式化方法
前端·vue.js·uni-app
时光足迹7 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app