Dream analyse de manière asynchrone le contenu existant dans un magasin de mémoire pour fusionner, dédupliquer, corriger et réorganiser les données.
Dream prend en charge deux types de magasins de mémoire : structuré et fichier. Les interfaces des tâches sont identiques, mais l'application des résultats diffère.
|
Magasin de mémoire |
Entrée |
Méthode de sortie |
|
Magasin de mémoire structuré |
Mémoire à long terme et messages bruts |
Génère des propositions ou applique des actions de mémoire à long terme selon un seuil de confiance ou un plan approuvé |
|
Magasin de mémoire de fichiers accessible en écriture |
Fichiers texte dans une ou plusieurs portées |
Écrit automatiquement dans une seule portée de sortie déterministe |
Structured memory Dream
Au fil des conversations, la mémoire à long terme peut accumuler des doublons, des incohérences terminologiques, des entrées fusionnables ou des éléments obsolètes. Structured memory Dream affine en arrière-plan la mémoire à long terme ingérée et les messages bruts, puis produit des actions de consolidation applicables, garantissant ainsi la concision et la cohérence du magasin de mémoire au fil du temps. Il prend en charge deux modes : la génération de propositions pour confirmation manuelle préalable, et l'application automatique des actions dès qu'un seuil de confiance est atteint.
How it works
Dream utilise les données du magasin de mémoire comme entrée ; le service les analyse en arrière-plan et produit des actions de consolidation. Selon la cible de consolidation, les tâches se divisent en trois types. Les actions issues des tâches memory sont réécrites dans le magasin de mémoire, tandis que celles des tâches skill / profile sont uniquement produites sous forme d'événements autonomes, ne sont pas écrites dans le magasin de mémoire et sont consommées par l'appelant selon ses besoins.
|
taskType |
Cible de consolidation |
Types d'actions produits |
|
|
Mémoire à long terme : réécriture, fusion, déduplication et suppression des éléments obsolètes. Les actions appliquées mettent directement à jour le magasin de mémoire. |
|
|
|
Extrait des compétences réutilisables des interactions historiques. Les actions sont produites sous forme d'événements et ne sont pas écrites dans le magasin de mémoire. |
|
|
|
Accumule un profil utilisateur structuré. Les actions sont produites sous forme d'événements et ne sont pas écrites dans le magasin de mémoire. |
|
Selon le niveau de confiance de votre activité métier envers les résultats de consolidation, choisissez l'un des modes d'application suivants.
|
applyMode |
Comportement |
|
|
La consolidation génère uniquement des propositions d'action dans l'état |
|
|
Les actions atteignant le seuil de confiance ( |
|
|
Une consolidation à effort élevé génère d'abord un plan incluant une liste d'autorisation de suppression et passe à l'état |
applyModen'est pris en charge que lorsquetaskType=memory; la transmission deskill/profilerenvoie une erreur de paramètre400. Les actions des tâchesskill/profile(EMIT_SKILL/EMIT_PROFILE) sont produites sous forme d'événements, ne sont pas écrites dans le magasin de mémoire et sont consommées et gérées par l'appelant — il n'existe aucun fluxapply.effortcontrôle l'intensité de la consolidation :low(par défaut) exécute une seule analyse bornée ;highautorise plusieurs cycles d'analyse. La consolidation de mémoire aveceffort=highdoit sélectionner explicitementsafe_autoouplan;applyMode=plandoit utilisereffort=high.
Quick start
Le workflow complet pour Structured memory Dream est le suivant : créer une tâche de consolidation → interroger l'état de la tâche → examiner les propositions d'action → appliquer les actions. Après application, relisez la mémoire à long terme pour vérifier les résultats.
Le flux d'état typique est : queued → running → planning → (optionnel applying) → completed ; le mode plan passe à l'état awaiting_plan_approval avant l'exécution. Les autres états terminaux incluent completed_with_failures, failed, cancelled. L'exemple suivant utilise le mode proposal :
Console
Étape 1 : Créer une tâche de consolidation
Connectez-vous au magasin de mémoire et, dans le volet de navigation de gauche, sélectionnez Agentic Task > Memory Dream.
-
Dans le coin supérieur droit, cliquez sur Create Task et configurez les paramètres suivants dans la boîte de dialogue :
Élément de formulaire
Description
Paramètre correspondant
Type de tâche
Sélectionnez Memory consolidation.
taskType=memoryPortée d'entrée
Portée à consolider. Vous pouvez utiliser le caractère générique
*pour couvrir plusieurs niveaux.scopesProfondeur de traitement
Standard (une seule analyse bornée) ou High-effort (plusieurs cycles d'analyse).
effort=low/highMode d'application
Générer uniquement des suggestions (recommandé ; appliquer après confirmation manuelle).
applyMode=proposalMode de portée de sortie
Conserver la portée d'origine ou Promouvoir la portée.
scopeOutputMode=preserve_scope/promote_scopeInstructions de consolidation
Facultatif. Exigences de consolidation personnalisées.
instructions -
Après soumission, la tâche s'exécute de manière asynchrone et génère un ID de tâche (
dreamId). L'état commence à évoluer depuisqueued.Lorsque vous sélectionnez High-effort pour la profondeur de traitement, le mode d'application doit être safe_auto ou plan (contrainte liée à
effort=high).
Étape 2 : Examiner la tâche et les suggestions
Dans la liste des tâches Memory Dream, attendez que l'état de la tâche cible devienne Completed (
completed). Cliquez sur Refresh pour mettre à jour l'état.Cliquez sur la tâche pour ouvrir ses détails et afficher la action list produite. Chaque action contient le type d'action (
ADD/UPDATE/DELETE/MERGE/NOOP), la mémoire cible, le nouveau contenu consolidé, la raison (reason), la confiance (confidence) et l'état.En mode
proposal, toutes les actions sont initialement à l'état To be applied (proposed) et ne modifient pas le magasin de mémoire tant qu'elles ne sont pas appliquées.
Étape 3 : Appliquer les actions et vérifier
Dans les détails de la tâche, sélectionnez les actions à appliquer (
NOOPsignifie qu'aucune modification n'est nécessaire et peut rester non sélectionné).Cliquez sur Apply. Le service met à jour la mémoire à long terme selon les actions sélectionnées. Les actions
DELETEsont irréversibles après suppression.En mode
plan, vous devez d'abord approuver la liste d'autorisation de suppression dans le plan avant l'exécution.Après application, relisez la liste des mémoires sous Memory data management > Long-term memory pour confirmer que les résultats de consolidation répondent aux attentes.
SDK
Appelez les quatre interfaces dans l'ordre : créer la tâche, interroger l'état, examiner les propositions d'action et appliquer les actions.
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 the 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 the 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',
});
Key parameters
Le tableau suivant répertorie les principaux paramètres pour la création d'une tâche de consolidation. Pour la plage de valeurs de chaque paramètre, consultez Limitations and notes.
|
Paramètre |
Description |
|
|
Liste des portées à consolider. Obligatoire. Jusqu'à 20. |
|
|
Liste des ID d'action lors de l'application des actions. Obligatoire pour |
|
|
Seuils d'application automatique. Les clés sont |
|
|
Emplacement des résultats de consolidation : |
|
|
|
|
|
Limiter la plage horaire des messages à consolider. |
|
|
Nombre maximal de sessions traitées lors d'une seule consolidation. |
|
|
Nombre maximal de messages traités lors d'une seule consolidation. |
|
|
Nombre maximal de mémoires traitées lors d'une seule consolidation. |
|
|
Nombre maximal de portées après expansion. |
|
|
Instructions de consolidation personnalisées. Jusqu'à 4 000 caractères. |
Usage recommendations
Ne bloquez pas les chemins de requête en ligne en attendant les résultats de consolidation. Les tâches de consolidation s'exécutent de manière asynchrone en arrière-plan ; interrogez
GetMemoryDreamTaskpour obtenir la progression.En production, privilégiez le mode
proposalet n'appliquez qu'après confirmation manuelle ou programmatique avecapply. Lorsque vous avez suffisamment confiance dans les résultats, définissez des seuils raisonnables pouradd/update/mergedansconfidenceThresholdset activez le modesafe_auto.Pour une consolidation programmée, utilisez
incremental=trueafin d'éviter de retraiter l'intégralité des données à chaque fois.
File memory Dream
File memory Dream consolide de manière asynchrone les fichiers texte dans un magasin de mémoire de fichiers accessible en écriture. Il peut lire les fichiers existants depuis une ou plusieurs portées et écrire automatiquement le résultat complet (dédupliqué, résumé, corrigé et réorganisé) dans une seule portée de sortie déterministe.
Applicability
Avant d'utiliser File memory Dream, assurez-vous que le magasin de mémoire remplit les conditions suivantes :
Le magasin de mémoire a été créé avec
inputType=fileetoutputTypes=["file"]. Les fichiers en lecture seule générés à partir de messages ne prennent pas en charge File Dream.L'entrée et la sortie doivent appartenir au même magasin de mémoire. L'entrée peut couvrir plusieurs portées, mais la sortie doit être une portée complète à quatre niveaux sans caractères génériques.
Seuls les fichiers texte UTF-8 sont consolidés ; les fichiers binaires et le chemin système
/.wiki/sont exclus de la consolidation.Une seule tâche accepte jusqu'à 8 sélecteurs de portée. Les portées avec caractères génériques sont développées niveau par niveau depuis la droite, et le nombre de portées développées est limité par
expandedScopeLimit.
Les scénarios adaptés à File Dream incluent la fusion de plusieurs enregistrements d'exécution du même agent dans un manuel partagé, la consolidation des conventions de projet provenant de plusieurs agents, la fusion de fichiers dupliqués ou la réorganisation des répertoires tout en préservant les différences sources.
Quick start
L'exemple suivant consolide tous les enregistrements d'exécution de deux agents dans une portée partagée.
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 the task: read files from multiple input scopes; the consolidated result is automatically written 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 the 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 the task: read files from multiple input scopes; the consolidated result is automatically written 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 the 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);
}
Pour File Dream,
taskTypeest fixé àmemory(peut être omis),effortest fixé àhigh,applyModeest fixé àauto(tous peuvent être omis). Ne transmettez pas de fenêtres temporelles de message, niincremental,scopeOutputMode,confidenceThresholds,maxSessions,maxMessagesoumaxMemories. Réutilisez le mêmeclientTokenlors de la nouvelle tentative de la même requête métier pour éviter de créer des tâches en double.get_memory_dream_taskrenvoie les sélecteurs d'entrée, les portées réellement développées, la portée de sortie et le nombre de fichiers figés. Les états terminaux incluentcompleted,completed_with_failures,failed,cancelled; seul l'étatcompletedavec zéro action échouée compte comme une réussite totale.Les actions de fichier utilisent
ADD,UPDATE,DELETE; un renommage apparaît comme une actionUPDATEavec un nouveaupath.itemChange.sourceVersionIdsenregistre les versions de fichier sur lesquelles la consolidation s'est basée et renvoieresultItemIdetresultVersionIden cas d'écriture réussie. Silist_memory_dream_actionsrenvoie unnextToken, continuez la pagination jusqu'à ce qu'il soit vide.Les actions de fichier sont appliquées automatiquement pendant l'exécution de la tâche et ne nécessitent aucune confirmation manuelle. Ne jugez pas la qualité de la consolidation uniquement sur la base de l'état de la tâche ou du nombre d'actions ; relisez le répertoire de sortie, le contenu, les versions et les sources pour confirmer qu'ils répondent à vos exigences métier.
Limits and considerations
|
Élément |
Limite ou comportement |
|
Sélecteurs de portée d'entrée |
1 à 8 |
|
Portée de sortie |
Une seule portée complète à quatre niveaux ; les caractères génériques ne sont pas autorisés |
|
|
Par défaut 200, maximum 1 000 |
|
|
Par défaut 1 000, maximum 5 000 ; inclut les fichiers d'entrée dédupliqués et les fichiers existants dans la portée de sortie |
|
|
Jusqu'à 4 000 octets (UTF-8) |
|
Type de fichier |
Fichiers texte UTF-8 uniquement ; jusqu'à 100 KiB par fichier |
|
Chemin système |
Ne lit pas et n'écrit pas dans |
|
Méthode d'application |
Écriture automatique ; |
Pendant l'exécution de la tâche, chaque mise à jour et suppression utilise les versions de fichier pour la protection contre les accès concurrents. Lorsque d'autres appelants modifient simultanément les fichiers de sortie, les actions peuvent échouer ; relisez les fichiers actuels, puis créez une nouvelle tâche de consolidation.
L'annulation ou l'échec n'annule pas les actions de fichier déjà appliquées. Lors de la gestion d'un état terminal non réussi, listez d'abord toutes les actions et relisez la portée de sortie, puis décidez s'il faut conserver, corriger ou reconsolider.