快速结论:该问题发生在自托管 LobeChat 同时启用 Agent Gateway 与 Device Gateway 的场景下,网页端卡在「任务正在服务器运行」通常是因为 LobeChat 服务端所在的 NAS 无法主动访问阿里云 ECS 上的 Agent Gateway 推送端点;桌面端设备显示离线则与 Device Gateway 在自托管环境下的已知 Bug 有关。优先排查服务端到 Gateway 的 HTTP 连通性,并在确认前先使用 Agent Gateway 模式替代 Device Gateway。
适用环境:LobeChat v2.2.14-canary.26,LobeChat 本体部署在 NAS(FRP 内网穿透 + Nginx 反代),Agent Gateway/Device Gateway 部署在阿里云 ECS,客户端涉及 Web(Firefox)与桌面客户端(Electron),操作系统含 Android/Windows。
最快修复方案:暂无经过确认的一步修复方案。针对网页端卡顿,建议在 LobeChat 容器内执行 curl 测试到 Agent Gateway 的 /api/operations/push-event 端点连通性;针对桌面端离线,维护者建议自托管用户优先使用 Agent Gateway 模式而非 Device Gateway。
注意事项:以下解决方案部分基于 Dosu 的代码分析推理,Issue 中未给出实机验证的修复结果,建议按步骤逐一排查。
问题场景
用户自托管部署 LobeChat,将 Agent Gateway 与 Device Gateway 部署在阿里云 ECS 上,LobeChat 本体位于家庭 NAS 并通过 FRP 内网穿透暴露公网。开启 Agent Gateway 后,网页端无论发送什么消息,UI 永久卡在「任务正在服务器运行,您可以放心离开此页面」,但刷新页面后可以看到回复内容;桌面端手动修改 lobehub-settings.json 的 gatewayUrl 指向自部署 Device Gateway 后,开关显示绿色但设备仍显示离线,无法长时间保持在线。
报错原文
UI 永久卡在「任务正在服务器运行,您可以放心离开此页面」
设备仍显示离线,无法长时间在线
(未捕获独立报错代码,症状为王)
原因分析
两个问题根因不同,分开分析:
- 网页端卡住(问题 1):
AGENT_GATEWAY_URL承担双重角色。浏览器 → Gateway 通过 WebSocket 连接事件推送(已验证 101 握手成功),但 LobeChat 服务端 → Gateway 的 HTTP 推送链路可能中断。服务端通过GatewayStreamNotifier将 Agent 产生的事件 POST 到 Gateway 的/api/operations/push-event端点,如果 NAS 上的 LobeChat 容器无法主动访问阿里云 ECS 上的 Gateway 地址,事件无法送达,UI 就会一直等待。刷新后能看到回复是因为结果已写入数据库,只是实时推送丢失。 - 桌面端离线(问题 2):可能原因包括:LobeChat 服务端缺少 Device Gateway 相关环境变量(
MESSAGE_GATEWAY_ENABLED、MESSAGE_GATEWAY_URL、MESSAGE_GATEWAY_SERVICE_TOKEN);桌面端开关绿点仅是gatewayEnabled: true的意图标记,不代表实际 WebSocket 连接成功;自托管环境下 Device Gateway 存在多个已报告的路由/发现 Bug,维护者建议优先使用 Agent Gateway 模式。
环境排查
- 确认 LobeChat 容器内(非浏览器)能通过
AGENT_GATEWAY_URL访问 Agent Gateway 的/api/operations/push-event端点。 - 检查 LobeChat 服务端是否配置
MESSAGE_GATEWAY_ENABLED=1、MESSAGE_GATEWAY_URL、MESSAGE_GATEWAY_SERVICE_TOKEN。 - 核对 Gateway 容器的
LOBE_API_BASE_URL是否指向自托管实例公网域名(非默认 app.lobehub.com)。 - 确认 Nginx 反向代理配置包含
proxy_http_version 1.1、Upgrade、Connection upgrade、proxy_read_timeout 3600s。 - 确认阿里云安全组已放行相关端口。
解决步骤
- 在 LobeChat 容器内执行命令检查到 Agent Gateway 推送端点的连通性:
curl -v https://你的-agent-gateway域名/api/operations/push-event,若超时或连接失败,说明服务端无法主动访问 Gateway,需调整 FRP 隧道或 NAS 网络策略。 - 确认网页端问题是否由服务端 → Gateway 链路引起:若 curl 失败,则问题 1 根因确认;若 curl 成功,需进一步检查 Nginx 对该端点的转发日志。
- 针对桌面端离线,检查 LobeChat 服务端是否正确配置 Device Gateway 环境变量,若缺失请补齐并重启容器。
- 确认桌面端
gatewayUrl指向的是 Device Gateway 的域名而非 Agent Gateway,两者功能不同。 - 如排查无果,可优先尝试放弃 Device Gateway,改用 Agent Gateway 模式,等待后续版本修复 Device Gateway 的自托管 Bug。
验证方法
网页端:修复后发送任意消息,不应再卡在「任务正在服务器运行」,应能实时收到回复流。桌面端:设备在线状态应保持稳定,关闭重开客户端后设备仍显示在线,且开关绿点不再只是意图标记(需结合实际 WebSocket 连接状态判断)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


