Python 的 GraphRAG

此软件包包含 Neo4j 官方的 Python GraphRAG 功能。

此软件包的目的是为开发者提供第一方(官方)包,Neo4j 能保证长期承诺和维护,并且能够快速发布新功能以及高性能的模式和方法。

⚠️ 此软件包是 neo4j-genai 更名后的延续。neo4j-genai 已被弃用,且不再维护。我们鼓励所有用户迁移到此新软件包以继续获取更新和支持。

支持的 Neo4j 版本

  • Neo4j >=5.18.1

  • Neo4j Aura >=5.18.0

支持的 Python 版本

  • Python 3.14

  • Python 3.13

  • Python 3.12

  • Python 3.11

  • Python 3.10

主题

使用方法

安装

此软件包需要 Python(>=3.10)。

要安装最新的稳定版本,使用

pip install neo4j-graphrag

注意

始终建议在虚拟环境中为用户空间安装 Python 包。

可选依赖

可以使用以下方式安装额外依赖

pip install "neo4j-graphrag[openai]"

额外依赖列表

  • LLM 提供商(RAG 和 KG Builder 流程至少需要一种)
    • ollama: 来自 Ollama 的 LLM

    • openai: 来自 OpenAI 的 LLM(包括 AzureOpenAI)

    • google: 来自 Vertex AI 的 LLM

    • cohere: 来自 Cohere 的 LLM

    • anthropic: 来自 Anthropic 的 LLM

    • mistralai: 来自 MistralAI 的 LLM

  • sentence-transformers:用于使用 sentence-transformers Python 包中的嵌入

  • 向量数据库(用于使用 外部检索器
    • weaviate: 在 Weaviate 中存储向量

    • pinecone: 在 Pinecone 中存储向量

    • qdrant: 在 Qdrant 中存储向量

  • experimental: 实验性功能,主要来自知识图谱创建流水线。

  • nlp:安装 spaCy 用于 NLP 流程,供知识图谱创建流水线中的 SpaCySemanticMatchResolver 组件使用。

  • fuzzy-matching:安装 rapidfuzz 用于基于字符串相似度的模糊匹配,供知识图谱创建流水线中的 FuzzyMatchResolver 组件使用。

注意

由于上游 spaCy 导入时出现问题(见 spaCy #13895),`nlp` 额外依赖(spaCy)目前在 Python 3.14 上不受支持。在该问题解决之前,请使用 Python 3.13 或更早版本以使用基于 spaCy 的功能。

示例

创建向量索引

创建向量索引时,请确保索引的维度数与嵌入的维度数一致。

详见 API 文档

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import create_vector_index

URI = "neo4j://:7687"
AUTH = ("neo4j", "password")

INDEX_NAME = "vector-index-name"

# Connect to Neo4j database
driver = GraphDatabase.driver(URI, auth=AUTH)

# Creating the index
create_vector_index(
    driver,
    INDEX_NAME,
    label="Document",
    embedding_property="vectorProperty",
    dimensions=1536,
    similarity_fn="euclidean",
)

注意

假设 Neo4j 正在运行

填充 Neo4j 向量索引

请注意,以下示例并非向 Neo4j 数据库进行 upsert 的唯一方式。例如,您也可以使用 Neo4j Python 驱动

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import upsert_vectors
from neo4j_graphrag.types import EntityType

URI = "neo4j://:7687"
AUTH = ("neo4j", "password")

# Connect to Neo4j database
driver = GraphDatabase.driver(URI, auth=AUTH)

# Upsert the vector
vector = ...
upsert_vectors(
    driver,
    ids=["1234"],
    embedding_property="vectorProperty",
    embeddings=[vector],
    entity_type=EntityType.NODE,
)

注意

假设 Neo4j 已运行且已定义向量索引

限制

对向量索引的查询是一次近似最近邻搜索,可能不会得到精确结果。请参阅此文档了解更多细节

开发

安装依赖

uv sync --all-extras

入门

问题

如果您有 bug 要报告或功能请求,请先 搜索是否已有相同问题。如果不存在相关问题,请使用相应的 问题表单创建新问题。

如果您是 Neo4j Enterprise 客户,也可以联系 客户支持

如果您没有 bug 或功能请求,但需要库的帮助;社区支持可通过 Neo4j 在线社区 和/或 Discord 获得。

进行更改

  1. Fork(派生)此仓库。

  2. 安装 Python 和 uv。

  3. main 创建工作分支并开始您的更改!

拉取请求

完成更改后,创建一个拉取请求(PR)。

  • 确保您已 签署 CLA

  • 确保 PR 的 base 设为 main

  • 若在解决问题,请不要忘记 将 PR 链接到相应问题

  • 勾选 允许维护者编辑 复选框,以便维护者对您的分支进行必要的调整并合并。

  • 审阅者可能会要求在 PR 合并前进行更改,您可以使用 建议的更改或普通的 PR 评论。您可以直接通过 UI 应用建议的更改,其他更改则在您的 fork 中完成并提交到 PR 分支。

  • 在更新 PR 并应用更改时,将每个对话标记为 已解决

运行测试

使用 uv 运行测试。

uv run pytest

单元测试

安装依赖后,这应当可以直接运行。

uv run pytest tests/unit

端到端测试

要运行端到端测试,需要在本地运行一些服务

  • neo4j

  • weaviate

  • weaviate-text2vec-transformers

最简便的启动方式是使用 Docker Compose

docker compose -f tests/e2e/docker-compose.yml up

注意

如果怀疑数据库中有缓存,请运行 docker compose -f tests/e2e/docker-compose.yml down 将其彻底移除

服务启动后,执行以下命令运行端到端测试。

uv run pytest tests/e2e

更多信息

© . This site is unofficial and not affiliated with Neo4j, Inc.