Ragent流式输出:SSE分事件推送思考、正文与来源,以及跨节点流式取消
Ragent流式输出SSE分事件推送思考、正文与来源以及跨节点流式取消【免费下载链接】ragent企业级 Agentic RAG 智能体 - 全链路覆盖文档解析、多路检索、意图识别、问题重写、会话记忆、MCP 工具调用与深度思考。面向真实业务场景从 0 到 1 完整工程实现。项目地址: https://gitcode.com/gh_mirrors/ragent1/ragentRagent 是一个企业级 Agentic RAG 智能体它的对话界面之所以能做到“边想边说、边查边流”核心是一套SSEServer-Sent Events流式输出协议思考、正文、检索来源、工具进度被拆成 8 种命名事件分帧推送配合 Redis 标记 广播主题跨节点流式取消让用户在任意一台服务节点上点“停止”都能可靠掐断正在运行的 Agent 流。这篇文章带你从协议到取消链路完整看懂这套机制。为什么选 SSE 而不是轮询或 WebSocket大模型回答动辄几十秒如果等整个回答生成完再返回用户只能干等。SSE 基于 HTTP 长连接、单向推送天然适合“服务端持续产出增量、客户端实时渲染”的场景且断线重连、事件命名等浏览器原生支持实现成本远低于 WebSocket。Ragent 的对话入口就返回一个 SSE 流超时时间可配提问入口AgentChatController.java 中GET /agent/v1/chat返回SseEmitter停止入口POST /agent/v1/stop?taskId...只需一个任务 ID上图右侧“SSE 流式通道”和底部“中断与取消、统一收尾”正是本文主角所有增量帧从 Agent 运行时一路推到接入层取消信号则从基础设施层反向打断整条链路。8 种 SSE 事件思考、正文、来源各走各的通道Agent 引擎的事件协议定义在 AgentSSEEventType.java一共产生 8 类事件事件作用典型内容meta开场元信息conversationId、taskId停止按钮就靠它message增量文本type区分think思考/response正文/error中断提示block文本块封口携带服务端起止时间用于计算“思考了多久”tool工具进度工具名、状态pending/running/end、结果摘要hint运行提示如“已达最大迭代次数正在生成总结”confirm写操作确认等待用户批准敏感工具调用finish本轮结束消息 ID、状态NORMAL / INTERRUPTED、总耗时done连接收尾固定[DONE]前端据此关流cancel用户取消与 finish 互斥同样携带落库后的消息状态关键设计是分事件推送而不是一锅烩思考与正文分离think和response都是message事件但type不同。前端据此把“深度思考”渲染成折叠区正文渲染成气泡互不污染。转换逻辑在 AgentStreamEventBridge.java 的onThinkingDelta/onResponseDelta。来源随 finish 交付RAG 模式下检索命中的文档级来源sources不是单独一帧而是随结束载荷一起下发见 CompletionPayload.java 中的ListSourceRef sources字段仅在命中知识库时携带。工具进度独立成帧tool事件携带状态机pending → running → end前端能画出“正在调用 search_knowledge…”的进度条。发送侧被封装成线程安全的 SseEmitterSender.java连接关闭状态用AtomicBoolean守卫complete()用 CAS 保证只关闭一次——这在“正常完成”“用户取消”“异常失败”三条收尾路径并发竞争时至关重要。前端解析器 useAgentStream.ts 逐行读取event:/data:行按事件名分发到各自 handlerthink增量实时进入思考面板finish到达后流式输出正式收尾。跨节点流式取消标记、广播、复核三步走单体应用里“点停止”很简单同进程内存里打个标记即可。但 Ragent 是多节点部署用户发请求的节点和实际跑流的节点往往不是同一台——停止请求落在 A 节点流却在 B 节点上跑。这就是 StreamTaskManager.java 要解决的问题它由三件东西组成本地任务注册表Guava CacheTTL 30 分钟记录每个 taskId 的收尾回调与上游中断动作Redis 取消标记ragent:stream:cancel:{taskId}属主标记ragent:stream:owner:{taskId}让任何节点都能查到“这条流该不该停、谁有权停”Redis 广播主题ragent:stream:cancel停止请求先写标记再向所有节点发布taskId|发起方消息持有该流的那台机器收到后执行本地取消。完整流程如下流启动时register(taskId, userId, 收尾回调)把属主写入 Redis——注意注释里明确说“停止请求可能落在没跑这条流的节点上”所以属主必须进 Redis 而不是只留本地用户点停止任意节点收到/agent/v1/stop执行 cancelByUser先比对属主不匹配就报“任务不存在或已结束”不区分不存在与非属主防止停止接口变成他人任务的探测器校验通过后publishCancel先落 Redis 标记再广播所有节点含本地统一走监听器处理避免重复调用执行端cancelLocal再次复核发起方执行端复核兜住“属主还没落地”的抢跑窗口CAS 保证取消动作只执行一次。这里的细节很有工程味道taskId 是雪花 ID时间有序、可预测所以“拿到 taskId 就能停别人的流”不是理论风险必须靠属主比对挡住。优雅打断先中断框架超时才断流取消信号到达执行节点后并不是粗暴地掐掉 HTTP 连接。AgentRunHandle.interruptUpstream 的策略是两级先礼貌中断调用agent.interrupt()通知框架走中断分支等它把本轮 Agent 状态存盘最多等 2 秒超时再强制断流礼貌中断失败或超时直接dispose()掐断 Reactor 链并补一次状态存盘保证工具执行结果不丢。收尾统一走 finishCancelledStream把已生成的内容以INTERRUPTED状态落库补发canceldone事件——已流出的内容不会丢刷新页面后看到的和当场看到的一致。另外还有一个容易被忽略的取消源用户关页面、断网导致 SSE 断开。bindEmitterLifecycle 在onTimeout/onError/onCompletion三个钩子上都挂了回收动作以系统身份发布取消——否则 ReAct 循环会空跑到迭代上限白白烧 token。小结这套流式输出协议好在哪分事件推送思考、正文、工具、来源各走各的通道前端渲染清晰协议易于演进三出口 CAS 互斥complete/cancel/fail三条收尾路径只有一个能胜出杜绝重复发帧跨节点可靠取消Redis 标记 广播 执行端复核任何节点都能停任何节点的流且属主校验防越权优雅降级先等框架存盘再断流中断的内容照样落库刷新不丢历史。想深入阅读可以从这几个文件入手事件协议AgentSSEEventType.java事件桥接与收尾AgentStreamEventBridge.java取消管理器StreamTaskManager.java运行句柄与优雅打断AgentRunHandle.java前端 SSE 解析useAgentStream.ts【免费下载链接】ragent企业级 Agentic RAG 智能体 - 全链路覆盖文档解析、多路检索、意图识别、问题重写、会话记忆、MCP 工具调用与深度思考。面向真实业务场景从 0 到 1 完整工程实现。项目地址: https://gitcode.com/gh_mirrors/ragent1/ragent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

