Todos os produtos
Search
Central de documentação

Tablestore:Memory Dream

Última atualização: Oct 21, 2026

O Memory Dream analisa assincronamente o conteúdo existente de um repositório de memória para mesclar, deduplicar, corrigir e reorganizar os dados. Use o Memory Dream para manter a memória de longo prazo e os arquivos de texto armazenados concisos e consistentes à medida que as conversas se acumulam.

O Memory Dream oferece suporte a dois tipos de repositórios de memória: estruturados e de arquivos. As interfaces de tarefa são as mesmas, mas os resultados são aplicados de maneiras diferentes.

Repositório de memória

Entrada

Método de saída

Repositório de memória estruturado

Memória de longo prazo e mensagens brutas

Gera propostas ou aplica ações de memória de longo prazo com base em um nível de confiança ou em um plano aprovado

Repositório de memória de arquivos graváveis

Arquivos de texto em um ou mais escopos

Grava automaticamente em um único escopo de saída determinístico

Memory Dream estruturado

Conforme as conversas são gravadas continuamente, a memória de longo prazo pode acumular duplicatas, formulações inconsistentes, entradas mescláveis ou itens desatualizados. O Memory Dream estruturado refina a memória de longo prazo e as mensagens brutas armazenadas em segundo plano e produz ações de consolidação aplicáveis, e mantém o repositório de memória conciso e consistente ao longo do tempo. Ele oferece suporte a dois modos: gerar propostas para confirmação manual prévia e aplicar ações automaticamente quando um limiar for atingido.

Como funciona

O Memory Dream usa os dados do repositório de memória como entrada. O service analisa os dados em segundo plano e produz ações de consolidação. As tarefas dividem-se em três tipos com base em seus alvos de consolidação. O sistema grava as ações das tarefas memory de volta no repositório de memória. O sistema produz as ações das tarefas skill e profile apenas como eventos independentes; elas não são gravadas no repositório de memória e o chamador as consome conforme necessário.

taskType

Alvo de consolidação

Tipos de ação produzidos

memory (padrão)

Memória de longo prazo: reescreve, mescla, deduplica e exclua itens desatualizados. As ações aplicadas atualize diretamente o repositório de memória.

ADD/UPDATE/DELETE/MERGE/NOOP

skill

Extrai habilidades reutilizáveis de interações históricas. O sistema produz as ações como eventos e não as grava no repositório de memória.

EMIT_SKILL

profile

Cria um perfil de usuário estruturado. O sistema produz as ações como eventos e não as grava no repositório de memória.

EMIT_PROFILE

Escolha um modo de aplicação com base no nível de confiança nos resultados da consolidação.

applyMode

Comportamento

proposal (padrão)

A consolidação gera propostas de ação apenas no status proposed. O chamador as aplica explicitamente usando ApplyMemoryDreamActions.

safe_auto

O service aplica automaticamente as ações que atingem o limiar de nível de confiança (confidenceThresholds) e retém as ações restantes como propostas.

plan

A consolidação de alto esforço primeiro gera um plano que inclui uma lista de permissões de exclusão e entra em awaiting_plan_approval. A execução ocorre após a aprovação do plano pelo chamador.

As seguintes regras aplicam-se a applyMode e effort:

  • Restrição de tipo de tarefa — O applyMode aceita apenas taskType=memory. A inclusão de skill ou profile resulta em erro de parâmetro 400. O sistema gera as ações das tarefas skill e profile (EMIT_SKILL e EMIT_PROFILE) como eventos, não as grava no repositório de memória, e o chamador as consome e trata. Não há fluxo apply disponível.

  • Intensidade de consolidação — O effort controla a intensidade da consolidação. O valor low (padrão) realiza uma única análise delimitada, enquanto high permite várias rodadas de análise. Para a consolidação de memória com effort=high, é necessário selecione explicitamente safe_auto ou plan. O applyMode=plan exige o uso de effort=high.

Início rápido

