8d. Mémoire & Cognition

Cette famille d'outils est le cœur cognitif de l'Arsenal. Elle permet à ECHO de maintenir une mémoire persistante entre les sessions (RAG organique), de gérer les données de travail à l'intérieur d'une session (Mémoire Vectorisée de Session), et de déléguer des tâches complexes à un niveau cognitif supérieur (routage dynamique).

RAG Organique - echo_meta_artifacts

La mémoire organique est la mémoire à long terme d'ECHO. Elle stocke principalement les préférences de l'Utilisateur et l'expérience du Modèle (règles, axiomes) découvertes au cours des différentes sessions. Ces artéfacts y sont stockés avec un niveau d'importance (1–5) qui influence leur rappel et leur durée de vie via l'algorithme de fusion sémantique (MEMORY_IMPORTANCE_WEIGHTS). La vectorisation intègre une distillation contextuelle automatique par fenêtre de tour dynamique.

OutilDescription
update_meta_artifact(artifact_name, fact, importance) Vectorise et stocke un souvenir dans echo_meta_artifacts. Utilise un UUID déterministe (UUIDv5) basé sur le memory_id technique distillé - un appel avec le même memory_id remplace le souvenir existant (upsert). Paramètre importance de 1 (Trivial) à 5 (Axiome), défaut 3.
search_meta_artifacts(query, artifact_name, limit, start_date, end_date) Outil hybride : Recherche sémantique ciblée (si query présent) avec Over-fetch ×3 et reranking pondéré (cos_score × MEMORY_IMPORTANCE_WEIGHTS[lvl]), ou Lecture d'Index/Cartographie globale (si query absent) pour lister les thèmes mémorisés. Filtres temporels disponibles.
delete_meta_artifact_item(memory_id) Supprime définitivement un souvenir de la collection Qdrant par son memory_id. Irréversible.

Mémoire Vectorisée de Session - echo_session_rag

La mémoire éphémère est la mémoire de travail d'une session. Elle stocke les distillats de fichiers volumineux, les résultats intermédiaires de navigation et toute donnée volumineuse qu'il serait coûteux de maintenir dans le contexte actif. L'état cognitif des ressources est géré via le registre d'ingestion (FILE_INGESTION_STATUS : PUT_IN_CONTEXT, VECTORIZED_SUM_UP, INDEXED). Elle est automatiquement purgée en fin de session par l'Admin Manager.

OutilDescription
save_session_context(text, source_id) Indexe du texte dans echo_session_rag, partitioné par user_id + chat_id + source_id. Le texte est découpé automatiquement en chunks sémantiques. Paramètre text en premier, source_id en second (identifiant natif du fichier).
search_sessions_context(query, source_id, global_search, limit, start_date, end_date) Outil hybride : Recherche RAG sémantique dans la partition du source_id ou globalement, OU Cartographie globale des sources inter-sessions (si query absent) retournant les sources disponibles, leurs timestamps et tags.
delete_session_context_source(source_id) Suppression intégrale et irréversible d'une source du RAG Éphémère.

Usage canonique de la Mémoire Vectorisée de Session

Lorsque le Filtre effectue l'extraction transmodale et le Synthèse Guidée par RAG (O(1)) d'un fichier volumineux, il utilise le source_id natif (ex. U_abc123_C_xyz789_T_1748246400) et indexe les chunks bruts dans echo_session_rag. Le modèle reçoit ce source_id dans l'AEC (via evenement_systeme s'il vient d'être soumis, ou via l'outil query_registry) et l'utilise pour interroger les détails précis de la source brute : search_sessions_context("U_abc123_C_xyz789...", "..."). Ce mécanisme de Smart Context (Synthèse Guidée par RAG (O(1)) RAG) injecte des balises <smart_context> structurelles dans le prompt, remplaçant l'injection du fichier complet dans le contexte, qui serait prohibitive en tokens.

Routage Cognitif - new_cognitive_level

L'outil new_cognitive_level(target_model, transfer_plan) permet à un modèle de déclarer qu'il est dépassé par la tâche courante et de demander une escalade vers un niveau cognitif supérieur. Le Pipe intercepte cet appel, injecte le transfer_plan (Markdown structuré rédigé par le modèle sortant) dans le contexte du modèle cible, et relance la génération sans redémarrer la boucle complète.

