[Bug] Memory settings toggle (“启用记忆功能”) does not persist on page refresh (missing API persistence call)

这是 LobeChat 设置页中“启用记忆功能”开关被 Tooltip 组件包裹,导致表单无法将切换事件传递给 Switch 组件,因此没有触发后端持久化 API。优先检查该开关的代码结构,移除外层 Tooltip 让 Switch 成为表单项的直接子组件。

快速结论:这是 LobeChat 设置页中“启用记忆功能”开关被 Tooltip 组件包裹,导致表单无法将切换事件传递给 Switch 组件,因此没有触发后端持久化 API。优先检查该开关的代码结构,移除外层 Tooltip 让 Switch 成为表单项的直接子组件。

适用环境:LobeChat Cloud(官方云端部署)、Web 桌面浏览器(Chrome)、Ubuntu 系统。

最快修复方案:暂无官方发布的一键修复补丁。需修改源码 src/features/Settings/memory/features/Memory.tsx,移除 Switch 外层的 Tooltip 包裹,让 Switch 成为表单项的直接子组件。

注意事项:上述修复来自 GitHub Issue 的分析结论,属于代码层面的修复建议,尚未在正式版本中验证。如不需要 Tooltip,可直接删除;如需保留提示文案,建议将 Tooltip 移到标签或描述区域,而非包裹受控的 Switch 组件。

问题场景

在 LobeChat 的 Settings > Memory 页面中,点击切换“启用记忆功能”开关为开启状态后,刷新页面(F5),开关会自动恢复为“关闭”状态。使用 Chrome 开发者工具 Network 面板抓包,发现切换开关时仅触发了 PostHog 埋点请求(e/?...),完全没有发出任何保存设置的后端 API 请求(如 /api/user/settings)。而 get-session 鉴权请求正常返回 200 OK,说明网络与登录状态正常。

报错原文

[Bug] Memory settings toggle ("启用记忆功能") does not persist on page refresh (missing API persistence call)
No settings persistence API call (e.g., /api/user/settings) is initiated.
The toggle silently reverts to OFF.

原因分析

根据 Issue 中的网络抓包和代码分析,可能原因如下:

根因:Memory.tsx 中,“启用记忆功能”的 Switch 组件被 Tooltip 组件包裹。LobeChat 设置表单中的具名表单项(Form Item)会把 valuechecked)和 onChange 注入到直接子组件。由于 Tooltip 是直接子组件,而 Switch 被包裹在内部,导致表单属性被传给 Tooltip(Tooltip 会忽略这些属性),Switch 收不到表单的 onChange 回调。

连锁反应是:

  • 用户切换开关时,仅更新内存中的 UI 显示状态;
  • 表单的 onValuesChange 回调未被触发;
  • setSettings() 未被调用,userService.updateUserSettings() 未执行;
  • 后端没有任何持久化请求发出;
  • 刷新页面后,前端重新从后端拉取数据,开关回到未修改的默认值。

对比其他工作正常的设置开关(如 isDevModeenableProxy、telemetry 等),它们的 Switch 都是表单项的直接子组件,没有 Tooltip 包裹。

环境排查

  • LobeChat 版本:最新 Cloud 版(Issue 报告时)
  • 部署方式:官方云端(app.lobehub.com)
  • 操作系统:Ubuntu
  • 浏览器:Chrome(需使用开发者工具 Network 面板抓包验证)
  • 相关源码文件:src/features/Settings/memory/features/Memory.tsx

解决步骤

  1. 验证问题:打开 app.lobehub.com/settings/memory,打开开发者工具 Network 面板(F12),点击“启用记忆功能”开关,确认 Network 面板中只有 PostHog 埋点请求,没有 /api/user/settings 请求。
  2. 定位源码:检查 src/features/Settings/memory/features/Memory.tsx 文件中表单项的结构,重点查看第 34-45 行附近“启用记忆功能”的配置。
  3. 修改代码:将表单项的 children 改为直接使用 <Switch /> 组件,移除 Tooltip 包裹:
{
  children: <Switch disabled={!canManageMemory} />,
  name: 'enabled',
  valuePropName: 'checked',
}
  1. 保留 Tooltip 提示(可选):如果仍需提示文案,将 Tooltip 移动到标签(label)或描述(description)区域,不要包裹受控的 Switch。
  2. 本地或部署构建:完成代码修改后,需重新编译构建并部署才能生效。

验证方法

修改并部署后,重新打开 app.lobehub.com/settings/memory,点击“启用记忆功能”开关为开启状态,观察 Network 面板出现 /api/user/settings 请求并发成功;按 F5 刷新页面,开关应保持“开启”状态不变。

参考来源

lobehub/lobe-chat #18156

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18489

发表回复

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