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 |
|
|
Memória de longo prazo: reescreve, mescla, deduplica e exclua itens desatualizados. As ações aplicadas atualize diretamente o repositório de memória. |
|
|
|
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. |
|
|
|
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. |
|
Escolha um modo de aplicação com base no nível de confiança nos resultados da consolidação.
|
applyMode |
Comportamento |
|
|
A consolidação gera propostas de ação apenas no status |
|
|
O service aplica automaticamente as ações que atingem o limiar de nível de confiança ( |
|
|
A consolidação de alto esforço primeiro gera um plano que inclui uma lista de permissões de exclusão e entra em |
As seguintes regras aplicam-se a applyMode e effort:
Restrição de tipo de tarefa — O
applyModeaceita apenastaskType=memory. A inclusão deskillouprofileresulta em erro de parâmetro400. O sistema gera as ações das tarefasskilleprofile(EMIT_SKILLeEMIT_PROFILE) como eventos, não as grava no repositório de memória, e o chamador as consome e trata. Não há fluxoapplydisponível.Intensidade de consolidação — O
effortcontrola a intensidade da consolidação. O valorlow(padrão) realiza uma única análise delimitada, enquantohighpermite várias rodadas de análise. Para a consolidação de memória comeffort=high, é necessário selecione explicitamentesafe_autoouplan. OapplyMode=planexige o uso deeffort=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
Faça logon no repositório de memória. No painel de navegação à esquerda, escolha Agentic Task > Memory Dream.
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. |
|
|
Escopo de entrada |
O escopo a ser consolidado. Use o curinga |
|
|
Profundidade de processamento |
Standard (uma única análise delimitada) ou High-effort (várias rodadas de análise). |
|
|
Modo de aplicação |
Proposal Only (recomendado; aplique após a confirmação manual). |
|
|
Modo de escopo de saída |
Keep Original Scope ou Promote Scope. |
|
|
Instruções de consolidação |
Opcional. Especifique requisitos personalizados de consolidação. |
|
Após o envio, a tarefa é executada assincronamente e gera um ID de tarefa (dreamId). O fluxo de status começa com queued.
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
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.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 modoproposal, 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
Nos detalhes da tarefa, selecione as ações a serem aplicadas.
NOOPindica que nenhuma alteração é necessária e não precisa ser selecionado.clique em Apply. O service atualize a memória de longo prazo de acordo com as ações selecionadas. As ações
DELETEnão podem ser recuperadas após a exclusão.No modo
plan, aprove a lista de permissões de exclusão no plano antes da execução.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 |
|
|
A lista de escopos a serem consolidados. Obrigatório. Suporta até 20 escopos. |
|
|
A lista de IDs de ação para aplicar ações. Obrigatório para |
|
|
Limiares de aplicação automática. As chaves são |
|
|
Destino dos resultados da consolidação: |
|
|
Quando |
|
|
Limitam o intervalo de tempo das mensagens a serem consolidadas. |
|
|
O número máximo de sessões processadas em uma única consolidação. |
|
|
O número máximo de mensagens processadas em uma única consolidação. |
|
|
O número máximo de memórias processadas em uma única consolidação. |
|
|
O número máximo de escopos após a expansão. |
|
|
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
GetMemoryDreamTaskpara 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 modoproposale aplique ações apenas após a confirmação manual ou programática. Ao confiar suficientemente nos resultados, defina valores apropriados deconfidenceThresholdsparaadd,updateemergee, em seguida, ative o modosafe_auto.execute a consolidação agendada incrementalmente — Para consolidação agendada, use
incremental=truepara 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=fileeoutputTypes=["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
expandedScopeLimitlimita 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 emmemory(e pode ser omitido),efforté fixo emhigheapplyModeé fixo emauto(ambos podem ser omitidos). Não informe uma janela de tempo de mensagem,incremental,scopeOutputMode,confidenceThresholds,maxSessions,maxMessagesoumaxMemories.Retentativas idempotentes — Reutilize o mesmo
clientTokenao repetir a mesma requisição de negócios para evitar a criação de tarefas duplicadas.Resposta da tarefa —
get_memory_dream_taskretorna os seletores de entrada, os escopos efetivamente expandidos, o escopo de saída e o número de arquivos congelados. Os status terminais incluemcompleted,completed_with_failures,failedecancelled. Apenas o statuscompletedcom zero ações com falha representa um sucesso completo.Ações de arquivo — As ações de arquivo usam
ADD,UPDATEeDELETE. O sistema representa uma renomeação como umUPDATEcom um novopath.itemChange.sourceVersionIdsregistra as versões de arquivo usadas para consolidação. Uma gravação bem-sucedida retornaresultItemIderesultVersionId. Selist_memory_dream_actionsretornar umnextToken, 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 |
|
|
Padrão: 200. Máximo: 1.000. |
|
|
Padrão: 1.000. Máximo: 5.000. Inclui arquivos de entrada deduplicados e arquivos existentes no escopo de saída. |
|
|
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 |
|
Método de aplicação |
Grava automaticamente. Não aceita |
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.