O fluxo de trabalho completo para o Memory Dream estruturado consiste em: crie uma tarefa de consolidação, consultar o status da tarefa, revisar as propostas de ação e aplicar as ações. Após a aplicação das ações, leia a memória de longo prazo novamente para que verifique os resultados.

O fluxo de status típico é o seguinte: queued → running → planning → (opcional) applying → completed. No modo plan, a tarefa entra em awaiting_plan_approval antes da execução. Outros status terminais incluem completed_with_failures, failed e cancelled. O exemplo a seguir usa o modo proposal:

Console

Etapa 1: crie uma tarefa de consolidação

  1. Faça logon no repositório de memória. No painel de navegação à esquerda, escolha Agentic Task > Memory Dream.

  2. No canto superior direito, clique em Create Task. Na caixa de diálogo, configure os seguintes parâmetros:

Item do formulário

Descrição

Parâmetro correspondente

Tipo de tarefa

selecione Memory Consolidation.

taskType=memory

Escopo de entrada

O escopo a ser consolidado. Use o curinga * para abranger vários níveis.

scopes

Profundidade de processamento

Standard (uma única análise delimitada) ou High-effort (várias rodadas de análise).

effort=low/high

Modo de aplicação

Proposal Only (recomendado; aplique após a confirmação manual).

applyMode=proposal

Modo de escopo de saída

Keep Original Scope ou Promote Scope.

scopeOutputMode=preserve_scope/promote_scope

Instruções de consolidação

Opcional. Especifique requisitos personalizados de consolidação.

instructions

Após o envio, a tarefa é executada assincronamente e gera um ID de tarefa (dreamId). O fluxo de status começa com queued.

Importante

Se você selecione High-effort para a profundidade de processamento, defina o modo de aplicação como safe_auto ou plan (a restrição para effort=high).

Etapa 2: Revisar a tarefa e as sugestões

  1. Na lista de tarefas do Memory Dream, aguarde até que o status da tarefa de destino se torne Completed (completed). clique em Refresh para atualize o status.

  2. clique em a tarefa para abrir seus detalhes e visualize a action list resultante. Cada ação inclui o tipo de ação (ADD/UPDATE/DELETE/MERGE/NOOP), memória de destino, conteúdo recém-consolidado, motivo (reason), nível de confiança (confidence) e status. No modo proposal, todas as ações têm inicialmente o status To be applied (proposed) e não alteram o repositório de memória até que sejam aplicadas.

Etapa 3: Aplicar ações e verifique

  1. Nos detalhes da tarefa, selecione as ações a serem aplicadas. NOOP indica que nenhuma alteração é necessária e não precisa ser selecionado.

  2. clique em Apply. O service atualize a memória de longo prazo de acordo com as ações selecionadas. As ações DELETE não podem ser recuperadas após a exclusão.

  3. No modo plan, aprove a lista de permissões de exclusão no plano antes da execução.

  4. Após a aplicação das ações, leia novamente a lista de memória em Memory data management > Long-Term Memory para confirme se os resultados da consolidação atendem às expectativas.

SDK

Chame as quatro API a seguir em sequência: crie a tarefa, consultar o status, revisar as propostas de ação e aplicar as ações.

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

# 1. Create a consolidation task
resp = client.create_memory_dream_task({
    "memoryStoreName": "agent_memory",
    "scopes": [{"appId": "app-001", "tenantId": "user-001", "agentId": "assistant", "runId": "session-001"}],
    "taskType": "memory",
    "effort": "low",
    "applyMode": "proposal",
    "instructions": "Merge duplicate memories and delete outdated items",
    "clientToken": "dream-001",
})
dream_id = resp.get("dreamId")

# 2. Poll the task status until it reaches a terminal state
task = client.get_memory_dream_task({
    "memoryStoreName": "agent_memory",
    "dreamId": dream_id,
})
print(f"status: {task.get('status')}, actions: {task.get('actions')}")

# 3. Review action proposals
actions = client.list_memory_dream_actions({
    "memoryStoreName": "agent_memory",
    "dreamId": dream_id,
    "limit": 100,
}).get("actions", [])

