Python 版 GraphRAG

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

此软件包旨在为开发者提供一个第一方软件包,Neo4j 可以保证长期的承诺和维护,并能快速发布新功能以及高性能的模式和方法。

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

支持的 Neo4j 版本

  • Neo4j >=5.18.1

  • Neo4j Aura >=5.18.0

支持的 Python 版本

  • Python 3.12

  • Python 3.11

  • Python 3.10

  • Python 3.9

主题

用法

安装

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

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

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 管道加载 spaCy 训练模型,由知识图谱创建管道中的 SpaCySemanticMatchResolver 组件使用。

  • 模糊匹配
    • rapidfuzz:使用字符串相似度应用模糊匹配,由知识图谱创建管道中的 FuzzyMatchResolver 组件使用。

示例

创建向量索引

创建向量索引时,请确保索引中的维度数量与嵌入的维度数量匹配。

有关更多详细信息,请参阅API 文档

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import create_vector_index

URI = "neo4j://localhost: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 数据库的唯一方法。例如,您还可以利用Neo4j Python 驱动程序

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

URI = "neo4j://localhost: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 正在运行并具有定义的向量索引

限制

向量索引上的查询是近似最近邻搜索,可能无法给出精确结果。有关更多详细信息,请参阅此参考

开发

安装依赖项

poetry install --all-extras

入门

问题

如果您要报告 bug 或请求功能,请首先搜索以查看是否存在已有问题。如果不存在相关问题,请使用相关的问题表单提出新问题。

如果您是 Neo4j 企业版客户,也可以联系客户支持

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

进行更改

  1. Fork 仓库。

  2. 安装 Python 和 Poetry。

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

拉取请求

完成更改后,创建拉取请求,也称为 PR。

  • 确保您已签署 CLA

  • 确保您的 PR 基础分支设置为 main

  • 如果您正在解决某个问题,请不要忘记将您的 PR 链接到该问题

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

  • 审阅者可能会要求在 PR 合并之前进行更改,无论是通过建议的更改还是普通的拉取请求评论。您可以直接通过 UI 应用建议的更改,其他任何更改都可以在您的 fork 中进行并提交到 PR 分支。

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

运行测试

打开一个新的虚拟环境,然后运行测试。

poetry shell
pytest

单元测试

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

poetry 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 以完全删除它们。

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

poetry run pytest tests/e2e

更多信息

© . All rights reserved.