Graphiti:一個用于構建和查詢實時知識圖譜的框架
Graphiti是什么?
Graphiti 是一個用于構建和查詢知識圖譜的框架,它具備時間感知能力,非常適合用在動態環境中。與傳統的檢索增強生成(RAG)方法不同,Graphiti 可以實時整合用戶交互、結構化和非結構化的數據,以及外部信息,生成一個可查詢的圖譜。它的優勢在于支持數據的實時更新、高效檢索和精確的歷史查詢,無需重新計算整個圖譜,非常適合開發交互式、上下文感知的應用程序。
Graphiti 的主要功能
實時增量更新:能夠立即集成新的數據片段,無需進行批量重新計算。
雙時態數據模型:明確跟蹤事件發生時間和攝入時間,支持精確的時間點查詢。
高效混合檢索:結合語義嵌入、關鍵字(BM25)和圖遍歷,實現低延遲查詢,無需依賴大語言模型(LLM)進行總結。
自定義實體定義:支持通過簡單的 Pydantic 模型創建靈活的本體和自定義實體。
可擴展性:通過并行處理有效管理大型數據集,適用于企業環境。
與多種 LLM 集成: 支持 Openai、Anthropic 和 Groq 等 LLM 提供商,提供靈活的 LLM 推理和嵌入選項。
MCP 服務器: 提供一個基于 FastAPI 的 API 服務,支持通過 MCP 協議與知識圖譜進行交互,包括事件管理、實體管理和關系處理等功能。
選擇 Graphiti 的原因
它能實時更新數據,適應動態變化的環境。
支持精確的時間點查詢,方便追溯歷史信息。
檢索速度快,不需要依賴復雜的語言模型。
可以自定義數據結構,滿足特定需求。
能高效處理大量數據,適合企業級應用。
Graphiti的安裝和使用
安裝 Graphiti
首先,確保你的系統滿足安裝要求,并安裝必要的依賴項:
Python:確保你的系統中安裝了 Python 3.10 或更高版本。
Neo4j:安裝 Neo4j 數據庫,版本 5.26 或更高。你可以使用 Neo4j Desktop 來簡化安裝和管理過程。
OpenAI API Key:如果你打算使用 OpenAI 進行 LLM 推理和嵌入,你需要一個有效的 OpenAI API Key。
你可以使用 pip 或 poetry 來安裝 Graphiti 核心庫:
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 方法將數據添加到知識圖譜中。每個數據片段稱為一個“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 提供了一個 MCP 服務器,可以通過 FastAPI 進行交互。你可以部署這個服務器并使用 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
相關文章
- 用戶登錄