Cognee est une plateforme de mémoire IA open-source qui donne aux agents une mémoire à long terme persistante entre les sessions à l’aide d’un graphe de connaissances auto-hébergé. Son idée centrale est le pipeline ECL — Extract, Cognify, Load — qui ingère les documents, les conversations et les données provenant de nombreuses sources, les structure en graphe d’entités et de relations (l’étape « cognify »), et les charge dans les magasins de graphe et de vecteurs pour la récupération. Cela rend la mémoire une couche active et interrogeable plutôt qu’un simple dépôt de vecteurs.
Installation
| Méthode | Commande |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| Avec extras | pip install "cognee[postgres,neo4j]" |
| Définir une clé LLM | export LLM_API_KEY="sk-..." |
| Vérifier | python -c "import cognee; print('ok')" |
Le pipeline ECL
| Étape | Ce qu’elle fait |
|---|
| Extract | Ingérer les données brutes depuis 30+ types de sources |
| Cognify | Construire un graphe de connaissances (entités, relations) |
| Load | Stocker dans les bases de graphe + vecteurs pour la récupération |
| Search | Interroger la mémoire (graphe, vecteur, ou hybride) |
Utilisation de base
import cognee
import asyncio
async def main():
# 1) Ajouter des données à la mémoire
await cognee.add("Nick préfère les réponses concises et directes.")
await cognee.add(open("notes.md").read())
# 2) Construire le graphe de connaissances
await cognee.cognify()
# 3) Interroger la mémoire
results = await cognee.search("Quelles sont les préférences de Nick ?")
print(results)
asyncio.run(main())
| Appel | Description |
|---|
cognee.add(data) | Ingérer du texte, des fichiers ou des données structurées |
cognee.cognify() | Traiter les données ingérées dans le graphe |
cognee.search(query, ...) | Récupérer à partir de la mémoire |
cognee.prune() | Réinitialiser/effacer les magasins de mémoire |
Types de recherche
| Type | Retour |
|---|
SearchType.GRAPH_COMPLETION | Réponse ancrée dans le graphe de connaissances |
SearchType.RAG_COMPLETION | Réponse classique RAG vectorielle |
SearchType.INSIGHTS | Relations/perspectives des entités |
SearchType.CHUNKS | Chunks bruts correspondants |
SearchType.SUMMARIES | Résultats résumés |
from cognee import SearchType
res = await cognee.search("connexions entre X et Y",
query_type=SearchType.INSIGHTS)
Sources de données
| Catégorie | Exemples |
|---|
| Documents | PDF, DOCX, Markdown, text |
| Structurées | CSV, JSON, databases |
| Conversations | Historique de chat/messages |
| Code | Fichiers source/repos |
Backends de stockage
| Couche | Options |
|---|
| Graph store | NetworkX (défaut), Neo4j, Kuzu |
| Vector store | LanceDB (défaut), Qdrant, pgvector, Weaviate |
| Relational | SQLite (défaut), PostgreSQL |
| Config | Définir via variables d’environnement / config |
Datasets et multi-tenancy
| Fonctionnalité | Utilisation |
|---|
| Datasets | Espace de noms pour la mémoire par utilisateur/projet |
cognee.add(data, dataset_name="user-123") | Portée d’ingestion |
| Permissions | Contrôler l’accès aux partitions de mémoire |
Workflows courants
# Donner à un agent une mémoire durable d'un utilisateur entre les sessions
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("résumer ce que nous savons sur l'utilisateur-42")
# injecter le `context` dans l'invite du agent
# Construire un graphe sur un corpus de documents pour les questions de connexion
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("comment ces documents sont-ils liés ?",
query_type=SearchType.INSIGHTS)
Cognee vs autres frameworks de mémoire
| Aspect | Cognee | Mem0 | Graphiti |
|---|
| Modèle | Graph-native (ECL) | Multi-tier vecteur/graphe/KV | Graphe de connaissances temporel |
| Force | Raisonnement sur graphe local | Personnalisation conversationnelle | Faits qui changent au fil du temps |
| Self-host | Oui | Oui | Oui |
| Meilleur pour | Mémoire de graphe critique pour la confidentialité | Personnalisation | Raisonnement temporel |
Ressources