issue: a coding agent reply saves the whole chat about once a second, so disk writes grow with the length of the chat

issue: a coding agent reply saves the whole chat about once a second, so disk writes grow with the length of the chat。这类问题通常出现在 Open WebUI 接 Open Term

快速结论:issue: a coding agent reply saves the whole chat about once a second, so disk writes grow with the length of the chat。这类问题通常出现在 Open WebUI 接 Open Terminal 运行编码代理(如 Pi)的长时间回复场景,代理流式输出期间整段聊天被约每秒写入一次数据库;优先排查代理回复的持久化写入频率与聊天长度是否挂钩。

适用环境:Open WebUI v0.13.3 与 dev(c15f28649),默认设置;数据库为 SQLite(WAL 模式,默认)及 PostgreSQL 16;Open Terminal 0.17.7;Agent 为 Pi 1.5.2;代理连接的是本地测试模型,每秒流式输出 40 个小片段。Issue 未提供操作系统、Python、CUDA 与显卡信息。

最快修复方案:暂无确认的一步修复方案。该问题在 dev 分支上已修复,报告者复测显示代理回复不再在流式过程中保存整段聊天;如需修复,可优先尝试升级到包含该修复的 dev 版本,并以上述复测数据作为判断依据。

注意事项:Issue 与评论未给出修复对应的具体提交、版本号或配置项,升级前需自行确认目标版本包含该修复;单纯降低保存频率只能降低写入速率,写入量仍会随聊天长度增长,Issue 正文明确指出这不满足修复要求;PostgreSQL 环境虽已复现同样模式,但复测中 PostgreSQL 的改善数据前后描述存在差异,需以实际环境验证为准。

问题场景

在 Open WebUI 中使用默认 SQLite 数据库,并连接已安装编码代理(Pi)的 Open Terminal,选择该终端与代理模型后发送需要思考或输出 20 秒以上的消息。用户通过读取 /proc/<pid>/io 的 write_bytes 行,或观察数据目录下 webui.db-wal 的变化,发现代理回复期间 Open WebUI 约每秒保存一次完整聊天,且每次保存都会重写全部历史消息。对照普通模型,同样时长的回复总共只保存 4 次。代理聊天因工具调用及其输出被一并存入回复而迅速变大,一次包含三个各输出 2 KB 的工具调用,单条回复即被存为 42 KB。

报错原文

issue: a coding agent reply saves the whole chat about once a second, so disk writes grow with the length of the chat

原因分析

从复现数据看,代理回复的保存节奏跟随时间而非流式速度:在 0.44 MB 的聊天中,代理以每秒 10、40、160 片段输出时,写入速率分别为 0.81、0.72、0.89 MB/s;回复时长翻倍,保存次数也翻倍(40 秒回复保存 44 次,普通模型仍为 4 次)。因此可能原因是:代理回复路径在流式过程中按固定时间间隔持久化整段聊天,而普通模型只在有限的几个节点保存。写入量随聊天已长度增长,因为每次保存都包含全部历史消息。Issue 正文强调,仅降低保存频率不会消除随聊天长度增长的问题。评论显示 dev 上代理回复已不再在流式过程中保存整段聊天,剩余保存为每次回复一次,与普通模型一致,说明修复点在代理回复的持久化触发逻辑上,但具体实现未在讨论中说明。

环境排查

  • 确认 Open WebUI 版本:v0.13.3 与 dev 均可复现;修复出现在 dev 之后的版本。
  • 确认数据库类型与模式:SQLite(WAL,默认)与 PostgreSQL 16 均复现同样模式。
  • 确认 Open Terminal 版本:0.17.7。
  • 确认代理及版本:Pi 1.5.2,连接每秒输出 40 个小片段的本地测试模型。
  • 确认聊天规模与代理是否包含大量工具调用,这决定单次保存的体量。
  • Issue 未提供操作系统、Python、CUDA、PyTorch、显卡信息,无需作为排查前提。

解决步骤

  1. 先在问题环境中确认现象:代理回复期间按秒读取 Open WebUI 进程的 write_bytes,或观察 webui.db-wal 的增长;同时在同一大小的聊天中向普通模型发送同等长度消息作对照。
  2. 记录代理回复的保存次数与聊天大小的关系;若保存次数随时长增长、且每次整段聊天被重写,则与 Issue 描述一致。
  3. 可优先尝试切换到包含该修复的 dev 版本(或更新版本),Issue 在 dev 上已验证修复后关闭。
  4. 升级后按相同方法复测:代理回复的保存次数应降到与普通模型相近(每次回复一次),流式中的写入不再随聊天长度增长。
  5. 若无法升级,可优先尝试迁移到 PostgreSQL 观察是否缓解,但 Issue 显示 PostgreSQL 同样存在该模式,不应视为修复手段;仅调低保存频率也不满足修复要求。

验证方法

参考评论中的复测方法:在相同大小的聊天中让代理进行 20 秒回复(800 片段),统计聊天保存次数与进程写入量;修复后 0.44 MB、1.75 MB、4.4 MB 聊天分别约为 6 次 4.6 MB、6 次 18.0 MB、7 次 53.6 MB,普通模型约为 4 次 3.3 MB、4 次 12.9 MB、4 次 35.6 MB。将 1.75 MB 聊天的回复延长到 40 秒,保存次数应仍为 6 次、写入约 16.5 MB。PostgreSQL 下 1.75 MB 聊天应约为 6 次更新、4.3 MB WAL。同时确认回复过程中刷新页面、打开第二个标签页或重新连接,仍能正常看到流式输出。

参考来源

open-webui/open-webui #34062

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34209

发表回复

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