实时知识图谱构建框架

Graphiti是一个为动态环境中的AI代理设计的实时知识图谱框架,支持增量数据更新、高效检索和精确历史查询。

  • by krishna2206
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 krishna2206/graphiti-mcp

使用说明

Graphiti

Build Real-Time Knowledge Graphs for AI Agents

:星: 帮助我们接触到更多的开发人员,并发展Graphiti社区。星这个回购!


[!提示] 看看新的 Graphiti的MCP服务器!为Claude、Cursor和其他MCP客户端提供强大的功能 基于知识图谱的记忆。

Graphiti是一个用于构建和查询时间感知知识图的框架,专为AI代理量身定制 在动态环境中运行。与传统的检索增强生成(RAG)方法不同,Graphiti 持续地将用户交互、结构化和非结构化企业数据以及外部信息集成到 连贯、可查询的图。该框架支持增量数据更新、高效检索和精确的历史记录 无需完全重新计算图的查询,使其适用于开发交互式、上下文感知的人工智能 应用。

使用Graphiti可以:

  • 集成和维护动态用户交互和业务数据。
  • 促进代理的基于状态的推理和任务自动化。
  • 使用语义、关键字和基于图的搜索方法查询复杂、不断变化的数据。


知识图谱是一个由相互关联的事实组成的网络,例如 “肯德拉喜欢阿迪达斯的鞋子。” 每个事实都是一个“三元组” 由两个实体代表,或 节点(“肯德拉”、“阿迪达斯鞋”)及其关系,或边缘(“爱”)。知识图谱已被探索 广泛用于信息检索。Graphiti的独特之处在于它能够自主构建知识图 同时处理不断变化的关系并维护历史背景。

Graphiti和Zep的上下文工程平台。

Graphiti为核心提供动力 泽普,一个用于AI代理的交钥匙上下文工程平台。美国洁普 提供代理内存、用于动态数据的图形RAG以及上下文检索和组装。

使用Graphiti,我们已经证明了Zep是 这 Agent记忆的最新进展.

阅读我们的论文: Zep:一种用于代理内存的时态知识图架构.

我们很高兴开源Graphiti,相信它的潜力远远超出了人工智能内存应用程序。

Zep vs Graphiti

Aspect Zep Graphiti
他们是什么 用于上下文工程和AI内存的完全托管平台 开源图形框架
用户和对话管理 内置用户、线程和消息存储 构建自己的
检索和性能 预配置、生产就绪的检索,可大规模实现低于200ms的性能 需要定制实施;性能取决于您的设置
开发工具 具有图形可视化、调试日志、API日志的仪表板;Python、TypeScript和Go的SDK 构建自己的工具
企业特性 SLA、支持、安全保证 自我管理
部署 完全管理或在云中 仅限自托管

何时选择

选择Zep 如果你想要一个具有安全性、性能和支持的交钥匙企业级平台。

选择图形 如果你想要一个灵活的OSS核心,并且对构建/操作周围的系统感到满意。

为什么选择Graphiti?

传统的RAG方法通常依赖于批处理和静态数据摘要,这使得它们在以下方面效率低下 频繁变化的数据。Graphiti通过提供以下服务来应对这些挑战:

  • 实时增量更新: 无需批量重新计算,即可立即整合新的数据集。
  • 双时态数据模型: 明确跟踪事件发生和摄入时间,实现准确的时间点 查询。
  • 高效的混合检索: 结合语义嵌入、关键字(BM25)和图遍历来实现 低延迟查询,不依赖LLM摘要。
  • 自定义实体定义: 通过以下方式灵活创建本体并支持开发人员定义的实体 简单的Pydantic模型。
  • 可扩展性: 通过并行处理高效管理大型数据集,适用于企业环境。

Graphiti与GraphRAG

特性 GraphRAG Graphti
主要用途 静态文档摘要 动态数据管理
数据处理 面向批处理 连续、增量更新
知识结构 实体集群和社区摘要 情景数据、语义实体、社区
检索方法 顺序LLM摘要 混合语义、关键字和基于图的搜索
适应性 低 高
临时处理 基本时间戳跟踪 显式双时态跟踪
矛盾处理 LLM驱动的摘要判断 时间边缘失效
查询延迟 秒到几十秒 通常为亚秒级延迟
自定义实体类型 否 是,可定制
可扩展性 中等 高,针对大型数据集进行了优化

