AGI & Research

Bases de données vectorielles vs. Mémoire par graphes : Optimiser la rétention du contexte à long terme pour les agents AGI multi-étapes

À mesure que nous nous rapprochons du développement de l'Intelligence Artificielle Générale (AGI), la capacité des agents à retenir et à utiliser le contexte à long terme devient un différenciateur clé. Les grands modèles de langage (LLM) traditionnels fonctionnent avec des fenêtres de contexte finies, rendant les systèmes de mémoire externes essentiels pour les tâches de raisonnement complexes et multi-étapes. Actuellement, deux architectures principales dominent ce domaine : les bases de données vectorielles et la mémoire par graphes. Le choix entre elles — ou l'intégration des deux — détermine la capacité d'un agent à rappeler des faits, à maintenir des relations et à exécuter des plans complexes sur de longues durées.

L'approche par base de données vectorielle : Recherche sémantique et échelle

Les bases de données vectorielles, telles que Pinecone, Weaviate ou Milvus, stockent des embeddings de points de données dans des espaces de haute dimension. Elles excellent dans la recherche de similarité, permettant aux agents de récupérer des informations sur la base de la pertinence sémantique plutôt que d'une correspondance exacte de mots-clés. C'est idéal pour les systèmes RAG (Retrieval-Augmented Generation) où l'objectif est de trouver des documents ou des interactions passées similaires à la requête actuelle.

Avantages : Haute scalabilité, faible latence pour les recherches de plus proches voisins approximatifs (ANN) et facilité d'intégration avec les modèles d'embedding existants.

Inconvénients : Manque de conscience structurelle. Les vecteurs ne comprennent pas intrinsèquement les relations entre les entités, ce qui rend difficile le raisonnement multi-sauts (par exemple, « Qui est le PDG de l'entreprise où travaille mon ami ? »).


import pinecone

pc = Pinecone(api_key="YOUR_API_KEY")
index = pc.Index("agent-memory")

# Embedding de l'interaction passée de l'utilisateur
embeddings = openai.Embedding.create(input="I met John at the tech conference.")
vector = embeddings["data"][0]["embedding"]

# Ajout à la mémoire
index.upsert([(
    "interaction_001",
    vector,
    {"metadata": {"content": "I met John at the tech conference.", "timestamp": "2023-10-27"}}
)])

# Requête de contexte pertinent
query_vec = openai.Embedding.create(input="Who did I meet recently?")["data"][0]["embedding"]
results = index.query(vector=query_vec, top_k=5, include_metadata=True)

Mémoire par graphes : Raisonnement structuré et relations

Les bases de données par graphes, comme Neo4j ou Amazon Neptune, modélisent les données sous forme de nœuds (entités) et d'arêtes (relations). Cette structure est naturellement alignée avec la façon dont les humains stockent le savoir : nous connectons des personnes, des lieux et des événements dans une toile de relations. Pour les agents AGI, la mémoire par graphes permet le raisonnement multi-sauts et des déductions logiques complexes avec lesquelles les bases de données vectorielles ont du mal.

Avantages : Représentation explicite des relations, prise en charge des parcours complexes et forte cohérence pour les données transactionnelles.

Inconvénients : Complexité plus élevée de configuration, temps de requête plus lents pour la recherche sémantique non structurée sans indexation hybride, et difficulté à traiter du texte bruité et non structuré sans prétraitement.


from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))

with driver.session() as session:
    # Création de relations
    session.run("""
        CREATE (j:Person {name: 'John'})
        CREATE (c:Company {name: 'TechCorp'})
        CREATE (conf:Event {name: 'TechConf 2023'})
        CREATE (j)-[:WORKS_AT]->(c)
        CREATE (me:Person {name: 'Agent'})
        CREATE (me)-[:MET {location: conf}]->(j)
    """)

    # Requête de raisonnement multi-sauts
    query = """
        MATCH (me:Person {name: 'Agent'})-[m:MET]->(friend:Person)-[:WORKS_AT]->(company:Company)
        RETURN friend.name AS friend, company.name AS company
    """
    result = session.run(query)
    print(result.single())

Architectures hybrides : La voie vers une mémoire AGI robuste

La solution la plus efficace pour la rétention du contexte à long terme n'est pas un choix binaire, mais une approche hybride. Les recherches de pointe sur l'AGI suggèrent un système de mémoire hiérarchique :

  1. Mémoire à court terme : La fenêtre de contexte du LLM pour la conversation immédiate.
  2. Mémoire à moyen terme (Base de données vectorielle) : Stockage des embeddings de conversations, de documents et d'observations pour une récupération sémantique rapide.
  3. Mémoire à long terme (Base de données par graphes) : Extraction et structuration des entités et des relations à partir des données récupérées par vecteurs dans un graphe de connaissances pour un raisonnement logique persistant.

Dans ce pipeline, la base de données vectorielle agit comme une « porte d'entrée » pour un rappel rapide, tandis que la base de données par graphes sert de « colonne vertébrale » pour le savoir structuré. Lorsqu'un agent doit répondre à une question complexe, il utilise d'abord la recherche vectorielle pour identifier les données brutes pertinentes, puis utilise des parcours de graphe pour résoudre les relations et inférer des réponses nécessitant plusieurs étapes de logique.

Considérations pratiques pour la mise en œuvre

La mise en œuvre de ce système hybride nécessite une conception soignée :

  • Extraction d'entités : Utilisez des LLM pour extraire des entités structurées du texte non structuré avant de les insérer dans le graphe.
  • Prise en compte temporelle : Les deux systèmes doivent gérer les horodatages. Les bases de données vectorielles doivent inclure le temps dans les métadonnées ; les graphes doivent utiliser des arêtes temporelles (par exemple, « MET_ON » plutôt que simplement « MET »).
  • Résolution des conflits : Lorsque le stockage vectoriel et le stockage par graphes ne sont pas d'accord, privilégiez le graphe pour la cohérence factuelle et le stockage vectoriel pour la nuance contextuelle.

Conclusion

Pour les développeurs intermédiaires à avancés construisant des agents AGI, se fier uniquement aux bases de données vectorielles limite la profondeur du raisonnement, tandis que l'utilisation exclusive de la mémoire par graphes complique la recherche sémantique. En intégrant les deux, vous créez une architecture de mémoire robuste qui évolue avec la complexité des tâches de votre agent. À mesure que l'AGI passe du théorique au pratique, la capacité à gérer le contexte à long terme à travers des systèmes de mémoire hybrides sera une compétence fondamentale en ingénierie de l'IA.

Share: