概念介绍
时间感知
记忆如何随时间更新、保留历史,并在检索时理解"现在"和"过去"。
我们将记忆视为会随时间演化的对象,而不是一段静态文本。用户的偏好、状态和事实可能变化;一次发生的事件也需要保留发生时间。拥有时间感知,MemOS 能知道什么时候应该使用当前最新认知,什么时候应该回溯历史版本。
1. 解决了什么问题
新旧信息冲突
- 用户先说“我喜欢吃苹果”,后来又说“我不喜欢吃苹果了”。
- MemOS 处理方式:自动识别前后变化,检索时只返回当前有效认知“不喜欢”。历史版本不会被删除,需要时仍可回溯。
问“现在”和“以前”应该得到不同答案
- 用户之前住在北京,后来搬到上海。
- MemOS 处理方式:理解问题中的时间线索,当用户问“我现在住在哪”,能够检索到上海;问“我以前住在哪”,能够检索到北京。
事件不应该被强行合并
- 去年国庆去了西安,今年五一去了杭州。
- MemOS 处理方式:保留每次事件的完整信息,不只是合并成“用户喜欢旅游”。问“我最近去哪旅游了”,能够优先召回去了杭州。
2. 处理流程
写入时:用 chat_time 锚定历史时间
实时对话通常不需要传时间,MemOS 会使用消息传入时间。如果你需要导入历史数据,建议传入 chat_time,让记忆锚定到事件真正发生的时间。
{
"user_id": "memos_user_123",
"messages": [
{ "role": "user", "content": "我喜欢吃辣。", "chat_time": "2025-09-12 08:00:00" },
{ "role": "user", "content": "我现在不太能吃重油重辣了,更喜欢清爽一点。", "chat_time": "2025-09-25 12:00:00" }
]
}
两类记忆的时间处理
MemOS 对记忆做不同的处理:
- 可能会变化的状态,例如住在哪、喜欢什么、当前阶段目标,保留不同时间版本,便于检索时技能召回现在,又能召回历史。
- 一次发生的事件,例如何时去了哪、做了什么,保留每次事件细节,便于检索时召回完整信息。
检索时:理解问题中的时间指向
- 如果没有明确时间指向:正常检索,优先返回当前有效记忆。
- 如果带有时间线索:理解时间指向,选择对应版本或事件。
如果你已经知道明确时间范围,也可以配合 记忆过滤器 使用 create_time 缩小候选记忆:
{
"user_id": "memos_user_123",
"query": "整理我 2025 年 12 月和阅读相关的记录",
"filter": {
"and": [
{ "create_time": { "gte": "2025-12-01" } }
]
}
}
3. 示例体验
你可以尝试写入一组带有时间信息的事件:
{
"user_id": "test_user",
"messages": [
{ "role": "user", "content": "我住在北京。", "chat_time": "2025-01-10 10:00:00" },
{ "role": "user", "content": "我搬到上海了。", "chat_time": "2025-06-01 10:00:00" },
{ "role": "user", "content": "去年国庆我去西安旅游了。", "chat_time": "2025-10-08 10:00:00" },
{ "role": "user", "content": "今年五一我去杭州旅游了。", "chat_time": "2026-05-02 10:00:00" }
]
}
| 类型 | 搜索 query | 期望结果 |
|---|---|---|
| 当前状态 | "我现在住在哪?" | 上海,使用当前最新状态 |
| 历史状态 | "我以前住在哪?" | 北京,回溯历史版本 |
| 截止当下 | "我去哪旅游过?" | 西安和杭州,杭州排前 |
4. 使用建议
- 导入历史数据时传入准确的
chat_time,否则历史事件可能被误认为刚发生。 - 对"当前状态"类信息,让用户新表达自然写入即可,系统会自动更新当前认知。