OrkaJS
Orka.JS

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 conversation
memory.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 history
const 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 conversation
memory.clear();

- Méthodes de Memory

Interface de Gestion Mémoire

Stateful Context Control & Message Rotation

addMessage()Ingestion

ChatMessage

Ajoute un message et déclenche la logique de nettoyage (fenêtre glissante).

getHistory()Retrieval

ChatMessage[]

Récupère l'état persistant sous forme de tableau pour l'injection dans le modèle.

getMessageCount()Telemetry

number

Retourne la profondeur actuelle de la pile pour surveiller l'usage du contexte.

clear()Maintenance

void

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 conversation
sessions.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 ID
const aliceHistory = sessions.getHistory('user-alice');
const bobHistory = sessions.getHistory('user-bob');
 
// List all active sessions
console.log(sessions.getActiveSessions()); // ['user-alice', 'user-bob']
 
// Clear a specific session
sessions.clearSession('user-alice');
 
// Clear all sessions
sessions.clearAll();

- Méthodes de SessionMemory

Contrôleur Multi-Sessions

Session Isolation & Context Routing

addMessage()Write

params: sessionId, message

Ingère un message dans un thread spécifique ; initialise la session à la volée si besoin.

getHistory()Read

params: sessionId

Récupère l'état isolé d'une session donnée pour restaurer le contexte.

getActiveSessions()Audit

params: none

Audite la pile mémoire en retournant tous les identifiants de sessions gérés.

clearSession()Purge

params: 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égieDescription
sliding_windowConserve les N messages les plus récents, en préservant les messages système
bufferConserve les messages qui tiennent dans le budget de tokens estimé
summaryCompresse 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 directly
const memory = orka.memory();
memory.addMessage({ role: 'user', content: 'Hello!' });
 
// Or use with ask() - memory is automatically managed
const 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

strategyLogic

Type: Union Type

Définit la logique de purge : Fenêtre Glissante (FIFO), Buffer (Tokens), ou Résumé (Condensation récursive).

maxMessagesCap

Type: number

Limite stricte de la profondeur de la pile. Essentiel pour les architectures à fenêtre fixe.

maxTokensEstimateQuota

Type: number

Définit un budget de tokens dynamique. Déclenche la compression si la charge dépasse ce seuil.

ttlMsLifecycle

Type: number

Durée de vie pour la persistance. Automatise le nettoyage des threads de conversation inactifs.

NEW

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 conversation
await 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 needed
const 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 messages
const 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 tool
const 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 tool
const 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

successStatus

boolean

Si l'opération de compression s'est terminée avec succès.

summaryOutput

string

Le résumé généré des messages compressés, préservant le contexte clé.

messagesCompressedMetric

number

Nombre de messages qui ont été compressés dans le résumé.

tokensSavedSavings

number

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 need
import { 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 tool
import { createCompactConversationTool, COMPACT_CONVERSATION_PROMPT_ADDITION } from '@orka-js/agent';
 
// ✅ Or import from index
import { Memory, SessionMemory, SummaryMemory } from '@orka-js/memory-store';