Skip to content

memos get/list 与 add 作用域不一致:add 按 conversation_id 写入而 get 仅按 user_id 读取,导致新加记忆在列表查不到 #35

Description

@Memtensor-AI

问题描述

执行 memos add "测试记忆" 返回成功,但随后 memos get <user>(即用户视角的 memory list)查不到刚添加的内容。两个账号均可稳定复现,退出重新登录后依然存在。复现链路:写路径按会话作用域存储,读路径却按纯用户作用域列举,作用域不一致导致新写入记忆不可见。

定位(客户端,仓库内部即可复现的根因)

  • 写入路径: cmd_addsrc/memos_cli/commands/memory_cmd.py:236-244)始终解析并下发 conversation_id(默认取 config.defaults.conversation_id,即 memos-cli-default,见 src/memos_cli/config.py:22);add_memorysrc/memos_cli/backend/memory_api.py:57-79)把 conversation_id 写入 POST /add/message 请求体。
  • 读取路径: cmd_getsrc/memos_cli/commands/memory_cmd.py:629-635)只传 user_id/page/size/include_*,从不解析或下发 conversation_idget_memoriessrc/memos_cli/backend/memory_api.py:168-190)构造的 POST /get/memory 请求体同样不含 conversation_id;输出 scope(memory_cmd.py:648)也只有 user_id
  • 对照: search / chat / extract / feedback 四条命令在 cmd_ 层都解析 final_conversation_id 并传给后端(memory_cmd.py:310 / 373 / 435 / 571),唯独 get 断开此链路。

结论:写入按会话维度(conversation_id),列举按纯用户维度(user_id),因此 memos get/列表无法召回刚 add 的内容。修复方向是让 get/listadd 使用一致的会话作用域(解析 conversation_id 并随 POST /get/memory 下发),或在 get 明确支持按会话过滤。

附带问题

  1. 文档与代码不一致: MemOS CLI.md:52/67skills/memos-memory/SKILL.mdmemos list --user-id ... --format table --detail simple 定义为主命令,但 src/memos_cli/main.py:134-140 只注册了 add/extract/feedback/search/get/origin/delete,源码中不存在 list 命令或别名。用户按文档执行 memory list/memos list 实际落到 get。建议新增 list(作为 get 的别名/封装)或修正文档。
  2. 展示层解析局限: get 展示路径 extract_memory_records_from_responsesrc/memos_cli/output.py:45-72)只解析 memory_detail_list / preference_detail_list / memories / results / 单条键,不解析 text_mem 桶结构(该结构仅在 src/memos_cli/backend/normalizers.py:157-169extract_memory_list 中处理)。若 /get/memory 返回 text_mem envelope,列表会静默显示 0 条,进一步掩盖已存在的记忆。

复现/验证建议

  • memos add "测试记忆" --format json 确认成功;随后 memos get <user> --format json 观察是否包含该记忆。
  • 对照 memos search "测试记忆" --format json(search 路径带 conversation_id)是否反而能命中,验证作用域不对称假设。
  • 若服务端支持,直接向 POST /get/memory 请求体加入相同 conversation_id 验证召回。

Metadata

Metadata

Labels

ai:taskDispatched to AI coding agent | 已派发给 AI 编码任务ai:testingAI agent is running tests | AI 正在运行测试area:coreMOS 编排层 / 框架底座 / 跨模块问题status:in-progressSomeone or AI is working on it | 人工或 AI 正在处理

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions