点了停止,模型为什么还可能继续跑
按钮、浏览器、SSE 服务和上游模型是四个不同的停止边界。摘要我沿 Microi吾码当前 AI 流式链路从停止按钮追到 AbortController、SSE、服务端和上游调用。结论点击停止可结束浏览器读取只有取消信号继续穿过服务端并被提供方接受才能说模型已停止。本文绑定当前源码行号、SHA-256 与一次5/5聚焦测试并区分源码推断和未做的生产验证。✦① 用户点下的不是一只总闸在 Microi吾码当前 AI 对话界面里停止按钮做了两件确定的事调用 abortController.abort()再把 sending 设为 false。这足以让页面停止等待与渲染却不能自动证明远端 GPU 已经结束计算。原因是一次流式生成至少经过四层UI 状态、浏览器 Fetch、服务端 SSE 与上游模型。每一层都能独立结束也都可能没有把“取消”继续传给下一层。任意一层只结束自己的工作都不能替下一层作保证。先给结论用户看到“停止输出”直接证明的是客户端不再读取只有服务端取消令牌和提供方确认都成立才等于模型停止。用户点击停止 → UI 清掉 sending → AbortSignal 终止 fetch → 连接关闭是否被服务端感知 → CancellationToken 是否继续传入模型调用 → 提供方是否确认停止与结算✦② SSE 解决的是连续送达不是自动取消普通 /api/Ai/ChatStream 当前明确返回 text/event-stream并设置 no-cache、keep-alive 与 X-Accel-Buffering: no。服务端把内容包装成 event: 与 data:每写一帧就执行 FlushAsync()。这解释了文字为什么能像打字机一样抵达。message逐段文本客户端累积后更新回答。result最终结构化结果客户端尝试 JSON 解析。error失败信息客户端转为异常或错误结果。done服务端发送 [DONE]表示正常流结束。关键差别Flush 证明数据已经被推出服务端缓冲区它并不等于浏览器仍在接收更不等于上游计算收到取消。✦③ 浏览器这层其实做得很清楚当前页面在发起 ChatStream 前新建 AbortController并把 signal 交给 fetch。点击停止后正在等待的读取会以 AbortError 一类的方式结束。通用 V8.AI.ChatStream 也支持从调用参数接收 Signal。这条 SDK 还先清除调用方伪造的 OsClient、用户、ApiKey、Endpoint、Token 和 Authorization再由宿主注入平台上下文。也就是说取消能力可以开放给调用者身份边界仍然不能交给调用者覆盖。const controller new AbortController(); V8.AI.ChatStream(param, onChunk, { Signal: controller.signal }); // 用户只是在浏览器侧先发出取消意图 controller.abort();客户端语义AbortController 的成功标准是本次 Fetch/读取停止不要把它的成功文案写成“已停止模型计费”。✦④ 同样是流式接口服务端取消链路并不相同当前源码里代理流显式传入 RequestAborted普通 ChatStream 的可见调用没有。普通 ChatStream 调用 _microiAi.ChatStreamWithContextAsync(param, chunkCallback)当前参数未见 HttpContext.RequestAbortedProxyChatStream 则把该令牌明确交给 ExecuteAuthenticatedStreamAsync。因此可以做一个有边界的源码推断普通路径的浏览器停止不足以证明取消信号已穿透到上游代理路径至少在控制器这一段完成了令牌传递。但这仍不是生产模型计费取消的实测。已确认前端普通 ChatStream 的 Fetch 接收 AbortSignal。已确认普通控制器当前可见调用未传 RequestAborted。已确认代理流控制器显式传入 RequestAborted。未确认具体模型提供方是否支持中途取消、何时停止计费。证据边界“源码没传令牌”与“模型一定继续跑到最后”不是同一句话后者还需要生产追踪与提供方账单回读。✦⑤ 这次真正跑了什么测试当前本地执行 5 项测试全部通过失败为 0。我在当前 Microi.Client 执行 npm run test:v8-ai5 项测试、5 项通过、0 项失败TAP 报告 634.7597 ms命令墙钟 3237 ms。流式用例真实喂入“你”“好”两个 message 分片、一个 result 与一个 done并检查最终结果和 Token 轮换。tests: 5 pass: 5 fail: 0 duration_ms: 634.7597 received [你, 好] result { Code: 1, Data: { Answer: 你好 } }测试没有证明什么这组测试证明 SSE 解析、身份字段清洗、结果组装和 Token 轮换它没有连接真实上游模型也没有测计费是否停止。✦⑥ 正确的产品设计是一套可对账的取消状态机取消不是一个布尔值而是一串可观测状态。给每次生成分配稳定 RequestId记录 started、cancel_requested、server_aborted、provider_acknowledged、completed。把 HttpContext.RequestAborted 继续传入业务层、HTTP 客户端与可取消的 SDK 调用不在中间换成新的无关令牌。区分提供方“支持取消”“连接断开即取消”“无法确认”三种合同避免统一写成成功。任务结束后回读模型结果、Token 用量或账单状态让取消成为可审计事实。如果只能关闭显示产品文案就写“已停止显示”不要写“模型已停止”。cancel_requested ├─ provider_acknowledged → cancelled_confirmed ├─ result_arrived_first → completed_before_cancel └─ no_authoritative_ack → cancelled_unknown unknown 不是 success也不应该盲目重试。设计原则把界面体验、连接生命周期、计算终止和费用结算拆开命名用户才不会被一个绿色“已停止”误导。✦⑦ 应该观测哪些指标要验证取消是否真的生效至少需要把客户端、服务端和模型提供方的时间线按同一 RequestId 串起来。只看浏览器控制台里出现 AbortError证据仍停在第一跳。cancel_click_to_fetch_abort_ms交互反馈是否及时。fetch_abort_to_server_aborted_ms断连是否被服务端感知。server_aborted_to_provider_ack_ms上游是否确认取消。tokens_before_cancel / tokens_after_cancel取消后是否仍持续产生用量。late_result_after_cancel_rate取消后迟到结果的比例与处理策略。实施提醒这些是建议新增的观测项不是本文声称 Microi吾码当前已经采集的线上指标。✦⑧ 结尾停止必须被逐层证明Microi吾码当前前端已经给了用户及时停止读取的能力SSE 也有清楚的事件格式与即时 Flush代理流还显式携带 RequestAborted。真正值得继续补强的是让普通 ChatStream 的取消语义一路贯穿并把提供方确认与用量对账纳入同一个请求状态。所以下次看到“停止”按钮时可以先问一句它停止的是页面、连接、服务端工作还是模型计算能回答到哪一层产品就只能承诺到哪一层。本文验证范围当前本地源码 SHA、行号与 2026-08-22 聚焦测试成立没有把源码分析冒充生产发布、真实提供方取消或账单验证。

相关新闻

DM在水平分区表建立索引:提升大数据环境下查询性能的关键技术

DM在水平分区表建立索引:提升大数据环境下查询性能的关键技术

一、DM水平分区表建立索引概述 1.1 DM数据库分区表的基本概念 DM数据库作为中国自主研发的数据库管理系统,其分区表技术允许将大型表数据分散存储在多个物理分区中,从而提高数据管理效率和查询性能。水平分区表是指按照特定条件将表的数据行划分到不同的…

2026/8/22 15:55:27 阅读更多 →
她把最后一颗种子送进风暴:18秒如何讲清选择与代价

她把最后一颗种子送进风暴:18秒如何讲清选择与代价

一颗种子、一个拉杆、一次个人记忆的熄灭:18秒只保留能改变世界的动作。 摘要| 《风眼种库》是一支原创18秒横屏电影短片:风暴逼近,21岁亚洲成年种库工程师必须在保住个人档案与重启城市清洁空气核心之间选择。她拉下释放杆&#…

2026/8/22 15:55:27 阅读更多 →
ComfyUI-VideoHelperSuite 教程:5步把AI图像序列变成能分享的视频

ComfyUI-VideoHelperSuite 教程:5步把AI图像序列变成能分享的视频

ComfyUI-VideoHelperSuite 教程:5步把AI图像序列变成能分享的视频 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 你刚生成的16张连续帧还躺在输出目录…

2026/8/22 15:54:27 阅读更多 →

最新新闻

AI Agent环境说服风险:非对抗性内容如何引发权限越界与安全防御

AI Agent环境说服风险:非对抗性内容如何引发权限越界与安全防御

1. 项目概述:当日常内容“说服”了你的AI最近在AI安全圈里,一个听起来有点科幻但又极其现实的话题被反复讨论:一个部署在真实环境中的AI智能体,仅仅因为接触了日常的、非对抗性的内容,就发生了未经授权的权限升级或行为…

2026/8/22 18:47:31 阅读更多 →
PDFgear实测:一站式免费PDF工具箱,从格式转换到批量处理全解析

PDFgear实测:一站式免费PDF工具箱,从格式转换到批量处理全解析

PDFgear 这个工具,最近在需要处理文档的圈子里讨论度挺高。它主打的是 PDF 格式转换、压缩和编辑,而且强调免费、无水印、无页数限制。这听起来确实解决了几个很实际的痛点:不想为偶尔用一次的功能付费、担心转换后有水印、或者文件太大被限制…

2026/8/22 18:47:31 阅读更多 →
多约束航迹规划:从文字描述到可计算数学模型的建模方法

多约束航迹规划:从文字描述到可计算数学模型的建模方法

1. 这道题不是在考编程,而是在考“如何把现实飞行约束翻译成数学语言”2019年“华为杯”研究生数学建模竞赛F题——《多约束条件下智能飞行器航迹快速规划》,标题里带“快速”二字,但真正卡住90%参赛队的,从来不是Python跑得快不快…

2026/8/22 18:47:31 阅读更多 →
YgoMaster:免费三步开一局游戏王大师决斗离线对战指南

YgoMaster:免费三步开一局游戏王大师决斗离线对战指南

YgoMaster:免费三步开一局游戏王大师决斗离线对战指南 【免费下载链接】YgoMaster Offline Yu-Gi-Oh! Master Duel 项目地址: https://gitcode.com/gh_mirrors/yg/YgoMaster 晚上想再试一把刚配好的卡组,但线上排队要等十几分钟,打输了…

2026/8/22 18:47:31 阅读更多 →
差分指数平滑法:国赛时间序列预测的实战利器

差分指数平滑法:国赛时间序列预测的实战利器

1. 项目概述:差分指数平滑法在国赛中的核心价值在准备全国大学生数学建模竞赛(国赛)的过程中,时间序列分析几乎是每个参赛者都必须跨越的一道坎。无论是经济预测、环境监测还是社会问题分析,数据往往以时间顺序呈现&am…

2026/8/22 18:47:30 阅读更多 →
Visual Studio Uninstaller:三步移除 VS 2012–2015 残留的免费开源工具

Visual Studio Uninstaller:三步移除 VS 2012–2015 残留的免费开源工具

Visual Studio Uninstaller:三步移除 VS 2012–2015 残留的免费开源工具 【免费下载链接】VisualStudioUninstaller Visual Studio Uninstallation sometimes can be unreliable and often leave out a lot of unwanted artifacts. Visual Studio Uninstaller is de…

2026/8/22 18:46:30 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →