Skip to content

[P1] 按模型错误类别限制重试并提供备用路径,避免额度拒绝和长超时阻断对话 #155

Closed

Description

@lyyzka

本轮验收范围更新(2026-10-20,依据用户 00:08 UTC 最新指示):继续完成基础能力、必要短测、审查及上线,并据实验收关闭;24 小时/更长 soak、完整负载、真实 provider 与全量 SPA 联合故障矩阵、供应商实际扣费凭证不作为本轮关闭前置条件,未完成项仍明确标为“未验证”,不会改写历史失败或计为通过。基础功能缺口仍须修复,不能仅修改文字关闭。

本 issue 的基础验收:错误分类、有限重试/总截止时间、取消与熔断、已授权备用策略、embedding 边界及共享账本可工作;隔离故障下反馈可恢复,下一条请求可继续。

本轮基础能力、必要短测、独立审查和生产上线已完成,依据最新范围验收关闭;交付 source 554e81ac / runtime3.5.6,详见下方2026-10-20完成回执。长期和完整矩阵未验证项保留为历史边界。2026-10-17 的“无需部署/停止生产操作”描述已被本次最新上线要求替代,下方原文与旧证据保留为历史记录。固定暂停的 3.5.3 soak 和已暂停自动核验保持不动;不做生产故障注入,不改凭据、安全设置或生产数据。

生产证据

2026-10-16 对保留账本的只读聚合:2,563 次 LLM 调用中 117 次 failed,不是 117 段失败对话。

错误类别 调用次数 已核对的影响
HTTP 402 68 30 次 knowledge-embedding;38 次 native 调用,其中 27 次合成为 9 个 memory_synthesis 失败,10 次对应 turn 失败,另 1 次 turn 最终 partial
timeout 36 34 次 structured 调用(部分后来成功),2 次 turn 约 300 秒后失败
model request failed after 1 attempts 3 约 90 秒,2 个 turn 最终 failed、1 个最终 succeeded;需保留底层原因
空 assistant/tool 响应 4 3 个 turn 后来 succeeded、1 个 partial,已有恢复有效
未完整结束的 stream/structured response 2 分别 partial/succeeded,不能算新增终态失败
用户取消 / 不再需要的 compaction 4 应单独归类,不作为供应商可用性失败

HTTP 402 和 timeout 是实际观察;旧账本没有保留上游错误 body/request ID,不能进一步断言一定是“余额不足”、哪个计费子项或供应商内部故障。当前发布后观察到的 5 个 work 均 succeeded,以上是历史失败与仍需覆盖的恢复场景,不声称当前仍有 402。

代码路径与缺口

当前镜像 9332947e099d27b7716236a99604fc548059f6ad 使用 LingxiOS 3.4.7;Worker 模型配置 配置单一 primary。native 的 execution/driver 和产品 共享 LLM 入口 已有重试;需要统一总预算和类别,而不是再叠一层通用重试。embedding 代理也走共享 ledger。

方案

  1. 建立稳定错误分类:网络/408/429/可恢复 5xx 允许有抖动的有限退避并尊重 Retry-After;认证/授权/402 等配置或额度拒绝不在同一账户上热重试。按 provider/model/credential scope 熔断和探测,避免每个后台 job 重复消耗失败请求。
  2. 同一 work 的所有 SDK/runtime/备用模型尝试共享最大次数与总 deadline;明确 first-byte、流空闲、单次与整轮超时,不再让一次前台请求无提示地等满 300 秒。取消必须向下传播并释放资源,用户取消不触发自动重跑。
  3. 仅在已批准的数据边界、价格和工具能力范围内使用预先配置的备用模型;它仍要经过共享预算、成本 ledger、原始授权和请求版本验证。没有可用备用时,提交真实 partial 或明确的失败状态;不伪造答案/执行成功。已提交工具写入不得因换模型而重放。
  4. embedding/检索故障要区分普通概念对话和必须依赖材料的任务。普通对话可标记检索不可用后继续;依赖来源的问题只能基于已有授权证据给有限答案或说明缺口。不得未经重建索引就混用不同 embedding 模型/向量空间。后台 memory synthesis/evaluation 独立退避,不占满交互并发。
  5. ledger 保留脱敏 provider code、HTTP status、request ID、attempt/elapsed、最终工作状态及 cause 分类;不记录 API key、prompt、原始响应正文。明确 402 的账户/模型配置核对流程,使下一次能查到真正原因。