Modèle sourceModèles cibles possiblesDéclencheur typique
MODEL_LITE MODEL_FLASH, MODEL_PRO Tâche dépassant les capacités de raisonnement de Lite.
MODEL_FLASH MODEL_PRO Architecture multicouche complexe, raisonnement philosophique profond.

⚙️ Mémoire duale et Vallée de la Mort

La combinaison des deux RAG est la réponse architecturale à la Vallée de la Mort Contextuelle. L'ingestion vectorielle de ces RAG est soutenue par l'Edge Embedding Bridge (WebGPU) qui décharge l'inférence BAAI/bge-m3 sur le navigateur client pour optimiser les performances. save_session_context doit être utilisé proactivement dès qu'une information volumineuse risque de saturer le contexte (au-delà de ~30 % de remplissage). search_meta_artifacts couvre les préférences de l'Utilisateur et l'expérience du Modèle découvertes au cours des différentes sessions, totalement absentes du contexte actif.

Topologie Vectorielle (Qdrant) [Stockage]
flowchart TD O["Outils Cognitifs
(memory_and_rag_tool)"] --> |update_meta_artifact
search_meta_artifacts| COL1 O --> |save_session_context
search_sessions_context
delete_session_context_source| COL2 subgraph Q["Qdrant Engine (Port 6333)"] COL1[("🧠 echo_meta_artifacts
Mémoire long terme
TTL, Consolidation, Importance")] COL2[("⏳ echo_session_rag
RAG de session
Synthèse Guidée par RAG (O(1)), source_id, Purge auto")] end classDef db fill:#0f172a,stroke:#3b82f6,color:#f8fafc class COL1,COL2 db

Agents Cognitifs - cognitive_agents.py

Le Conseil d'Experts est un système d'orchestration cognitive dédié permettant de déléguer des tâches à des instances Gemini spécialisées selon trois modes : stateless (délégation simple), boucle itérative 1:1 avec mémoire de thread (consultation d'expert), ou table ronde N:N multi-tours (conseil). Les thoughtSignature Gemini sont capturées et réinjectées à chaque tour pour maintenir la cohérence du raisonnement sans inclure les pensées en texte brut (includeThoughts: false).

OutilDescription
delegate_to_agent(task, system_prompt, sub_sid) Délégation cognitive stateful. Boucle agentique complète avec accès aux outils, budget d'appels configurable, montée cognitive LITE→FLASH→PRO. Persistance de l'historique de thread dans SQLite (cognitive_threads). Protocole QUESTION: pour les clarifications.
consult_council(question, participants, target_model, synthesis_model) Table Ronde Multi-Experts (protocole Delphi). Convoque N experts (2–5, CSV de skill_ids) pour une délibération en tours parallélisés. Prérequis : au minimum 2 participants distincts - si moins de 2 skills sont fournis, l'outil retourne une erreur actionnable incluant la liste des skills disponibles et une invite à utiliser forge_skill. Chaque participant reçoit un nom factice (« Participant 1 ») et voit le roster (rôles) mais pas les instructions des autres. Après les tours de parole, un modèle synthétiseur (défaut MODEL_FLASH) produit une distillation structurée. Paramètres optionnels : rounds (défaut 3, max 5), history_depth, distillation_focus.
forge_skill(skill_id, name, description, instructions) Crée ou met à jour un profil d'expert (SKILL) au format SKILL.md. Les instructions définissent le ton, la méthodologie et les contraintes de sortie de l'expert. Persisté dans le Vault de l'utilisateur via echo_skills.save_skill().
list_skills() Liste les expertises (Skills) disponibles pour le Conseil courant, avec leurs identifiants et descriptions. Utile pour découvrir les rôles déjà forgés avant un consult_council.
list_agent_sessions() Liste les fils de discussion cognitifs actifs pour le chat courant, avec leur sub_sid, rôle et résumé du dernier échange. Permet à l'orchestrateur de choisir quel fil reprendre.

⚙️ Table Ronde Multi-Experts - Protocole Delphi (N:N)

consult_council orchestre une délibération en quatre phases :

Un participant qui échoue (429, timeout) ne bloque pas le conseil - son absence est notée dans le transcript et les participants restants poursuivent la délibération. Le dictionnaire des historiques est libéré à la fin de l'appel (pas de persistance inter-appels).

← Explorateur de l'Espace Personnel    Exécution & Pilotage →