为什么 AI 项目卡在 Demo 和生产之间
从"能跑一次"到"每天都在跑"之间的那几步——以及怎么在一开始就规划好。
上线之前,先说明失败后业务怎么继续
演示通常沿着准备好的输入走完一条路径。真实服务还会遇到依赖超时、拥塞、重复点击、用户取消和资料更新。把这些情况写进业务验收,比先承诺某个上线周期更有价值。准备上线的范围应说明谁使用、允许什么动作、何时转人工,以及谁有权暂停服务。
说明用假设例子,非真实客户案例或容量承诺。 假设一个内部助手查询知识库后创建售后工单,试点从
5位用户扩大到50位。逻辑任务task-42已在工单系统创建记录,但返回途中断开。用户看到超时后再次点击,随后又点取消。如果系统把每次点击都当成新任务,可能创建重复工单;即使取消按钮变灰,外部记录也不一定被撤回。
用一次失败,把依赖链拆出来
为这条流程画出身份服务、知识索引、模型、任务队列和工单系统。沿同一个任务编号记录排队等待、每段调用耗时、重试、版本和最终状态,日志尽量不保存原始客户内容。先查请求停在哪段,再决定修模型、连接、配额还是业务流程。
| 出问题的环节 | 应诊断什么 | 业务应如何继续 |
|---|---|---|
| 身份或权限服务不可用 | 身份是否仍可确认,权限是否过期 | 不能确认权限就停止受保护操作,不默认放行 |
| 索引更新失败 | 源文档与索引版本是否对应 | 暂停依赖新资料的回答,提供人工核对 |
| 模型限流或不可用 | 配额、并发、等待与重试是否叠加 | 有限排队/退避,超出任务期限后清楚转交 |
| 工单写入结果未知 | 是否已产生外部记录 | 先查状态,不直接再创建 |
| 突发请求积压 | 队列年龄、在途任务和最慢依赖 | 限流、拒绝或延后新任务,不无界排队 |
从 5 到 50 位用户不等于简单乘算模型容量:一个任务可能有多次调用,重试也会占资源。用代表性并发和慢依赖演练排队、取消、成本及失败行为,先确定允许的队列与任务时限,再决定放量。
重试、重复与取消是不同的问题
给同一逻辑意图分配稳定任务编号,重试沿用相同的幂等标识,并保存请求摘要和结果状态;不能仅按提示词文本去重,否则合法的相似请求也可能被压掉。若外部系统支持幂等,应核对其范围与有效期;不支持时,用状态查询、受控串行或人工核对降低重复风险,不能宣称实现无条件“恰好一次”。
超时只说明客户端没有及时拿到结果,不说明外部操作没发生。task-42 应先查询已创建记录,再决定返回原结果或补偿处理。有限重试和退避的原则可参考 AWS 关于超时与重试的说明。
取消应区分停止等待、停止后续步骤、请求上游取消,以及撤销已经完成的外部动作。保存 cancel_requested 后仍要处理迟到结果;无法确认完成或取消时记录 unknown,进入核对队列。已创建工单需要单独的关闭或补偿流程,不能因为界面显示取消就假装从未写入。
资料更新与回退都要有边界
版本记录应覆盖代码、模型、提示词、索引、权限策略和工具结构。资料负责人批准更新后,验证新版本已入库、旧缓存失效、引用可访问,再重新运行受影响样本。切回旧代码时不能顺带恢复已撤回的权限或失效政策;必要时先关闭受影响功能。
模型回退也要核对处理地区、费用、工具参数和回答行为。没有批准的替代路径,就明确提示稍后再试或转人工。撤回发布之前,应说明在途任务如何暂停、排空或核对,不能只切回页面或提示词;外部副作用由其责任人另行处理。
发布评审可以直接复用的门槛清单
- 业务负责人: 确认允许场景、人工兜底和失败提示,先开放只读,再按验收决定是否增加建议或写入。
- 数据与安全负责人: 确认版本、权限、日志和处理边界;撤权失效、越权读取或未经确认的写入应阻止放量。
- 技术负责人: 演练依赖故障、重复、取消、迟到回调与容量不足,提供任务状态和核对证据。
- 运维负责人: 事先写明暂停条件、可恢复版本、开关与回滚步骤,明确在途任务及外部记录的处理人。
- 共同验收: 约定质量、等待、费用和数据更新门槛;任何关键项没有负责人或可复核结果,就继续限制试点范围。
上线决定应来自这些证据和责任安排,不来自“已经跑通”或固定天数。逐步扩大使用,才有机会在故障影响仍可控制时修正流程。