Cognee é uma plataforma de memória AI de código aberto que fornece aos agentes memória de longo prazo persistente em múltiplas sessões usando um grafo de conhecimento auto-hospedado. Sua ideia definidora é o pipeline ECL — Extract, Cognify, Load — que ingere documentos, conversas e dados de muitas fontes, os estrutura em um grafo de entidades e relacionamentos (o passo “cognify”), e os carrega em armazenadores de grafo + vetor para recuperação. Isso faz da memória uma camada ativa e consultável, em vez de um depósito inerte.
Instalação
| Método | Comando |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| Com extras | pip install "cognee[postgres,neo4j]" |
| Defina uma chave LLM | export LLM_API_KEY="sk-..." |
| Verificar | python -c "import cognee; print('ok')" |
O Pipeline ECL
| Estágio | O que faz |
|---|
| Extract | Ingira dados brutos de 30+ tipos de fonte |
| Cognify | Construa um grafo de conhecimento (entidades, relacionamentos) |
| Load | Armazene em bancos de dados de grafo + vetor para recuperação |
| Search | Consulte memória (grafo, vetor ou híbrida) |
Uso Básico
import cognee
import asyncio
async def main():
# 1) Adicione dados à memória
await cognee.add("Nick prefere respostas concisas e diretas.")
await cognee.add(open("notes.md").read())
# 2) Construa o grafo de conhecimento
await cognee.cognify()
# 3) Consulte memória
results = await cognee.search("Quais são as preferências de Nick?")
print(results)
asyncio.run(main())
| Chamada | Descrição |
|---|
cognee.add(data) | Ingira texto, arquivos ou dados estruturados |
cognee.cognify() | Processe dados ingeridos no grafo |
cognee.search(query, ...) | Recupere da memória |
cognee.prune() | Resete/limpe armazenadores de memória |
Tipos de Busca
| Tipo | Retorna |
|---|
SearchType.GRAPH_COMPLETION | Resposta fundamentada no grafo de conhecimento |
SearchType.RAG_COMPLETION | Resposta clássica de RAG vetorial |
SearchType.INSIGHTS | Relacionamentos/insights de entidade |
SearchType.CHUNKS | Chunks brutos correspondentes |
SearchType.SUMMARIES | Resultados resumidos |
from cognee import SearchType
res = await cognee.search("conexões entre X e Y",
query_type=SearchType.INSIGHTS)
Fontes de Dados
| Categoria | Exemplos |
|---|
| Documentos | PDF, DOCX, Markdown, texto |
| Estruturados | CSV, JSON, bancos de dados |
| Conversas | Histórico de chat/mensagens |
| Código | Arquivos/repositórios de código-fonte |
Backends de Armazenamento
| Camada | Opções |
|---|
| Armazenador de grafo | NetworkX (padrão), Neo4j, Kuzu |
| Armazenador de vetor | LanceDB (padrão), Qdrant, pgvector, Weaviate |
| Relacional | SQLite (padrão), PostgreSQL |
| Config | Defina via variáveis de ambiente / config |
Datasets e Multi-Tenancy
| Recurso | Uso |
|---|
| Datasets | Namespace de memória por usuário/projeto |
cognee.add(data, dataset_name="user-123") | Escopo de ingestão |
| Permissões | Controle de acesso a partições de memória |
Workflows Comuns
# Dê a um agente memória durável de um usuário entre sessões
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("resuma o que sabemos sobre user-42")
# injete `context` no prompt do agente
# Construa um grafo sobre um corpus de documentos para perguntas de conexão
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("como esses documentos se relacionam?",
query_type=SearchType.INSIGHTS)
Cognee vs Outros Frameworks de Memória
| Aspecto | Cognee | Mem0 | Graphiti |
|---|
| Modelo | Graph-nativo (ECL) | Multi-tier vetor/grafo/KV | Grafo de conhecimento temporal |
| Força | Raciocínio de grafo primeiro-local | Personalização conversacional | Fatos que mudam com o tempo |
| Auto-hospedado | Sim | Sim | Sim |
| Melhor para | Memória de grafo crítica em privacidade | Personalização | Raciocínio temporal |
Recursos