issue: streaming chat fails with KeyError ‘started_at’ when a Responses API stream ends on a reasoning item

该报错发生在 Open WebUI 通过 Responses API 流式接收模型输出,且最后一个输出项为 reasoning 项(模型全程只输出思考内容、无最终文本)时。优先检查后端日志中是否出现 Error processing chat payload: 'started_at' ,并确认该流

快速结论:该报错发生在 Open WebUI 通过 Responses API 流式接收模型输出,且最后一个输出项为 reasoning 项(模型全程只输出思考内容、无最终文本)时。优先检查后端日志中是否出现 Error processing chat payload: 'started_at',并确认该流是否以 reasoning 项作为最后一个 output_item。

适用环境:Linux、Open WebUI dev 分支(commit 7229fac0c),Docker :dev 镜像与 Git Clone dev 源码均可复现;不涉及 Ollama。

最快修复方案:暂无确认的一步修复方案。官方已标记为 confirmed issue,需等待上游修复。

注意事项:该问题为服务端故障,非前端显示问题;使用 started_at/ended_at 字段的 Responses API 提供商(如 GroqCloud)可能更容易触发。

问题场景

用户通过 Open WebUI 连接一个兼容 OpenAI Responses API 的模型提供商(原始复现使用 GroqCloud 的 qwen/qwen3.6-27b)。当模型在一次对话中只产生 reasoning 内容、没有输出最终的 assistant message 文本时,整个聊天回合崩溃:后端日志出现 Error processing chat payload: 'started_at',消息被保存为错误状态,用户界面在思考块结束后看到原始报错字符串 'started_at'

报错原文

Error processing chat payload: 'started_at'
message saved as error: {"content": "'started_at'"}
issue: streaming chat fails with KeyError 'started_at' when a Responses API stream ends on a reasoning item

原因分析

可能原因:Open WebUI 在处理 Responses API 流式事件时,对最后一个输出项做了 started_at / ended_at 字段的强制读取或删除操作。当流以 reasoning 项结束时,该 reasoning 项来自服务端的 item 结构中不包含 started_at/ended_at 字段(原始 Issue 明确说明成功回合中存储的输出项仅携带 resp_... 格式的 item id,不含这两个字段),导致代码尝试访问不存在的键而抛出 KeyError

原始 Issue 中通过构造一个 SSE 序列稳定复现:流在 response.output_item.done 之后立刻发送 response.completed 并结束,期间没有任何 assistant message 文本项。

环境排查

  • Open WebUI 版本:确认为 dev 分支 commit 7229fac0c(原始复现时最新)
  • 安装方式:Docker :dev 镜像,或 Git Clone dev 源码
  • 操作系统:Linux(服务端故障,与浏览器无关)
  • 模型提供商:OpenAI 兼容 / Responses API 连接(如 GroqCloud),不涉及 Ollama

解决步骤

  1. 复现确认:使用 Issue 中提供的 stub SSE 序列(一个 /v1/chat/completions 端点,依次返回 response.output_item.addedresponse.reasoning_text.deltaresponse.output_item.doneresponse.completed[DONE]),确认最后一个 output item 是 reasoning 且无后续 assistant 文本。
  2. 查看后端日志:确认是否出现 Error processing chat payload: 'started_at'
  3. 检查存储的消息记录:消息内容是否为空、error 字段是否为 'started_at'
  4. 等待官方修复:该 Issue 已标记为 confirmed,需关注上游 dev 分支更新;可优先尝试升级到最新 dev 版本验证是否已修复。
  5. 临时规避(未验证):若生产环境受影响,可尝试更换为不返回 reasoning 项或会追加空 assistant 消息的模型配置,但此方案在 Issue 中无明确证据,仅作为临时手段。

验证方法

构造 Issue 中提供的 stub SSE 端点,连接一个 OpenAI 兼容模型后发送任意消息。若修复生效,后端日志不再出现 KeyError 'started_at',聊天界面在思考块正常闭合后不显示错误 toast,消息记录中 error 字段为空且内容不为空(或按预期保留 reasoning 块)。

参考来源

open-webui/open-webui #28871

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19664

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注