Aller au contenu principal

Intégrer la mémoire dans les agents

Contrat Navin Memory Provider​

Le contrat est décrit par contracts/v1/memory-provider.schema.json. Une instance de moteur annonce un ensemble déclaratif de capacités : schema_version, provider (builtin, mem0 ou cognee), engine_instance, capabilities, et leur partage en memory et knowledge. La lecture des capacités ne demande aucun identifiant du moteur ; elle ajoute isolation, la garantie de séparation pour le tenant de l'appelant, et session_memory, vrai pour builtin seulement.

GroupeCapacités
Mémoireremember, recall, search, update, forget, list, get, purge, get_health, get_capabilities
Connaissancesingest_knowledge, build_graph, search_graph, get_relations, delete_dataset

builtin et mem0 annoncent toutes les capacités de mémoire ; cognee annonce forget, list, purge, get_health, get_capabilities et toutes les capacités de connaissances. Une opération hors de l'ensemble annoncé répond memory_capability_unsupported (422) ; un moteur injoignable répond memory_engine_unavailable (502). Le contexte de chaque opération ($defs.context du schéma) est construit côté serveur.

Instances de moteur​

Toutes les routes sont sous /v1/memory.

Méthode et cheminRôle requisEffet
GET /enginesauthentifiébuiltin, les instances mem0 et cognee rendues par le Manager, les instances déclarées
GET /engines/{engine_id}/capabilitiesauthentifiécapacités, isolation, session_memory
GET /engines/{engine_id}/healthtenant_admin, developer, security_officer ou auditorsanté du moteur
POST /enginesplatform_admindéclare une instance : id, provider (mem0 ou cognee), base_url, tenant_id (instance dédiée), credential_ref (openbao:// ou env://), access_control, tls_verify, timeout_seconds, manager_cluster, manager_service
DELETE /engines/{engine_id}platform_adminretire une instance déclarée
PUT /engines/{engine_id}/credentialtenant_adminclé du tenant sur une instance partagée (credential_ref en openbao://)
DELETE /engines/{engine_id}/credentialtenant_adminretire cette clé

Chaque appel vers un moteur passe par le client de sortie contrôlé (hôte et port déclarés seulement, redirections refusées), avec la vérification TLS (autorité du Manager de EAI_MEMORY_ENGINES_CA_FILE en plus des autorités par défaut), un délai et l'en-tête traceparent. Le HTTP simple est refusé en staging et en production sauf EAI_MEMORY_ENGINES_ALLOW_HTTP.

Politique de mémoire de l'agent​

Méthode et cheminRelation OpenFGAEffet
GET /agents/{agent_id}/policyviewerpolitique en vigueur
PUT /agents/{agent_id}/policyeditornouvelle version de la politique
GET /agents/{agent_id}/policy/versionsviewerversions précédentes
POST /agents/{agent_id}/policy/restoreeditorrestaure la version version

Le corps de PUT porte engine (builtin par défaut, mem0, cognee ou hybrid), mem0_instance, cognee_instance et policy :

Champ de policyDéfautRôle
modessession, long_term, agent actifs ; shared, knowledge_graph inactifsmodes de mémoire permis
write_scopes, read_scopessession, user, agentportées où l'agent écrit et lit, parmi session, user, agent, shared_agents, project, team, organization, global
default_scopeuserportée d'une écriture sans portée
allowed_kindstoutesepisodic, semantic, procedural, preference, fact
max_classificationconfidentialclassification la plus haute acceptée
allow_personal_datatruerefus des données personnelles quand false
retention_days, legal_holdaucune, falsedurée de vie et conservation légale
inferfalseextraction des faits par le LLM du moteur
shared_with, teams, global_accessvides, falsepartage avec d'autres agents et équipes
required_isolationlogicalgarantie minimale exigée de l'instance (voir Sécurité)
recall_top_k8nombre d'éléments d'un rappel

Un changement de moteur et un partage sont audités (memory.engine.change, memory.share). La mémorisation suit cette politique : rien n'écrit toutes les conversations dans les moteurs.

Mémoires​

Ces routes demandent la relation can_invoke sur l'agent (ou d'être l'agent).

Méthode et cheminChamps principauxEffet
POST /agents/{agent_id}/memoriescontent, scope, kind (fact par défaut), classification, session_id, team, retention_days, legal_hold, sourcemémorise (201)
GET /agents/{agent_id}/memoriesscope, limit, cursor, include_content (false par défaut)liste paginée
POST /agents/{agent_id}/recallquery, scopes, top_k, session_idrappel encadré comme données non fiables
POST /agents/{agent_id}/memories/searchmêmes champsrecherche
GET /agents/{agent_id}/memories/{item_id}-lit un élément
PATCH /agents/{agent_id}/memories/{item_id}contentmet à jour
DELETE /agents/{agent_id}/memories/{item_id}-oublie un élément
POST /agents/{agent_id}/memories/purgescope, confirm, team, session_idpurge une portée (confirmation requise)
POST /agents/{agent_id}/memories/exportscopesexporte les mémoires autorisées

Connaissances et graphe​

Méthode et cheminChamps principauxEffet
POST /agents/{agent_id}/knowledgetexts (1 à 50), scope (agent par défaut), team, dataset_id, classification, retention_days, legal_hold, build_graphingestion (201)
GET /agents/{agent_id}/knowledge/datasetsscope, limit, cursorjeux de données
POST /agents/{agent_id}/knowledge/graphdataset_idsconstruit le graphe (cognify)
POST /agents/{agent_id}/knowledge/searchquery, dataset_ids, top_k (10), search_type (CHUNKS, CHUNKS_LEXICAL, SUMMARIES, RAG_COMPLETION, GRAPH_COMPLETION)recherche dans les connaissances
GET /agents/{agent_id}/knowledge/datasets/{dataset_id}/relations-entités et relations
DELETE /agents/{agent_id}/knowledge/datasets/{dataset_id}-supprime le jeu de données

Mode hybride​

Avec engine à hybrid, Mem0 garde les faits et les mémoires, Cognee les connaissances et les relations. Une écriture va à un seul moteur : une mémoire à Mem0, une ingestion de connaissances à Cognee. Un rappel interroge les deux, fusionne les résultats, les déduplique par contenu et garde chaque source. La mémoire de session reste toujours dans builtin, jamais dans Mem0 ni dans Cognee.