1 Punkte von GN⁺ 2024-11-19 | 1 Kommentare | Auf WhatsApp teilen

Optimiertes und promptfähiges Fast-GraphRAG-Framework

  • Interpretierbares und debugbares Wissen: Graphen bieten eine für Menschen erkundbare Sicht auf Wissen und können abgefragt, visualisiert und aktualisiert werden
  • Schnell, günstig und effizient: Für den Einsatz im großen Maßstab konzipiert und mit geringen Ressourcen- und Kostenanforderungen
  • Dynamische Daten: Erstellt und verbessert Graphen automatisch entsprechend den Anforderungen von Domäne und Ontologie
  • Inkrementelle Updates: Unterstützt Echtzeit-Updates, während sich die Daten weiterentwickeln
  • Intelligente Navigation: Nutzt graphbasierte Navigation auf Grundlage von PageRank, um Genauigkeit und Zuverlässigkeit zu erhöhen
  • Asynchrone Ausführung und Typsupport: Vollständige Unterstützung für Asynchronität und Typen für robuste und vorhersagbare Workflows

Installation

  • Installation über PyPi (empfohlen)

    pip install fast-graphrag
    
  • Installation aus dem Quellcode

    # Zuerst dieses Repository klonen
    cd fast_graphrag
    poetry install
    

Schnellstart

  • OpenAI-API-Schlüssel in der Umgebung setzen

    export OPENAI_API_KEY="sk-..."
    
  • Charles Dickens’ A Christmas Carol herunterladen

    curl https://raw.githubusercontent.com/circlemind-ai/fast-graphrag/… > ./book.txt
    
  • Python-Codebeispiel

    from fast_graphrag import GraphRAG
    
    DOMAIN = "Analyze this story and identify the characters. Focus on how they interact with each other, the locations they explore, and their relationships."
    EXAMPLE_QUERIES = [
        "What is the significance of Christmas Eve in A Christmas Carol?",
        "How does the setting of Victorian London contribute to the story's themes?",
        "Describe the chain of events that leads to Scrooge's transformation.",
        "How does Dickens use the different spirits (Past, Present, and Future) to guide Scrooge?",
        "Why does Dickens choose to divide the story into \"staves\" rather than chapters?"
    ]
    ENTITY_TYPES = ["Character", "Animal", "Place", "Object", "Activity", "Event"]
    
    grag = GraphRAG(
        working_dir="./book_example",
        domain=DOMAIN,
        example_queries="\n".join(EXAMPLE_QUERIES),
        entity_types=ENTITY_TYPES
    )
    
    with open("./book.txt") as f:
        grag.insert(f.read())
        print(grag.query("Who is Scrooge?").response)
    
  • Bei einer erneuten Initialisierung von fast-graphrag im selben Arbeitsverzeichnis bleibt sämtliches Wissen automatisch erhalten

Beispiele

  • Im Ordner examples finden sich Tutorials zu typischen Anwendungsfällen der Bibliothek
    • custom_llm.py: Einfaches Beispiel für die Konfiguration von fast-graphrag mit verschiedenen OpenAI-API-kompatiblen Sprachmodellen und Embeddern

Beiträge

  • Beiträge jeder Größe sind willkommen. Beiträge machen die Open-Source-Community zu einem großartigen Ort zum Lernen, Inspirieren und Erschaffen
  • Im Contribution Guide steht, wie man loslegt
  • Wer nicht weiß, wo er anfangen soll, kann dem Discord beitreten und Fragen stellen

Philosophie

  • Unsere Mission ist es, die Zahl erfolgreicher GenAI-Anwendungen weltweit zu erhöhen
  • Dafür entwickeln wir Memory- und Data-Tools, damit LLM-Apps hochspezialisierte Retrieval-Pipelines nutzen können, ohne die Komplexität der Einrichtung und Wartung agentischer Workflows

Open Source oder Managed Service

  • Dieses Repository steht unter der MIT-Lizenz. Details in LICENSE.txt
  • Der schnellste und zuverlässigste Weg für den Einstieg in Fast GraphRAG ist die Nutzung des Managed Service
  • Die ersten 100 Anfragen pro Monat sind kostenlos, danach wird nutzungsbasiert abgerechnet

