标准答案
- 除了输入值和提交状态,还要管理会话、消息版本、流式增量、生成状态、工具调用、引用、错误、取消和重试等状态。
- 消息应区分用户消息、模型消息、工具事件和系统事件;模型消息可以处于 pending、streaming、completed、failed 或 cancelled,而不是提交后立即当成完整文本。
- 前端展示状态必须以服务端事件和任务状态为准,刷新或重连后能从服务端恢复,不能只把当前文本放在组件局部状态里。
题目解析
AI 输出是一个过程,不是一次响应。状态模型要防止旧请求覆盖新消息、重复追加分片和错误状态被成功事件覆盖。
对话列表和单条消息最好使用稳定 ID 与版本号,重新生成产生新响应版本,不直接覆盖原答案,便于用户比较和审计。
工具过程是否展示取决于产品,但服务端事件仍应存在;页面隐藏中间步骤不代表系统可以不记录。
常见误区
- 用一个 isLoading 控制整个会话,导致多条消息并行时互相覆盖。
- 把每个增量直接拼到最后一条消息,没有校验请求 ID。
- 刷新页面后所有生成状态丢失,无法判断任务是否仍在执行。