
issue: streaming transmission cannot be stopped when using redis
快速结论:该报错出现在 Open WebUI 配置了 Redis 作为消息队列的场景下,用户在前端点击“停止”按钮后无法中断模型流式生成。优先排查 Redis 是否作为默认后端(如 Celery/Redis 消息代理)启用了异步任务队列,以及停止信号是否被 Redis 正确传递到后端生成进程。
问题场景
用户在 Docker 环境下运行 Open WebUI 0.10.2 版本,后端模型通过 Ollama 服务(或其他 LLM 后端)提供流式推理能力。用户在前端发起对话请求,模型开始流式输出 token,用户点击“停止”按钮期望中断生成,但实际流式传输无法停止,生成持续到模型主动完成。该问题仅在系统配置了 Redis 时触发;未启用 Redis 的环境下停止功能正常。
报错原文
No errors in the log
注:用户明确说明日志中无错误输出,停止按钮点击后 UI 无响应,后端继续生成。
原因分析
可能原因:Open WebUI 在使用 Redis 作为消息代理(如 Celery 任务队列或 WebSocket 消息中间件)时,前端发送的停止信号无法被正确路由到后端生成进程。具体地,停止生成操作依赖于一个终止事件或 cancel 消息,该消息可能需要通过 Redis 发布/订阅通道或任务控制接口传递;如果 Redis 的通道配置(如 key 命名、通道名不匹配)或连接池超时设置存在问题,取消事件可能丢失或未被消费。相关 Issue #26779 直接匹配此行为,确认停止按钮在 Redis 配置下完全失效。
环境排查
- Open WebUI 版本:0.10.2(用户已确认使用最新版,但建议升级到最新 Bugfix 版本)
- 安装方式:Docker
- Redis 配置:确认是否启用了 Redis 作为消息队列(如
USE_REDIS=true环境变量或 Docker 服务依赖) - Redis 连接字符串:检查
REDIS_URL格式是否正确(默认redis://redis:6379/0) - Celery/任务队列:确认是否启用了 Celery worker 并正确连接到 Redis broker
- 其他相关配置:
ENABLE_WEBSOCKET_SUPPORT、WEBSOCKET_MANAGER等
解决步骤
- 升级 Open WebUI 至最新版本,检查 Release Notes 中是否有针对 Redis 停止问题的修复。
- 临时移除 Redis 配置(如设置
USE_REDIS=false或取消 Redis 服务绑定),重启容器,验证停止按钮是否恢复正常工作——这可以确认问题确实由 Redis 引入。 - 如果必须使用 Redis,检查 Docker Compose 配置中 Redis 服务与 Open WebUI 容器之间的网络连通性,确保
REDIS_URL可访问。 - 可优先尝试:确认是否在 Open WebUI 配置中启用了
ENABLE_WEBSOCKET_SUPPORT=true,并且 WebSocket 管理器(如 Socket.IO 适配器)正确使用了 Redis pub/sub 通道(配置SOCKET_IO_ADAPTER=redis)。 - 检查 Redis 消息通道名称是否与 Open WebUI 内部使用的命名一致(如
open-webui:*)。如果使用了自定义 Redis 命名空间,可能在取消事件传递时不匹配。 - 查看 Open WebUI 容器内
/app/backend/data/log下的日志,启用LOG_LEVEL=DEBUG重新测试停止操作,观察是否有与 cancel 事件相关的日志条目。 - 确认 Celery 或后台任务 worker 能正确消费 cancel task——在
docker exec中手动触发一次取消测试。
验证方法
确认步骤:移除 Redis 配置后,前端点击停止按钮,流式输出应在 1-3 秒内中断,UI 显示生成停止状态。重新启用 Redis 后,同样操作应不再卡住。如果升级版本后仍无法修复,建议在 GitHub Issue 中补充 Docker 完整配置和 docker-compose.yml 片段。



