记忆精炼

更新时间:
复制 MD 格式

记忆精炼(Consolidation)用于把分散在多次对话中的原始记忆整理成更完整、更稳定的结论,帮助Agent减少重复信息和新旧状态冲突,更快理解用户当前偏好、长期习惯与任务状态。

解决的问题

在未使用记忆精炼时,长期积累的记忆可能出现以下问题:

  • 同一偏好散落在多条记忆中,Agent无法判断该用哪个值。

  • 矛盾信息共存,旧偏好未被清理。

  • 碎片化知识无法形成完整画像。

主要能力

能力

说明

归并重复信息

把多次表达但含义相近的记忆整理为一条更完整的结论。

消解状态变化

结合新旧信息形成当前有效状态,减少过期偏好对Agent的干扰。

补全用户画像

将分散在不同会话中的相关信息关联起来,让Agent获得更连贯的理解。

保留来源依据

精炼结果可以回溯到支撑它的原始记忆和对话,便于核验与审计。

直接参与召回

精炼结果会和原始记忆一起被搜索,应用不需要改变原有检索方式。

适用场景

  • 用户在多次会话中反复表达偏好,例如饮食、出行、设备设置和沟通习惯。

  • 客服、教育或企业Agent需要从长期交互中形成稳定的用户状态和任务结论。

  • 记忆数量持续增加,需要减少重复内容,提高召回结果的信息密度。

  • 新旧信息同时存在,需要让Agent优先理解用户当前状态,同时保留历史依据。

如何使用

模式

触发方式

说明

自动模式

每次 POST /memories 后异步触发

需设置 MEM0_ENABLE_CONSOLIDATION=true

手动调用

POST /consolidate?user_id=xxx

无需开启自动模式,可按用户或Agent范围集中整理。

手动触发时,也可以在控制台的工具 > 记忆精炼页面操作,填写用户 ID 或 Agent ID 后点击触发精炼。

系统会把多条相关原始记忆整理成一条更完整的Observation,但不会因此丢失原始依据。业务既可以直接使用精炼结论,也可以在需要核验时回看相关记忆和原始对话。

示例

以下示例直接调用线上服务,先写入3条差旅相关的原始记忆,再触发精炼并查看结果。

说明

API Key建议通过环境变量传入,不要直接写在代码或公共文档中。

步骤一:配置服务地址和认证信息

export MEMORY_URL="https://api-longmemory-cn-beijing.opentrust.net"
export MEMORY_API_KEY="<替换为您的 API Key>"
export USER_ID="demo-user-001"

步骤二:写入3条原始记忆

curl -sS -X POST "${MEMORY_URL}/memories" \
  -H "Authorization: Token ${MEMORY_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"出差坐飞机时,我总是优先选靠过道的座位。"}],"user_id":"'${USER_ID}'","async_mode":false}'
curl -sS -X POST "${MEMORY_URL}/memories" \
  -H "Authorization: Token ${MEMORY_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"工作出差时,我更喜欢上午出发的航班。"}],"user_id":"'${USER_ID}'","async_mode":false}'
curl -sS -X POST "${MEMORY_URL}/memories" \
  -H "Authorization: Token ${MEMORY_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"晚上七点以后出发会影响睡眠,所以我通常避开晚班飞机。"}],"user_id":"'${USER_ID}'","async_mode":false}'

三次调用都会返回 event: "ADD",表示对应原始记忆已写入。

步骤三:触发记忆精炼

curl -sS -X POST \
  "${MEMORY_URL}/consolidate?user_id=${USER_ID}" \
  -H "Authorization: Token ${MEMORY_API_KEY}"

本次调用处理了3条原始记忆,并生成1Observation:

{
  "memories_processed": 3,
  "observations_created": 1,
  "observations_updated": 0,
  "observations_deleted": 0,
  "status": "completed"
}

其中,memories_processed 表示本次参与精炼的原始记忆数量,observations_created 表示新生成的精炼结论数量。

步骤四:查看精炼结果

curl -sS \
  "${MEMORY_URL}/memories?user_id=${USER_ID}" \
  -H "Authorization: Token ${MEMORY_API_KEY}"

查询结果包含1Observation3raw memory:

{
  "results": [
    {
      "memory": "用户在工作出差时更喜欢选择上午出发的航班,并通常避开晚上七点以后出发的航班,因为会影响睡眠。",
      "fact_type": "observation"
    },
    {
      "memory": "用户通常避开晚上七点以后出发的航班,因为会影响睡眠",
      "fact_type": "raw"
    },
    {
      "memory": "用户在工作出差时更喜欢选择上午出发的航班",
      "fact_type": "raw"
    },
    {
      "memory": "用户在出差乘坐飞机时总是优先选择靠过道的座位",
      "fact_type": "raw"
    }
  ],
  "total": 4
}

fact_typeobservation 的记录就是精炼结果;原始记忆仍然保留,可以用于追溯和核验。

从结果可以看到,系统保留了3条原始记忆,并将其中两条航班时间偏好合成为一条更完整的Observation;座位偏好作为独立主题继续保留。

使用建议

  • 持续服务场景使用自动模式:适合让新记忆在后台持续参与精炼。

  • 已有大量历史记忆时手动触发:可以按用户或Agent范围集中整理一次。

  • 先积累再精炼:多条相关记忆能够形成更有价值的结论;只有一条信息时,通常保留原始记忆即可。

  • 与实时更新配合使用:明确的状态变化可以在写入时及时更新,跨会话的归纳总结再交给记忆精炼完成。

  • 保留原始记忆:精炼用于提高理解和召回效率,原始记录仍可用于追溯和审计。