1 points par GN⁺ 2024-11-19 | 1 commentaires | Partager sur WhatsApp

Framework Fast GraphRAG simplifié et pilotable par prompt

  • Connaissances interprétables et débogables : le graphe offre une vue des connaissances que les humains peuvent explorer, interroger, visualiser et mettre à jour
  • Rapide, économique et efficace : conçu pour fonctionner à grande échelle avec de faibles besoins en ressources et en coûts
  • Données dynamiques : génère et améliore automatiquement des graphes en fonction des exigences du domaine et de l’ontologie
  • Mises à jour incrémentales : prend en charge les mises à jour en temps réel à mesure que les données évoluent
  • Exploration intelligente : utilise une exploration de graphe fondée sur le PageRank pour améliorer la précision et la fiabilité
  • Prise en charge de l’asynchrone et du typage : fournit des workflows robustes et prévisibles grâce à une prise en charge complète de l’asynchrone et du typage

Installation

  • Installation depuis PyPi (recommandée)

    pip install fast-graphrag
    
  • Installation depuis les sources

    # Clonez d’abord ce dépôt
    cd fast_graphrag
    poetry install
    

Démarrage rapide

  • Définir la clé OpenAI API dans l’environnement

    export OPENAI_API_KEY="sk-..."
    
  • Télécharger A Christmas Carol de Charles Dickens

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

    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)
    
  • Lors d’une réinitialisation de fast-graphrag dans le même répertoire de travail, toutes les connaissances sont automatiquement conservées

Exemples

  • Consultez le dossier examples pour des tutoriels sur les cas d’usage courants de la bibliothèque
    • custom_llm.py : exemple simple de configuration de fast-graphrag avec différents modèles de langage et embedders compatibles avec l’API OpenAI

Contribution

  • Les contributions, petites ou grandes, sont les bienvenues. Elles font de la communauté open source un lieu formidable pour apprendre, trouver de l’inspiration et créer
  • Consultez le guide de contribution pour savoir comment démarrer
  • Si vous ne savez pas par où commencer, vous pouvez rejoindre Discord et poser vos questions

Philosophie

  • Notre mission est d’augmenter le nombre d’applications GenAI réussies dans le monde
  • Pour cela, nous construisons des outils de mémoire et de données afin que les applications LLM puissent exploiter des pipelines de recherche hautement spécialisés sans la complexité de configuration et de maintenance des workflows agentiques

Open source ou service managé

  • Ce dépôt est sous licence MIT. Voir LICENSE.txt pour plus de détails
  • Le moyen le plus rapide et le plus fiable de démarrer avec Fast GraphRAG est d’utiliser le service managé
  • Les 100 premières requêtes de chaque mois sont gratuites, puis la facturation se fait selon l’usage

1 commentaires

 
GN⁺ 2024-11-19
Avis Hacker News
  • Utiliser BM25 avec des LLM permet d’obtenir des résultats très pertinents

    • Les embeddings fonctionnent bien lorsque la taille de la requête est proche de celle du magasin d’embeddings
    • Utiliser un LLM pour générer une réponse hypothétique puis l’employer comme requête d’embedding est efficace
    • À l’étape de décomposition et d’extraction des connaissances, un méta-prompteur est utilisé pour générer automatiquement les types de domaine/d’entité
    • Les LLM sont peu performants pour décomposer les connaissances au bon niveau
    • Utilisation de cartes mentales mermaid.js pour découper l’entrée de manière hiérarchique et trouver la racine appropriée
    • Les questions générées sont indexées comme texte et vectorisées
    • BM25 permet de faire correspondre directement la requête utilisateur, et une approche hybride donne de meilleurs résultats
    • Sans utiliser de LLM au moment de la requête, il est possible d’explorer hiérarchiquement en utilisant la similarité d’embedding comme fonction de coût
  • PageRank et Triangle Centrality sont des mesures de centralité intéressantes applicables aux graphes

    • Triangle Centrality détermine la centralité en comptant les triangles autour d’un nœud
    • Selon les recherches, TC est plus lent que PR sur les graphes clairsemés, mais devient plus efficace à mesure que le graphe grandit
  • La recherche d’information traditionnelle semble bien adaptée au RAG

    • La recherche vectorielle est utile pour les données non structurées, mais moins efficace pour les données structurées
    • Convertir des données structurées en données non structurées pour la recherche vectorielle peut être inefficace
    • Il peut être utile de faire apprendre la requête au LLM ou de le faire interagir avec des API de recherche/requête existantes
    • Utiliser une grande fenêtre de contexte pour récupérer beaucoup de résultats via plusieurs requêtes est plus rapide et moins coûteux que la recherche vectorielle
  • Souhait d’utiliser un système GraphRag dans une startup IA pour l’analyse de documents à grande échelle

    • Environ 10 % des documents devraient être modifiés chaque mois
    • Il est possible d’utiliser S3 pour collecter les données, mais il faut comprendre les coûts et le temps de traitement
  • Interrogation sur le fait que PageRank exige une clé API OpenAI

    • Il existe une restriction empêchant d’utiliser les sorties d’OpenAI pour développer des modèles concurrents
    • Inquiétude concernant le déclin économique des humains ordinaires
  • Question sur la manière de stocker et d’interroger un graphe sans base de données graphe

    • Lors d’une tentative d’extraction avec le modèle sciphi triplex, des résultats incohérents ont été observés
  • Question sur la quantité de texte nécessaire pour construire un graphe de connaissances à partir de textes spécifiques à un domaine

    • Aider applique PageRank au graphe d’appels d’un dépôt de code pour trouver le contexte pertinent
  • Question sur la façon dont le domaine et les requêtes d’exemple aident à construire un graphe de connaissances

  • Confusion autour de la politique tarifaire

    • La page GitHub indique que les 100 premières requêtes sont gratuites, mais la page d’accueil recommande l’auto-hébergement pour une utilisation gratuite
  • Question de savoir si la réponse à « Qui est Scrooge ? » est meilleure qu’avec d’autres approches

    • Interrogation sur le fait de savoir s’il s’agit d’une approche visant à réduire les coûts ou à obtenir de meilleures réponses