Mem0 如何用 Temporal Reasoning 处理 yesterday、last week 等时间相关查询
2026/9/9 22:23:53 网站建设 项目流程

Mem0 如何用 Temporal Reasoning 处理 yesterday、last week 等时间相关查询

【免费下载链接】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 给 Agent 存了大量记忆,会遇到一个典型问题:用户问“我上周在哪开的会”时,检索只按语义相似度排序,而“昨天在巴黎开会”和“上周在东京开会”两条记忆在语义上几乎一样,排序无法区分。Mem0 Platform v3 的 Temporal Reasoning 就是解决这个问题的:它在检索时自动比较查询里的时间表达与记忆中的事件日期,对日期匹配的记忆加一个排序加分(temporal boost),不改写记忆本身。

前提条件:Temporal Reasoning 只在 Mem0 Platform v3 上自动运行,OSS SDK 不提供该功能。需要 Mem0 Platform 账户和 API key,Python 3.10+ 或 Node.js 18+。功能说明见 Temporal Reasoning 文档。

机制:时间表达如何参与排序

查询中可以直接使用yesterdaylast weektomorrowcurrentlyas of March 2025这类时间表达。Mem0 会把它们与存储记忆中提取出的日期和日期范围做比较,命中事件日期的记忆获得加分。

官方文档给的例子是:用户maya-demo存了三条记忆——

  • “Yesterday I met Maya at the Orion conference in Paris.”
  • “Last week I met Maya at the Orion conference in Tokyo.”
  • “Last year I met Maya at the Orion conference in Lisbon.”

此时搜索Which city did I meet Maya in at the Orion conference last week?,Tokyo 那条记忆获得 temporal boost 并排在第一位(这是文档示例结果,实际排序取决于你的数据)。

检索返回的还是普通的记忆结果,只是用 temporal boost 重新排序,不返回额外的时间字段。

准备:安装 SDK 并初始化客户端

按 Quickstart 安装并设置 API key。Python 示例如下,your-api-key替换为你在 Platform 控制台获取的 key:

pip install mem0ai
from mem0 import MemoryClient client = MemoryClient(api_key="your-api-key")

JavaScript 对应:

npm install mem0ai
import MemoryClient from 'mem0ai'; const client = new MemoryClient({ apiKey: 'your-api-key' });

注意这里用的是 Platform 客户端MemoryClient。如果用的是 OSS 侧的Memory类并传入reference_date/referenceDate,会收到明确报错:The reference_date parameter is not supported by the OSS Memory SDK.,这可以从 OSS 侧的错误处理 中得到确认。

写入带时间信息的记忆

用标准的add写入对话,时间信息写在消息内容里即可:

memories = [ "Yesterday I met Maya at the Orion conference in Paris.", "Last week I met Maya at the Orion conference in Tokyo.", "Last year I met Maya at the Orion conference in Lisbon.", ] for text in memories: messages = [{"role": "user", "content": text}] client.add(messages, user_id="maya-demo")

client.add的用法与 Quickstart 中的示例一致,user_id是实体作用域标识,搜索时要用同一个值过滤。

新记忆的日期通常几秒内就会影响检索结果,无需等待或手动触发。

可选:导入历史对话时用 timestamp 保留原始时间

如果你是批量导入过去的对话记录,created_at会是导入时间而不是对话发生时间。Memory Timestamps 功能 允许在添加时指定 Unix 时间戳(自 1970-01-01 UTC 起的秒数),覆盖默认时间:

from datetime import datetime, timedelta five_days_ago = datetime.now() - timedelta(days=5) unix_timestamp = int(five_days_ago.timestamp()) messages = [ {"role": "user", "content": "I'm travelling to SF"} ] client.add(messages, user_id="user1", timestamp=unix_timestamp)

JavaScript 中参数名同为timestamp

const messages = [ {"role": "user", "content": "I'm travelling to SF"} ]; client.add(messages, { userId: "user1", timestamp: unixTimestamp });

对应关系总结(来自 Temporal Reasoning 文档):

操作PythonTypeScript用途
添加记忆timestamptimestamp保留导入对话的原始时间
搜索记忆reference_datereferenceDate模拟在某个指定日期时间搜索

执行时间相关搜索

直接调用client.search,查询文本里带上时间表达,filters里传实体 ID:

results = client.search( "Which city did I meet Maya in at the Orion conference last week?", filters={"user_id": "maya-demo"}, )
const results = await client.search( "Which city did I meet Maya in at the Orion conference last week?", { filters: { user_id: "maya-demo" } } );

按 Search Memories API 的约束:实体 ID(user_idagent_idapp_idrun_id)必须放在filters对象内,顶层传会被 400 拒绝;至少要传一个实体 ID。返回结果中每条记忆的score是语义、BM25、实体匹配多路信号融合后的[0, 1]值。

验证方式:检查返回的results列表顺序。时间匹配的记忆(上例是 Tokyo 那条)应排在第一位。文档明确说明返回的是“usual memory results, reordered using the temporal boost”——即字段结构与普通搜索一致,只有顺序变化。

用 reference_date 模拟历史时间点

Temporal Reasoning 的“当前时间”默认是搜索发起的时刻。如果需要复现或审计过去某个时间点会命中什么记忆,传reference_date,Mem0 会把它当作那次搜索的当前时间:

results = client.search( "What happened last week?", filters={"user_id": "user-123"}, reference_date="2025-03-21T00:00:00Z", )
const results = await client.search("What happened last week?", { filters: { user_id: "user-123" }, referenceDate: "2025-03-21T00:00:00Z", });

格式说明来自 SDK 类型定义(SearchMemoryOptions):reference_date接受YYYY-MM-DD或 Unix timestamp,上述带T00:00:00Z的写法是文档原样给出的示例。TypeScript 客户端把referenceDate序列化为 API 请求体中的reference_date,可参考 客户端测试 确认这一映射。

限制与边界

  • 仅 Mem0 Platform v3 生效,OSS SDK 没有 Temporal Reasoning,传入时间参数会直接报错而不是静默忽略。
  • 时间表达是查询文本的一部分,机制文档只列出了yesterdaylast weektomorrowcurrentlyas of March 2025这几个例子,没有给出完整支持词表;如果你的表达不生效,先换成文档中列出的形式再验证。
  • 该功能不返回独立的“时间匹配分数”,只能在结果顺序上体现;score字段仍是融合后的综合分数。
  • 新记忆的日期生效需要几秒,刚写入立即搜索可能还没体现时间加分。

需要进一步查看检索参数(top_kthresholdrerank等默认值)时,参考 Search Memories API reference;涉及记忆导入时间保真的完整示例见 Memory Timestamps。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询