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.
| Outil | Description |
|---|---|
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.
| Outil | Description |
|---|---|
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 source | Modèles cibles possibles | Dé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.
(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).
| Outil | Description |
|---|---|
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 :
- Phase 0 - Validation : parsing du CSV
participants, chargement des Skills viaecho_skills.get_skill_content()etparse_skill_metadata(), attribution de noms factices (« Participant 1 », « Participant 2 », etc.). Limites : 2 àCOUNCIL_MAX_PARTICIPANTS(défaut 5) participants. - Phase 1 - Distillation : réutilise
_distill_context()(identique àconsult_expert_consultant) pour résumer la branche active du chat viaMODEL_DISTILLATION. - Phase 2 - Tours de parole :
COUNCIL_ROUNDS_DEFAULTtours (défaut 3, maxCOUNCIL_ROUNDS_MAX= 5). Au Tour 1, chaque expert reçoit la question et le contexte distillé. Aux tours suivants, chaque expert reçoit les contributions des autres participants du tour précédent (il ne se relit pas lui-même). Tous les appels d'un même tour sont exécutés en parallèle viaasyncio.gather(). Lespartsbrutes de l'API (incluant lesthoughtSignature) sont conservées dans un dictionnaire in-memory par participant, assurant la continuité cognitive entre les tours sans persistance DB. - Phase 3 - Synthèse : la transcription complète (question + tous
les tours de tous les participants avec leur rôle) est envoyée à un modèle synthétiseur
(défaut
MODEL_FLASH, configurable viasynthesis_model) avec un prompt générique de rapporteur neutre. La synthèse identifie consensus, divergences et recommandations.
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).