[Bug] 清空全部记忆后记忆抽取无法重新生成(话题显示 completed)/Clearing all memories prevents memory extraction from re-generating (topics processed ‘completed’)

该问题发生在 LobeChat 自托管环境中,用户在“清空全部记忆”后,已抽取过的话题仍保留 completed 状态,导致后续记忆分析跳过这些话题,无法重新生成记忆。优先检查 topics.metadata.userMemoryExtractStatus 状态是否被重置。

快速结论:该问题发生在 LobeChat 自托管环境中,用户在“清空全部记忆”后,已抽取过的话题仍保留 completed 状态,导致后续记忆分析跳过这些话题,无法重新生成记忆。优先检查 topics.metadata.userMemoryExtractStatus 状态是否被重置。

适用环境:LobeChat v2.2.14 Canary,自托管 Docker 部署(server db 模式),NAS(群晖 DSM),Web 客户端(Chrome)。

最快修复方案:手动执行 SQL 将 topics.metadata.userMemoryExtractStatus 重置为 pending,并清空 userMemoryExtractRunState 字段。该方案已在 Issue 中被验证有效。

注意事项:此方案为临时修复,需在 GitHub PR #18524 合入前手动操作。重置后需重新运行记忆分析才能恢复抽取。

问题场景

在 LobeChat 自托管环境中,用户启用记忆功能并让部分话题完成抽取(状态变为 completed)后,点击“清空全部记忆”(Purge)。随后运行记忆分析,QStash 工作流显示成功(async_tasks 状态为 success),但实际 0 条记忆被写入,且抽取模型从未被调用。再次运行分析仍无效果。

报错原文

[Bug] 清空全部记忆后记忆抽取无法重新生成(话题显示 completed)/Clearing all memories prevents memory extraction from re-generating (topics processed 'completed')

原因分析

可能原因如下:

  • purgeAllMemories 函数只删除了 user_memories 表和 persona,未重置 topics.metadata.userMemoryExtractStatus,导致已抽取话题保持 completed 状态。
  • 抽取流程中的 isTopicExtracted() 会跳过 completed 状态的话题,即使这些话题的记忆已被删除。
  • recordComplete 函数即使在抽取产出为 0(processedMemoryCount = 0)时也会将话题标记为 completed,导致 148 个 0 产出话题被错误标记。
  • 用户发起的抽取请求硬编码了 forceAll: falseforceTopics: false,不会强制跳过已处理话题。

环境排查

  • 确认 LobeChat 版本为 v2.2.14 Canary。
  • 确认部署模式为 Docker 自托管(server db 模式)。
  • 确认操作系统为 NAS(群晖 DSM)。
  • 检查数据库(PostgreSQL)中 topics 表的 metadata 字段,确认 userMemoryExtractStatus 的值。
  • 检查 processedMemoryCount 是否为 0 但仍被标记为 completed

解决步骤

  1. 备份数据:在操作数据库前,建议先备份 topics 表和 user_memories 表。
  2. 重置话题状态:执行以下 SQL 语句,将指定用户所有 completed 状态的话题重置为 pending,并清空运行状态(确保替换 <userId> 为实际用户 ID):
UPDATE topics
SET metadata = jsonb_set(
  jsonb_set(metadata, '{userMemoryExtractStatus}', to_jsonb('pending'::text), true),
  '{userMemoryExtractRunState}', '{}'::jsonb, true
)
WHERE user_id = '<userId>'
  AND metadata->>'userMemoryExtractStatus' = 'completed';
  1. 重新运行记忆分析:在 LobeChat 界面中重新触发记忆分析,观察是否开始写入记忆。
  2. 验证结果:确认抽取模型被调用,且有新的记忆写入 user_memories 表。
  3. 等待官方修复:关注 GitHub PR #18524,官方修复合入后可彻底解决此问题。

验证方法

执行 SQL 后,查询确认 userMemoryExtractStatus 已变为 pending。重新运行记忆分析,检查 async_tasks 状态为 success 的同时,确认 user_memories 表中有新的记录生成,且抽取模型收到调用。

参考来源

lobehub/lobe-chat #18498

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19880

发表回复

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