返回顶部
首页 > 资讯 > 精选 >微信小程序怎么实现类似ChatGPT的流式传输
  • 163
分享到

微信小程序怎么实现类似ChatGPT的流式传输

2023-07-05 17:07:15 163人浏览 八月长安
摘要

这篇文章主要介绍“微信小程序怎么实现类似ChatGPT的流式传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现类似ChatGPT的流式传输”文章能帮助大家解决问题。小程序上实现流失

这篇文章主要介绍“微信小程序怎么实现类似ChatGPT的流式传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现类似ChatGPT的流式传输”文章能帮助大家解决问题。

小程序上实现流失传输

模拟ChatGPT的效果,实现流式传输,通过处理流数据,实现打字机的效果。

微信小程序怎么实现类似ChatGPT的流式传输

什么是流式传输?

在解决问题之前,我们需要了解什么是流式传输。流式传输指的是将数据分成多个数据流,通过网络传输,以减少网络延迟和提高性能。在某些情况下,流式传输也可以用于将视频流和音频流传输到客户端。流式传输是一种高效的数据传输方式,常用于大文件下载和在线视频播放等场景。

为什么小程序不支持流式传输?

尽管流式传输在某些情况下非常有用,但小程序目前不支持流式传输。主要原因是小程序的架构和限制。

小程序的开发框架提供了一个小程序的开发和调试环境。在这个环境中,小程序的代码和资源都是打包在一个文件中的。这意味着小程序依赖此框架的环境,无法调用浏览器标准的api,需要框架的整体升级和支持。

此外,小程序对网络请求的限制也是一个因素。小程序中的网络请求必须使用微信提供的API,这些API通常只支持完整的请求和响应。这就使得小程序无法使用流式传输。

我的解决方案

  • 使用WebSocket协议 , websocket是一种网络协议,它提供了双向通信的功能,并且支持流式传输。在小程序中,我们可以使用WEBSocket协议来实现流式传输的功能。

  • 调整数据格式 , 如果您的应用程序需要传输大量数据,可以将数据分成更小的块,以便小程序可以处理它们。这样可以避免一次性传输过多数据而导致的问题。

  • 使用分段下载 , 分段下载是一种在下载大文件时很常用的技术。在小程序中,我们也可以使用这种技术来避免一次性下载大量数据。我们可以将数据分成多个部分,每次下载一个部分,并在所有部分下载完毕后将它们合并起来。

但这些都是常规方案,实现也比较麻烦,把正常的请求复杂化了。抛弃~

常规方案AxiOS

基础html模式就不列举了,axios更便捷,我很自信这个方案可行性。

重点:

  • headers 设置为流失请求

  • responseType:stream