1 Kommentare

 
GN⁺ 2024-11-19
Hacker-News-Kommentare
  • Mit BM25 und LLMs zusammen lassen sich sehr relevante Ergebnisse erzielen

    • Embeddings funktionieren gut, wenn die Abfragegröße in etwa der Größe des Embedding-Speichers entspricht
    • Es ist effektiv, mit einem LLM eine hypothetische Antwort zu erzeugen und diese für die Embedding-Abfrage zu verwenden
    • In den Schritten zur Wissenszerlegung und -extraktion werden Metaprompter verwendet, um Domain-/Entitätstypen automatisch zu erzeugen
    • LLMs sind schlecht darin, Wissen auf die passende Granularität herunterzubrechen
    • Mit mermaid.js-Mindmaps wird die Eingabe hierarchisch aufgeteilt und ein passender Pfad gefunden
    • Generierte Fragen werden als Text indiziert und eingebettet
    • Mit BM25 kann die Nutzeranfrage direkt abgeglichen werden, und ein hybrider Ansatz liefert bessere Ergebnisse
    • Wenn zur Abfragezeit kein LLM verwendet wird, kann mit Embedding-Ähnlichkeit als Kostenfunktion hierarchisch gesucht werden
  • PageRank und Triangle Centrality sind interessante Zentralitätsmaße, die sich auf Graphen anwenden lassen

    • Triangle Centrality bestimmt Zentralität, indem Dreiecke um einen Knoten herum gezählt werden
    • Forschungsergebnisse zeigen, dass TC in spärlichen Graphen langsamer als PR ist, mit zunehmender Graphgröße aber effizienter wird
  • Klassische Information Retrieval eignet sich aus meiner Sicht gut für RAG

    • Vektorsuche ist für unstrukturierte Daten nützlich, für strukturierte Daten aber weniger effektiv
    • Strukturierte Daten für die Vektorsuche in unstrukturierte Daten umzuwandeln, kann ineffizient sein
    • Es kann sinnvoll sein, das LLM Abfragen lernen zu lassen oder mit bestehenden Such-/Query-APIs zu verbinden
    • Große Kontextfenster zu nutzen, um mit mehreren Abfragen viele Ergebnisse zu holen, ist schneller und günstiger als Vektorsuche
  • In einem AI-Startup soll für die Analyse großer Dokumentenmengen ein GraphRAG-System eingesetzt werden

    • Es wird erwartet, dass sich monatlich etwa 10 % der Dokumente ändern
    • Daten lassen sich mit S3 erfassen, aber Kosten und Verarbeitungszeit müssen verstanden werden
  • Frage, warum PageRank einen OpenAI-API-Schlüssel verlangt

    • Es gibt eine Einschränkung, dass mit den Ausgaben von OpenAI keine konkurrierenden Modelle entwickelt werden dürfen
    • Sorge über den wirtschaftlichen Abstieg natürlicher Menschen
  • Frage, wie sich Graphen ohne Graphdatenbank speichern und abfragen lassen

    • Bei Extraktionsversuchen mit dem sciphi-triplex-Modell wurden inkonsistente Ergebnisse beobachtet
  • Frage, wie viel Text nötig ist, um einen Wissensgraphen für domänenspezifische Texte aufzubauen

    • Aider nutzt PageRank auf dem Aufrufgraphen eines Code-Repositorys, um relevanten Kontext zu finden
  • Frage, wie Domain und Beispielabfragen beim Aufbau eines Wissensgraphen helfen

  • Verwirrung über das Preismodell

    • Auf der GitHub-Seite steht, dass die ersten 100 Anfragen kostenlos sind, auf der Landingpage wird für die kostenlose Nutzung jedoch Self-Hosting empfohlen
  • Frage, ob die Antwort auf „Wer ist Scrooge?“ besser ist als bei anderen Ansätzen

    • Zweifel, ob der Ansatz Kosten senken oder bessere Antworten liefern soll