Graphiti:リアルタイム知識グラフを構築・クエリするためのフレームワーク 165

小编 ·

Graphiti:リアルタイム知識グラフを構築・クエリするためのフレームワーク

Graphitiは知識グラフの構築とクエリのためのフレームワークで、時間認識機能を備え、動的な環境に適している。従来のRAG(検索拡張生成)とは異なり、ユーザーのやりとりや構造化・非構造化データ、外部情報をリアルタイムに統合してクエリ可能なグラフを生成する。リアルタイム更新、効率的な検索、精度の高い履歴クエリをサポートし、グラフ全体を再計算する必要がないため、インタラクティブでコンテキストを認識するアプリケーションの開発に最適。

Graphiti:リアルタイム知識グラフを構築・クエリするためのフレームワーク

Graphitiとは?

Graphiti は、時間認識機能を備えた知識グラフの構築および検索フレームワークであり、動的な環境での利用に非常に適しています。従来の Retrieval-Augmented Generation(RAG)方式とは異なり、Graphiti はユーザーのやりとり、構造化・非構造化データ、外部情報をリアルタイムに統合し、検索可能なグラフを生成できます。その強みは、リアルタイムなデータ更新、効率的な検索、正確な履歴クエリをサポートし、グラフ全体を再計算する必要がない点にあり、インタラクティブでコンテキストを認識するアプリケーションの開発に最適です。

Graphiti:リアルタイム知識グラフを構築・検索するためのフレームワーク.webp

Graphiti の主な機能

  • リアルタイム増分更新:新しいデータ断片を即座に統合でき、バッチ再計算を行う必要はありません。

  • 二重時間データモデル:イベント発生時刻と取り込み時刻を明示的に追跡し、正確なポイントインタイムクエリをサポートします。

  • 効率的なハイブリッド検索:セマンティック埋め込み、キーワード(BM25)、グラフ走査を組み合わせて、要約のために大規模言語モデル(LLM)に依存することなく、低レイテンシな検索を実現します。

  • カスタムエンティティ定義:シンプルな Pydantic モデルを通じて、柔軟にオントロジーやカスタムエンティティを作成できます。

  • スケーラビリティ:並列処理によって大規模データセットを効率的に管理し、企業環境にも適しています。

  • 複数の LLM との統合:Openai、Anthropic、Groq などの LLM プロバイダをサポートし、柔軟な LLM 推論および埋め込みオプションを提供します。

  • MCP サーバー:FastAPI ベースの API サービスを提供し、MCP プロトコルを通じて知識グラフとやり取りできます。イベント管理、エンティティ管理、リレーション処理などの機能を含みます。

Graphiti を選ぶ理由

  • リアルタイムでデータを更新でき、動的に変化する環境に適応できます。

  • 正確なポイントインタイムクエリをサポートし、過去の情報を簡単に追跡できます。

  • 検索速度が速く、複雑な言語モデルに依存する必要がありません。

  • データ構造をカスタマイズでき、特定のニーズに対応できます。

  • 大量のデータを効率的に処理でき、企業向けアプリケーションに適しています。

Graphiti のインストールと使用方法

Graphiti のインストール

まず、お使いのシステムがインストール要件を満たしていることを確認し、必要な依存関係をインストールしてください。

  • Python:システムに Python 3.10 以降がインストールされていることを確認してください。

  • Neo4j:バージョン 5.26 以降の Neo4j データベースをインストールしてください。Neo4j Desktop を使うと、インストールと管理が簡単になります。

  • OpenAI API キー:OpenAI を LLM 推論および埋め込みに使用する場合、有効な OpenAI API キーが必要です。

Graphiti コアライブラリは pip または poetry を使用してインストールできます。

pip install graphiti-core
# または
poetry add graphiti-core

Graphiti の初期化

コード内で Graphiti インスタンスを初期化し、Neo4j データベースに接続します。

from graphiti_core import Graphiti
graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")

インデックスと制約の構築

データを追加する前に、グラフデータベースを初期化し、Graphiti のインデックスと制約を構築します。

await graphiti.build_indices_and_constraints()

データの追加

add_episode メソッドを使用して、データを知識グラフに追加します。各データ断片は「エピソード」と呼ばれます。

from graphiti_core.nodes import EpisodeType
from datetime import datetime, timezone
episodes = [
"Kamala Harris is the Attorney General of California. She was previously the district attorney for San Francisco.",
"As AG, Harris was in office from January 3, 2011 – January 3, 2017"
]
for i, episode in enumerate(episodes):
await graphiti.add_episode(
name=f"Freakonomics Radio {i}",
episode_body=episode,
source=EpisodeType.text,
source_description="podcast",
reference_time=datetime.now(timezone.utc)
)

データの検索

search メソッドを使用してセマンティック類似性とキーワード検索を組み合わせ、知識グラフを検索します。

results = await graphiti.search('Who was the California Attorney General?')

カスタム検索

必要に応じて検索をカスタマイズできます。例えば、中心ノードを指定し、そのノードに近い結果を優先することができます。

await graphiti.search('Who was the California Attorney General?', center_node_uuid)

接続の終了

チャット状態管理が完了したら、Graphiti の接続を閉じます。

graphiti.close()

MCP サーバーの使用

Graphiti は FastAPI を通じてやり取りできる MCP サーバーを提供しています。このサーバーをデプロイし、MCP プロトコルを使用して知識グラフとやり取りできます。

1. Graphiti リポジトリをクローンまたはダウンロードします。

2. MCP サーバーを実行します。

uvicorn graphiti.mcp_server.main:app --reload

3. AI アシスタント内で MCP プロトコルを使用してサーバーと通信します。

Azure OpenAI の使用

Azure OpenAI を使用する場合、対応するクライアントとエンベッダーを設定する必要があります。

from openai import AsyncAzureOpenAI
from graphiti_core import Graphiti
from graphiti_core.llm_client import OpenAIClient
from graphiti_core.embedder.openai import OpenAIEmbedder, OpenAIEmbedderConfig
api_key = "<your-api-key>"
api_version = "<your-api-version>"
azure_endpoint = "<your-azure-endpoint>"
azure_openai_client = AsyncAzureOpenAI(api_key=api_key, api_version=api_version, azure_endpoint=azure_endpoint)
graphiti = Graphiti(
"bolt://localhost:7687",
"neo4j",
"password",
llm_client=OpenAIClient(client=azure_openai_client),
embedder=OpenAIEmbedder(config=OpenAIEmbedderConfig(embedding_model="text-embedding-3-small"), client=azure_openai_client)
)

プレースホルダー値は実際の Azure OpenAI の資格情報に置き換え、正しい埋め込みモデル名を指定してください。

Graphiti のメリット

  • 他の技術と比較して、Graphiti は動的データの処理、リアルタイム更新、検索速度において明確な優位性があります。

  • サーバー実装が提供されており、他のシステムとの統合が容易です。

  • 複数の環境構成と他のサービスとの統合をサポートしています。

関連リンク

論文:https://arxiv.org/abs/2501.13956

GitHub リポジトリ:https://github.com/getzep/graphiti