request({    url: '/api/prompt',    //请求头需要改为stream模式    headers: {      Accept: 'text/event-stream',    },    //响应类型设置stream    responseType: 'stream',    method: 'POST',    data: {      prompt: prompt,    },  }).then(res => {      console.log(res)  }).catch(err => {    console.log(err)  })

他们又问我要打字机效果,我的方案:接收到ArrayBuffer以后解码数据。

.then((res) => {  const arrayBuffer = res.data;  const uint8Array = new Uint8Array(arrayBuffer);  const textDecoder = new TextDecoder('utf-8');  const text = textDecoder.decode(uint8Array);  for (let i = 0; i < text.length; i++) {    setTimeout(() => {      resultText += text[i];      console.log(resultText);    }, i * 100);  }})

ok,浏览器没问题,小程序调试工具没问题,我依旧自信我的方案

微信小程序怎么实现类似ChatGPT的流式传输

但是,小程序报错了,无法打印流数据,无法支持TextDecoder方法。完犊子,顾问成瞎指挥了。

另辟蹊径:onChunkReceived方案

微信官方文档中提到, wx.request中支持onChunkReceived分段式传输

重点:

  • 小程序 wx.request 中开启 enableChunked; text或stream

  • 当然,Openai接口,也要开启 stream;

  • 解码分段内容为string,使用其他方案代替TextDecoder

const requestTask = wx.request({    url: '/api/prompt',    //请求头需要改为stream模式    header: {      "Transfer-Encoding": 'chunked'    },    timeout: 15000,    responseType: 'text',    method: 'POST',    enableChunked: true,    data: {      prompt: prompt,    },  }).then(res => {      console.log(res)  }).catch(err => {    console.log(err)  })

这样,我们就发起了流式传输请求,当然后端也要支持的,后面我会举例子。

当他们执行时,又出问题了,搞不定TextDecoder替代方案。我查了一下,好像有个方案,小不自信了。 使用"TextDecoder"替代库,然后给出建议:

import {TextEncoder, TextDecoder} from "fastestsmallesttextencoderdecoder";const encode = (new TextEncoder).encode;const decode = (new TextDecoder).decode;

等了一天没找我,哼哼,小菜一碟,完工。

这边又来了,大佬你的方法不好使,引入执行又又报错了。

稳住别慌... 试试手写ArrayBuffer转string方案:text-encoding 然后亲自测试,搞不定就把chatgpt-plus关掉。

最终版:

let buffer=''requestTask.onChunkReceived(function (response) {    const arrayBuffer = response.data;    const uint8Array = new Uint8Array(arrayBuffer);    let text = String.fromCharCode.apply(null, uint8Array);    buffer += text;    full_command.value = buffer  })

其实,第二个方案是可行的,只是我也没时间具体看报了什么错误。最终使用了fromCharCode的方法,恰好可以处理,当然还一些过滤和解码,根据业务需要写了。

后端接口配置

后端配置教程比较多,主要是添加请求头,支持分段传输的方式。

public static function prompt($message)    {        $openAi = self::getOpenAI();        header('Access-Control-Allow-Credentials: true');        // 设置响应头信息        header('Transfer-Encoding: chunked');        header('Content-Type: text/plain');        header('Cache-Control: no-cache');        header('Access-Control-Allow-Methods: GET, POST, OPTIONS');        header('Access-Control-Allow-Headers: Content-Type');        header('Connection: keep-alive');        $msg = "";        $openAi->prompt([            'messages' => $message,            'model' => 'gpt-3.5-turbo',            "stream" => true,        ], function ($curl_info, $response) {        //闭包函数处理流            $data = [];            $lines = explode("\n", $response);            foreach ($lines as $line) {                if (!str_contains($line, ':')) {                    continue;                }                [$name, $value] = explode(':', $line, 2);                if ($name == 'data') {                    $data[] = trim($value);                }            }            foreach ($data as $message) {                if ('[DONE]' === $message) {                    echo "0\r\n\r\n";                } else {                    $message = JSON_decode($message, true);                    $input = $message['choices'][0]['delta']['content'] ?? '';                    $msg .= $input;                    echo dechex(strlen($msg)) . "\r\n" . $msg . "\r\n";                }            }            ob_flush();            flush();            return strlen($response);        });    }

关于“微信小程序怎么实现类似ChatGPT的流式传输”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 微信小程序怎么实现类似ChatGPT的流式传输

本文链接: https://lsjlt.com/news/353440.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信小程序怎么实现类似ChatGPT的流式传输
    这篇文章主要介绍“微信小程序怎么实现类似ChatGPT的流式传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现类似ChatGPT的流式传输”文章能帮助大家解决问题。小程序上实现流失...
    99+
    2023-07-05
  • 简述Vue怎么实现类似微信的应用程序
    Vue是一款流行的JavaScript框架,它可以帮助开发人员构建高效、可维护的Web应用程序。今天我们将探讨如何使用Vue来实现类似微信的应用程序。使用Vue CLI创建项目Vue CLI是Vue官方提供的脚手架工具,可以帮助我们快速创建...
    99+
    2023-05-14
  • ChatGPT微信小程序怎么搭建
    这篇“ChatGPT微信小程序怎么搭建”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ChatGPT微信小程序怎么搭建”文章吧...
    99+
    2023-07-05
  • 微信抽奖小程序类似翻牌样式如何做
    这篇文章主要介绍了微信抽奖小程序类似翻牌样式如何做的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信抽奖小程序类似翻牌样式如何做文章都会有所收获,下面我们一起来看看吧。翻牌打乱活动抽奖活动,大概需求是这样的,九...
    99+
    2023-06-26
  • 微信小程序 | 基于ChatGPT实现模拟面试小程序
    Pre:效果预览 ① 选择职位进行面试 ② 根据岗位职责进行回答 一、需求背景 这两年IT互联网行业进入寒冬期,降本增效、互联网毕业、暂停校招岗位的招聘,各类裁员、缩招的情况层出不穷!对于这个市场来说,在经历了互联网资本的疯狂时代...
    99+
    2023-08-16
    小程序 微信小程序 chatgpt 人工智能 ai 原力计划
  • 微信小程序 | 基于ChatGPT实现电影推荐小程序
    文章目录 ** 效果预览 ** 1、根据电影明星推荐 2、根据兴趣标签推荐 3、根据电影名推荐 一、需求背景 二、项目原理及架构 ...
    99+
    2023-08-22
    微信小程序 chatgpt 人工智能 ai 推荐算法 原力计划
  • 微信小程序Java登录流程怎么实现
    这篇“微信小程序Java登录流程怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序Java登录流程怎么实现”文...
    99+
    2023-06-26
  • 小程序微信登陆实现流程
    1. 微信登录流程 微信登录官方介绍:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.htm...
    99+
    2023-09-05
    小程序 微信 java 微信小程序登录
  • 微信小程序中怎么实现组件传值
    今天就跟大家聊聊有关微信小程序中怎么实现组件传值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。父传子<!-- 父组件A w...
    99+
    2024-04-02
  • 微信小程序实现上传图片
    本文实例为大家分享了微信小程序实现上传图片的具体代码,供大家参考,具体内容如下 //wxml <button class='button' bingtap="uploadSom...
    99+
    2024-04-02
  • 微信小程序实现图片上传
    微信小程序实现图片上传 最近做了个小程序,涉及到了图片上传的功能,今天给大家详细介绍下如何实现小程序图片上传,话不多说先上代码 首先是静态布局和样式部分 .wxml代码部分 ...
    99+
    2023-09-07
    微信小程序 小程序 微信
  • 微信小程序怎么实现页面跳转传值
    小编给大家分享一下微信小程序怎么实现页面跳转传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序 页面跳转传值实现代码微...
    99+
    2024-04-02
  • 微信小程序图片上传功能怎么实现
    这篇文章主要介绍“微信小程序图片上传功能怎么实现”,在日常操作中,相信很多人在微信小程序图片上传功能怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序图片上传功能怎么实现”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • 微信小程序tabBar怎么实现
    这篇文章主要介绍“微信小程序tabBar怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序tabBar怎么实现”文章能帮助大家解决问题。tabBar先创建几个页面,要注意文件夹和页面名...
    99+
    2023-06-26
  • 微信小程序瀑布流如何实现
    本篇内容介绍了“微信小程序瀑布流如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最简单的实现方案,不适用有分页的场景。这个方案简单的原...
    99+
    2023-06-26
  • 微信小程序使用stomp.js实现STOMP传输协议的实时聊天
    简介: uniapp开发的小程序中使用 本来使用websocket,后端同事使用了stomp协议,导致前端也需要对应修改。 如何使用 在static/js中新建stomp.js和websocket.js,然后在需要使用的页面引入监听代码+...
    99+
    2023-08-30
    微信小程序 小程序 stomp websocket IM 即时通信
  • 微信小程序怎么实现输入支付密码demo
    这篇文章主要介绍了微信小程序怎么实现输入支付密码demo 的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现输入支付密码demo 文章都会有所收获,下面我们一起来看看吧。微信小程序开发实现微信支付...
    99+
    2023-06-26
  • 微信小程序怎么实现小说阅读小程序
    这篇文章主要介绍了微信小程序怎么实现小说阅读小程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、先来上图:二、然后下面是详细的说明首先先...
    99+
    2024-04-02
  • 微信小程序实现上传图片小功能
    本文实例为大家分享了微信小程序实现上传图片的具体代码,供大家参考,具体内容如下 用到的apiwx.chooseMedia(); 用于拍摄或从手机相册中选择图片或视频 功能:点击上传图...
    99+
    2024-04-02
  • 微信小程序如何实现input输入框
    小编给大家分享一下微信小程序如何实现input输入框,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!微信小程序 checkbox 实现效果图:微信小程序输入框input属性名类型默认值说明v...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作