记忆整理

更新时间:
复制 MD 格式

随着对话不断写入,长期记忆会出现重复、表述不一致、可合并或已过时的情况。记忆整理(Dream)在后台异步对已入库的长期记忆和原始消息二次提炼、归并、去重,产出可应用的整理动作,让记忆库长期保持精炼一致。支持先生成提案再人工确认,以及达阈值自动应用两种模式。

工作原理

记忆整理(Dream)以记忆库中的数据为输入,由服务在后台分析并产出整理动作。按整理对象不同,任务分为三种类型。其中 memory 类型任务的动作会回写记忆库;skill / profile 类型任务的动作仅作为独立事件产出,不写入记忆库,由调用方按需消费。

taskType

整理对象

产出动作类型

memory(默认)

长期记忆:改写、合并、去重、删除过时项。动作应用后直接更新记忆库。

ADD / UPDATE / DELETE / MERGE / NOOP

skill

从历史交互中提取可复用的技能。动作以事件形式产出,不写入记忆库。

EMIT_SKILL

profile

沉淀结构化用户画像。动作以事件形式产出,不写入记忆库。

EMIT_PROFILE

根据业务对整理结果的信任度,可选择两种应用模式。

applyMode

行为

proposal(默认)

整理只生成 proposed 状态的动作提案,由调用方通过 ApplyMemoryDreamActions 显式应用。

safe_auto

达到置信度阈值(confidenceThresholds)的动作由服务自动应用,其余仍以提案形式保留。

说明

applyMode 仅支持 taskType=memory。传 skill / profile 时会返回 403 错误(applyMode is not supported for taskType=skill|profile)。skill / profile 任务的动作(EMIT_SKILL / EMIT_PROFILE)作为事件产出,不写入记忆库,由调用方自行消费处理,无 apply 流程。

快速开始

proposal 模式下,一次完整流程从创建整理任务到应用动作依次调用以下 4 个接口。整理任务的状态流转为:queuedrunningplanning →(可选 applying)→ completed,其他终态包括 completed_with_failuresfailedcancelled

步骤 1:创建整理任务

POST /CreateMemoryDreamTask
{
  "memoryStoreName": "agent_memory",
  "scopes": [ { "appId": "app-001", "tenantId": "user-001" } ],
  "taskType": "memory",
  "applyMode": "proposal"
}

响应:

{
  "memoryStoreName": "agent_memory",
  "dreamId": "2a528008111f5dc3500c73fd965089f7",
  "status": "queued",
  "createdAt": "2026-06-17T07:21:25.329Z"
}

步骤 2:轮询任务状态

POST /GetMemoryDreamTask
{ "memoryStoreName": "agent_memory", "dreamId": "2a528008111f5dc3500c73fd965089f7" }
说明

任务刚创建时整理任务索引可能仍在建立,此时 GetMemoryDreamTask 可能短暂返回 409(错误信息 dream task index is still building, please retry shortly),稍后重试即可。

响应(completed):

{
  "dreamId": "2a528008111f5dc3500c73fd965089f7",
  "taskType": "memory",
  "applyMode": "proposal",
  "status": "completed",
  "actions": { "total": 2, "proposed": 2, "applied": 0, "skipped": 0, "failed": 0 },
  "input": { "sessionCount": 1, "messageCount": 1, "memoryCount": 2, "incremental": false },
  "finishedAt": "2026-06-17T07:21:32.276Z"
}

步骤 3:查看动作提案

POST /ListMemoryDreamActions
{ "memoryStoreName": "agent_memory", "dreamId": "2a528008111f5dc3500c73fd965089f7", "limit": 20 }

响应:

{
  "dreamId": "2a528008111f5dc3500c73fd965089f7",
  "actions": [
    {
      "actionId": "968768529cdfde8d56686a71e1c28227",
      "action": "UPDATE",
      "status": "proposed",
      "targetMemoryId": "d16fd038835d89ae8586f7814e5256c1",
      "newMemory": { "text": "User prefers concise responses.", "unitType": "atomic_fact" },
      "reason": "改写为更准确的 atomic_fact 表述。",
      "confidence": 0.95
    }
  ]
}

动作主要字段如下:

字段

说明

actionId

动作 ID,应用时使用。

action

动作类型:ADD / UPDATE / DELETE / MERGE / NOOP / EMIT_SKILL / EMIT_PROFILE

status

动作状态:proposed / applied / skipped / failed

targetScope / targetMemoryId

动作作用的 Scope 与目标记忆 ID(UPDATE / DELETE / MERGE)。

newMemory

新记忆内容(textunitType 等),用于 ADD / UPDATE / MERGE

reason

模型给出的动作理由。

confidence

置信度,0~1

步骤 4:应用动作

POST /ApplyMemoryDreamActions
{
  "memoryStoreName": "agent_memory",
  "dreamId": "2a528008111f5dc3500c73fd965089f7",
  "actionIds": ["968768529cdfde8d56686a71e1c28227", "a0f4715245920ea7b6a34c1828c6f1ae"]
}

响应:

{
  "dreamId": "2a528008111f5dc3500c73fd965089f7",
  "applied": 2,
  "failed": 0,
  "results": [
    { "actionId": "968768529cdfde8d56686a71e1c28227", "status": "applied", "memoryId": "bd14a67ed215c114896325d912c8fa71" }
  ]
}

关键参数

下表列出创建整理任务时的关键参数。各参数的取值范围详见 限制与注意事项

参数

说明

scopes

待整理的 Scope 列表,必填,最多 20 个。

actionIds

应用动作时的动作 ID 列表,ApplyMemoryDreamActions 必填,不支持空数组;从 ListMemoryDreamActions 的返回中获取。

confidenceThresholds

自动应用阈值。键为 add / update / merge,值范围 0~1DELETE 动作不支持自动阈值,始终以提案形式保留。

scopeOutputMode

整理结果归属:preserve_scope(默认,保留原 Scope)/ promote_scope(上提到更高层级)。

incremental

true 时从上次成功处理的进度增量整理(适合定时触发);默认 false 全量整理。

minTimestamp / maxTimestamp

限定整理的消息时间范围。

maxSessions

单次整理最多处理的 Session 数上限。

maxMessages

单次整理最多处理的 Message 数上限。

maxMemories

单次整理最多处理的 Memory 数上限。

expandedScopeLimit

Scope 展开后的最大数量上限。

instructions

自定义整理指令,最长 4000 字符。

使用建议

  • 在线链路不要阻塞等待整理结果。整理任务为后台异步执行,通过轮询 GetMemoryDreamTask 获取进度。

  • 生产环境优先使用 proposal 模式,人工或程序确认后再 apply;对结果信任度足够时,可对 add / update / merge 设置合理的 confidenceThresholds 阈值,并启用 safe_auto 模式。

  • 定时整理使用 incremental=true,避免每次全量重新处理。