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 正在运行并具有定义的向量索引
执行相似性搜索¶
尽管此库拥有比此处展示的更多检索器,但以下示例应该能帮助您入门。
from neo4j import GraphDatabase
from neo4j_graphrag.embeddings.openai import OpenAIEmbeddings
from neo4j_graphrag.retrievers import VectorRetriever
URI = "neo4j://localhost:7687"
AUTH = ("neo4j", "password")
INDEX_NAME = "vector-index-name"
# Connect to Neo4j database
driver = GraphDatabase.driver(URI, auth=AUTH)
# Create Embedder object
# Note: An OPENAI_API_KEY environment variable is required here
embedder = OpenAIEmbeddings(model="text-embedding-3-large")
# Initialize the retriever
retriever = VectorRetriever(driver, INDEX_NAME, embedder)
# Run the similarity search
query_text = "How do I do similarity search in Neo4j?"
response = retriever.search(query_text=query_text, top_k=5)
注意
假设 Neo4j 正在运行并已填充向量索引。
限制¶
向量索引上的查询是近似最近邻搜索,可能无法给出精确结果。有关更多详细信息,请参阅此参考。
开发¶
安装依赖项¶
poetry install --all-extras
入门¶
问题¶
如果您要报告 bug 或请求功能,请首先搜索以查看是否存在已有问题。如果不存在相关问题,请使用相关的问题表单提出新问题。
如果您是 Neo4j 企业版客户,也可以联系客户支持。
如果您没有 bug 要报告或功能请求,但需要库方面的帮助;可以通过Neo4j 在线社区和/或Discord获得社区支持。
进行更改¶
Fork 仓库。
安装 Python 和 Poetry。
从 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