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