
bug: Background memory review not triggering when assistant response is tool-only or has empty content
快速结论:当模型仅通过工具调用(tool calls)返回结果且 assistant 消息的 content 字段为空或纯空白时,后台记忆回顾(background memory review)功能不会触发。优先排查代码中 apps/web/lib/services/memory.py 文件中的门控检查逻辑。
问题场景
用户在使用 Open WebUI 时,启用了后台记忆回顾功能。当与模型交互过程中,模型主要通过工具调用(例如更新记忆的 tool)来响应,且返回的 assistant 消息中 content 字段为空字符串或仅包含空白字符时,后台记忆回顾任务不会被创建。这导致在工具驱动工作流中记忆回顾功能失效。
报错原文
assistant_content = assistant_message.get('content', '')
if not isinstance(assistant_content, str) or not assistant_content.strip():
return
原因分析
核心原因在于 apps/web/lib/services/memory.py 文件中的 background_review_memory 函数实现了一个过于严格的门控检查(第 425-427 行)。该检查要求 assistant 消息的 content 字段必须为非空字符串,否则直接跳过整个后台审查流程。当模型通过工具调用(如更新记忆的 tool)产生响应时,content 字段可能为空,导致门控检查错误地拦截了本应触发的审查任务。值得注意的是,该函数内部后续的 extract_content_from_messages 函数已经具备从不同消息类型中提取内容的能力,这进一步说明门控检查过于严格。
环境排查
- Open WebUI 版本(建议确认是否包含相关代码路径的版本)
- 检查
apps/web/lib/services/memory.py文件中background_review_memory函数实现 - 确认环境变量(如
MEMORY_REVIEW_ENABLED)是否正确设置且未被数据库中的值覆盖 - 检查数据库中的记忆回顾配置项是否与环境变量优先级冲突
解决步骤
- 定位门控检查代码:打开
apps/web/lib/services/memory.py文件,找到background_review_memory函数中如下代码段:assistant_content = assistant_message.get('content', '') if not isinstance(assistant_content, str) or not assistant_content.strip(): return - 修改门控逻辑:将上述检查逻辑修改为仅检查必要的条件。可优先尝试:删除或放宽对
content非空的检查,让后续extract_content_from_messages函数处理不同消息类型的内容提取。(注意:此修改为推测性方案,请根据实际代码库版本进行调整。) - 处理环境变量优先级问题(参考 #7560):如果环境变量未覆盖数据库中的设置,需手动更新数据库中的相应配置项。具体方法取决于数据库类型(如 SQLite、PostgreSQL)。
- 重启服务:修改代码或数据库后,重启 Open WebUI 服务以使更改生效。
验证方法
完成上述修改后,重新与模型进行交互,并确保模型产生一个仅包含工具调用且 content 为空的响应。观察后台记忆回顾任务是否按预期触发。可以通过查看日志确认 background_review_memory 函数是否被调用且未因门控检查而提前返回。
参考来源
open-webui/open-webui #27052
参考的关联 Issue:#26651(问题已被合并为此 Issue 的重复项),#7560(环境变量优先级问题)



