Fetch处理大模型流式数据请求与解析
为什么有的大模型可以一次返回多个
data?
Server-Sent Events (SSE):允许服务器连续发送多个 data: 行,每个代表一个独立的数据块。
流式响应:大模型服务通常以流式响应方式返回数据,提高响应速度。
批量处理:服务器可能将多个数据块打包发送,减少网络开销。
一、问题分析

- 分段返回
- 每段有多条类似json数据
- 每段的最后一条json数据有可能不完整
二、解决方案
/*** 异步函数 fetchEventGpt,用于向服务器发送获取 GPT 数据的请求** @param data 要发送的数据对象* @returns 返回响应体内容*/
const fetchEventGpt = async (data: any) => {const response = await fetch('/getGPT', {method: 'Post',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(data),})// 等待直到请求完成console.log(response)return response.body
}/*** 异步解析流数据并返回 Response 对象。** 该函数通过 fetchEventGpt 发送请求,获取 ReadableStream 流数据,然后通过 ReadableStream API 进行解析。* 解析过程中,会将流数据分片并尝试解析 JSON 对象,处理可识别内容,并将结果通过 controller.enqueue 返回。* 如果解析结束,会清空缓存区并关闭连接。** @return {Response} Response 对象,包含解析后的流数据*/
const parseStream = async () => {const response = await fetchEventGpt({messages: [{role: 'user',content: '核能',},{role: 'assistant',content:'<br/>根据您提供的文章内容,以下是对“核能”的相关信息的整理:<br/><br/>1. 知识产权归属 :本文件及其附件的知识产权属于核电运行研究(上海)有限公司和中核()供应链管理有限公司,未经书面许可不得擅自使用。<br/><br/>2. 民用核设施事故责任 :根据《民法典》第一千二百三十七条,民用核设施或运入运出核设施的核材料发生事故造成他人损害的,营运单位应承担侵权责任。但是,如果损害是由战争、武装冲突、暴乱等情形或者受害人故意造成的,则营运单位不承担责任。<br/><br/>3. 招标代理机构招标人 :本次招标的代理机构为中核(上海)供应链管理有限公司,招标人为核电运行研究(上海)有限公司。<br/><br/>4. 招标投标系统检测 :根据第九条,实验室应按照《招标投标系统检测技术规范》等进行检测,检测内容包括数据项、业务规则、功能、接口、性能、安全性、可靠性、易用性、运行环境等,并对相关文档进行审核。<br/><br/>5. 招标项目目标 :项目的目标是突破微波干燥处理核电厂放射性废物的关键技术,研制微波干燥成套装备,解决核电厂放射性废物处理难题。<br/><br/>6. 投标文件提交方式 :电子投标文件应通过中核集团电子采购平台提交,纸质版投标文件提交地点为中核(上海)供应链管理有限公司。<br/><br/>以上内容涉及核能相关的法律法规、招标流程、技术规范等方面,希望能对您。 ',},{role: 'user',content: '核能',},],classify: '',}).catch(() => {return new Error('请求失败')})if (!(response instanceof ReadableStream)) {return new Error('请求失败')}const reader = response.getReader() as anyconst decoder = new TextDecoder('utf-8')const encoder = new TextEncoder()let jsonBuffer = ''const readableStream = new ReadableStream({async start(controller) {function push() {reader.read().then(({ done, value }: any) => {if (done) {controller.close()return}// 1、流返回的块数据const chunk = decoder.decode(value, { stream: true })// 2、更新到缓存区jsonBuffer += chunk// 3、尝试分片解析jsonlet boundaryIndex = 0// 当前片内容let result = ''while ((boundaryIndex = jsonBuffer.indexOf('\n')) >= 0) {// 3.1 数据块切片const jsonString = jsonBuffer.slice(0, boundaryIndex)// 3.2 更新缓存区jsonBuffer = jsonBuffer.slice(boundaryIndex + 2)try {const jsonStr = jsonString.replace('data:', '')const jsonObject = JSON.parse(jsonStr) // 解析 JSON// 处理可识别内容 - 伪代码,根据实际对象处理const content = jsonObject?.data?.contentcontroller.enqueue(encoder.encode(content))// 解析结束 - 我们业务是根据此字段标识,根据实际情况调整if (jsonObject?.data?.isEnd === true) {// 清空缓存区jsonBuffer = ''break}} catch (error) {console.log('json解析出错', error)}}if (jsonBuffer) {try {const jsonObject = JSON.parse(jsonBuffer)} catch (error) {console.log(error)}}push()}).catch((err: any) => {controller.error(err)})}push()},})return new Response(readableStream)
}
三、解析之后的结果

相关文章:
Fetch处理大模型流式数据请求与解析
为什么有的大模型可以一次返回多个 data? Server-Sent Events (SSE):允许服务器连续发送多个 data: 行,每个代表一个独立的数据块。 流式响应:大模型服务通常以流式响应方式返回数据,提高响应速度。 批量处理&#x…...
FPGA自学之路:到底有多崎岖?
FPGA,即现场可编程门阵列,被誉为硬件世界的“瑞士军刀”,其灵活性和可编程性让无数开发者为之倾倒。但谈及FPGA的学习难度,不少人望而却步。那么,FPGA自学之路到底有多崎岖呢? 几座大山那么高?…...
从0到机器视觉工程师(二):封装调用静态库和动态库
目录 静态库 编写静态库 使用静态库 方案一 方案二 动态库 编写动态库 使用动态库 方案一 方案二 方案三 总结 静态库 静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中,可以使程序独立运行&…...
[极客大挑战 2019]Knife1
这里很显然,根据提示可以猜测,已经有一句话木马上传了,但是路径这里不是很清楚,不知道路径在哪里,不过还是用菜刀连一下试试: 连接成功,在根目录下发现flag。不过如果不用菜刀,可以用…...
【在Python中生成随机字符串】
在Python中生成随机字符串,你可以结合使用random模块和字符串操作。以下是一个常用的方法,通过从预定义的字符集中随机选择字符来构建字符串: import random import stringdef generate_random_string(length):# 定义字符集:可以…...
【three.js】场景搭建
three.js由场景、相机、渲染器、灯光、控制器等几个要素组成。每个要素都有不同的类型,例如光照有太阳光、环境光、半球光等等。每种光照都有不同的属性可以进行配置。 场景 场景(scene):场景是所有物体的容器,如果要…...
Singleton: WebRTC中ThreadManager中的单例模式
1. 什么是单例模式: 旨在确保一个类只有一个实例,并提供全局访问点。 应用场景:需要一个全局唯一的实例,避免资源浪费。 2. 单例模式的实现: Lazy Initialization(懒汉式)(延迟初…...
MySQL数据库笔记——多版本并发控制MVCC
大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍MySQL的并发控制:多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…...
【0x0037】HCI_Write_Link_Supervision_Timeout命令详解
目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_Link_Supervision_Timeout 命令格式 2.2. Handle 2.3. Link_Supervision_Timeout 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Handle 四、命令执行流程 4.1. 命令准备阶段 4.…...
Linux下如何进行内存泄漏分析
前言 正文 一、环境的安装 1、tar –xf valgrind-3.17.0.tar.bz2 2、cd valgrind-3.17.0 3、./configure // 运行配置脚本生成makefile文件,可以--help查看配置项,自行按需配置,比如修改编译工具、修改安装路径等 4、make 5、make…...
Colyseus Metadata 详解
Colyseus Metadata 详解 Colyseus 是一个专注于实时多人在线游戏和应用的框架,它的 metadata 功能为每个房间提供了一个灵活且有用的机制,用来存储和共享与房间相关的非实时信息。这些信息可以用来描述房间、标记房间状态、或提供额外的房间配置选项。 …...
C语言day5:shell脚本
一、练习题1 定义一个find函数,查找ubuntu和root的gid并使用变量接收结果 二、练习题2 定义一个数组,写一个函数完成对数组的冒泡排序 三、练习题3 使用break求1-100中的质数(质数:只能被1和它本身整除,如:…...
微记录-Linux字符设备的write函数如何避免文件系统重复调用?
背景 linux字符设备的fops实现read write的时候,尤其是write,因为会指定写入的总长度,那么如果如果驱动中单次write最大个数小于需求len的时候,文件系统就会多次调用到write。他是根据wirte函数的返回值来判断的。如果返回值不是…...
本地调试自定义Maven Plugin步骤
添加自定义插件到dependencies 找到对应依赖的类,打上断点。 debug运行插件。...
二、github基础
Github基础 备用github.com网站一、用户界面-Overview(概览)1用户信息2 导航栏3 热门仓库4 贡献设置5贡献活动6搜索和筛选7自定义收藏8贡献统计9最近活动10其他链接 二、用户界面-Repositories(仓库)1 libusb_stm322 savedata3 Fi…...
如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题
一、文章大纲 1.前言 介绍 Swiper 作为一款强大的轮播组件,常用于处理图片、文章、商品等内容的滑动展示。 在 Vue.js 项目中集成 Swiper,尤其是在 Vue 2 中使用,常见的两种数据来源:静态数据与后端数据。 在 Vue 2 项目中集成 Swiper 5.4.5 2.如何通过 npm 安装 Swiper…...
request.getSession().getAttribute(Constants.ADMIN_ID)
你提出了一个非常好的问题! 确实,使用 request.getSession().getAttribute(Constants.ADMIN_ID) 也能从 Session 中获取属性,那么 SessionAttribute 注解和这种方式到底有什么区别呢? request.getSession().getAttribute(Constan…...
线性回归模型的构建与训练
1.基本的导入与配置 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals# Common imports import numpy as np import pandas as pd import os# to make this notebooks output stable across runs np.random.seed(4…...
【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)
MySQL函数 1、字符串函数2、数值函数3、日期函数4、流程函数 1、字符串函数 函数说明concat(s1, s2, …, sn)字符串拼接,将 s1, s2, …, sn 拼接成一个字符串lower(str)将字符串 str 全部转为小写upper(str)将字符串 str 全部转为大写lpad(str, n, pad)左填充&…...
【推送】主流的服务端推送技术的对比
推送技术的对比 以下是主流的服务端推送技术的对比表格,涵盖WebSocket、Server-Sent Events (SSE)、Long Polling、HTTP/2 Push和Comet: 特性WebSocketServer-Sent Events (SSE)Long PollingHTTP/2 PushComet通信方向双向单向(服务器到客户…...
代码性能优化实战:基于OpenAI Codex的Python转C++专业工具深度解析
代码性能优化实战:基于OpenAI Codex的Python转C专业工具深度解析 【免费下载链接】codex_py2cpp Converts python code into c by using OpenAI CODEX. 项目地址: https://gitcode.com/gh_mirrors/co/codex_py2cpp 在当今高性能计算需求日益增长的背景下&…...
Windows文件管理器终极增强:3步实现APK文件原生图标显示
Windows文件管理器终极增强:3步实现APK文件原生图标显示 【免费下载链接】apkshellext Show app icons in windows explorer 项目地址: https://gitcode.com/gh_mirrors/ap/apkshellext 在Windows系统中管理移动应用安装包时,你是否曾为难以区分…...
从4G到5G VoNR:对比VoLTE呼叫流程,聊聊核心网演进带来的那些变化
从4G到5G VoNR:核心网架构演进与语音业务的技术跃迁 当我们在4G时代习惯了高清语音通话(VoLTE)的清晰稳定,5G时代VoNR(Voice over New Radio)的商用正在悄然重塑移动通信的语音业务版图。这场技术演进绝非简单的网络升级,而是从核心网架构到业…...
WinRing0深度解析:Windows硬件访问的终极解决方案
WinRing0深度解析:Windows硬件访问的终极解决方案 【免费下载链接】WinRing0 WinRing0 is a hardware access library for Windows. 项目地址: https://gitcode.com/gh_mirrors/wi/WinRing0 WinRing0是一个功能强大的Windows硬件访问库,为开发者提…...
RoboCom备赛救急实录:当VNC崩溃时,我是如何用NoMachine快速搭建远程调试环境的
RoboCom备赛救急实录:当VNC崩溃时,我是如何用NoMachine快速搭建远程调试环境的 距离RoboCom全国机器人开发者大赛还有48小时,我们的视觉识别模块突然在测试中频繁崩溃。更糟糕的是,实验室那台配置了全套开发环境的Ubuntu工作站—…...
基于图数据库与语义分析的个人知识管理系统Engram-Mem部署与实践
1. 项目概述与核心价值最近在整理个人知识库和笔记系统时,我遇到了一个几乎所有深度思考者都会面临的困境:信息过载与知识碎片化。我们每天都在阅读文章、保存链接、记录灵感,但这些信息就像散落一地的拼图,彼此孤立,难…...
超越基础扫描:实战解析Tessent ATPG中的Clock PO与RAM Sequential Patterns如何提升故障覆盖率
超越基础扫描:实战解析Tessent ATPG中的Clock PO与RAM Sequential Patterns如何提升故障覆盖率 在数字电路测试领域,达到95%以上的故障覆盖率曾是许多DFT工程师的终极目标,直到他们遇到了时钟驱动输出和嵌入式RAM模块。这些特殊结构如同电路…...
3个步骤让Photoshop拥抱AVIF时代:免费插件解锁下一代图像格式
3个步骤让Photoshop拥抱AVIF时代:免费插件解锁下一代图像格式 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 还在为Photoshop无法处理AVIF格式而烦…...
Python开发被内网卡脖子?5分钟用Docker搭个Pypiserver救急(含避坑指南)
Python内网开发救星:Docker化Pypiserver极速搭建指南 当你在客户现场调试代码时,突然发现内网环境无法连接PyPI官方源;当你在保密项目部署时,发现所有外网访问都被严格限制——这种"被卡脖子"的困境,相信不少…...
如何在PC上免费畅玩Switch游戏:yuzu模拟器终极指南
如何在PC上免费畅玩Switch游戏:yuzu模拟器终极指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想要在电脑上体验任天堂Switch游戏吗?yuzu模拟器是你的完美选择!作为目前最受…...
