跳到主要内容

为什么稳定的 AI 功能通常不像 Demo:真正上线前要多补哪几层

· 阅读需 5 分钟
一介布衣
全栈开发者

AI Demo 最迷人的地方,是它总能让人很快看到“这事可行”。屏幕上字在流、结果也能出,十分钟就能把人打动。可真正把一个功能从 Demo 做到长期可用,体验上往往反而会变得没那么惊艳。不是产品退步了,而是你开始被真实用户教育。

我对这件事最强烈的感受,其实来自那些上线后一周内就会冒出来的反馈。它们通常都不复杂,甚至很日常:

  • “它到底是卡住了,还是还没结束?”
  • “我刚才那次怎么又重试了一遍?”
  • “这个输入明明挺普通,怎么就答飞了?”
  • “为什么昨天还能用,今天突然要人工审?”

这些反馈很少会告诉你“你缺少一条幂等键”或者“你应该补评测门禁”。但如果沿着它们往回查,最后几乎都会落到这些层上。

Demo 为什么总让人误判系统已经差不多了

因为演示时默认一切都对系统友好:

  • 输入是干净的
  • 网络是稳的
  • 工具不会挂
  • 使用者也足够耐心

可一旦到了真实环境,最先冲进来的不是“更大的规模”,而是更脏的现实。

第一层:输入边界不是附属品

演示时大家总会给系统相对整洁的输入。上线以后,最先撞上的往往就是这些东西:

  • 缺字段
  • 乱码
  • 超长文本
  • 带隐私信息的原始内容

所以我现在很难相信一个没有输入边界的 Demo 能直接变成稳定功能。输入校验不是锦上添花,而是第一道真正把“随机发挥”压住的边界。

第二层:超时、降级和重试不会因为你不想看见就不存在

Demo 阶段最容易假装不存在的一件事,就是等待。可真正上线以后,你很快就会被等待教育。像 对话产品前端,为什么流式输出体验值得单独设计 里那种“它到底还活着吗”的焦虑,只要你做过流式、检索、工具调用链,就一定会遇到。

这时候问题就不会再是“模型慢一点也没关系”,而会变成:

  • 多久算超时
  • 超时后给用户什么反馈
  • 要不要切备用模型
  • 是重试,还是转人工

这些问题如果没先想,功能其实还只是一个漂亮样例。

第三层:评测门禁决定你是不是在盲发

我越来越不喜欢“这次看起来还行,就先上吧”这种发布方式。因为 Demo 的侥幸成功太容易骗人。它会让人误以为系统已经可用,实际上只是你还没遇到那批最坏样本。

所以我现在看一个 AI 功能是不是已经脱离 Demo,第一反应不是“演示效果如何”,而是“新版本上线前到底有没有过门禁”。它至少要回答:

  • 新版本比旧版本差没差
  • 差在哪类样本上
  • 这是偶发异常,还是系统性退化
  • 退化以后有没有明确的回退动作

如果没有这层东西,很多发布其实都只是在赌。

第四层:人工兜底不是失败,而是系统成熟的一部分

很多团队在早期会把人工接管理解成“系统还不够好”的象征。我现在反而越来越愿意把它看成正式能力的一部分。真正危险的从来不是系统偶尔判断不准,而是判断不准之后根本没有出口。

像审核、内容改写、知识问答这类功能,只要你真的让用户长期使用,就会发现人工兜底不是“最后的耻辱线”,而是第一条责任线。

所以我现在会用一条更现实的链路判断它是不是稳定功能

一个功能在我这里要更像正式能力,至少要补齐下面这几步:

  1. 请求进入前先做输入验证。
  2. 模型调用带超时、重试和降级策略。
  3. 新版本先过评测门禁再放量。
  4. 关键场景保留人工接管路径。

只要缺其中两层以上,我大概率仍然还会把它视为 Demo。

而真正的稳定功能,往往会主动做很多听起来一点都不酷的事:

  • 遇到不确定输入时不乱答
  • 遇到高风险样本时转人工
  • 遇到超时不死等
  • 遇到评测退化时不放量

这些动作不会让演示视频更惊艳,但会让真实用户少踩很多坑。

所以我现在对 Demo 和稳定功能的区别,也已经没有那么浪漫的理解了。Demo 证明的是可能性,稳定功能证明的是组织已经愿意为可靠性付出工程成本。真正稳定的 AI 功能,往往都不长得像 Demo,因为它背后多了很多克制、兜底和边界控制。

而恰恰是这些“看上去没那么酷”的层,决定了一个功能能不能活过第一轮真实用户、第一轮模型波动和第一轮线上事故。