1 ポイント 投稿者 GN⁺ 2024-11-19 | 1件のコメント | WhatsAppで共有

合理化され、プロンプト可能なFast GraphRAGフレームワーク

  • 解釈可能でデバッグ可能な知識: グラフは人間が探索できる知識のビューを提供し、クエリ、可視化、更新が可能
  • 高速・低コスト・高効率: 大規模実行向けに設計されており、必要なリソースやコストが少ない
  • 動的データ: ドメインとオントロジー要件に合わせてグラフを自動生成し、改善する
  • 段階的アップデート: データの進化に応じてリアルタイム更新をサポート
  • インテリジェントな探索: PageRankベースのグラフ探索を活用して正確性と信頼性を高める
  • 非同期および型サポート: 完全な非同期対応と型サポートにより、堅牢で予測可能なワークフローを提供

インストール

  • PyPIからインストール(推奨)

    pip install fast-graphrag
    
  • ソースからインストール

    # まずこのリポジトリをクローン
    cd fast_graphrag
    poetry install
    

クイックスタート

  • OpenAI APIキーを環境に設定

    export OPENAI_API_KEY="sk-..."
    
  • Charles Dickensの A Christmas Carol をダウンロード

    curl https://raw.githubusercontent.com/circlemind-ai/fast-graphrag/… > ./book.txt
    
  • 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)
    
  • 同じ作業ディレクトリでfast-graphragを再初期化する際、すべての知識を自動的に保持

  • ライブラリの一般的なユースケースに関するチュートリアルは examples フォルダを参照
    • custom_llm.py: さまざまなOpenAI API互換言語モデルおよび埋め込みモデルとともにfast-graphragを構成する簡単な例

貢献

  • 大小を問わず貢献を歓迎。貢献によって、オープンソースコミュニティは学び、刺激を与え、創造する素晴らしい場になる
  • 貢献ガイドを確認して、始め方を知ることができる
  • どこから始めればよいかわからない場合は、Discordに参加して質問可能

哲学

  • 私たちの使命は、世界で成功するGenAIアプリケーションの数を増やすこと
  • そのために、LLMアプリがエージェントワークフローの設定と維持の複雑さなしに高度に特化した検索パイプラインを活用できるよう、メモリおよびデータツールを構築している

オープンソースまたはマネージドサービス

  • このリポジトリはMITライセンスの下で提供。詳細は LICENSE.txt を参照
  • Fast GraphRAGを始める最も速く信頼できる方法は、マネージドサービスを利用すること
  • 毎月最初の100リクエストは無料で、その後は使用量に応じて課金

1件のコメント

 
GN⁺ 2024-11-19
Hacker Newsのコメント
  • BM25とLLMを組み合わせると、非常に関連性の高い結果を得られる

    • クエリの規模が埋め込みストアの規模に近いとき、埋め込みはうまく機能する
    • LLMを使って仮想的な回答を生成し、それを埋め込みクエリに使うと効果的
    • 知識の分解と抽出の段階でメタプロンプターを使い、ドメイン/エンティティ型を自動生成する
    • LLMは知識を適切な粒度に分解するのが苦手
    • mermaid.jsのマインドマップを使って入力を階層的に分割し、適切なルートを見つける
    • 生成された質問をテキストとしてインデックス化し、埋め込み化する
    • BM25を使えばユーザークエリを直接マッチングでき、ハイブリッドアプローチのほうがより良い結果をもたらす
    • クエリ時にLLMを使わなければ、埋め込み類似度をコスト関数として使い、階層的に探索できる
  • PageRankとTriangle Centralityは、グラフに適用できる興味深い中心性指標

    • Triangle Centralityはノード周辺の三角形を数えて中心性を把握する
    • 研究によると、TCは疎グラフではPRより遅いが、グラフが大きくなるほど効率的になる
  • 従来の情報検索はRAGに適していると思う

    • ベクトル検索は非構造化データには有用だが、構造化データにはそれほど効果的ではない
    • ベクトル検索のために構造化データを非構造化データへ変換するのは非効率になりうる
    • LLMにクエリを学習させたり、既存の検索/クエリAPIとインターフェースさせたりするのが有用かもしれない
    • 大きなコンテキストサイズを使って複数クエリで多くの結果を取得するほうが、ベクトル検索より速く安価
  • AIスタートアップで大規模な文書分析のためにGraphRagシステムを使いたい

    • 毎月およそ10%の文書変更が見込まれる
    • S3を使ってデータを収集できるが、コストと処理時間を把握する必要がある
  • PageRankがOpenAI APIキーを要求することへの疑問

    • OpenAIの出力物を使って競合モデルを開発できないという制限がある
    • 人間の経済的地位の低下への懸念
  • グラフデータベースなしでグラフを保存・クエリする方法についての質問

    • sciphi triplexモデルを使った抽出の試みで、一貫しない結果を経験した
  • ドメイン固有テキストの知識グラフ構築に必要なテキスト量についての質問

    • AiderはコードリポジトリのコールグラフにPageRankを適用し、関連コンテキストを見つけている
  • ドメインとサンプルクエリが知識グラフ構築にどう役立つのかについての質問

  • 価格設定への混乱

    • GitHubページでは最初の100リクエストは無料とあるが、ランディングページでは無料で使うにはセルフホストを推奨している
  • 「Scroogeとは誰か?」という質問への回答が、他のアプローチより優れているのかについての質問

    • コスト削減のためのアプローチなのか、より良い回答を得るためのアプローチなのか疑問