如何把 Mem0 OSS 记忆迁移到 Mem0 Platform:导入 hosted Qdrant 数据并切换 MemoryClient
【免费下载链接】embedchainThe Memory Layer for AI Agents - Drop-in memory infrastructure for AI agents and apps. Context that persists. Built for production.项目地址: https://gitcode.com/GitHub_Trending/em/embedchain
如果你正在用 Mem0 开源版(OSS)的 Python SDK,且向量存储是hosted Qdrant(Qdrant Cloud),想把现有记忆数据搬到 Mem0 Platform,同时把代码从本地Memory类切换到托管的MemoryClient,这条路径可以直接执行:先用官方一行脚本把 Qdrant 中的记忆导入 Platform 账户,再升级 SDK 并改写初始化与检索调用。官方迁移文档给出的估算:基础设施与代码改动工作量约 30 分钟,支持并行运行、无强制停机(见 docs/migration/oss-to-platform.mdx)。
适用前提(来自文档):
- OSS 侧是 Python SDK,向量存储为 hosted Qdrant。脚本目前只支持 hosted Qdrant;local Qdrant、pgvector 等其他向量存储文档标注为 “coming soon”,需要联系 Mem0 support 获取定制脚本。
- 运行环境需 bash 和 python3,支持 macOS、Linux,以及 Windows 下的 WSL/Git Bash(脚本启动时会打印这行支持范围)。
- 已有一个 Mem0 Platform 账户,且能拿到 API Key(在 Platform 的Settings > API Keys中生成)。
开始前,文档建议先梳理代码中哪里实例化Memory、哪里调用search或get_all,因为下一步要逐处改写。
把 hosted Qdrant 中的记忆导入 Platform
迁移脚本的官方入口是一条 curl 命令,它会下载并运行 scripts/oss-to-platform-migrate.sh(该文件也在本仓库中,可以下载后先审读再执行):
curl -fsSL https://raw.githubusercontent.com/mem0ai/mem0/main/scripts/oss-to-platform-migrate.sh | bash执行前要知道它的行为与副作用:
- 脚本分三个阶段:1) 认证 Platform 账户,2) 从 hosted Qdrant scroll 导出记忆到本地 JSON 文件,3) 通过 Platform 的
/v3/memories/add/接口导入到你的 Platform 账户。也就是说,它会真实写入你的 Platform 账户数据,但不会删除或修改 Qdrant 源数据。 - 交互式运行会依次提示:Qdrant URL、Qdrant API key、collection 名(默认
mem0),以及导出范围(单个user_id或整个 collection)。如果你环境里已设置了QDRANT_URL、QDRANT_API_KEY,脚本会提示是否沿用。 - 默认导出文件写入
~/.mem0/migrations/mem0-qdrant-export-{时间戳}.json(可用MEM0_DIR环境变量改目录、--output改路径),文件权限设为仅当前用户可读写。 - 脚本默认发送遥测(
MEM0_TELEMETRY默认为true,事件发往 PostHog);不需要时可设置MEM0_TELEMETRY=false再运行。
非交互与参数化执行
脚本的完整参数(定义在parse_args中)适合写进一次性迁移命令,避免交互提示:
MEM0_TELEMETRY=false bash oss-to-platform-migrate.sh \ --api-key "$MEM0_API_KEY" \ --qdrant-url "$QDRANT_URL" \ --qdrant-api-key "$QDRANT_API_KEY" \ --qdrant-collection mem0 \ --user-id alex \ --yes--qdrant-url/--qdrant-api-key:填写你 OSSMemory配置中使用的 Qdrant Cloud 地址与 key。无交互终端时,这两项(以及--api-key/MEM0_API_KEY)必须提供,否则脚本会直接报Hosted Qdrant export requires --qdrant-url or QDRANT_URL.。--qdrant-collection:collection 名,缺省为mem0;也可用QDRANT_COLLECTION环境变量。--user-id/--agent-id/--run-id/--all:限定导出范围。无交互终端时必须四选一,否则会报Export requires --user-id, --agent-id, --run-id, or --all.。建议先用单个--user-id验证流程,再决定是否--all全量。--yes:发现已有有效 Platform 会话(来自--api-key、MEM0_API_KEY或已存储的 key)时不再提示直接继续。--auth-only、--export-only、--import-only三个模式互斥,可只跑其中一步;--import-only需配--input指向已有的迁移 JSON。--base-url:Platform API 基地址,缺省https://api.mem0.ai,也可用MEM0_BASE_URL环境变量或本地~/.mem0/config.json中的platform.base_url。- 没有现成 API key 时,脚本支持邮箱验证码登录:
--email you@company.com --code <验证码>,或在交互模式下输入邮箱后到收件箱取码。
脚本运行结束会打印导入摘要(由print_import_summary输出),判断是否成功就看这几个计数:
Imported: 120 Skipped existing identical: 0 Changed existing: 0 Invalid: 0 Failed: 0Invalid指缺少user_id/agent_id/run_id等无法构造导入请求的记录;Failed是调用 Platform 接口失败的记录。这两类以及Changed existing(同一条记忆里本地 hash 与已导入的不同)会写入导出的 review 文件({导出文件名}-import-review-{时间戳}.json),可以逐条核对。全部完成后最后一行是Migration complete.。
导入具备幂等性:每条记录会带mem0_migration_import_key元数据,重跑同一份导出文件时,hash 相同的记忆会进入Skipped existing identical而不会重复写入。
升级 SDK 并切换到 MemoryClient
数据导入完成后,代码侧的改动分三步(对应官方文档的 Migrate 小节)。
1. 安装或升级 SDK
pip install mem0ai --upgrade最新版 SDK 同时包含 OSS 的Memory和 Platform 的MemoryClient。
2. 替换初始化
把本地Memory的配置式初始化换成MemoryClient,本地的vector_store、llm等配置不再需要(由 Platform 托管)。文档中的对照示例:
from mem0 import Memory config = { "vector_store": { "provider": "qdrant", "config": {"host": "localhost", "port": 6333} }, "llm": { "provider": "openai", "config": {"model": "gpt-4"} } } m = Memory.from_config(config)from mem0 import MemoryClient import os # Set MEM0_API_KEY in environment or pass explicitly client = MemoryClient(api_key="m0-...")m0-...替换为你在 Platform 生成的 API Key。迁移 skill 的补充说明(skills/mem0-oss-to-platform/references/api-mapping.md)指出:MemoryClient()不传api_key时会从环境变量MEM0_API_KEY读取;同时vector_store、llm、embedder、graph_store、history_db_path以及构造函数里的org_id/project_id都应删除(v3 中 org/project 从 API key 解析)。API key 必须来自环境变量或密钥管理,不要硬编码。
3. 改写检索调用(关键变更)
Platform 的 v2/v3 接口要求过滤参数嵌套进filters字典;search()和get_all()在顶层传user_id等实体参数会报错。同时limit参数已被top_k取代。官方对照表:
| Method | Open Source | Platform |
|---|---|---|
search() | m.search(query, user_id="alex") | client.search(query, filters={"user_id": "alex"}) |
get_all() | m.get_all(user_id="alex") | client.get_all(filters={"user_id": "alex"}) |
add() | m.add(memory, user_id="alex") | client.add(memory, user_id="alex") |
delete() | m.delete(memory_id) | client.delete(memory_id) |
delete_all() | m.delete_all(user_id="alex") | client.delete_all(user_id="alex") |
add()、delete()、delete_all()签名不变;update()在 docs/migration/oss-to-platform.mdx 中标注为 Platform 不可用,需要用 delete + add 组合替代:
# OSS: m.update(memory_id="mem_123", new_memory="Updated content") # Platform: 用 delete + add 替代 client.delete(memory_id="mem_123") client.add("Updated content", user_id="alex")注意一处文档间差异:迁移 skill 的映射表(references/api-mapping.md,声称对应 mem0ai 2.0.x)把update列为"不变"。两份材料冲突时,建议按 skill 自身的做法用inspect.signature核对已安装 SDK 里的实际方法签名再定。
多条件检索用AND结构:
results = client.search("meeting notes", filters={ "AND": [ {"user_id": "alex"}, {"agent_id": "assistant"} ] })行为默认值也有变化(skill 引用官方 v2→v3 指南列出):Python 端top_k默认从 100 变为 20;新增threshold默认0.1;rerank默认从true变为false。即使调用写法等价,返回数量和排序也可能与 OSS 时期不同,验证时要意识到这一点。另外 v3 的add()只返回 ADD 事件,旧代码里针对UPDATE/DELETE事件分支的逻辑现在是死分支。
验证迁移结果
按文档给出的检查顺序确认三件事:
API key 可用:
MemoryClient初始化后执行client.get_all(filters={"user_id": "test_connection"})应返回空列表或有效结果(文档原文:It should return an empty list or valid results)。
数据已导入:对照导入摘要里的
Imported计数与本地 Qdrant 中对应 scope 的记忆条数;对抽查到的单条记忆,可用client.search(query, filters={"user_id": ...})确认能检索回来。导入的记忆带有mem0_migration_source、mem0_migration_import_key等元数据,可在 Platform 侧据此确认来源。代码路径真的切走了:迁移 skill 建议的 smoke test 是走一遍
add→search/get_all→delete_all(针对测试用user_id,避免误删真实数据),并确认应用入口还能运行、本地不再产生新的 mem0 存储目录(如.mem0/或本地 Qdrant 路径),以此证明记忆确实落在 Platform。
同时保留回滚手段:OSS 侧的 Qdrant 数据在迁移脚本中只被读取,未被删除。文档给出的回滚步骤是——把MemoryClient改回Memory,恢复本地向量库与 LLM 配置注释掉的配置,确认本地向量库仍在运行且可访问。
可选:让编码代理执行代码侧迁移
如果代码中 mem0 的调用点较多,文档提供了基于 agent skill 的替代路径:把下面这段 prompt 交给你的编码代理,它会基于仓库内的 skills/mem0-oss-to-platform/SKILL.md 先扫描所有 mem0 用法、生成MEM0_MIGRATION_PLAN.md供你审阅,批准后再执行改动:
Migrate my project from Mem0 OSS to the Mem0 Platform SDK using the mem0-oss-to-platform skill in the mem0ai/mem0 repo, at skills/mem0-oss-to-platform/ Get the skill whichever way is easiest: - install it: npx skills add https://github.com/mem0ai/mem0 --skill mem0-oss-to-platform - if the mem0 repo is cloned locally, read it from skills/mem0-oss-to-platform/ - otherwise fetch that folder from github.com/mem0ai/mem0 (SKILL.md + references/) Then read SKILL.md and begin the migration.使用这条路径前,需要先把MEM0_API_KEY配好(.env或密钥管理,不写死在代码里),并留意 skill 在 references/gotchas.md 中列出的非 1:1 项:数据不随代码自动迁移(本文前半部分的脚本正是为此准备的)、数据会改存到 mem0 服务器(有数据驻留要求时要单独决策)、原来本地自选的 embedder/LLM 会被平台侧配置取代、reset()没有全局对应物需用按 scope 的delete_all代替。这些都会写进计划文档的 "Concerns" 一节由你逐条拍板,而不是代理默默处理。
边界与限制
- 当前脚本仅支持 Python OSS + hosted Qdrant;TypeScript/其他语言或本地向量库没有现成的数据导入路径,文档指引是联系 Mem0 support 获取定制脚本。
- 切换后每次记忆操作都是一次网络请求,会引入延迟、超时与限流的可能,热点路径上的调用需要考虑错误处理。
- 迁移完成后如需进一步配置 webhooks、多租户(organizations/projects)等 Platform 能力,参考 docs/migration/oss-to-platform.mdx 的 Next Steps 与 docs/api-reference.mdx。
【免费下载链接】embedchainThe Memory Layer for AI Agents - Drop-in memory infrastructure for AI agents and apps. Context that persists. Built for production.项目地址: https://gitcode.com/GitHub_Trending/em/embedchain
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考