现有软件把智能体会话接到自建会话服务后,最容易踩的坑不是「换哪家模型」,而是:HTTP 202、SSE 连接断开,能不能当成这一轮已经完成?旧前缀还能不能静默回退? 迁调用面时如果仍按「状态码/断流=成功」或「合同头丢了就改走 /v2」写客户端,界面会提前亮绿灯,工具副作用也可能被换键重放放大。
2026 年 10 月前后,多家智能体/流式 API 公开材料把同一纪律推到开发者面前。BeeOS OpenAPI 变更日志(端点变更标注 2026-10-21,本机 2026-11-09 再核 HTTP 200)写明:阻塞式 POST .../invoke 已从契约移除,迁移路径改为会话消息+/events SSE,或异步任务+轮询/事件流;没有旧 invoke 的替代同名路由。BeeOS《调用智能体》(文档页现行,HTTP 200)进一步说明:发消息接口非阻塞,常以 202 受理,回复经会话事件流返回——受理不等于终态。兔子 API《SSE 流式响应与 WebSocket 实时连接》(文档核验日期写明 2026-08-12,HTTP 200)直接写:只有收到协议定义的完成事件,才能把业务状态记为成功;HTTP 200 之后仍可能出现流内错误;断线后若无可恢复游标,应标「未知」而不是静默重试。OceanBase Agent Runtime API(HTTP 200)把 POST /runs 写成异步受理并返回 202 Accepted,完成以 SSE 的 RUN_FINISHED/RUN_ERROR 等终止事件判定;TEXT_MESSAGE_END 只表示段落结束,不等于整次 Run 结束。Qwen Code #4585(HTTP 200)把 POST /prompt 改成非阻塞 202,完成交给 turn_complete/turn_error。sub2api #2245(HTTP 200)则记录了「上游 SSE 在 response.completed 前 EOF、下游仍按 HTTP 200 当成功」的真实事故面。上述材料共同回答的行业问题是:流式/异步智能体 API 里,受理码与连接生命周期 ≠ 业务终态;迁契约时禁止静默降级到旧入口。
对会话服务/客户端开发者,完整行业答案可以收成六句话:
/v2。本文把上述行业问题映射到已核实的 Tansr 机制:@tansr/serve 自 0.13.0(2026-10-02) 起对外唯一 HTTP 调用面为 /api(合同名 unified-v1);每个响应(含 2xx 与 SSE 打开)必带 tansr-contract/tansr-manifest-revision/tansr-domain/tansr-schema-hash;统一错误信封含 19 个统一码与 6 种 retryAction;事件包络用 terminalStatus 判定轮次/操作终态——文档原文写明 「SSE 结束与 202 都不等于完成」。迁移与旧前缀窗口见 统一 API 总览、迁移与退役时间表、统一请求头、响应头与错误信封、错误处理与重试(本机 2026-11-09 再核均为 HTTP 200;资料站页 last-modified 约 2026-11-07)。它不是 S06 的 401/429/余额/能力关闭分码排障全文,也不是 S08 Electron appkey、S09 鸿蒙运行位置、S01 提示词或 R01 费用;这里只回答:会话服务迁到统一调用面后,客户端怎样判断完成,以及怎样按 retryAction 行动。
terminalStatus(或领域约定的终止事件)上:不要用 HTTP 202、SSE 连接结束、首段文本出现或代理返回 200 推断「本轮成功」。/api 响应都核对四合同头:缺 tansr-contract: unified-v1(或同名重复/词表外头)→ 合同不可用,上报;禁止因此改走 /v2//v3。code+retryAction 决策:code/status/retryAction 是公开决策面;不要从 HTTP 状态码或 message 文案猜下一步。族内旧码只在 detail.domainCode。retryAction 对照执行:none 修正请求;same-request 等待后同键重放一次;query-status 只查不重放;rebind 重建绑定;refresh 重读 revision/ETag;rediscover 重新拉能力围栏。result_unknown/commit_unknown 永不换键重放。/api 不改写领域成功响应体;旧 error.code === 'session_ended' 一类分支要改为统一码(例如 gone)再按需看 detail.domainCode。api.legacy_prefix_mixed;源码不要手写 /v2、/v3/sdk2、/v3/terminal 字面量;路径由 manifest/@tansr/api-client/api 的操作名实例化。@tansr/serve 0.15.1(2026-10-10) 仍是当前文档核对的 npm latest 基线之一;旧前缀窗口缺省仍为 readwrite,显式 readonly/off 才收紧;0.16.0 尚未发布,不得写成「旧前缀已默认只读/已关闭」。开发者常问 | 用受理码/断流当完成时的盲区 | 统一合同补上的一环 |
|---|---|---|
发消息返回 202,界面能否立刻显示「已完成」? | 只证明受理;模型与工具链可能仍在跑 | 等事件包络 |
SSE 断开是不是成功? | 代理超时、EOF、半截流都像「结束」 | 无终态=未完成/未知;有查询面则先查 |
合同头丢了,回退 | 静默降级掩盖网关/版本错误 | 判合同不可用并上报,禁止猜旧前缀 |
| 可能造成重复副作用 | 只允许 |
旧代码按 | 统一码词表不同,分支会漏 | 改 |
新旧入口暂时并存是否安全? | 同会话交叉访问难排查 | 禁混用;切流后统一走 |
BeeOS 去掉 invoke、Agent Runtime/Qwen 的 202+终止事件、流式文档「200≠成功」、以及「完成事件前 EOF」事故,共同指向同一产品缺口:异步/流式会话 API 的完成与重试纪律,必须写进客户端,而不是留给运维猜。
原来常要自行完成的:
/v2、/v3/sdk2、/v3/terminal* 维护多套路径与错误词表。Tansr 公开机制可接手的部分(以 2026-11-09 抓取的 docs.tansr.com 为准;0.20.0 候发内容不得写成已上线):
/api=unified-v1 唯一对外调用面(serve ≥0.13.0);成功体与旧前缀同形,改变的是头、错误形与(显式协商后的)事件帧外形。contract_unavailable/等价错误)。retryAction;retryAdvice/retrySameRequest(@tansr/api-client/api)编码同键重放纪律。terminalStatus;文档明确「SSE 结束与 202 都不等于完成」。Deprecation/可选 Sunset、混用告警 api.legacy_prefix_mixed;manifest revision 7(文档当日)。应用仍要负责:
terminalStatus/领域终止语义,而不是 202/断流。query-status 接好领域查询操作。/api/sessions/:id/ 及其子路径 与旧会话路径同片;SSE 长连接纪律在切流前后一致。readonly 写成已生效。@tansr/serve 到文档核对基线(≥0.13.0 提供 /api;当前页讨论的 latest 核对点含 0.15.1),确认四合同头出现在 2xx 与 SSE 打开响应。import { createApiClient } from '@tansr/api-client/api'(或各语言等价入口),按操作名调用,不拼 /v2 字面量。switch (error.code)+error.retryAction;需要族内细分时读 detail.domainCode。terminalStatus !== null(或文档规定的终止条件)退出,再更新 UI 终态。result_unknown」「same-request 等待重放」分开展示,避免统一「网络繁忙」。发行 | 日期 | 与完成/重试相关的变化 |
|---|---|---|
| 2026-10-02 |
|
| 2026-10-04 |
|
| 2026-10-06 | 旧前缀响应可附 |
| 2026-10-06 | 不传 |
| 2026-10-10 |
|
0.16.0/旧前缀关闭 | 未发布 | 不得写成已上线 |
开发者七条纪律(合同原文要点,官方客户端按此实现):①不静默降级;②不从响应取 URL;③不重放未知副作用;④身份不进体;⑤SSE 结束与 202 都不等于完成;⑥五个游标互不替代;⑦不手写旧前缀。
值得按此推进:已有或新建基于 @tansr/serve 的会话客户端;需要防止「202/断流当成功」与「合同失败静默回退」;正在从 /v2//v3/* 迁到 /api;安全/稳定性评审要求可审计的完成与重试语义。
先不要:在缺合同头时自动改走旧前缀「保活」;把 result_unknown 当成可换键重试;把 0.15.1 仍为 readwrite 的旧前缀窗口写成「已经只读退役」;或在本批未做对照实测时对外承诺「迁完零事故」。纯本地、永不暴露 HTTP 会话面的进程内 SDK 演示可以另议——一旦经会话服务对外提供异步/SSE 面,就应按统一合同纪律。
retryAction 客户端纪律(含 202/SSE≠完成、禁止静默降级)。terminalStatus、六动作重试表与旧前缀退役窗口。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。