验收

  • 在隔离 provider 故障注入中覆盖 402、429、503、断网、无首字节、半途断流、空输出、用户取消;断言请求次数/总耗时有上限、熔断有效、ledger 与费用一致、已提交写入只有一次。
  • 覆盖备用可用/不可用和 embedding 失败;已有空输出成功恢复行为不能回退。
  • 既有 runtime integration 加一轮受控真实 provider 验证;浏览器 E2E 通过 tester-army/e2e / @e2e-dev/web,保存脱敏调用时间线与可继续发送下一条消息的验证产物。

基础配置瓶颈另见 #153。

Activity

  1. lyyzka commented on Oct 17, 2026

    @lyyzka
    ContributorAuthor

    追加状态:PR171/172/173 已合并 main;精确发布包3.5.1/schema12、实际不可变镜像迁移、完整 SPA 的6项 session/network/PG/Web-restart验收及10项 runtime/identity联合浏览器验收已有脱敏持久证据。402=1次、timeout=3次、context/budget/cancel=0次,持久终态不伪造结果,重读不重复,下一条可成功。

    最新证据与边界:https://github.com/LingXi-Org/LingxiLoop/blob/cad71ff73779d0f866526e727415de5bc34156e9/docs/evidence/runtime-measurements/README.md

    仍保留 open:父任务已确认没有新增可用的既有 provider/pricing 配置,因此没有实际 provider 调用。生产 Worker bubblewrap 被执行器 user namespace 限制;自动 Komodo rollout 仍在首次连接时失败,无 update ID。上述缺口不能用 fixture、Web/API-only观察或 workflow 跳过状态替代,亦未创建凭据、扩权、手动部署或修改生产安全设置。

  2. lyyzka commented on Oct 17, 2026

    @lyyzka
    ContributorAuthor

    开发复查已补齐两处真实缺口:外层模型总超时现在保留 timeout/model_unavailable 分类并结算已发出的调用;semantic-memory embedding 的402/授权/429 insufficient_quota进入按provider/model/credential隔离的拒绝熔断,保持向量空间缓存标识不变。慢账本结算不会把先发生的模型超时覆盖成后来的根预算超时,调用者取消仍不重跑。

    上游 PR26/27 已合并并正式发布3.5.2/schema12;精确 main release-gates39015169232、publish39015407648均422/422。产品 PR174 HEAD faea44a3a092d2caff49527ae3753c7f7de2d0bf已安装注册表精确包和双锁文件;新增总超时集成从3.5.1红转绿,官方浏览器恢复11/11,服务端106/106。终态/后续请求/调用次数/结算/截图/视频见证据。最终PR CI进行中。

    仍未宣称受控真实provider验收:当前没有可用且已授权的provider配置、价格及调用/费用上限。此项保留开放;部署已按用户要求移出范围,不再探测Komodo或操作生产。

  3. lyyzka commented on Oct 17, 2026

    @lyyzka
    ContributorAuthor

    后续结果:PR174已普通合并到main ba9014958f7ab0dc0636a18edd1339d9e9e76e60,main CI39016358468 全部开发门禁和不可变server镜像发布成功;update-manifests/deploy/rollout均按用户要求SKIPPED,没有生产部署。3.5.2公开包与双锁已接线。最终证据。此前说明的外部验收边界不变,issue保持开放,未冒充真实provider/账单/完整24h通过。

  4. lyyzka commented on Oct 17, 2026

    @lyyzka
    ContributorAuthor

    3.5.2的完整SPA会话/人类消息恢复补验已完成:PR175已普通合并到main 06ba56169ae8796bf6e067f4eecca0064145a816,6/6、零失败/重试/跳过。真实新建的独立PG/Redis/WuKong/存储与Web/control/D1覆盖了session恢复/过期、网络中断、PG暂停、Web重启及两种401发送竞态;老发送不越权重放,后续发送一次持久落库。保留13截图/6视频及实际计数。证据与逐项验收映射。

    对153/155/157/161的复查未发现新增产品/runtime代码缺口,当前新增仅隔离夹具及证据。完整Worker预检仍有明确环境失败:宿主setting up uid map: Read-only file system,独立默认安全配置容器No permissions to create new namespace,均exit1;未扩权。受控真实provider/价格配置未提供。完整Worker/真实provider及费用/完整观察时窗仍属外部验收条件,保持issue开放。

    这次通过的是3.5.2完整SPA登录后会话/消息链路,不包括captcha登录、模型辅助完整Worker对话或3.5.2耐久验证。原3.5.1 Web/API soak未动、未改版本标签;既有06:50UTC独立复查任务已经核验启用,没有重复安排。部署继续排除。

  5. lyyzka commented on Oct 19, 2026

    @lyyzka
    ContributorAuthor

    2026-10-19 本轮验收继续:既有隔离回归与3.5.2 SPA证据仍按原范围有效;当前云环境已具备现有provider测试配置与生产只读运维访问,正在补充受控真实调用/费用及最终版本验收。不会将fixture、CI门控跳过或旧3.5.1未完成soak当作这些外部条件通过。当前仍保持开放;PR185已审查并合并,最终发布按本轮依赖统一编排。

  6. lyyzka commented on Oct 19, 2026

    @lyyzka
    ContributorAuthor

    阶段进度:补充的产品真实localhost HTTP故障矩阵已在PR192合并,429/503/断连/半流/空输出与既有402/超时/取消/准入/mention联合14/14、零跳过。实际provider工具续接/流式/账本证据另外保留在PR191;两者范围分别记录,不能相互冒充。最终正式runtime复验、生产发布及仍缺的完整Worker/真实模型SPA边界尚未全部完成,issue保持开放。

  7. lyyzka commented on Oct 19, 2026

    @lyyzka
    ContributorAuthor

    状态纠正:PR192 原说明中的否定句仍包含 GitHub 自动关闭关键词,合并时触发了关闭。现已移除该关键词并重新开放;14/14 隔离矩阵不等同于最终版本及完整 Worker/真实模型 SPA 验收,未验收边界继续按此前进度记录。

  8. reopened this on Oct 19, 2026
  9. lyyzka commented on Oct 19, 2026

    @lyyzka
    ContributorAuthor

    本轮代码与正式 LingxiOS 3.5.3 已随 PR194 / 成功发布流程 上线;生产版本/配置/readiness已核验。

    正式包 provider 证据保留首轮矩阵 13/14、1失败、0跳过:100ms总deadline用例预期服务收到1请求,实际0。其终态分类断言通过;之后同一源码、正式包和100ms阈值的单项复验 1/1,未重跑或重写首轮。首轮原因未被证明,不归因于未经证实的环境因素。最终源码CI另有281通过、0失败、21门控跳过,跳过不记作通过。

    受控真实 GLM-5.3-Flash 验收1/1,4次成功调用覆盖流式预览、工具续接及持久结果。完整产品 Worker/provider 故障与 SPA 联合边界尚未全部完成,故本 issue 保持开放;真实模型成功样本和正常上线不能替代该验收。

  10. lyyzka commented on Oct 20, 2026

    @lyyzka
    ContributorAuthor

    按用户2026-10-20最新范围,基础能力、必要短测、独立审查与上线已完成,验收关闭。

    模型错误分类、有限重试/总预算、取消、熔断和授权备用路径通过基础验收。已有业务实现随本次正式候选继续交付。

    • PR207:真实本地PostgreSQL/Redis与合成HTTP provider的14项产品用例全部通过;已授权备用共用一个root和两条账本,缺失或撤销授权时不会调用备用。
    • PR211:100ms预算在发送前过期时严格0次HTTP、1次reservation、1次timeout结算、1条反馈,下一条成功;独立in-flight用例严格3次HTTP、3次断开、3次失败结算,2/2通过。
    • 上游分类/重试/预算与embedding边界的专项证据见PR207 README;PGlite与真实PostgreSQL结果明确区分。

    生产已由正常 CI/CD 发布:source 554e81ac7fc59984d069a104d555adbf48092411,正式 runtime 3.5.6;精确 main CI/CD成功。Komodo 实际聚合回执为 Complete / success:true;四个 API/Worker 容器均为该 source 的同一已发布镜像、健康,当前 Docker OOMKilled=false 且 restartCount=0,两个同镜像迁移容器 exit 0,两轮 HTTPS 就绪/版本检查通过。镜像 manifest list sha256:ed3088feac9dacbfe6b639b6d6edd7b0b2c53a2b3ab58740a20f8b76e23aed56。产品迁移46/runtime schema12未新增;本轮没有重新通过直连SQL读取schema/lease,不能把迁移exit回执称为该项验证。

    交付:回调证据 · PR207 · PR208 · PR209 · PR211 · 上游PR32。

    未验证范围:真实供应商故障注入、实际扣费凭证、全量SPA联合故障矩阵未验证;合成provider结果不能证明生产供应商SLO。 固定暂停3.5.3观察与自动核验未触碰;未做生产故障注入、真实provider调用或凭据/安全配置变更。旧文中的长期/完整矩阵复选框保留作为历史边界,不标为通过。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions