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

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
脚本プランナー▸
AIアプリ
AIニュース 