Creamos para desarrolladores que necesitan una capa de datos confiable y lista para producción para aplicaciones de IA.
Cognee implementa canalizaciones ECL (Extract, Cognify, Load) modulares y escalables que le permiten interconectar y recuperar conversaciones, documentos y transcripciones de audio pasadas, al tiempo que reducen las alucinaciones, el esfuerzo y los costos de los desarrolladores. Pruébelo en una libreta de Google Colab o eche un vistazo a nuestra documentación.
Si tienes preguntas, únete a nuestra comunidad de Discord.
instalación de pip cognee
instalación de pip 'cognee[postgres]'
poesía agregar cognee
poesía agregar cognee -E postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
o
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
También puede configurar las variables creando un archivo .env, aquí está nuestra plantilla. Para utilizar diferentes proveedores de LLM, para obtener más información, consulte nuestra documentación.
Si está utilizando Network, cree una cuenta en Graphistry para visualizar los resultados:
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(Opcional) Para ejecutar la interfaz de usuario, vaya al directorio cognee-frontend y ejecute:
npm run dev
o ejecutar todo en un contenedor acoplable:
docker-compose up
Luego navega a localhost:3000
Si desea utilizar Cognee con PostgreSQL, asegúrese de establecer los siguientes valores en el archivo .env:
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
Primero, copie .env.template
a .env
y agregue su clave API OpenAI al campo LLM_API_KEY.
Este script ejecutará la canalización predeterminada:
importar cogneeimportar asynciodesde cognee.api.v1.search importar SearchTypeasync def main():# Crear borrón y cuenta nueva para cognee - restablecer datos y estado del sistema ("Restableciendo datos de cognee...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("Restablecimiento de datos completo.n")# se mostrará el gráfico de conocimiento de cognee creado en base a este textotext = """ El procesamiento del lenguaje natural (PNL) es un subcampo interdisciplinario de la informática y la recuperación de información. """print("Agregar texto a cognee:")print(text.strip()) # Agregar el texto y ponerlo a disposición de cognifyawait cognee.add(text)print("Texto agregado correctamente.n") print("Ejecutando cognify para crear un gráfico de conocimiento...n")print("Proceso de Cognify pasos:")print("1. Clasificar el documento: determinar el tipo y categoría del texto de entrada.")print("2. Verificar permisos: garantizar que el usuario tenga los derechos necesarios para procesar el texto.")print(" 3. Extracción de fragmentos de texto: dividir el texto en oraciones o frases para su análisis.")print("4. Agregar puntos de datos: almacenar los fragmentos extraídos para su procesamiento.")print("5. Generar un gráfico de conocimiento: extraer entidades y relaciones para formar un gráfico de conocimiento.")print("6. Resumir texto: crear resúmenes concisos del contenido para una rápida insights.n") # Utilice LLM y cognee para crear conocimiento Graphawait cognee.cognify()print("Proceso de Cognify completado.n") query_text = 'Cuéntame sobre NLP'print(f"Buscando información en cognee con la consulta: '{query_text}'")# Consulta en cognee para obtener información sobre el texto agregadosearch_results = await cognee.search(SearchType.INSIGHTS, query_text=query_text) print("Resultados de la búsqueda:" )# Mostrar resultados para result_text en search_results:print(result_text)# Salida de ejemplo: # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'nombre': 'procesamiento del lenguaje natural', 'descripción': 'Un subcampo interdisciplinario de informática y recuperación de información.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id ': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'nombre': 'informática', 'descripción': 'El estudio de la computación y procesamiento de información.'}) # (...)## Representa nodos y relaciones en el gráfico de conocimiento:# - El primer elemento es el nodo fuente (por ejemplo, 'procesamiento del lenguaje natural').# - El segundo elemento es la relación entre nodos (por ejemplo, 'is_a_subfield_of').# - El tercer elemento es el nodo de destino (por ejemplo, 'informática').if __name__ == '__main__':asyncio.run(main())
Cuando ejecute este script, verá mensajes paso a paso en la consola que lo ayudarán a rastrear el flujo de ejecución y comprender qué hace el script en cada etapa. Una versión de este ejemplo está aquí: examples/python/simple_example.py
El marco cognee consta de tareas que se pueden agrupar en canalizaciones. Cada tarea puede ser una parte independiente de la lógica empresarial, que puede vincularse a otras tareas para formar una canalización. Estas tareas conservan datos en su memoria, lo que le permite buscar contexto relevante de conversaciones pasadas, documentos o cualquier otro dato que haya almacenado.
A continuación se muestra un ejemplo de cómo busca una canalización cognitiva predeterminada:
Para preparar los datos para la ejecución de la canalización, primero debemos agregarlos a nuestro metastore y normalizarlos:
Comience con:
text = """Natural language processing (NLP) is an interdisciplinary subfield of computer science and information retrieval""" await cognee.add(text) # Add a new piece of information
En el siguiente paso hacemos una tarea. La tarea puede ser cualquier lógica de negocios que necesitemos, pero la parte importante es que debe estar encapsulada en una función.
Aquí mostramos un ejemplo de creación de un clasificador LLM ingenuo que toma un modelo de Pydantic y luego almacena los datos tanto en el gráfico como en el almacén de vectores después de analizar cada fragmento. Proporcionamos solo un fragmento como referencia, pero no dudes en consultar la implementación en nuestro repositorio.
async def chunk_naive_llm_classifier( data_chunks: list[DocumentChunk], classification_model: Type[BaseModel] ): # Extract classifications asynchronously chunk_classifications = await asyncio.gather( *(extract_categories(chunk.text, classification_model) for chunk in data_chunks) ) # Collect classification data points using a set to avoid duplicates classification_data_points = { uuid5(NAMESPACE_OID, cls.label.type) for cls in chunk_classifications } | { uuid5(NAMESPACE_OID, subclass.value) for cls in chunk_classifications for subclass in cls.label.subclass } vector_engine = get_vector_engine() collection_name = "classification" # Define the payload schema class Keyword(BaseModel): uuid: str text: str chunk_id: str document_id: str # Ensure the collection exists and retrieve existing data points if not await vector_engine.has_collection(collection_name): await vector_engine.create_collection(collection_name, payload_schema=Keyword) existing_points_map = {} else: existing_points_map = {} return data_chunks ...
Tenemos muchas tareas que se pueden utilizar en sus canalizaciones y también puede crear sus tareas para que se ajusten a su lógica empresarial.
Una vez que tenemos nuestras tareas, es hora de agruparlas en un pipeline. Este fragmento simplificado demuestra cómo se pueden agregar tareas a una canalización y cómo pueden pasar la información de una a otra.
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
Para ver el código de trabajo, consulte la canalización predeterminada cognee.api.v1.cognify en nuestro repositorio.
Cognee admite una variedad de herramientas y servicios para diferentes operaciones:
Modular : Cognee es modular por naturaleza y utiliza tareas agrupadas en canalizaciones.
Configuración local : de forma predeterminada, LanceDB se ejecuta localmente con NetworkX y OpenAI.
Almacenes de vectores : Cognee admite LanceDB, Qdrant, PGVector y Weaviate para el almacenamiento de vectores.
Modelos de lenguaje (LLM) : puede utilizar Anyscale u Ollama como su proveedor de LLM.
Tiendas de gráficos : además de NetworkX, Neo4j también es compatible con el almacenamiento de gráficos.
Gestión de usuarios : cree gráficos de usuarios individuales y administre permisos
Consulte nuestro cuaderno de demostración aquí
Consulte la Guía de inicio rápido de cognee para obtener información de configuración importante.
ventana acoplable componer
Consulte la Guía de desarrollo de cognee para obtener información beta importante e instrucciones de uso.
instalación de pip cognee
<estilo> tabla { ancho: 100%; } </estilo>
Nombre | Tipo | Estado actual | Problemas conocidos |
---|---|---|---|
Qdrant | Vector | Estable ✅ | |
Weaviate | Vector | Estable ✅ | |
LanzaDB | Vector | Estable ✅ | |
neo4j | Gráfico | Estable ✅ | |
RedX | Gráfico | Estable ✅ | |
FalkorDB | Vector/Gráfico | Inestable | |
PGVector | Vector | Inestable | Postgres DB devuelve el error de tiempo de espera |