コンテンツにスキップ

Graphiti - エージェント向けの時間的ナレッジグラフ チートシート

Graphiti - エージェント向けの時間的ナレッジグラフ チートシート

Graphiti (Zep による) は AI エージェント向けに 時間的ナレッジグラフ を構築とクエリするためのオープンソースフレームワークです。静的グラフとは異なり、Graphiti は事実が時間とともにどう変わるかを追跡します。各エッジは有効期間を担持するため、グラフは何が真実であるだけでなく いつ それが真実であったかを知っています。出所と歴史を保存します。また、全グラフを再計算することなく増分的にデータを取り込むため — エピソードは追加されます — メモリが進化する事実について推論する必要があるメモリに適しています。

要件

  • グラフデータベース: Neo4j または FalkorDB
  • LLM プロバイダー (OpenAI, Anthropic など) エンティティ/リレーションシップ抽出用
  • Python 3.10+

インストール

方法コマンド
pippip install graphiti-core
FalkorDB 付きpip install "graphiti-core[falkordb]"
キーを設定export OPENAI_API_KEY=... とグラフ DB 環境変数
確認python -c "import graphiti_core; print('ok')"

コア概念

用語意味
エピソード取り込まれたデータの単位 (メッセージ、テキスト、JSON)
ノードエピソードから抽出されたエンティティ
エッジ (事実)有効期間 (valid_at/invalid_at) を持つリレーションシップ
バイテンポラルイベント時刻と取り込み時刻の両方を追跡
コミュニティ関連エンティティのクラスター

初期化とエピソード追加

from graphiti_core import Graphiti
from graphiti_core.nodes import EpisodeType
import asyncio

async def main():
    graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")
    await graphiti.build_indices_and_constraints()

    await graphiti.add_episode(
        name="msg1",
        episode_body="Nick joined Acme as CTO in 2024.",
        source=EpisodeType.text,
        reference_time=datetime.now(),
        source_description="chat",
    )

asyncio.run(main())
呼び出し説明
Graphiti(uri, user, pass)グラフ DB に接続
build_indices_and_constraints()ワンタイム スキーマセットアップ
add_episode(...)データを取り込み; エンティティ/エッジを自動的に抽出
add_episode_bulk(...)バッチ取り込み

メモリを検索

# ハイブリッド検索: セマンティック + BM25 + グラフ、再ランク
results = await graphiti.search("Where does Nick work?")
for r in results:
    print(r.fact, r.valid_at)
検索動作
search(query)ハイブリッド (セマンティック + キーワード + グラフ) エッジ検索
ノード検索エンティティを取得
再ランキングRRF / グラフ距離 / クロスエンコーダーオプション
セフト ノード特定のエンティティ周辺に結果をバイアス

時間的推論

差別化: 事実が変わるとき、Graphiti は古いものを削除しません — 前のエッジを無効にマークして新しいものを追加するため、履歴が保存されます。

機能用途
事実の無効化古い事実は矛盾するとき invalid_at をセット
時点クエリ「日付 X の時点で何が真実だったか?」
出所事実をそのソースエピソードにトレース
カスタムエンティティタイプ型付き抽出用に Pydantic モデルを定義

統合

ターゲット方法
ZepGraphiti は Zep のメモリサービスの下のエンジン
エージェントフレームワークメモリ/取得ツールとして使用
MCPGraphiti MCP サーバーがメモリをエージェントに公開
カスタムコンテキスト用にグラフを直接クエリ

一般的なワークフロー

# 変わる事実を生き残るエージェントメモリ
await graphiti.add_episode(name="e1", episode_body="Nick uses Postgres.", ...)
# 後で、事実は変わります:
await graphiti.add_episode(name="e2", episode_body="Nick migrated to SQLite.", ...)
# Graphiti は Postgres 事実を無効化し、時刻付きで SQLite 事実を記録
ctx = await graphiti.search("What database does Nick use now?")

Graphiti vs その他のメモリフレームワーク

アスペクトGraphitiCogneeMem0
コア強み時間的/バイテンポラル事実グラフネイティブ ECLパーソナライゼーション
履歴有効期間付きで保存グラフスナップショット最近フォーカス
バックエンドNeo4j / FalkorDBマルチストアベクトル/グラフ/KV
最適な用途時間とともに変わる事実ローカルグラフ推論会話メモリ

リソース