接 AI 对话前端要兜住的 6 种异常态

5 阅读2分钟

做 AI 对话功能,正常流程谁都会写。真正决定体验好坏的,是异常态有没有兜干净。我把上线后被用户和测试轮番教育出来的 6 种异常态列一份清单,照着兜,能少挨不少骂。

1. 请求超时 / 模型半天不吐字

模型偶尔会卡,首字迟迟不来。别让界面无限转圈。我设了 15 秒兜底:超时就把"思考中"换成"AI 好像走神了,点这里重试",给用户一个明确出口,别让人干等。

2. 流式中途断流

SSE 读到一半连接断了,前面已经渲染了半句话。这时别把半句话留在那像没事一样。我会在最后一条消息尾部追一个浅灰的"(回答被中断)"标记,并保留"继续"按钮。用户知道发生了什么,比悄悄断掉强。

3. 内容审核拦截

问到敏感内容,后端返回的是审核拒答而不是正常回复。前端要识别这个状态码,给一句温和的"这个问题我暂时没法回答",而不是把后端的原始错误 JSON 糊到对话框里。

4. 空回答

模型偶尔返回一个空字符串或纯空格。如果不判空,界面上就出现一个空的 AI 气泡,特别诡异。收到空内容时,我替换成"没太理解,换个说法再问问?"。

5. 超长输入

用户粘贴一篇几千字的文档进来。前端先做字数预检,超限当场提示并截断或拒绝,别等请求打到后端再报 400,那时候用户已经等了一圈了。

6. 网络离线

navigator.onLine 为 false 或 fetch 直接抛网络错误。这种要和"模型出错"区分开——文案给"网络断了,连上再试",而不是甩锅给 AI。

一点实话

这 6 条里,2 和 4 是我上线后才被测试同学逐个挖出来补的,当初自测根本没覆盖到,因为正常用很难触发。建议提前对着这份清单写用例。

模型这层我走的讯飞 MaaS,省了自建推理的麻烦,腾出手专门磨这些异常态。你们还兜过哪些奇葩状态?评论区补充,凑个更全的清单。