Nous construisons pour les développeurs qui ont besoin d'une couche de données fiable et prête pour la production pour les applications d'IA.
Cognee implémente des pipelines ECL (Extract, Cognify, Load) évolutifs et modulaires qui vous permettent d'interconnecter et de récupérer des conversations, des documents et des transcriptions audio passées tout en réduisant les hallucinations, les efforts des développeurs et les coûts. Essayez-le dans un notebook Google Colab ou consultez notre documentation
Si vous avez des questions, rejoignez notre communauté Discord
pip installer cognee
pip install 'cognee[postgres]'
poésie ajouter du cognac
poésie ajouter cognee -E postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
ou
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
Vous pouvez également définir les variables en créant un fichier .env, voici notre modèle. Pour utiliser différents fournisseurs LLM, pour plus d'informations, consultez notre documentation
Si vous utilisez Network, créez un compte sur Graphistry pour visualiser les résultats :
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(Facultatif) Pour exécuter l'interface utilisateur, accédez au répertoire cognee-frontend et exécutez :
npm run dev
ou exécutez le tout dans un conteneur Docker :
docker-compose up
Accédez ensuite à localhost : 3000
Si vous souhaitez utiliser Cognee avec PostgreSQL, assurez-vous de définir les valeurs suivantes dans le fichier .env :
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
Tout d'abord, copiez .env.template
dans .env
et ajoutez votre clé API OpenAI au champ LLM_API_KEY.
Ce script exécutera le pipeline par défaut :
import cogneeimport asynciofrom cognee.api.v1.search import SearchTypeasync def main():# Créer une table rase pour cognee -- réinitialiser les données et l'état du système("Réinitialisation des données cognee...")attendre cognee.prune.prune_data()attendre cognee.prune.prune_system(metadata=True)print("Data reset complete.n")# Un graphique de connaissances cognee sera créé sur cette base texttext = """ Le traitement du langage naturel (NLP) est un sous-domaine interdisciplinaire de l'informatique et de la recherche d'informations. """print("Ajout de texte à cognee:")print(text.strip()) # Ajoutez le texte et créez il est disponible pour cognifyattendre cognee.add(text)print("Texte ajouté avec succès.n") print("Exécuter cognify pour créer un graphe de connaissances...n")print("Cognify étapes du processus :")print("1. Classification le document : Détermination du type et de la catégorie du texte saisi.")print("2. Vérification des autorisations : S'assurer que l'utilisateur dispose des droits nécessaires pour traiter le texte.")print("3. Extraire des morceaux de texte : Décomposer le texte en phrases ou expressions pour analyse.")print("4. Ajout de points de données : stockage des morceaux extraits pour traitement.")print("5. Génération d'un graphe de connaissances : extraction d'entités et de relations pour former un graphe de connaissances.")print("6. Résumation du texte : création de résumés concis du contenu pour une utilisation rapide insights.n") # Utilisez les LLM et cognee pour créer des graphawait de connaissances cognee.cognify()print("Cognify process complete.n") query_text = 'Parlez-moi de la PNL'print(f"Recherche cognee pour obtenir des informations avec la requête : '{query_text}'")# Interroger cognee pour obtenir des informations sur le texte ajoutésearch_results = wait cognee.search(SearchType.INSIGHTS, query_text=query_text) print("Résultats de recherche :")# Afficher les résultats pour result_text dans search_results :print(result_text)# Exemple de sortie : # ({'id' : UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at' : datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'nom' : 'traitement du langage naturel', 'description' : 'Un sous-domaine interdisciplinaire de l'informatique et de la recherche d'informations.'}, {'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), 'nom' : 'informatique', 'description' : 'L'étude du calcul et du traitement de l'information.'}) # (...)## Il représente les nœuds et les relations dans le graphe de connaissances :# - Le premier élément est le nœud source (par exemple, "traitement du langage naturel").# - Le deuxième élément est la relation entre les nœuds (par exemple, 'is_a_subfield_of').# - Le troisième élément est le nœud cible (par exemple, 'computer science').if __name__ == '__main__':asyncio.run(main() )
Lorsque vous exécutez ce script, vous verrez des messages étape par étape dans la console qui vous aideront à suivre le flux d'exécution et à comprendre ce que fait le script à chaque étape. Une version de cet exemple est ici : examples/python/simple_example.py
Le framework Cognee est constitué de tâches qui peuvent être regroupées en pipelines. Chaque tâche peut constituer une partie indépendante de la logique métier, qui peut être liée à d’autres tâches pour former un pipeline. Ces tâches conservent les données dans votre mémoire, vous permettant de rechercher le contexte pertinent des conversations passées, des documents ou toute autre donnée que vous avez stockée.
Voici un exemple de ce à quoi ressemble un pipeline Cognify par défaut :
Pour préparer les données pour l'exécution du pipeline, nous devons d'abord les ajouter à notre métastore et les normaliser :
Commencez par :
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
À l'étape suivante, nous créons une tâche. La tâche peut être n'importe quelle logique métier dont nous avons besoin, mais l'important est qu'elle soit encapsulée dans une seule fonction.
Nous montrons ici un exemple de création d'un classificateur LLM naïf qui prend un modèle Pydantic, puis stocke les données dans les magasins graphiques et vectoriels après avoir analysé chaque morceau. Nous avons fourni juste un extrait à titre de référence, mais n'hésitez pas à consulter l'implémentation dans notre dépôt.
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 ...
Nous proposons de nombreuses tâches qui peuvent être utilisées dans vos pipelines, et vous pouvez également créer vos tâches pour les adapter à votre logique métier.
Une fois que nous avons nos tâches, il est temps de les regrouper dans un pipeline. Cet extrait simplifié montre comment des tâches peuvent être ajoutées à un pipeline et comment elles peuvent transmettre les informations de l'une à l'autre.
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
Pour voir le code fonctionnel, vérifiez le pipeline par défaut cognee.api.v1.cognify dans notre référentiel.
Cognee prend en charge une variété d'outils et de services pour différentes opérations :
Modulaire : Cognee est modulaire par nature, utilisant des tâches regroupées en pipelines
Configuration locale : Par défaut, LanceDB s'exécute localement avec NetworkX et OpenAI.
Magasins de vecteurs : Cognee prend en charge LanceDB, Qdrant, PGVector et Weaviate pour le stockage de vecteurs.
Modèles de langage (LLM) : vous pouvez utiliser Anyscale ou Ollama comme fournisseur LLM.
Magasins de graphiques : en plus de NetworkX, Neo4j est également pris en charge pour le stockage de graphiques.
Gestion des utilisateurs : créez des graphiques d'utilisateurs individuels et gérez les autorisations
Consultez notre carnet de démonstration ici
Veuillez consulter le Guide de démarrage rapide de cognee pour obtenir des informations de configuration importantes.
Docker compose
Veuillez consulter le guide de développement de Cognee pour obtenir des informations bêta importantes et des instructions d'utilisation.
pip installer cognee
<style> tableau { largeur : 100 % ; } </style>
Nom | Taper | État actuel | Problèmes connus |
---|---|---|---|
Qdrant | Vecteur | Stable ✅ | |
Tisser | Vecteur | Stable ✅ | |
LanceDB | Vecteur | Stables ✅ | |
Néo4j | Graphique | Stable ✅ | |
RéseauX | Graphique | Stable ✅ | |
FalkorDB | Vecteur/Graphique | Instable | |
PGVecteur | Vecteur | Instable | Postgres DB renvoie l'erreur Timeout |