# 4. Apply the selected actions (skip NOOP)
client.apply_memory_dream_actions({
    "memoryStoreName": "agent_memory",
    "dreamId": dream_id,
    "mode": "actions",
    "actionIds": [a["actionId"] for a in actions if a["action"] != "NOOP"],
    "applier": "operator-001",
})

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

// 1. Create a consolidation task
const created = await client.createMemoryDreamTask({
  memoryStoreName: 'agent_memory',
  scopes: [{ appId: 'app-001', tenantId: 'user-001', agentId: 'assistant', runId: 'session-001' }],
  taskType: 'memory',
  effort: 'low',
  applyMode: 'proposal',
  instructions: 'Merge duplicate memories and delete outdated items',
  clientToken: 'dream-001',
});
const dreamId = created.dreamId;

// 2. Poll the task status until it reaches a terminal state
const task = await client.getMemoryDreamTask({
  memoryStoreName: 'agent_memory',
  dreamId,
});
console.log(task.status, task.actions);

// 3. Review action proposals
const { actions } = await client.listMemoryDreamActions({
  memoryStoreName: 'agent_memory',
  dreamId,
  limit: 100,
});

// 4. Apply the selected actions (skip NOOP)
await client.applyMemoryDreamActions({
  memoryStoreName: 'agent_memory',
  dreamId,
  mode: 'actions',
  actionIds: actions.filter((a) => a.action !== 'NOOP').map((a) => a.actionId),
  applier: 'operator-001',
});

Parâmetros principais

A tabela a seguir descreve os parâmetros principais para a criação de uma tarefa de consolidação. Para os valores válidos de cada parâmetro, consulte Limitations and notes.

Parâmetro

Descrição

scopes

A lista de escopos a serem consolidados. Obrigatório. Suporta até 20 escopos.

actionIds

A lista de IDs de ação para aplicar ações. Obrigatório para ApplyMemoryDreamActions; não aceita matriz vazia. Obtenha os IDs a partir da resposta de ListMemoryDreamActions.

confidenceThresholds

Limiares de aplicação automática. As chaves são add/update/merge e os valores variam de 0 a 1. As ações DELETE não aceitam limiares automáticos e o sistema sempre as retém como propostas.

scopeOutputMode

Destino dos resultados da consolidação: preserve_scope (padrão, preserva o escopo original) ou promote_scope (promove para um escopo de nível superior).

incremental

Quando true, a consolidação começa incrementalmente a partir do progresso da última execução de processamento bem-sucedida. Ideal para gatilhos agendados. O padrão, false, realiza a consolidação completa.

minTimestamp/maxTimestamp

Limitam o intervalo de tempo das mensagens a serem consolidadas.

maxSessions

O número máximo de sessões processadas em uma única consolidação.

maxMessages

O número máximo de mensagens processadas em uma única consolidação.

maxMemories

O número máximo de memórias processadas em uma única consolidação.

expandedScopeLimit

O número máximo de escopos após a expansão.

instructions

Instruções personalizadas de consolidação. Até 4.000 caracteres.

Recomendações de uso

  • Não bloqueie caminhos de requisição online — As tarefas de consolidação são executadas assincronamente em segundo plano. Consulte GetMemoryDreamTask para obter o progresso em vez de aguardar os resultados da consolidação na mesma requisição.

  • **Comece com o modo proposal** — Em um ambiente de produção, prefira o modo proposal e aplique ações apenas após a confirmação manual ou programática. Ao confiar suficientemente nos resultados, defina valores apropriados de confidenceThresholds para add, update e merge e, em seguida, ative o modo safe_auto.

  • execute a consolidação agendada incrementalmente — Para consolidação agendada, use incremental=true para evitar o reprocessamento completo a cada execução.

Memory Dream de arquivos

