Cognee es una plataforma de memoria IA de código abierto que otorga a los agentes memoria persistente a largo plazo a través de sesiones utilizando un gráfico de conocimiento alojado. Su idea definitoria es el pipeline ECL — Extract, Cognify, Load — que ingiere documentos, conversaciones y datos de muchas fuentes, los estructura en un gráfico de entidades y relaciones (el paso “cognify”), y los carga en almacenes de gráficos y vectores para recuperación. Esto convierte la memoria en una capa activa y consultable en lugar de un volcado de vectores plano.
Instalación
| Método | Comando |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| Con extras | pip install "cognee[postgres,neo4j]" |
| Establecer clave LLM | export LLM_API_KEY="sk-..." |
| Verificar | python -c "import cognee; print('ok')" |
El Pipeline ECL
| Etapa | Lo que hace |
|---|
| Extract | Ingerir datos sin procesar de 30+ tipos de fuentes |
| Cognify | Construir un gráfico de conocimiento (entidades, relaciones) |
| Load | Almacenar en bases de datos de gráficos + vectores para recuperación |
| Search | Consultar memoria (gráfico, vector, o híbrida) |
Uso Básico
import cognee
import asyncio
async def main():
# 1) Agregar datos a memoria
await cognee.add("Nick prefers concise, direct answers.")
await cognee.add(open("notes.md").read())
# 2) Construir el gráfico de conocimiento
await cognee.cognify()
# 3) Consultar memoria
results = await cognee.search("What are Nick's preferences?")
print(results)
asyncio.run(main())
| Llamada | Descripción |
|---|
cognee.add(data) | Ingerir texto, archivos o datos estructurados |
cognee.cognify() | Procesar datos ingeridos en el gráfico |
cognee.search(query, ...) | Recuperar de memoria |
cognee.prune() | Restablecer/limpiar almacenes de memoria |
Tipos de Búsqueda
| Tipo | Devuelve |
|---|
SearchType.GRAPH_COMPLETION | Respuesta fundamentada en el gráfico de conocimiento |
SearchType.RAG_COMPLETION | Respuesta RAG de vector clásica |
SearchType.INSIGHTS | Relaciones/insights de entidades |
SearchType.CHUNKS | Fragmentos coincidentes sin procesar |
SearchType.SUMMARIES | Resultados resumidos |
from cognee import SearchType
res = await cognee.search("connections between X and Y",
query_type=SearchType.INSIGHTS)
Fuentes de Datos
| Categoría | Ejemplos |
|---|
| Documentos | PDF, DOCX, Markdown, texto |
| Estructurados | CSV, JSON, bases de datos |
| Conversaciones | Historial de chat/mensajes |
| Código | Archivos/repos de fuente |
Backends de Almacenamiento
| Capa | Opciones |
|---|
| Almacén de gráficos | NetworkX (por defecto), Neo4j, Kuzu |
| Almacén de vectores | LanceDB (por defecto), Qdrant, pgvector, Weaviate |
| Relacional | SQLite (por defecto), PostgreSQL |
| Configuración | Establecer mediante variables de entorno / configuración |
Conjuntos de Datos y Multi-Tenancy
| Característica | Uso |
|---|
| Conjuntos de datos | Memoria de espacio de nombres por usuario/proyecto |
cognee.add(data, dataset_name="user-123") | Ingesta de alcance |
| Permisos | Controlar acceso a particiones de memoria |
Flujos de Trabajo Comunes
# Dar a un agente memoria duradera de un usuario a través de sesiones
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("summarize what we know about user-42")
# inyectar `context` en el prompt del agente
# Construir un gráfico sobre un corpus de documentos para preguntas de conexión
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("how do these documents relate?",
query_type=SearchType.INSIGHTS)
Cognee vs Otros Marcos de Memoria
| Aspecto | Cognee | Mem0 | Graphiti |
|---|
| Modelo | Gráfico nativo (ECL) | Vector/gráfico/KV de múltiples capas | Gráfico de conocimiento temporal |
| Fortaleza | Razonamiento de gráfico local | Personalización conversacional | Hechos que cambian con el tiempo |
| Alojamiento automático | Sí | Sí | Sí |
| Mejor para | Memoria de gráfico crítica para privacidad | Personalización | Razonamiento temporal |
Recursos