重试分三层不要整体重跑.md
| 层级 | 重试的是 | 好比 |
|---|---|---| | 模型调用重试 | 只重发那一次 AI 请求 | 打电话没通,重拨 | | DB 写入重试 | 只重试那一次数据库操作 | 存文件失败,再存一次 | | turn 整体重试 | 把「写消息 → 跑模型 → 落库」整轮从头再来 | 整通业务流程推倒重办 |
为什么整体重跑要交给用户而不是服务端
一个 turn 里可能已经产生副作用:模型已调用、token 已扣、提案已建。服务端盲目自动重跑整轮有重复执行与重复计费的风险。所以现在的设计是:turn 整体重来由用户点「重新尝试」触发,服务端不自动做。
推论:健壮性改进优先补最底层那格(给 DB 写入加重试),这样冷启动首发能无感通过,又不去碰「整轮自动重跑」那块有副作用风险的区域。
turn 是什么
一轮对话回合:turns.begin(写用户消息 + 建 turn 租约)→ runtime.run(调模型、模型决定调工具、生成回复)→ turns.complete(回复/提案/引用落库)。三步全成功才算这个 turn 成功,中间任一步失败整轮判失败。
相关
- 只有第一发失败要查冷启动与连接重试
- 保存失败要落本地草稿并自动重试
- 阻塞式工具与提案确认
- 长任务不要用固定超时判定
- 整体时限不能当首字节时限用