当前位置: 首页 > article >正文

Go + Redis 实现可恢复的 LLM 流式推送:断线不丢数据的实战方案

做 LLM 流式输出的时候用户刷新一下页面流就断了后端还在跑token 白烧。本文分享一种基于 Redis Streams 的断线续传方案附完整 Go 代码。一、问题背景最近做了一个 AI 对话服务后端 GoLLM 输出通过 SSE 推给前端。上线后发现一个很头疼的问题用户刷新页面 → SSE 断了 → 后端还在跑 → token 白烧用户看不到输出 → 点重新生成 → 又烧一遍钱分布式部署下LLM worker 和 HTTP handler 不在同一台机器重连后负载均衡打到新节点找不到原来的流二、JS 生态有方案Go 没有调研了一圈JS/TS 已经有成熟方案方案说明vercel/resumable-streamVercel 官方绑定 AI SDKdurable-streamsElectricSQL 出品多语言 SDK需要跑专用 serverai-resumable-stream社区方案也是绑 AI SDK核心思路都一样chunk 存 Redis断线重连时 replay。但 Go 生态里一个能用的都没有。三、方案设计自己造了个轮子streamhub3.1 架构LLM Worker (Instance A) │ ├── Publish chunks ──→ Redis Stream持久化 │ │ │ ├──→ Consumer (Instance B) ──→ SSE │ └──→ 新连接自动 replay 历史 │ └── Listen cancel ←── Redis Pub/Sub ←── 任意节点3.2 两个 Redis 原语Redis StreamsXADD/XREAD存 chunk支持从任意位置回放Redis Pub/Sub传 cancel 信号延迟低3.3 防重复机制Generation ID作为 fencing token旧 producer 的写入会被拒绝单 Producer 注册同 session 只允许一个 producer不会重复调 LLM四、核心代码4.1 安装go get github.com/gtoxlili/streamhubv0.1.04.2 创建 Hubclient,_:rueidis.NewClient(rueidis.ClientOption{InitAddress:[]string{127.0.0.1:6379},})hub:streamhub.New(client)4.3 生产端stream,created,err:hub.Register(chat:123,func(){// 收到 cancel 信号的回调llmCancel()})if!created{return// 其他实例已经在跑了}deferstream.Close()// 可以设置 metadatastream.SetMetadata(map[string]any{model:gpt-4})fortoken:rangellmOutput{stream.Publish(token)}关键点created为false说明已有 producer不要重复生产。4.4 消费端任意实例stream:hub.Get(chat:123)ifstreamnil{return// session 不存在}chunks,unsub:stream.Subscribe(128)deferunsub()forchunk:rangechunks{// 自动先 replay 历史再无缝切 livefmt.Fprintf(w,data: %s\n\n,chunk)w.(http.Flusher).Flush()}4.5 远程取消hub.Get(chat:123).Cancel()// 通过 Redis Pub/Sub 广播producer 所在实例收到回调五、对比特性streamhubvercel/resumable-streamdurable-streams语言GoTypeScript多语言存储复用现有 RedisRedis专用 server断线 replay✅✅✅跨实例 cancel✅❌❌单 producer✅❌❌额外依赖无Vercel AI SDK需部署 server六、适用场景LLM / AI Agent 流式响应需要断线续传SSE / WebSocket 推送要求不丢数据微服务架构生产者消费者在不同实例从其他服务远程取消正在进行的生成任务七、总结核心就是一句话把流的状态从进程内存搬到 Redis让生产和消费彻底解耦。项目地址github.com/gtoxlili/streamhub目前还在早期阶段API 可能会调整。如果你也在做类似的项目欢迎提 Issue 交流。

相关文章:

Go + Redis 实现可恢复的 LLM 流式推送:断线不丢数据的实战方案

做 LLM 流式输出的时候,用户刷新一下页面流就断了,后端还在跑,token 白烧。本文分享一种基于 Redis Streams 的断线续传方案,附完整 Go 代码。 一、问题背景 最近做了一个 AI 对话服务,后端 Go,LLM 输出通…...

技术实战:基于CLI与AgentSkill 构建工业级AI影视解说自动化链路

一、 AI影视解说新范式:从工具堆砌到自动化 Pipeline 演进 进入 2026 年,短视频生产已从单纯的“工具使用”进入到“工程化自动生产”阶段。传统的 GUI(图形界面)工具虽然易上手,但在面对大规模账号矩阵运营、高频内容…...

2026年本地geo推广服务商大盘点,这些你都知道吗?

在当今数字化营销的浪潮中,本地GEO推广服务正扮演着愈发重要的角色。随着市场竞争的加剧,企业对于精准营销和高效推广的需求也日益增长。GEO推广能够根据地理位置信息,将企业的广告精准地推送给目标客户,从而提高营销效果和投资回…...

做了5年软考班主任,我发现能一次上岸的学员,都有这3个共同点

从业5年,带过超过3000名高项学员。每年成绩出来,我都会做一次复盘:那些一次上岸的学员,到底做对了什么?5年的数据告诉我,能一次通过软考高项的学员,跟学历、年龄、专业背景关系不大。他们唯一的…...

OpenEuler 硬盘挂载

一、背景说明 CentOS 停止维护后,选择安装 OpenEuler(欧拉)系统 服务器配置:512G SSD(安装系统) 1T 机械硬盘(存储数据)目标:SSD 运行系统,机械硬盘存储数据 …...

Golang如何部署到Kubernetes_Golang K8s部署教程【推荐】

Go服务在Kubernetes中启动失败的四大主因是:监听地址必须为0.0.0.0或空host;Deployment中selector.matchLabels与template.labels必须逐字一致;必须配置readinessProbe和livenessProbe并实现对应HTTP路径;CGO_ENABLED0是Alpine/sc…...

DeepSeek-R1-Distill-Qwen-7B入门实战:从零开始搭建推理环境

DeepSeek-R1-Distill-Qwen-7B入门实战:从零开始搭建推理环境 1. 环境准备与快速部署 1.1 系统要求 在开始部署DeepSeek-R1-Distill-Qwen-7B模型前,请确保您的系统满足以下基本要求: 操作系统:推荐使用Linux系统(Ub…...

李佳琦后退,美ONE在赌一场没有“顶流”的未来

超头退潮下,MCN的生死命题。文|段泽钰编|郭梦仪4月8日,李佳琦在直播中宣布“将缺席两个月的直播”。几个小时后,这条消息登上热搜。他不得不紧急澄清:是两个月,不是两个季度,缺席是去…...

酷狗音乐API深度解析:5大核心技术构建完整的音乐服务生态

酷狗音乐API深度解析:5大核心技术构建完整的音乐服务生态 【免费下载链接】KuGouMusicApi 酷狗音乐 Node.js API service 项目地址: https://gitcode.com/gh_mirrors/ku/KuGouMusicApi KuGouMusicApi 是一个基于Node.js的酷狗音乐API服务,为开发者…...

Step3-VL-10B-Base从零开始:C语言基础与模型底层调用原理

Step3-VL-10B-Base从零开始:C语言基础与模型底层调用原理 1. 引言 你可能已经用过不少AI模型,点几下按钮,输入一段文字,图片或者视频就生成了。但有没有想过,当你点击“生成”按钮后,电脑内部到底发生了什…...

DAMOYOLO-S检测展示:支持PNG透明通道输入,保留原始Alpha信息输出

DAMOYOLO-S检测展示:支持PNG透明通道输入,保留原始Alpha信息输出 1. 引言:当目标检测遇上透明背景 想象一下,你是一位游戏美术设计师,需要从一张带有复杂透明背景的角色立绘中,精准地识别出角色、武器、宠…...

3步实现《重返未来:1999》智能托管:M9A助手如何让你每天节省2小时游戏时间

3步实现《重返未来:1999》智能托管:M9A助手如何让你每天节省2小时游戏时间 【免费下载链接】M9A 重返未来:1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 还在为《重返未来&#xff1a…...

文脉定序环境部署:适配中小企业知识库的轻量级重排序服务搭建指南

文脉定序环境部署:适配中小企业知识库的轻量级重排序服务搭建指南 1. 引言:为什么中小企业需要智能重排序? 在日常工作中,你是否遇到过这样的困扰:公司知识库明明有相关文档,但搜索出来的结果总是差强人意…...

前端组件设计原则

在当今快速发展的前端开发领域,组件化已成为构建高效、可维护应用的核心手段。前端组件设计原则不仅提升了代码复用性,还优化了团队协作效率。无论是大型企业级应用还是轻量级项目,良好的组件设计都能显著降低维护成本。本文将深入探讨几个关…...

人工智能之知识蒸馏 第三章 知识类型分类与蒸馏对象选择策略

人工智能之知识蒸馏 第三章 知识类型分类与蒸馏对象选择策略 文章目录人工智能之知识蒸馏前言3.1 核心知识类型分类(按蒸馏对象划分)3.1.1 输出特征蒸馏(基础型蒸馏)3.1.2 中间特征蒸馏(进阶型蒸馏)3.1.3 …...

Zend VM直接运行PHP代码出结果就不需要CPU了?

答案是:绝对需要 CPU。而且是非常大量的 CPU。 这是一个非常危险的误解。如果 Zend VM 运行不需要 CPU,那它就是在用“爱”发电,或者是在施展魔法。 真相是:Zend VM 本身就是一段巨大的、复杂的 C 语言程序。这段 C 语言程序必须被…...

GME-Qwen2-VL-2B-Instruct开发入门:Git版本控制与团队协作实践

GME-Qwen2-VL-2B-Instruct开发入门:Git版本控制与团队协作实践 如果你刚开始接触GME-Qwen2-VL-2B-Instruct这类多模态大模型项目,可能会觉得有点手忙脚乱。模型文件、配置文件、推理脚本、数据集……文件又多又杂,今天改一点代码&#xff0c…...

【2026奇点智能技术大会权威解码】:多模态导航如何重构LBS服务底层逻辑?

第一章:2026奇点智能技术大会:多模态导航应用 2026奇点智能技术大会(https://ml-summit.org) 多模态导航正从实验室走向城市级基础设施,2026奇点智能技术大会首次系统展示了融合视觉、语音、LiDAR与高精语义地图的端到端导航框架。该框架在东…...

SDMatte提示词(Prompt)工程:如何描述图片以获得更好抠图效果

SDMatte提示词(Prompt)工程:如何描述图片以获得更好抠图效果 1. 为什么提示词对抠图很重要 你可能觉得奇怪,一个抠图工具为什么需要关注提示词?其实在SDMatte这类智能抠图模型中,文字描述就像给模型的一张…...

AI 3D内容生成全攻略:从建模到渲染,一站式搞定商用需求

AI 3D内容生成全流程解析建模阶段:快速生成基础模型AI驱动的建模工具(如Kaedim、Masterpiece Studio)可通过文本或2D图像生成3D模型,大幅降低传统多边形建模的时间成本。以Blender为例,可搭配AI插件(如AI M…...

Python第三课: 基础语法(2):顺序、条件、循环全攻略+人生重开模拟器

Python第三课: 基础语法(2):顺序、条件、循环全攻略人生重开模拟器 文章目录Python第三课: 基础语法(2):顺序、条件、循环全攻略人生重开模拟器一、顺序语句:代码从上往下执行二、条件语句&…...

万物识别-中文-通用领域镜像与Linux安装教程结合:系统部署指南

万物识别-中文-通用领域镜像与Linux安装教程结合:系统部署指南 你是不是也遇到过这样的场景:手头有一堆图片,想快速知道里面都有什么东西,但一个个去查、去搜又太费时间?或者,你想给自己的应用加上一个“智…...

SeqGPT-560M多场景:物联网设备日志中自动提取错误码、时间戳、模块名、原因描述

SeqGPT-560M多场景:物联网设备日志中自动提取错误码、时间戳、模块名、原因描述 1. 项目简介 SeqGPT-560M是一个专门为企业级智能信息抽取设计的定制化系统。与常见的聊天对话模型不同,这个系统专注于一件事:从复杂的非结构化文本中精准提取…...

【智能家居奇点倒计时】:仅剩18个月!2026大会认证的7个必须升级的多模态交互协议

第一章:2026奇点智能技术大会:多模态智能家居 2026奇点智能技术大会(https://ml-summit.org) 多模态融合架构设计 本届大会首次公开了开源多模态家居中枢框架HomeFusion v2.1,其核心采用统一嵌入空间(Unified Embedding Space&a…...

免费商用的专业中文宋体:思源宋体TTF完整指南

免费商用的专业中文宋体:思源宋体TTF完整指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字内容创作和商业设计中,字体选择直接影响着作品的视觉效果和…...

c++ 跨平台线程封装 c++如何封装pthread和std--thread

直接用 std::thread 即可跨平台运行,其行为由 C11 标准保证一致;需明确区分哪些功能必须用原生 API(如亲和性)、哪些 std::thread 已足够,避免强行封装引入未定义行为或资源泄漏。怎么让同一套线程代码在 Linux/macOS/…...

终极指南:Jellyfin Android TV客户端与服务器版本兼容性完全解析

终极指南:Jellyfin Android TV客户端与服务器版本兼容性完全解析 【免费下载链接】jellyfin-androidtv Android TV Client for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-androidtv Jellyfin Android TV客户端是一款专为Android电视和…...

循环神经网络(RNN)深度解析:从数学原理到智能输入法实战

还在被 Transformer 的复杂度劝退?来认识一下序列建模的鼻祖 RNN——它的思想正以全新姿态回归大模型舞台中央。在自然语言处理中,词语的顺序对于理解句子的含义至关重要。虽然词向量能够表示词语的语义,但它本身并不包含词语之间的顺序信息。…...

深度学习炼丹神器!PyTorch + TensorBoard 可视化完全指南,训练过程一目了然

还在凭感觉调参?还在对着终端打印的 loss 数值发呆?本文将手把手带你掌握 PyTorch 与 TensorBoard 的完美结合,让你拥有“透视眼”,看清模型训练的每一个细节。(附完整代码)写在前面:为什么需要…...

2025届学术党必备的五大AI辅助论文网站推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将DeepSeek当作智能写作工具,于论文撰写的整个流程里能够起到关键的辅助作用&…...