O Memory Dream de arquivos consolida assincronamente arquivos de texto em um repositório de memória de arquivos graváveis. Ele lê os arquivos existentes de um ou mais escopos e, em seguida, grava automaticamente o resultado completo, deduplicado, resumido, corrigido e reorganizado em um único escopo de saída determinístico.

Aplicabilidade

Antes de usar o Memory Dream de arquivos, certifique-se de que o repositório de memória atenda às seguintes condições:

  • Configuração do repositório de memória — crie o repositório de memória com inputType=file e outputTypes=["file"]. O Dream de arquivos não suporta arquivos somente leitura gerados a partir de mensagens.

  • Alinhamento de entrada e saída — A entrada e a saída devem pertencer ao mesmo repositório de memória. A entrada pode abranger vários escopos, mas a saída deve ser um escopo completo de quatro níveis sem curingas.

  • Tipos de arquivo suportados — O sistema consolida apenas arquivos de texto UTF-8. A consolidação exclua arquivos binários e o caminho de sistema /.wiki/.

  • Seletores de escopo — Uma única tarefa aceita até 8 seletores de escopo. O sistema expande escopos com curingas por nível a partir da direita, e o expandedScopeLimit limita o número de escopos expandidos. O Dream de arquivos é adequado para os seguintes cenários:

  • Consolidar vários registros de execução do mesmo agente em um manual compartilhado

  • Coletar convenções de projeto de vários agentes

  • Mesclar arquivos duplicados

  • Reorganizar diretórios preservando as diferenças de source

Início rápido

O exemplo a seguir consolida todos os registros de execução de dois agentes em um escopo compartilhado.

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

output_scope = {
    "appId": "project-app",
    "tenantId": "team-a",
    "agentId": "shared-agent",
    "runId": "knowledge",
}

# 1. Create a task: read files from multiple input scopes and automatically write the consolidated result to the single output scope
resp = client.create_memory_dream_task({
    "memoryStoreName": "agent_files",
    "scopes": [
        {"appId": "project-app", "tenantId": "team-a", "agentId": "research-agent", "runId": "*"},
        {"appId": "project-app", "tenantId": "team-a", "agentId": "coding-agent", "runId": "*"},
    ],
    "outputScope": output_scope,
    "instructions": "Organize project materials by topic and remove duplicate content; when conflicts exist, preserve the applicable scope and differences.",
    "maxItems": 1000,
    "expandedScopeLimit": 200,
    "clientToken": "project-file-dream-001",
})
dream_id = resp.get("dreamId")

# 2. Poll the task until it reaches a terminal state
task = client.get_memory_dream_task({
    "memoryStoreName": "agent_files",
    "dreamId": dream_id,
})
print(f"status: {task.get('status')}, actions: {task.get('actions')}")

# 3. Check the file changes actually performed by the service
actions = client.list_memory_dream_actions({
    "memoryStoreName": "agent_files",
    "dreamId": dream_id,
    "limit": 100,
}).get("actions", [])

# 4. Read back the result files under the output scope
items = client.list_items({
    "memoryStoreName": "agent_files",
    "scope": output_scope,
    "limit": 100,
}).get("items", [])
for it in items:
    doc = client.get_item({
        "memoryStoreName": "agent_files",
        "scope": output_scope,
        "path": it["path"],
    })
    print(doc.get("path"), doc.get("content"))

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const outputScope = {
  appId: 'project-app',
  tenantId: 'team-a',
  agentId: 'shared-agent',
  runId: 'knowledge',
};

// 1. Create a task: read files from multiple input scopes and automatically write the consolidated result to the single output scope
const created = await client.createMemoryDreamTask({
  memoryStoreName: 'agent_files',
  scopes: [
    { appId: 'project-app', tenantId: 'team-a', agentId: 'research-agent', runId: '*' },
    { appId: 'project-app', tenantId: 'team-a', agentId: 'coding-agent', runId: '*' },
  ],
  outputScope,
  instructions: 'Organize project materials by topic and remove duplicate content; when conflicts exist, preserve the applicable scope and differences.',
  maxItems: 1000,
  expandedScopeLimit: 200,
  clientToken: 'project-file-dream-001',
});
const dreamId = created.dreamId;

