恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
如何在 Mem0 中用 expiration_date 让限时记忆到期后不再出现在搜索结果中
首页
资讯中心
/
如何在 Mem0 中用 expiration_date 让限时记忆到期后不再出现在搜索结果中
如何在 Mem0 中用 expiration_date 让限时记忆到期后不再出现在搜索结果中
发布时间:2026/9/9 16:24:11
如何在 Mem0 中用 expiration_date 让限时记忆到期后不再出现在搜索结果中【免费下载链接】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/embedchainAgent 应用里经常要存一些只有一段时间为真的事实Pro 试用快到期了、用户有个季节性偏好、一张工单快到保留期上限。如果靠删记忆来维护这些事实就需要一个专门找记录去删的清理任务。Mem0 的expiration_date解决这个问题给记忆设一个日期过了这一天它就不再出现在搜索结果里但记录本身不删除。这个能力在 Platform 和 Open Source 两个版本都可用。这篇文章的操作路径是设置到期日期 → 验证到期后搜索确实不再返回该记忆 → 需要时移除日期让它重新可见最后附 CLI 的--expires用法。到期语义是隐藏不是删除写代码和验证结果之前先对齐规则以下均来自 Memory Expiration 文档格式纯YYYY-MM-DD日期没有时间成分、没有时区偏移。按 UTC 求值不相对调用方的本地时区判断。含当天设成2030-01-31的记忆2030-01-31全天UTC仍可见2030-02-01起消失。只有列表型读取会过滤search()和get_all()TypeScript 是getAll()默认隐藏已过期记忆按 ID 取单条的get(memory_id)始终返回该记忆这条路径没有show_expired参数。没有到期日 永不过期这是每条记忆的默认状态。格式错误失败开放Mem0 解析不了的存储值按未过期处理一个坏日期不会让记忆悄悄消失。关键区别expiration 是隐藏不是删除。记录原样留在存储里把日期清掉记忆立刻恢复可见。如果要永久移除那是 delete 操作不是 expiration。给新记忆设置到期日期新增记忆时在同一次调用里传入expiration_date# Mem0 Platform from mem0 import MemoryClient client MemoryClient(api_keyyour-api-key) messages [{role: user, content: My Pro trial ends soon.}] client.add(messages, user_idalice, expiration_date2030-01-31) # Mem0 OSS from mem0 import Memory memory Memory() memory.add(messages, user_idalice, expiration_date2030-01-31)TypeScript 用驼峰写法expirationDate// Mem0 Platform import { MemoryClient } from mem0ai; const client new MemoryClient({ apiKey: your-api-key }); const messages [{ role: user, content: My Pro trial ends soon. }]; await client.add(messages, { userId: alice, expirationDate: 2030-01-31 }); // Mem0 OSS import { Memory } from mem0ai/oss; const memory new Memory(); await memory.add(messages, { userId: alice, expirationDate: 2030-01-31 });your-api-key换成你自己的 API keyalice、2030-01-31是文档示例值替换为目标用户 ID 和实际到期日。不同客户端接受的值形式不同照错值排错时先查这张表客户端接受的输入说明PythonPlatform 和 OSSYYYY-MM-DD形式的str或date/datetime对象存储前会归一化为YYYY-MM-DDTypeScriptPlatform 和 OSS仅YYYY-MM-DD形式的string比new Date()更严格拒绝12/31/2099、2099-12-31T23:00:00以及2099-02-30、2100-02-29这类不存在的日期自托管 REST serverYYYY-MM-DD形式的string底层与 OSS Python 相同的归一化CLImem0 add --expiresYYYY-MM-DD形式的string必须严格在未来按本地系统日期校验SDK 没有这个限制。仅 PlatformCLI 没有 OSS 后端字段完整列表见 Add Memories。走 REST 时POST /v3/memories/add/是异步处理响应返回event_id用GET /v1/event/{event_id}/轮询状态到SUCCEEDED或FAILED为止。给已有记忆补设到期日期对已入库的记忆用update()设置或修改到期日client.update(mem_123, expiration_date2030-01-31) # Platform memory.update(mem_123, expiration_date2030-01-31) # OSSawait client.update(mem_123, { expirationDate: 2030-01-31 }); // Platform await memory.update(mem_123, { expirationDate: 2030-01-31 }); # OSSmem_123换成 add 或查询响应中拿到的真实 memory ID。注意update()要求text、metadata、expiration_date至少传一个一个都不传会抛错只传expiration_date即满足条件记忆的内容和 metadata 保持不动。对应接口是PUT /v1/memories/{memory_id}/详见 Update Memory。验证到期效果文档给出的判定方式默认的搜索/列表调用不返回过期记忆加show_expired则返回。日期过后上例中即2030-02-01UTC 起先做正常搜索和列表client.search(What plan is Alice on?, filters{user_id: alice}) client.get_all(filters{user_id: alice})expiration_date已过的记忆不应出现在这两个结果里。再确认过期但未删除这一语义——用show_expiredTrueTypeScript 是showExpired各客户端默认false把它读回来client.get_all(filters{user_id: alice}, show_expiredTrue) client.search(What plan is Alice on?, filters{user_id: alice}, show_expiredTrue)await client.getAll({ filters: { user_id: alice }, showExpired: true }); await client.search(What plan is Alice on?, { filters: { user_id: alice }, showExpired: true, });OSS 的Memory类用同样的参数和拼写。接口细节见 Search Memories 和 Get Memories。响应结果的每条记录带有顶层expiration_date字段下面是文档示例的搜索响应注意score与expiration_date字段{ results: [ { id: ea925981-272f-40dd-b576-be64e4871429, memory: Likes to play cricket and plays cricket on weekends., user_id: alice, metadata: { category: hobbies }, score: 0.82, expiration_date: null, created_at: 2024-07-26T10:29:36.630547-07:00, updated_at: null, categories: [hobbies] } ] }读回字段时有个客户端差异要注意PythonPlatform 和 OSS与 REST API 返回顶层expiration_datePlatform TypeScript SDK 返回expirationDateOSS TypeScript SDK 是例外——get()和getAll()都在result.metadata.expiration_date下取到它而不是result.expirationDate。还有一个边界情况过期记忆是在top_k应用之前被剔除的Mem0 会先扩大内部候选池所以结果偏少是少数情况但如果一个 scope 下几乎每条记忆都过期了单次调用仍可能返回少于top_k条此时传show_expired: true可以拿回完整集合。移除到期日期要让记忆重新变成永久记忆显式传NonePython或nullTypeScript。SDK 会刻意保留这个 null而不是当作未传该参数client.update(mem_123, expiration_dateNone) # Platform memory.update(mem_123, expiration_dateNone) # OSSawait client.update(mem_123, { expirationDate: null }); # Platform await memory.update(mem_123, { expirationDate: null }); # OSS日期清掉后记忆立即恢复在search()和get_all()中可见。CLI--expires用 CLI 时mem0 add支持--expires到期日期过后记忆不再被返回mem0 update同样支持mem0 add My Pro trial ends on 2030-01-31 --user-id alice --expires 2030-01-31 mem0 update memory-id --expires 2030-01-31memory-id是实际 memory ID日期替换为实际到期日。CLI 有两个特殊限制仅 PlatformCLI 没有 OSS 后端--expires必须严格是未来日期它按本地系统日期校验SDK 没有这个限制。传了非日期值时CLI 报错Invalid date format for --expires. Use YYYY-MM-DD文档给出的原因是--expires收到了非日期值修复方式是使用YYYY-MM-DD并确保日期在未来。搜索和列表命令用--show-expired包含过期记忆mem0 search What plan is Alice on? --user-id alice --show-expired mem0 list --user-id alice --show-expired完整 flag 说明与错误码见 CLI。边界expiration、decay、delete 各解决什么问题文档专门区分了这三者因为它们经常被混用Memory ExpirationMemory DecayDelete做什么设置的日期过后隐藏记忆按记忆最近使用程度重新排序永久移除记忆数据仍在存储是是否过滤结果是日期过后从不只重排分数是永久可逆是清掉或推后日期是关掉decay否在哪里设置每条记忆由你设置每个项目opt-in每次调用可用版本Platform 和 OSS仅 PlatformPlatform 和 OSS所以本任务的路径是要某个已知日期后不再出现用 expiration要旧记忆排名靠后但仍可搜到用 Memory Decay要永久消失用 delete。文档给的保留期模式是两者组合expiration 是软窗口比如工单记忆保留 90 天可搜索到期后按计划执行 delete 完成永久清除。做完以上步骤可核对的状态是正常search/get_all不再返回该记忆加show_expired能读回它且expiration_date字段显示你设置的日期按 ID 的get(memory_id)任何时刻都返回它。如果日后这条事实变成长期事实例如试用用户升级了正式订阅用update(..., expiration_dateNone)清掉日期即可不需要删除重建。【免费下载链接】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),仅供参考