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();
    });
相关推荐
不爱说话郭德纲15 小时前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
大米饭消灭者2 天前
Taro是怎么实现一码多端的【底层原理】
微信小程序·taro
HashTang2 天前
【AI 编程实战】第 12 篇:从 0 到 1 的回顾 - 项目总结与 AI 协作心得
前端·uni-app·ai编程
JunjunZ2 天前
uniapp 文件预览:从文件流到多格式预览的完整实现
前端·uni-app
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
TT_Close3 天前
“啪啪啪”三下键盘,极速拉起你的 uni-app 项目!
vue.js·uni-app·前端工程化
FliPPeDround3 天前
Vitest Environment UniApp:让 uni-app E2E 测试变得前所未有的简单
微信小程序·e2e·前端工程化
FliPPeDround3 天前
微信小程序自动化的 AI 新时代:wechat-devtools-mcp 智能方案
微信小程序·ai编程·mcp
特立独行的猫a3 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS影视票房榜组件完整实现过程
华为·uni-app·harmonyos·轮播图·uniapp-x
吴声子夜歌3 天前
小程序——布局示例
小程序