// 2. Poll the task until it reaches a terminal state
const task = await client.getMemoryDreamTask({
  memoryStoreName: 'agent_files',
  dreamId,
});
console.log(task.status, task.actions);

// 3. Check the file changes actually performed by the service
const { actions } = await client.listMemoryDreamActions({
  memoryStoreName: 'agent_files',
  dreamId,
  limit: 100,
});

// 4. Read back the result files under the output scope
const { items } = await client.listItems({
  memoryStoreName: 'agent_files',
  scope: outputScope,
  limit: 100,
});
for (const it of items) {
  const doc = await client.getItem({
    memoryStoreName: 'agent_files',
    scope: outputScope,
    path: it.path,
  });
  console.log(doc.path, doc.content);
}

As seguintes regras aplicam-se às tarefas do Memory Dream de arquivos:

  • Valores de parâmetros fixos — Para o Dream de arquivos, taskType é fixo em memory (e pode ser omitido), effort é fixo em high e applyMode é fixo em auto (ambos podem ser omitidos). Não informe uma janela de tempo de mensagem, incremental, scopeOutputMode, confidenceThresholds, maxSessions, maxMessages ou maxMemories.

  • Retentativas idempotentes — Reutilize o mesmo clientToken ao repetir a mesma requisição de negócios para evitar a criação de tarefas duplicadas.

  • Resposta da tarefa — get_memory_dream_task retorna os seletores de entrada, os escopos efetivamente expandidos, o escopo de saída e o número de arquivos congelados. Os status terminais incluem completed, completed_with_failures, failed e cancelled. Apenas o status completed com zero ações com falha representa um sucesso completo.

  • Ações de arquivo — As ações de arquivo usam ADD, UPDATE e DELETE. O sistema representa uma renomeação como um UPDATE com um novo path. itemChange.sourceVersionIds registra as versões de arquivo usadas para consolidação. Uma gravação bem-sucedida retorna resultItemId e resultVersionId. Se list_memory_dream_actions retornar um nextToken, continue a paginação até que ele esteja vazio.

  • Aplicação automática — O sistema aplica as ações de arquivo automaticamente durante a execução da tarefa, e elas não exigem confirmação manual. Não avalie a qualidade da consolidação apenas pelo status da tarefa ou pela contagem de ações. Leia novamente o diretório de saída, o conteúdo, as versões e as source para confirme se atendem aos requisitos de negócios.

Limites e considerações

Os seguintes limites aplicam-se ao Memory Dream de arquivos:

Item

Limite ou comportamento

Seletores de escopo de entrada

1 a 8

Escopo de saída

Um escopo completo de quatro níveis; não aceita curingas

expandedScopeLimit

Padrão: 200. Máximo: 1.000.

maxItems

Padrão: 1.000. Máximo: 5.000. Inclui arquivos de entrada deduplicados e arquivos existentes no escopo de saída.

instructions

Máximo de 4.000 bytes (UTF-8)

Tipo de arquivo

Apenas arquivos de texto UTF-8; máximo de 100 KiB por arquivo

Caminho do sistema

Não lê nem grava em /.wiki/

Método de aplicação

Grava automaticamente. Não aceita proposal, safe_auto, plan ou Apply manual.

Além desses limites, observe o seguinte comportamento:

  • Modificações simultâneas — Durante a execução da tarefa, cada atualização e exclusão utiliza versões de arquivo para proteção contra simultaneidade. Se outros chamadores modifique os arquivos de saída ao mesmo tempo, as ações podem falhar. Leia novamente os arquivos atuais antes de criar uma nova tarefa de consolidação.

  • Sem reversão em caso de cancelamento ou falha — O cancelamento ou a falha não reverte as ações de arquivo já aplicadas. Ao lidar com um status terminal de não sucesso, liste primeiro todas as ações, leia novamente o escopo de saída e, em seguida, decida se deve manter, corrigir ou consolidar novamente.