Wir entwickeln für Entwickler, die eine zuverlässige, produktionsreife Datenschicht für KI-Anwendungen benötigen
Cognee implementiert skalierbare, modulare ECL-Pipelines (Extrahieren, Erkennen, Laden), die es Ihnen ermöglichen, vergangene Gespräche, Dokumente und Audiotranskriptionen miteinander zu verbinden und abzurufen und gleichzeitig Halluzinationen, Entwickleraufwand und Kosten zu reduzieren. Probieren Sie es in einem Google Colab-Notizbuch aus oder schauen Sie sich unsere Dokumentation an
Wenn Sie Fragen haben, treten Sie unserer Discord-Community bei
Pip Install Cognee
pip install 'cognee[postgres]'
Poesie Kaffee hinzufügen
Poesie hinzufügen Cognee -E Postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
oder
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
Sie können die Variablen auch festlegen, indem Sie eine .env-Datei erstellen. Hier ist unsere Vorlage. Weitere Informationen zur Nutzung verschiedener LLM-Anbieter finden Sie in unserer Dokumentation
Wenn Sie Network verwenden, erstellen Sie ein Konto bei Graphistry, um die Ergebnisse zu visualisieren:
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(Optional) Um die Benutzeroberfläche auszuführen, gehen Sie in das Verzeichnis cognee-frontend und führen Sie Folgendes aus:
npm run dev
oder alles in einem Docker-Container ausführen:
docker-compose up
Navigieren Sie dann zu localhost:3000
Wenn Sie Cognee mit PostgreSQL verwenden möchten, stellen Sie sicher, dass Sie in der .env-Datei die folgenden Werte festlegen:
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
Kopieren Sie zunächst .env.template
nach .env
und fügen Sie Ihren OpenAI-API-Schlüssel zum Feld LLM_API_KEY hinzu.
Dieses Skript führt die Standardpipeline aus:
import cogneeimport asynciofrom cognee.api.v1.search import SearchTypeasync def main():# Erstellen Sie einen sauberen Slate für Cognee – setzen Sie Daten und Systemstatus zurückprint("Cognee-Daten werden zurückgesetzt...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("Datenzurücksetzung abgeschlossen.n")# Basierend auf diesem Text wird ein Cognee-Wissensgraph erstellt = """ Die Verarbeitung natürlicher Sprache (NLP) ist ein interdisziplinäres Teilgebiet der Informatik und des Informationsabrufs. """print("Hinzufügen von Text zu Cognee:")print(text.strip()) # Fügen Sie den Text hinzu und erstellen Sie ihn verfügbar für cognifyawait cognee.add(text)print("Text erfolgreich hinzugefügt.n") print("Cognify ausführen, um Wissensgraphen zu erstellen...n")print("Cogniify-Prozess Schritte:")print("1. Klassifizierung des Dokuments: Bestimmen der Art und Kategorie des Eingabetextes.")print("2. Überprüfung der Berechtigungen: Sicherstellen, dass der Benutzer über die erforderlichen Rechte zum Verarbeiten des Textes verfügt.")print(" 3. Textblöcke extrahieren: Den Text zur Analyse in Sätze oder Phrasen zerlegen.")print("4. Datenpunkte hinzufügen: Die extrahierten Blöcke zur Verarbeitung speichern.")print("5. Wissensgraph generieren: Entitäten und Beziehungen extrahieren, um einen Wissensgraphen zu bilden.")print("6. Text zusammenfassen: Präzise Zusammenfassungen des Inhalts für eine schnelle Erstellung erstellen Insights.n") # Verwenden Sie LLMs und Cognee, um Wissen zu erstellen graphawait cognee.cognify()print("Cogniify Process Complete.n") query_text = 'Erzählen Sie mir etwas darüber NLP'print(f"Suche in Cognee nach Erkenntnissen mit Abfrage: '{query_text}'")# Abfrage von Cognee nach Erkenntnissen zum hinzugefügten Textsearch_results = waiting cognee.search(SearchType.INSIGHTS, query_text=query_text) print("Suchergebnisse:" )# Ergebnisse für result_text in search_results anzeigen:print(result_text)# Beispielausgabe: # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'Verarbeitung natürlicher Sprache', 'description': 'An interdisziplinäres Teilgebiet der Informatik und Information Retrieval.'}, {'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), 'name': 'Informatik', 'Beschreibung': 'Das Studium der Informatik und Informationsverarbeitung.'}) # (...)## Es stellt Knoten und Beziehungen im Wissensgraphen dar:# - Das erste Element ist der Quellknoten (z. B. 'Verarbeitung natürlicher Sprache').# - Das zweite Element ist die Beziehung zwischen Knoten (z. B. 'is_a_subfield_of').# – Das dritte Element ist der Zielknoten (z. B. 'Computerwissenschaft').if __name__ == '__main__':asyncio.run(main())
Wenn Sie dieses Skript ausführen, werden in der Konsole Schritt-für-Schritt-Meldungen angezeigt, die Ihnen helfen, den Ausführungsablauf zu verfolgen und zu verstehen, was das Skript in jeder Phase tut. Eine Version dieses Beispiels finden Sie hier: examples/python/simple_example.py
Das Cognee-Framework besteht aus Aufgaben, die in Pipelines gruppiert werden können. Jede Aufgabe kann ein unabhängiger Teil der Geschäftslogik sein, der mit anderen Aufgaben verknüpft werden kann, um eine Pipeline zu bilden. Diese Aufgaben speichern Daten in Ihrem Speicher und ermöglichen Ihnen die Suche nach relevantem Kontext vergangener Gespräche, Dokumente oder anderer von Ihnen gespeicherter Daten.
Hier ist ein Beispiel dafür, wie es nach einer Standard-Cogniify-Pipeline aussieht:
Um die Daten für den Pipeline-Lauf vorzubereiten, müssen wir sie zunächst zu unserem Metastore hinzufügen und normalisieren:
Beginnen Sie mit:
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
Im nächsten Schritt erstellen wir eine Aufgabe. Die Aufgabe kann jede beliebige Geschäftslogik sein, die wir benötigen, aber der wichtige Teil ist, dass sie in einer Funktion gekapselt sein sollte.
Hier zeigen wir ein Beispiel für die Erstellung eines naiven LLM-Klassifikators, der ein Pydantic-Modell verwendet und die Daten nach der Analyse jedes Blocks sowohl im Diagramm- als auch im Vektorspeicher speichert. Wir haben nur einen Ausschnitt als Referenz bereitgestellt, aber schauen Sie sich die Implementierung gerne in unserem Repo an.
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 ...
Wir haben viele Aufgaben, die in Ihren Pipelines verwendet werden können, und Sie können Ihre Aufgaben auch so erstellen, dass sie zu Ihrer Geschäftslogik passen.
Sobald wir unsere Aufgaben haben, ist es an der Zeit, sie in einer Pipeline zu gruppieren. Dieser vereinfachte Ausschnitt zeigt, wie Aufgaben zu einer Pipeline hinzugefügt werden können und wie sie die Informationen von einer an eine andere weiterleiten können.
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
Um den funktionierenden Code zu sehen, überprüfen Sie die Standardpipeline cognee.api.v1.cognify in unserem Repo.
Cognee unterstützt eine Vielzahl von Tools und Diensten für verschiedene Vorgänge:
Modular : Cognee ist von Natur aus modular und verwendet Aufgaben, die in Pipelines gruppiert sind
Lokales Setup : Standardmäßig wird LanceDB lokal mit NetworkX und OpenAI ausgeführt.
Vektorspeicher : Cognee unterstützt LanceDB, Qdrant, PGVector und Weaviate für die Vektorspeicherung.
Sprachmodelle (LLMs) : Sie können entweder Anyscale oder Ollama als Ihren LLM-Anbieter verwenden.
Graph Stores : Neben NetworkX wird auch Neo4j für die Graphspeicherung unterstützt.
Benutzerverwaltung : Erstellen Sie individuelle Benutzerdiagramme und verwalten Sie Berechtigungen
Schauen Sie sich hier unser Demo-Notizbuch an
Wichtige Konfigurationsinformationen finden Sie in der Cognee-Kurzanleitung.
Docker komponieren
Wichtige Beta-Informationen und Nutzungsanweisungen finden Sie im Cognee-Entwicklungshandbuch.
Pip Install Cognee
<style> table { width: 100%; } </style>
Name | Typ | Aktueller Stand | Bekannte Probleme |
---|---|---|---|
Qdrant | Vektor | Stabil ✅ | |
Weben | Vektor | Stabil ✅ | |
LanceDB | Vektor | Stabil ✅ | |
Neo4j | Graph | Stabil ✅ | |
NetzwerkX | Graph | Stabil ✅ | |
FalkorDB | Vektor/Grafik | Instabil | |
PGVector | Vektor | Instabil | Postgres DB gibt den Timeout-Fehler zurück |