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_915106327 小时前
深入解析无源码iOS加固原理与方案,保护应用安全
android·安全·ios·小程序·uni-app·cocoa·iphone
万能小林子8 小时前
2026 AI开发新范式:Vibe Coding生成网页 + 3分钟打包成App,非技术人也能独立发布自己的App!
人工智能·uni-app·ai编程·web app·vibecoding
weikecms9 小时前
CPS返利小程序一键搭建教程
小程序
白菜__9 小时前
微信小程序网关逆向分析
javascript·微信小程序·小程序·node.js·网络爬虫·微信网关·小程序网关
TANKING-9 小时前
微信小程序订阅消息推送系统(一次性/长期订阅消息推送)
微信小程序·小程序
李白的天不白10 小时前
小程序not 404
小程序
我是伪码农10 小时前
小程序75-100
小程序
一颗小青松10 小时前
uniapp 集成友盟并且上传页面路径
前端·vue.js·uni-app
00后程序员张1 天前
HTTPS单向认证、双向认证、抓包原理与反抓包策略详解
网络协议·http·ios·小程序·https·uni-app·iphone