Cognee è una piattaforma di memoria per IA open-source che offre agli agenti memoria long-term persistente tra sessioni utilizzando un grafo di conoscenza self-hosted. L”idea distintiva è la pipeline ECL — Extract, Cognify, Load — che acquisisce documenti, conversazioni e dati da molte fonti, li struttura in un grafo di entità e relazioni (il passaggio “cognify”), e li carica in archivi di grafi e vettori per il recupero. Questo rende la memoria uno strato attivo e queryable piuttosto che un dump di vettori piatto.
Installazione
| Metodo | Comando |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| Con extra | pip install "cognee[postgres,neo4j]" |
| Imposta una chiave LLM | export LLM_API_KEY="sk-..." |
| Verifica | python -c "import cognee; print('ok')" |
La Pipeline ECL
| Fase | Cosa fa |
|---|
| Extract | Acquisisce dati grezzi da 30+ tipi di fonte |
| Cognify | Crea un grafo di conoscenza (entità, relazioni) |
| Load | Archivia in database di grafi e vettori per il recupero |
| Search | Interroga la memoria (grafo, vettore, o ibrida) |
Uso Base
import cognee
import asyncio
async def main():
# 1) Aggiungi dati alla memoria
await cognee.add("Nick preferisce risposte concise e dirette.")
await cognee.add(open("notes.md").read())
# 2) Crea il grafo di conoscenza
await cognee.cognify()
# 3) Interroga la memoria
results = await cognee.search("Quali sono le preferenze di Nick?")
print(results)
asyncio.run(main())
| Chiamata | Descrizione |
|---|
cognee.add(data) | Acquisisce testo, file o dati strutturati |
cognee.cognify() | Elabora i dati acquisiti nel grafo |
cognee.search(query, ...) | Recupera dalla memoria |
cognee.prune() | Reimposta/cancella gli archivi di memoria |
Tipi di Ricerca
| Tipo | Restituisce |
|---|
SearchType.GRAPH_COMPLETION | Risposta radicata nel grafo di conoscenza |
SearchType.RAG_COMPLETION | Risposta RAG di vettori classica |
SearchType.INSIGHTS | Relazioni tra entità/insights |
SearchType.CHUNKS | Chunk raw corrispondenti |
SearchType.SUMMARIES | Risultati riassunti |
from cognee import SearchType
res = await cognee.search("connessioni tra X e Y",
query_type=SearchType.INSIGHTS)
Fonti di Dati
| Categoria | Esempi |
|---|
| Documenti | PDF, DOCX, Markdown, testo |
| Strutturati | CSV, JSON, database |
| Conversazioni | Chat/cronologia messaggi |
| Codice | File sorgente/repo |
Backend di Archiviazione
| Strato | Opzioni |
|---|
| Archivio grafi | NetworkX (predefinito), Neo4j, Kuzu |
| Archivio vettori | LanceDB (predefinito), Qdrant, pgvector, Weaviate |
| Relazionale | SQLite (predefinito), PostgreSQL |
| Configurazione | Imposta tramite variabili d”ambiente / config |
Dataset e Multi-Tenancy
| Feature | Uso |
|---|
| Dataset | Ambito della memoria per utente/progetto |
cognee.add(data, dataset_name="user-123") | Ambito dell”acquisizione |
| Permessi | Controlla l”accesso alle partizioni di memoria |
Flussi di Lavoro Comuni
# Dai a un agente memoria duratura di un utente tra le sessioni
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("riassumi ciò che sappiamo dell''utente-42")
# inietta `context` nel prompt dell''agente
# Crea un grafo su un corpus di documenti per domande di connect-the-dots
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("come si relazionano questi documenti?",
query_type=SearchType.INSIGHTS)
Cognee vs Altri Framework di Memoria
| Aspetto | Cognee | Mem0 | Graphiti |
|---|
| Modello | Grafo-nativo (ECL) | Multi-livello vettore/grafo/KV | Grafo di conoscenza temporale |
| Punto di forza | Ragionamento grafo locale-first | Personalizzazione conversazionale | Fatti che cambiano nel tempo |
| Self-host | Sì | Sì | Sì |
| Migliore per | Memoria grafo critica per la privacy | Personalizzazione | Ragionamento temporale |
Risorse