Graphiti是专门为应对动态和频繁更新的数据集的挑战而设计的,使其 特别适用于需要实时交互和精确历史查询的应用。

安装

要求:

  • Python 3.10或更高版本
  • FalkorDB 1.1.2或更高版本
  • GoogleGeminineneneba API密钥(Graphiti使用GoogleGemini进行LLM推理、嵌入和重新排序)

[!提示] 安装FalkorDB最简单的方法是通过Docker:

docker run -p 6379:6379 -p 3000:3000 -it --rm falkordb/falkordb:latest

安装支持FalkorDB和Google Gemini的Graphiti:

pip install graphiti-core[falkordb,google-genai]

# or with uv
uv add graphiti-core[falkordb,google-genai]

默认为低并发;LLM提供程序429速率限制错误

Graphiti的摄取管道是为高并发性而设计的。默认情况下,并发性设置为低以避免LLM 提供程序429速率限制错误。如果您发现Graphiti运行缓慢,请按照以下说明增加并发性。

并发控制由 SEMAPHORE_LIMIT 环境变量。默认情况下, SEMAPHORE_LIMIT 设置为 10 并发操作有助于防止 429 LLM提供商的速率限制错误。如果您遇到此类错误,请尝试 降低该值。

如果您的LLM提供商允许更高的吞吐量,您可以增加 SEMAPHORE_LIMIT 促进发作摄入 演出

快速开始

[!重要] Graphiti使用Google Gemini进行LLM推理、嵌入和重新排序。确保a GOOGLE_API_KEY 设置在您的 使用Graphiti之前的环境。

有关完整的工作示例,请参阅 快速入门示例 在示例目录中。 快速入门演示了:

  1. 连接到FalkorDB数据库
  2. 初始化Graphiti索引和约束
  3. 在图表中添加剧集(文本和结构化JSON)
  4. 使用混合搜索搜索关系(边)
  5. 使用图距离重新排列搜索结果
  6. 使用预定义的搜索配方搜索节点

该示例有完整的文档记录,对每个功能都有清晰的解释,并包括一个全面的README,其中包含 设置说明和后续步骤。

使用Docker Compose运行

您可以使用Docker Compose快速启动FalkorDB:

docker compose up

这将启动FalkorDB Docker服务和相关组件。

MCP服务器

这 mcp_server 目录包含Graphiti的模型上下文协议(MCP)服务器实现。此服务器 允许AI助手通过MCP协议与Graphiti的知识图功能进行交互。

MCP服务器的主要功能包括:

  • 事件管理(添加、检索、删除)
  • 实体管理和关系处理
  • 语义和混合搜索功能
  • 用于组织相关数据的组管理
  • 图形维护操作

MCP服务器可以使用Docker和FalkorDB进行部署,从而可以轻松地将Graphiti集成到您的AI助手中 工作流程。

有关详细的设置说明和使用示例,请参阅 MCP服务器自述文件.

REST服务

这 server 目录包含用于和Graphiti API交互的API服务。它是使用FastAPI构建的。

请查看 服务器README 了解更多信息。

环境变量

Graphiti需要以下环境变量:

  • GOOGLE_API_KEY:您的Google Gemini API密钥(LLM推理、嵌入和重新排序所需)

数据库配置

FalkorDB配置可以通过实例化数据库驱动程序并将其传递给Graphiti构造函数来定制:

from graphiti_core import Graphiti
from graphiti_core.driver.falkordb_driver import FalkorDriver

# Create a FalkorDB driver with custom configuration
driver = FalkorDriver(
    host="localhost",
    port=6379,
    username="falkor_user",  # Optional
    password="falkor_password",  # Optional
    database="my_custom_graph"  # Custom database name, defaults to "default_db"
)

# Pass the driver to Graphiti
graphiti = Graphiti(graph_driver=driver)

在Google Gemini中使用Graphiti

Graphiti支持谷歌的Gemini模型,用于LLM推理、嵌入和交叉编码/重新排序。为了使用Gemini, 您需要使用Google API密钥配置LLM客户端、嵌入器和交叉编码器。

安装Graphiti:

uv add "graphiti-core[google-genai]"

# or

pip install "graphiti-core[google-genai]"
from graphiti_core import Graphiti
from graphiti_core.llm_client.gemini_client import GeminiClient, LLMConfig
from graphiti_core.embedder.gemini import GeminiEmbedder, GeminiEmbedderConfig
from graphiti_core.cross_encoder.gemini_reranker_client import GeminiRerankerClient

# Google API key configuration
api_key = "<your-google-api-key>"

# Initialize Graphiti with Gemini clients
graphiti = Graphiti(
    "bolt://localhost:7687",
    "neo4j",
    "password",
    llm_client=GeminiClient(
        config=LLMConfig(
            api_key=api_key,
            model="gemini-2.0-flash"
        )
    ),
    embedder=GeminiEmbedder(
        config=GeminiEmbedderConfig(
            api_key=api_key,
            embedding_model="embedding-001"
        )
    ),
    cross_encoder=GeminiRerankerClient(
        config=LLMConfig(
            api_key=api_key,
            model="gemini-flash-latest"
        )
    )
)

# Now you can use Graphiti with Google Gemini for all components

双子座重新登录者使用 gemini-flash-latest 默认情况下,该模型已针对 具有成本效益和低延迟的分类任务。它利用Gemini的对数概率特征对通道相关性进行排名。

文档

遥测

Graphiti收集匿名使用统计数据,以帮助我们了解框架的使用情况,并对其进行改进 每个人。我们认为透明度很重要,所以这就是我们收集的内容及其原因。

我们收集什么

初始化Graphiti实例时,我们收集:

  • 匿名标识符:随机生成的UUID存储在本地 ~/.cache/graphiti/telemetry_anon_id
  • 系统信息:操作系统、Python版本和系统架构
  • 图形版本:您正在使用的版本
  • 配置选项:
    • LLM提供者类型(谷歌双子座)
    • 数据库后端(FalkorDB)
    • 嵌入器提供商(谷歌双子座)

我们不收集的东西

我们致力于保护您的隐私。我们 从不 收集:

  • 个人信息或标识符
  • API密钥或凭据
  • 您的实际数据、查询或图形内容
  • IP地址或主机名
  • 文件路径或系统特定信息
  • 来自剧集、节点或边缘的任何内容

我们为什么收集这些数据

这些信息有助于我们:

  • 了解哪些配置最受欢迎,以确定支持和测试的优先级
  • 确定哪些法学硕士和数据库提供商需要重点开发
  • 跟踪采用模式以指导我们的路线图
  • 确保跨不同Python版本和操作系统的兼容性

通过分享这些匿名信息,您可以帮助我们使Graphiti更好地服务于社区中的每个人。

查看遥测代码

遥测代码 可以在这里找到.

如何禁用遥测

遥测是 退出 并且可以随时禁用。要禁用遥测采集,请执行以下操作:

选项1:环境变量

export GRAPHITI_TELEMETRY_ENABLED=false

选项2:在shell配置文件中设置

# For bash users (~/.bashrc or ~/.bash_profile)
echo 'export GRAPHITI_TELEMETRY_ENABLED=false' >> ~/.bashrc

# For zsh users (~/.zshrc)
echo 'export GRAPHITI_TELEMETRY_ENABLED=false' >> ~/.zshrc

选项3:为特定的Python会话设置

import os

os.environ['GRAPHITI_TELEMETRY_ENABLED'] = 'false'

# Then initialize Graphiti as usual
from graphiti_core import Graphiti

graphiti = Graphiti(...)

遥测在测试运行期间自动禁用(当 pytest 被检测到)。

技术细节

  • Telemetry使用PostHog进行匿名分析收集
  • 所有遥测操作都设计为无声失败,它们永远不会中断您的应用程序或影响Graphiti 功能
  • 匿名ID存储在本地,与任何个人信息无关

现状和路线图

Graphiti正在积极开发中。我们的目标是保持API的稳定性,同时致力于:

  • [x] 支持自定义图形模式:
    • 允许开发人员在摄取剧集时提供自己定义的节点和边缘类
    • 实现针对特定用例量身定制的更灵活的知识表示
  • [x] 通过更强大和可配置的选项增强检索能力
  • [x] Graphiti MCP服务器
  • []扩大测试覆盖范围以确保可靠性并抓住边缘情况

贡献

我们鼓励并感谢所有形式的贡献,无论是代码、文档、解决GitHub问题,还是 在Graphiti Discord频道回答问题。有关代码贡献的详细指南,请参阅 到 贡献.

支持

加入 Zep Discord服务器 然后前往 #图形 频道!