Mémoire Conversationnelle
Gérez l'historique de conversation avec la mémoire unique et multi-sessions, garantissant unepersistance contextuelle.
Pourquoi la Mémoire Conversationnelle ?
Les LLMs sont sans état — ils ne se souviennent pas des messages précédents. La mémoire conversationnelle résout ce problème en stockant l'historique du chat et en l'injectant dans chaque nouvelle requête. Orka fournit une gestion automatique de la mémoire avec des stratégies de nettoyage configurables pour rester dans les limites de tokens.
# Mémoire Session Unique
Utilisez la mémoire session unique pour les chatbots simples ou quand vous n'avez besoin de suivre qu'une seule conversation à la fois.
import { Memory } from '@orka-js/memory-store'; const memory = new Memory({ maxMessages: 50, // Keep at most 50 messages strategy: 'sliding_window' // Trimming strategy}); // Add messages to the conversationmemory.addMessage({ role: 'user', content: 'My name is Alice.' });memory.addMessage({ role: 'assistant', content: 'Hello Alice! How can I help you today?' });memory.addMessage({ role: 'user', content: 'What is my name?' }); // Get the full historyconst history = memory.getHistory();/*[ { role: 'user', content: 'My name is Alice.', timestamp: 1708000000000 }, { role: 'assistant', content: 'Hello Alice! How can I help you today?', timestamp: 1708000001000 }, { role: 'user', content: 'What is my name?', timestamp: 1708000002000 }]*/ // Clear the conversationmemory.clear();- Méthodes de Memory
Interface de Gestion Mémoire
Stateful Context Control & Message Rotation
addMessage()IngestionChatMessage
Ajoute un message et déclenche la logique de nettoyage (fenêtre glissante).
getHistory()RetrievalChatMessage[]
Récupère l'état persistant sous forme de tableau pour l'injection dans le modèle.
getMessageCount()Telemetrynumber
Retourne la profondeur actuelle de la pile pour surveiller l'usage du contexte.
clear()Maintenancevoid
Réinitialise le buffer mémoire pour un nouvel état de session.
# Mémoire Multi-Sessions
Pour les applications multi-utilisateurs (APIs, chatbots servant plusieurs utilisateurs), utilisez SessionMemory pour gérer des conversations séparées par utilisateur/session. Chaque session a sa propre mémoire isolée avec un nettoyage automatique basé sur le TTL.
import { SessionMemory } from '@orka-js/memory-store'; const sessions = new SessionMemory({ maxMessages: 50, // Per-session message limit strategy: 'sliding_window', ttlMs: 3600_000, // Sessions expire after 1 hour of inactivity}); // User A's conversationsessions.addMessage('user-alice', { role: 'user', content: 'Hello!' });sessions.addMessage('user-alice', { role: 'assistant', content: 'Hi Alice!' }); // User B's conversation (completely separate)sessions.addMessage('user-bob', { role: 'user', content: 'Help me with my order.' });sessions.addMessage('user-bob', { role: 'assistant', content: 'Of course! What is your order ID?' }); // Retrieve history by session IDconst aliceHistory = sessions.getHistory('user-alice');const bobHistory = sessions.getHistory('user-bob'); // List all active sessionsconsole.log(sessions.getActiveSessions()); // ['user-alice', 'user-bob'] // Clear a specific sessionsessions.clearSession('user-alice'); // Clear all sessionssessions.clearAll();- Méthodes de SessionMemory
Contrôleur Multi-Sessions
Session Isolation & Context Routing
addMessage()Writeparams: sessionId, message
Ingère un message dans un thread spécifique ; initialise la session à la volée si besoin.
getHistory()Readparams: sessionId
Récupère l'état isolé d'une session donnée pour restaurer le contexte.
getActiveSessions()Auditparams: none
Audite la pile mémoire en retournant tous les identifiants de sessions gérés.
clearSession()Purgeparams: sessionId
Purge et désalloue un thread de session spécifique pour libérer des ressources.
Stratégies de Nettoyage
Quand la conversation devient trop longue, Orka nettoie automatiquement les anciens messages en utilisant l'une des trois stratégies :
| Stratégie | Description |
|---|---|
| sliding_window | Conserve les N messages les plus récents, en préservant les messages système |
| buffer | Conserve les messages qui tiennent dans le budget de tokens estimé |
| summary | Compresse les anciens messages en un résumé, préservant le contexte tout en réduisant la taille |
💡 Stratégie Summary
La stratégie summary est idéale pour les longues conversations où vous voulez préserver le contexte sans garder tous les messages. Quand le nombre de messages dépasse le seuil, les anciens messages sont compressés en un résumé de message système.
const memory = new Memory({ strategy: 'summary', maxMessages: 20, summaryThreshold: 10, // Summarize when 10+ messages overflow llm: orka.getLLM(), // LLM used to generate summaries}); // After 30 messages, the first 10 are compressed into a summary:// [{ role: 'system', content: 'Summary: User Alice discussed...' }, ...recent 20 messages]# Configuration
Configurez la mémoire lors de la création de votre instance Orka :
import { createOrka, OpenAIAdapter, MemoryVectorAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorAdapter(), memory: { maxMessages: 50, // Maximum messages to keep maxTokensEstimate: 4000, // For 'buffer' strategy strategy: 'sliding_window', // 'sliding_window' | 'buffer' | 'summary' },}); // Access memory directlyconst memory = orka.memory();memory.addMessage({ role: 'user', content: 'Hello!' }); // Or use with ask() - memory is automatically managedconst response = await orka.ask({ question: 'What did I say earlier?', useMemory: true, // Injects conversation history into the prompt});- Options de Configuration
Configuration de Politique Mémoire
Token Optimization & Session Lifecycle
strategyLogicType: Union Type
Définit la logique de purge : Fenêtre Glissante (FIFO), Buffer (Tokens), ou Résumé (Condensation récursive).
maxMessagesCapType: number
Limite stricte de la profondeur de la pile. Essentiel pour les architectures à fenêtre fixe.
maxTokensEstimateQuotaType: number
Définit un budget de tokens dynamique. Déclenche la compression si la charge dépasse ce seuil.
ttlMsLifecycleType: number
Durée de vie pour la persistance. Automatise le nettoyage des threads de conversation inactifs.
Compression Autonome de Contexte
Laissez vos agents décider quand compresser le contexte au lieu de s'appuyer sur des seuils de tokens fixes. Les agents peuvent appeler proactivement l'outil compact_conversation aux limites de tâches propres.
🎯 Initié par l'Agent
Les agents décident quand compresser selon le contexte de la tâche, pas des limites arbitraires
📊 Économie de Tokens
Retourne des métriques détaillées : messages compressés, tokens économisés, résumé généré
Utiliser SummaryMemory.compress()
La classe SummaryMemory inclut maintenant une méthode compress() qui peut être appelée à la demande pour compresser l'historique de conversation :
import { SummaryMemory } from '@orka-js/memory-store';import { OpenAIAdapter } from '@orka-js/openai'; const llm = new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }); const memory = new SummaryMemory({ llm, maxMessages: 100, // High limit - we'll compress manually progressiveCompression: true,}); // Add messages to the conversationawait memory.addMessage({ role: 'user', content: 'Let me explain the project requirements...' });await memory.addMessage({ role: 'assistant', content: 'I understand. Please go ahead.' });// ... many more messages ... // Compress on-demand when neededconst result = await memory.compress(); console.log(result);// {// success: true,// reason: 'Compression completed successfully',// summary: 'User explained project requirements including...',// messagesCompressed: 15,// tokensSaved: 850,// compressedAt: 1708000000000// } // The history now contains the summary + any preserved system messagesconst history = memory.getHistory();Outil Agent : compact_conversation
Donnez à vos agents le pouvoir de décider de manière autonome quand compresser le contexte en utilisant l'outil intégré compact_conversation :
import { ReActAgent, createCompactConversationTool, COMPACT_CONVERSATION_PROMPT_ADDITION } from '@orka-js/agent';import { SummaryMemory } from '@orka-js/memory-store';import { OpenAIAdapter } from '@orka-js/openai'; const llm = new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! });const memory = new SummaryMemory({ llm, maxMessages: 100 }); // Create the compact conversation toolconst compactTool = createCompactConversationTool({ compress: async () => { const result = await memory.compress(); return { success: result.success, reason: result.reason, summary: result.summary, messagesCompressed: result.messagesCompressed, tokensSaved: result.tokensSaved, compressedAt: result.compressedAt, }; },}); // Create agent with the toolconst agent = new ReActAgent({ llm, goal: 'Help users with complex multi-step tasks', tools: [compactTool, ...otherTools], // Add guidance for when to use the tool systemPrompt: `You are a helpful assistant.${COMPACT_CONVERSATION_PROMPT_ADDITION}`,}); // The agent can now autonomously decide to compress context// Example: "I notice we've been discussing multiple topics. Let me compact // the conversation to preserve the key points before we continue."const result = await agent.run('Help me plan my project');- Interface CompressResult
Schéma du Résultat de Compression
Autonomous Context Compaction Metrics
successStatusboolean
Si l'opération de compression s'est terminée avec succès.
summaryOutputstring
Le résumé généré des messages compressés, préservant le contexte clé.
messagesCompressedMetricnumber
Nombre de messages qui ont été compressés dans le résumé.
tokensSavedSavingsnumber
Tokens estimés économisés par la compression (original - résumé).
💡 Quand Utiliser la Compression Autonome
- • Transition entre tâches ou sujets majeurs
- • Après avoir terminé un workflow multi-étapes complexe
- • Quand l'agent remarque un contexte répétitif
- • Avant de démarrer un nouveau fil de conversation
Imports Tree-shakeable
// ✅ Import only what you needimport { Memory } from '@orka-js/memory-store';import { SessionMemory } from '@orka-js/memory-store';import { SummaryMemory, type CompressResult } from '@orka-js/memory-store'; // ✅ Import the compact conversation toolimport { createCompactConversationTool, COMPACT_CONVERSATION_PROMPT_ADDITION } from '@orka-js/agent'; // ✅ Or import from indeximport { Memory, SessionMemory, SummaryMemory } from '@orka-js/memory-store';