计算机毕业设计选题推荐:基于大数据的广西医疗机构及药店清单数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目

计算机毕业设计选题推荐:基于大数据的广西医疗机构及药店清单数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

2026/9/26 3:01:19 阅读更多 →
基于拉丁超立方抽样与场景缩减的交直流混合微网优化调度

基于拉丁超立方抽样与场景缩减的交直流混合微网优化调度

1. 交直流混合微网为什么值得折腾先说结论:这玩意儿不是学术圈自嗨,是真正在解决实际工程问题的。现在的微电网早就不是纯交流或者纯直流一统天下的局面了。光伏、储能、直流负荷这些天生就是直流的,而风机、传统负荷、电网接口又离不开交流。…

2026/9/26 3:01:19 阅读更多 →
基于SpringBoot+Vue的鲜花商城系统:从下单到支付全链路实战

基于SpringBoot+Vue的鲜花商城系统:从下单到支付全链路实战

简介:这是一套面向高校计算机专业毕业设计场景的鲜花商城全栈项目源码,采用SpringBootMyBatis后端与Vue前端组合,配套MySQL数据库,适合正在准备毕设或需要电商类实战案例的开发者参考。系统按用户、店家、管理员三角色划分权限&am…

2026/9/26 3:01:19 阅读更多 →

最新新闻

一条命令驾驭20+ AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor)

一条命令驾驭20+ AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor)

一条命令驾驭20 AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor) 【免费下载链接】acpx Headless CLI client for stateful Agent Client Protocol (ACP) sessions 项目地址: https://gitcode.com/gh_mirrors/ac/acpx …

2026/9/27 4:51:29 阅读更多 →
Claude Code泄露源码全景解析:51万行TypeScript如何重塑终端AI编程

Claude Code泄露源码全景解析:51万行TypeScript如何重塑终端AI编程

Claude Code泄露源码全景解析:51万行TypeScript如何重塑终端AI编程 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explai…

2026/9/27 4:51:29 阅读更多 →
3个避坑细节教你网页设计软件视频教程怎么选

3个避坑细节教你网页设计软件视频教程怎么选

3个避坑细节教你网页设计软件视频教程怎么选 上周三凌晨两点,我的手机突然疯狂震动。不是客户催稿,而是服务器监控报警。登录后台一看,官网首页被替换成了满屏的非法广告链接,浏览器打开直接弹出“系统中毒,请安装XX清理工具”的提示。那一刻,我后背…

2026/9/27 4:51:29 阅读更多 →
CCB多智能体布局完全教程:如何用一行TOML搭建多窗口多面板AI团队

CCB多智能体布局完全教程:如何用一行TOML搭建多窗口多面板AI团队

CCB多智能体布局完全教程:如何用一行TOML搭建多窗口多面板AI团队 【免费下载链接】claude_codex_bridge Visible multi-agent CLI workspace for mixing Codex, Claude, Gemini, Kimi, Qwen, Cursor, Copilot, Pi, OpenCode, and other AI coding agents 项目地址…

2026/9/27 4:51:29 阅读更多 →
深圳网站建设服务公司怎么选?拆解3000到3万建站报价

深圳网站建设服务公司怎么选?拆解3000到3万建站报价

深圳网站建设服务公司怎么选?拆解3000到3万建站报价 改个Banner图拖了一周还没动静,后台数据查不到,手机打开全是乱码。这种糟心事儿,深圳做老板的估计谁没碰上过? 别急着骂人,先看看你当初签的合同和拿到的 建站报价…

2026/9/27 4:51:29 阅读更多 →
如何从工程交付判断GEO公司:Schema、基线与复测脚本

如何从工程交付判断GEO公司:Schema、基线与复测脚本

一、为什么从“工程产物”判断最可靠GEO 背后是 RAG 流水线,效果取决于内容能否被正确抓取、结构化与持续维护。一家公司若只能提供“发了多少篇文章”的清单,却拿不出结构化数据、基线记录与复测脚本,其交付很难稳定。反过来,能把…

2026/9/27 4:50:29 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →