
bug: searchUserMemory tool fails with “Premature close” in sandbox due to strict network/env isolation
快速结论:该报错通常发生在 Docker 自部署 LobeHub v2.2.8 版本中,当聊天界面调用 searchUserMemory 工具时触发。优先排查服务器端 HTTP 库版本问题,而非网络或沙箱隔离。
问题场景
用户在 Docker 自部署的 LobeHub Desktop App (Electron) v2.2.8 上,配置了有效的 OpenAI API Key 并注入 embedding 模型环境变量后,通过聊天界面触发 searchUserMemory 工具时出现报错。CLI 工具(lh memory create 和 lh memory list)可正常工作。
报错原文
Failed to fetch models: Invalid response body while trying to fetch https://api.openai.com/v1/models: Premature close
原因分析
这是一个确认的 bug,并非沙箱网络隔离导致。根本原因是 v2.2.8 稳定版仍搭载 OpenAI SDK v4(openai@^4.104.0),该版本依赖 node-fetch@2。一次 Node.js 安全更新破坏了 node-fetch@2 的 gzip 处理,导致所有服务端 API 调用(包括 searchUserMemory 的 embedding 请求)抛出 ERR_STREAM_PREMATURE_CLOSE 错误。修复方案(升级至 OpenAI SDK v6)已在 PR #16090 中合并并在 v2.2.8-canary.2 中生效,但因分支同步问题未被包含在 v2.2.8 稳定版中。
环境排查
- 版本确认:确认当前 LobeHub 版本是否为 v2.2.8(稳定版)
- 网络连通性测试:在容器内运行
docker compose exec lobe node -e "const https = require('https'); https.get('https://api.openai.com/v1/models', (res) => { console.log('STATUS:', res.statusCode); console.log('HEADERS:', JSON.stringify(res.headers, null, 2)); }).on('error', (e) => { console.error('ERROR:', e.message); });"检查是否能正常到达 OpenAI(预期返回 401,而非连接断开) - 环境变量检查:运行
docker compose exec lobe env | grep DEFAULT_FILES_CONFIG确认 embedding 配置已正确注入
解决步骤
- 降级到 v2.2.6(已确认可用):将 Docker 镜像回滚到
lobehub/lobe-chat:2.2.6,该版本不受node-fetch@2相关问题影响。 - 使用 Canary 镜像(包含修复):切换到
lobehub/lobe-chat:canary标签,该版本已包含 OpenAI SDK v6 升级。 - 等待 v2.2.9 稳定版发布:下一个稳定版应包含 SDK v6 修复。
- 可优先尝试:启用“客户端请求模式”:如果仅涉及聊天功能,可尝试在 API Key 已填充的情况下启用“Use Client Request Mode”,从而绕过服务端 fetch 问题(注意:此方法可能不适用于内部工具 embedding 调用)。
验证方法
在应用降级或切换到 Canary 镜像后,重新在聊天界面触发调用 searchUserMemory 工具的工作流。如果不再出现 Premature close 错误,且工具能正常返回结果,即表示问题已修复。



