API 文档

组件

Component

class neo4j_graphrag.experimental.pipeline.component.Component[源代码]

所有组件都需要实现的接口。

async run(*args, **kwargs)[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

参数:
返回类型:

DataModel

async run_with_context(context_, *args, **kwargs)[源代码]

此方法由流水线编排器调用。context_ 参数包含有关流水线运行的信息:run_id 和一个 notify 函数,该函数可用于将事件从组件发送到流水线回调。

此功能将在未来版本中移至 run 方法中。

默认调用 run 方法以防止任何破坏性变更。

参数:
返回类型:

DataModel

DataLoader

class neo4j_graphrag.experimental.components.pdf_loader.DataLoader[源代码]

用于加载各种输入类型数据的接口。

get_document_metadata(text, metadata=None)[源代码]
参数:
返回类型:

Dict[str, str] | None

abstract async run(filepath, metadata=None)[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

参数:
返回类型:

PdfDocument

PdfLoader

class neo4j_graphrag.experimental.components.pdf_loader.PdfLoader[源代码]
static load_file(file, fs)[源代码]

解析 PDF 文件并返回文本。

参数:
  • file (str)

  • fs (AbstractFileSystem)

返回类型:

str

async run(filepath, metadata=None, fs=None)[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

参数:
返回类型:

PdfDocument

TextSplitter

class neo4j_graphrag.experimental.components.text_splitters.base.TextSplitter[源代码]

文本分割器的接口。

abstract async run(text)[源代码]

将一段文本分割成块 (chunks)。

参数:

text (str) – 要分割的文本。

返回:

块列表。

返回类型:

TextChunks

FixedSizeSplitter

class neo4j_graphrag.experimental.components.text_splitters.fixed_size_splitter.FixedSizeSplitter(chunk_size=4000, chunk_overlap=200, approximate=True)[源代码]
文本分割器,将输入文本分割为固定大小或近似固定大小的

块,并可选择重叠部分。

参数:
  • chunk_size (int) – 每个块中的字符数。

  • chunk_overlap (int) – 前一个块中与每个块重叠的字符数。必须小于 chunk_size

  • approximate (bool) – 如果为 True,则避免在块边界中间拆分单词。默认为 True。

示例

from neo4j_graphrag.experimental.components.text_splitters.fixed_size_splitter import FixedSizeSplitter
from neo4j_graphrag.experimental.pipeline import Pipeline

pipeline = Pipeline()
text_splitter = FixedSizeSplitter(chunk_size=4000, chunk_overlap=200, approximate=True)
pipeline.add_component(text_splitter, "text_splitter")
async run(text)[源代码]

将一段文本分割成块 (chunks)。

参数:

text (str) – 要分割的文本。

返回:

块列表。

返回类型:

TextChunks

LangChainTextSplitterAdapter

class neo4j_graphrag.experimental.components.text_splitters.langchain.LangChainTextSplitterAdapter(text_splitter)[源代码]

LangChain TextSplitters 的适配器。允许将此类的实例用于知识图谱构建流水线中。

参数:

text_splitter (LangChainTextSplitter) – LangChain TextSplitter 类的一个实例。

示例

from langchain_text_splitters import RecursiveCharacterTextSplitter
from neo4j_graphrag.experimental.components.text_splitters.langchain import LangChainTextSplitterAdapter
from neo4j_graphrag.experimental.pipeline import Pipeline

pipeline = Pipeline()
text_splitter = LangChainTextSplitterAdapter(RecursiveCharacterTextSplitter())
pipeline.add_component(text_splitter, "text_splitter")
async run(text)[源代码]

将文本分割成块。

参数:

text (str) – 要分割的文本。

返回:

分割成块后的文本。

返回类型:

TextChunks

LlamaIndexTextSplitterAdapter

class neo4j_graphrag.experimental.components.text_splitters.llamaindex.LlamaIndexTextSplitterAdapter(text_splitter)[源代码]

LlamaIndex TextSplitters 的适配器。允许将此类的实例用于知识图谱构建流水线中。

参数:

text_splitter (LlamaIndexTextSplitter) – LlamaIndex TextSplitter 类的一个实例。

示例

from llama_index.core.node_parser.text.sentence import SentenceSplitter
from neo4j_graphrag.experimental.components.text_splitters.llamaindex import (
    LlamaIndexTextSplitterAdapter,
)
from neo4j_graphrag.experimental.pipeline import Pipeline

pipeline = Pipeline()
text_splitter = LlamaIndexTextSplitterAdapter(SentenceSplitter())
pipeline.add_component(text_splitter, "text_splitter")
async run(text)[源代码]

将文本分割成块。

参数:

text (str) – 要分割的文本。

返回:

分割成块后的文本。

返回类型:

TextChunks

TextChunkEmbedder

class neo4j_graphrag.experimental.components.embedder.TextChunkEmbedder(embedder, max_concurrency=5)[源代码]

用于从文本块创建嵌入 (embeddings) 的组件。

参数:
  • embedder (Embedder) – 用于创建嵌入的嵌入器。

  • max_concurrency (int) – 可用于向嵌入器发出请求的最大并发任务数。默认为 5。

示例

from neo4j_graphrag.experimental.components.embedder import TextChunkEmbedder
from neo4j_graphrag.embeddings.openai import OpenAIEmbeddings
from neo4j_graphrag.experimental.pipeline import Pipeline

embedder = OpenAIEmbeddings(model="text-embedding-3-large")
chunk_embedder = TextChunkEmbedder(embedder)
pipeline = Pipeline()
pipeline.add_component(chunk_embedder, "chunk_embedder")
async run(text_chunks)[源代码]

对一系列文本块进行嵌入处理。

参数:

text_chunks (TextChunks) – 要嵌入处理的文本块。

返回:

输入的文本块,每个块都添加了嵌入向量。

返回类型:

TextChunks

LexicalGraphBuilder

class neo4j_graphrag.experimental.components.lexical_graph.LexicalGraphBuilder(config=LexicalGraphConfig(id_prefix='', document_node_label='Document', chunk_node_label='Chunk', chunk_to_document_relationship_type='FROM_DOCUMENT', next_chunk_relationship_type='NEXT_CHUNK', node_to_chunk_relationship_type='FROM_CHUNK', chunk_id_property='id', chunk_index_property='index', chunk_text_property='text', chunk_embedding_property='embedding'))[源代码]

构建要插入 Neo4j 的词法图 (lexical graph)。词法图包含: - 每个文档一个节点 - 每个分块一个节点 - 每个分块与其来源文档之间的关系 - 分块与文档中下一个分块之间的关系

参数:

config (LexicalGraphConfig)

async run(text_chunks, document_info=None)[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

参数:
返回类型:

GraphResult

async process_chunk(graph, chunk, next_chunk, document_info=None)[源代码]

添加分块及其之间的关系 (NEXT_CHUNK)

就地更新 graph

参数:
返回类型:

None

create_document_node(document_info)[源代码]

创建一个带有 ‘path’ 属性的 Document 节点。任何文档元数据也会作为节点属性添加。

参数:

document_info (DocumentInfo)

返回类型:

Neo4jNode

create_chunk_node(chunk)[源代码]

创建带有 ‘text’、‘index’ 属性以及过程中添加的任何 ‘metadata’ 的分块节点。针对潜在的分块嵌入属性,该属性将作为 embedding_property 添加,属于特殊情况。

参数:

chunk (TextChunk)

返回类型:

Neo4jNode

create_chunk_to_document_rel(chunk, document_info)[源代码]

创建分块与其所属文档之间的关系。

参数:
返回类型:

Neo4jRelationship

create_next_chunk_relationship(chunk, next_chunk)[源代码]

创建分块与下一个分块之间的关系

参数:
返回类型:

Neo4jRelationship

create_node_to_chunk_rel(node, chunk_id)[源代码]

创建分块与在该分块中找到的实体之间的关系

参数:
返回类型:

Neo4jRelationship

async process_chunk_extracted_entities(chunk_graph, chunk)[源代码]

创建分块与从中提取出的每个实体之间的关系。

就地更新 chunk_graph

参数:
返回类型:

None

Neo4jChunkReader

class neo4j_graphrag.experimental.components.neo4j_reader.Neo4jChunkReader(driver, fetch_embeddings=False, neo4j_database=None)[源代码]

从 Neo4j 数据库读取文本块。

参数:
  • driver (neo4j.driver) – 用于连接数据库的 Neo4j 驱动程序。

  • fetch_embeddings (bool) – 如果为 True,则同时返回嵌入属性。默认为 False。

  • neo4j_database (Optional[str]) – Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.experimental.components.neo4j_reader import Neo4jChunkReader

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

driver = GraphDatabase.driver(URI, auth=AUTH)
reader = Neo4jChunkReader(driver=driver, neo4j_database=DATABASE)
await reader.run()
async run(lexical_graph_config=LexicalGraphConfig(id_prefix='', document_node_label='Document', chunk_node_label='Chunk', chunk_to_document_relationship_type='FROM_DOCUMENT', next_chunk_relationship_type='NEXT_CHUNK', node_to_chunk_relationship_type='FROM_CHUNK', chunk_id_property='id', chunk_index_property='index', chunk_text_property='text', chunk_embedding_property='embedding'))[源代码]

从 Neo4j 数据库读取文本块。

参数:

lexical_graph_config (LexicalGraphConfig) – 词法图的节点标签和关系类型。

返回类型:

TextChunks

SchemaBuilder

class neo4j_graphrag.experimental.components.schema.SchemaBuilder[源代码]

一个构建器类,用于根据潜在 schema 中定义的给定实体、关系及其相互关系构造 GraphSchema 对象。

示例

from neo4j_graphrag.experimental.components.schema import (
    SchemaBuilder,
    NodeType,
    PropertyType,
    RelationshipType,
)
from neo4j_graphrag.experimental.pipeline import Pipeline

node_types = [
    NodeType(
        label="PERSON",
        description="An individual human being.",
        properties=[
            PropertyType(
                name="name", type="STRING", description="The name of the person"
            )
        ],
    ),
    NodeType(
        label="ORGANIZATION",
        description="A structured group of people with a common purpose.",
        properties=[
            PropertyType(
                name="name", type="STRING", description="The name of the organization"
            )
        ],
    ),
]
relationship_types = [
    RelationshipType(
        label="EMPLOYED_BY", description="Indicates employment relationship."
    ),
]
patterns = [
    ("PERSON", "EMPLOYED_BY", "ORGANIZATION"),
]
pipe = Pipeline()
schema_builder = SchemaBuilder()
pipe.add_component(schema_builder, "schema_builder")
pipe_inputs = {
    "schema": {
        "node_types": node_types,
        "relationship_types": relationship_types,
        "patterns": patterns,
    },
    ...
}
pipe.run(pipe_inputs)
async run(node_types, relationship_types=None, patterns=None, constraints=None, **kwargs)[源代码]

异步构造并返回一个 GraphSchema 对象。

参数:
  • node_types (Sequence[NodeType]) – NodeType 对象的序列。

  • relationship_types (Sequence[RelationshipType]) – RelationshipType 对象的序列。

  • patterns (Optional[Sequence[Tuple[str, str, str]]]) – 三元组序列:(源实体标签, 关系标签, 目标实体标签)。

  • constraints (Sequence[ConstraintType] | None)

  • kwargs (Any)

返回:

一个配置好的 schema 对象,异步构建而成。

返回类型:

GraphSchema

SchemaFromTextExtractor

class neo4j_graphrag.experimental.components.schema.SchemaFromTextExtractor(llm, prompt_template=None, llm_params=None, use_structured_output=False)[源代码]

一个组件,用于从文本自动提取 schema 后,根据 LLM 的输出构造 GraphSchema 对象。

参数:
  • llm (LLMInterface) – 用于 schema 提取的语言模型。

  • prompt_template (Optional[PromptTemplate]) – 用于提取的自定义提示词模板。

  • llm_params (Optional[Dict[str, Any]]) – 传递给 LLM 的附加参数。

  • use_structured_output (bool) – 是否将结构化输出 (LLMInterfaceV2) 与 GraphSchema Pydantic 模型配合使用。仅支持 OpenAILLM 和 VertexAILLM。默认为 False(使用 V1 基于提示词的 JSON 提取)。

V1 示例(默认,基于提示词的 JSON)

from neo4j_graphrag.experimental.components.schema import SchemaFromTextExtractor
from neo4j_graphrag.llm import OpenAILLM

llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0})
extractor = SchemaFromTextExtractor(llm=llm)

V2 示例(结构化输出)

from neo4j_graphrag.experimental.components.schema import SchemaFromTextExtractor
from neo4j_graphrag.llm import OpenAILLM

llm = OpenAILLM(model_name="gpt-5")
extractor = SchemaFromTextExtractor(llm=llm, use_structured_output=True)
async run(text, examples='', **kwargs)[源代码]

从文本中异步提取 schema 并返回 GraphSchema 对象。

参数:
  • text (str) – 将从中推断 schema 的文本。

  • examples (str) – 指导 schema 提取的示例。

  • kwargs (Any)

返回:

一个配置好的 schema 对象,自动提取并异步构造而成。

返回类型:

GraphSchema

schema_visualization

neo4j_graphrag.experimental.utils.schema.schema_visualization(schema)[源代码]

使用 neo4j-viz 库可视化 GraphSchema 的辅助函数。

用法

VG = schema_visualization(schema)
html = VG.render()

# in Jupyter:
display(html)

# to save the generated HTML
with open("my_schema.html", "w") as f:
    f.write(html.data)
参数:

schema (dict[str, Any] | GraphSchema)

返回类型:

VisualizationGraph

EntityRelationExtractor

class neo4j_graphrag.experimental.components.entity_relation_extractor.EntityRelationExtractor(*args, on_error=OnError.IGNORE, create_lexical_graph=True, **kwargs)[源代码]

实体关系提取组件的抽象类。

参数:
  • on_error (OnError) – 提取过程中发生错误时该怎么办。默认为引发错误。

  • create_lexical_graph (bool) – 除提取的实体和关系外,是否在图中包含文本块。默认为 True。

  • args (Any)

  • kwargs (Any)

async run(chunks, document_info=None, lexical_graph_config=None, **kwargs)[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

参数:
返回类型:

Neo4jGraph

update_ids(graph, chunk)[源代码]

通过给节点 ID 添加唯一前缀,使其在分块、文档和流水线运行中保持唯一。

参数:
返回类型:

Neo4jGraph

LLMEntityRelationExtractor

class neo4j_graphrag.experimental.components.entity_relation_extractor.LLMEntityRelationExtractor(llm, prompt_template=<neo4j_graphrag.generation.prompts.ERExtractionTemplate object>, create_lexical_graph=True, on_error=OnError.RAISE, max_concurrency=5, use_structured_output=False)[源代码]

使用大语言模型从一系列文本块中提取知识图谱。

参数:
  • llm (LLMInterface) – 用于提取的语言模型。

  • prompt_template (ERExtractionTemplate | str) – 用于提取的自定义提示词模板。

  • create_lexical_graph (bool) – 除提取的实体和关系外,是否在图中包含文本块。默认为 True。

  • on_error (OnError) – 提取过程中发生错误时该怎么办。默认为引发错误。

  • max_concurrency (int) – 可用于向 LLM 发出请求的最大并发任务数。

  • use_structured_output (bool) – 是否将结构化输出 (LLMInterfaceV2) 与 Neo4jGraph Pydantic 模型配合使用。仅支持 OpenAILLM 和 VertexAILLM。默认为 False(使用 V1 基于提示词的 JSON 提取)。

V1 示例(默认,基于提示词的 JSON)

from neo4j_graphrag.experimental.components.entity_relation_extractor import LLMEntityRelationExtractor
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.experimental.pipeline import Pipeline

llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0, "response_format": {"type": "object"}})

extractor = LLMEntityRelationExtractor(llm=llm)
pipe = Pipeline()
pipe.add_component(extractor, "extractor")

V2 示例(结构化输出)

from neo4j_graphrag.experimental.components.entity_relation_extractor import LLMEntityRelationExtractor
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.experimental.pipeline import Pipeline

llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0})
extractor = LLMEntityRelationExtractor(llm=llm, use_structured_output=True)
pipe = Pipeline()
pipe.add_component(extractor, "extractor")
async run(chunks, document_info=None, lexical_graph_config=None, schema=None, examples='', **kwargs)[源代码]

对列表中的所有块执行实体和关系提取。

(可选)通过添加节点和关系来表示返回图中的文档及其分块,从而创建“词法图”(更多详情,请参阅 词法图构建器文档用户指南

参数:
  • chunks (TextChunks) – 要从中提取实体和关系的文本块列表。

  • document_info (Optional[DocumentInfo], optional) – 分块来源的文档。用于词法图创建步骤。

  • lexical_graph_config (Optional[LexicalGraphConfig], optional) – 词法图配置,用于自定义词法图中的节点标签和关系类型。

  • schema (GraphSchema | None) – 用于指导 LLM 提取的 schema 定义。

  • examples (str) – 提示词中用于少样本学习 (few-shot learning) 的示例。

  • kwargs (Any)

返回类型:

Neo4jGraph

KGWriter

class neo4j_graphrag.experimental.components.kg_writer.KGWriter[源代码]

用于将知识图谱写入数据存储的抽象类。

abstract async run(graph, lexical_graph_config=LexicalGraphConfig(id_prefix='', document_node_label='Document', chunk_node_label='Chunk', chunk_to_document_relationship_type='FROM_DOCUMENT', next_chunk_relationship_type='NEXT_CHUNK', node_to_chunk_relationship_type='FROM_CHUNK', chunk_id_property='id', chunk_index_property='index', chunk_text_property='text', chunk_embedding_property='embedding'))[源代码]

将图写入数据存储。

参数:
  • graph (Neo4jGraph) – 要写入数据存储的知识图谱。

  • lexical_graph_config (LexicalGraphConfig) – 词法图中的节点标签和关系类型。

返回类型:

KGWriterModel

Neo4jWriter

class neo4j_graphrag.experimental.components.kg_writer.Neo4jWriter(driver, neo4j_database=None, batch_size=1000, clean_db=True)[源代码]

将知识图谱写入 Neo4j 数据库。

参数:
  • driver (neo4j.driver) – 用于连接数据库的 Neo4j 驱动程序。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

  • batch_size (int) – 批量写入数据库的节点或关系数量。默认为 1000。

  • clean_db (bool)

示例

from neo4j import GraphDatabase
from neo4j_graphrag.experimental.components.kg_writer import Neo4jWriter
from neo4j_graphrag.experimental.pipeline import Pipeline

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

driver = GraphDatabase.driver(URI, auth=AUTH)
writer = Neo4jWriter(driver=driver, neo4j_database=DATABASE)

pipeline = Pipeline()
pipeline.add_component(writer, "writer")
async run(graph, lexical_graph_config=LexicalGraphConfig(id_prefix='', document_node_label='Document', chunk_node_label='Chunk', chunk_to_document_relationship_type='FROM_DOCUMENT', next_chunk_relationship_type='NEXT_CHUNK', node_to_chunk_relationship_type='FROM_CHUNK', chunk_id_property='id', chunk_index_property='index', chunk_text_property='text', chunk_embedding_property='embedding'))[源代码]

将知识图谱更新插入 (upsert) 到 Neo4j 数据库中。

参数:
  • graph (Neo4jGraph) – 要更新插入数据库的知识图谱。

  • lexical_graph_config (LexicalGraphConfig) – 词法图的节点标签和关系类型。

返回类型:

KGWriterModel

SinglePropertyExactMatchResolver

class neo4j_graphrag.experimental.components.resolver.SinglePropertyExactMatchResolver(driver, filter_query=None, resolve_property='name', neo4j_database=None)[源代码]

解析具有相同标签且属性完全相同(默认为“name”)的实体。

参数:
  • driver (neo4j.Driver) – 用于连接数据库的 Neo4j 驱动程序。

  • filter_query (Optional[str]) – 要缩小解析范围,可以添加 Cypher WHERE 子句。

  • resolve_property (str) – 将被比较的属性(默认:“name”)。如果值完全匹配,则合并实体。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.experimental.components.resolver import SinglePropertyExactMatchResolver

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

driver = GraphDatabase.driver(URI, auth=AUTH)
resolver = SinglePropertyExactMatchResolver(driver=driver, neo4j_database=DATABASE)
await resolver.run()  # no expected parameters
async run()[源代码]

根据以下规则解析实体:对于每个实体标签,具有相同 ‘resolve_property’ 值(完全匹配)的实体将被归组到一个节点中

  • 属性:如果已经设置,将保留第一个节点的属性,否则将写入列表中的第一个属性。

  • 关系:合并具有相同类型和目标节点的关系。

有关更多详情,请参阅 apoc.refactor.mergeNodes 文档。

返回类型:

ResolutionStats

SpaCySemanticMatchResolver

class neo4j_graphrag.experimental.components.resolver.SpaCySemanticMatchResolver(driver, filter_query=None, resolve_properties=None, similarity_threshold=0.8, nlp=None, spacy_model='en_core_web_lg', auto_download_spacy_model=True, neo4j_database=None)[源代码]

基于 spaCy 的静态嵌入和余弦相似度,解析具有相同标签和相似文本属性集(默认为 [“name”])的实体。

参数:
  • driver (neo4j.Driver) – 用于连接数据库的 Neo4j 驱动程序。

  • filter_query (Optional[str]) – 可选的 Cypher WHERE 子句,用于缩小解析范围。

  • resolve_properties (Optional[List[str]]) – 用于嵌入考虑的属性列表。默认为 [“name”]。

  • similarity_threshold (float) – 合并节点的相似度阈值。高于此值则合并。默认为 0.8。

  • spacy_model (str) – 要加载的 spaCy 模型名称。默认为 “en_core_web_lg”。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

  • nlp (Any)

  • auto_download_spacy_model (bool)

示例

from neo4j import GraphDatabase
from neo4j_graphrag.experimental.components.resolver import SpaCySemanticMatchResolver

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

driver = GraphDatabase.driver(URI, auth=AUTH)
resolver = SpaCySemanticMatchResolver(driver=driver, neo4j_database=DATABASE)
await resolver.run()  # no expected parameters
async run()[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

返回类型:

ResolutionStats

FuzzyMatchResolver

class neo4j_graphrag.experimental.components.resolver.FuzzyMatchResolver(driver, filter_query=None, resolve_properties=None, similarity_threshold=0.8, neo4j_database=None)[源代码]

解析具有相同标签和相似文本属性集的实体,使用 RapidFuzz 进行模糊匹配。相似度评分标准化为 0 到 1 之间的值。

参数:
  • driver (neo4j.Driver)

  • filter_query (Optional[str])

  • resolve_properties (Optional[List[str]])

  • similarity_threshold (float)

  • neo4j_database (Optional[str])

async run()[源代码]

运行组件并返回其结果。

注意:如果实现了 run_with_context,则不会使用此方法。

返回类型:

ResolutionStats

流水线 (Pipelines)

Pipeline

class neo4j_graphrag.experimental.pipeline.Pipeline(store=None, callback=None)[源代码]

这是主流水线类,用于定义组件及其执行顺序

参数:
draw(path, layout='dot', hide_unused_outputs=True)[源代码]

将流水线图渲染到指定路径的 HTML 文件中

参数:
  • path (str)

  • layout (str)

  • hide_unused_outputs (bool)

返回类型:

Any

add_component(component, name)[源代码]

添加新组件。组件由其名称唯一标识。如果 ‘name’ 已存在于流水线中,则引发 ValueError。

参数:
返回类型:

None

connect(start_component_name, end_component_name, input_config=None)[源代码]

连接两个组件。

参数:
  • start_component_name (str) – add_component 方法中定义的组件名称

  • end_component_name (str) – add_component 方法中定义的组件名称

  • input_config (Optional[dict[str, str]]) – 末端组件输入配置:传播前置组件的输出。

抛出异常:

PipelineDefinitionError – 如果提供的组件不在流水线中,或者此连接创建的图是循环图。

返回类型:

None

async run(data)[源代码]
参数:

data (dict[str, Any])

返回类型:

PipelineResult

SimpleKGPipeline

class neo4j_graphrag.experimental.pipeline.kg_builder.SimpleKGPipeline(llm, driver, embedder, entities=None, relations=None, potential_schema=None, schema=None, from_pdf=True, text_splitter=None, pdf_loader=None, kg_writer=None, on_error='IGNORE', prompt_template=<neo4j_graphrag.generation.prompts.ERExtractionTemplate object>, perform_entity_resolution=True, lexical_graph_config=None, neo4j_database=None)[source]

一个用于简化从文本文档构建知识图谱过程的类。它抽象化了设置管道及其组件的复杂性。

参数:
  • llm (LLMInterface) – 用于实体和关系提取的 LLM 实例。

  • driver (neo4j.Driver) – 用于数据库连接的 Neo4j 驱动程序实例。

  • embedder (Embedder) – 用于从文本块生成块嵌入(chunk embeddings)的嵌入器实例。

  • schema (Optional[Union[GraphSchema, dict[str, list]]]) – 定义节点类型、关系类型和图模式的架构配置。

  • entities (Optional[List[Union[str, dict[str, str], NodeType]]]) –

    已弃用。以下项之一的列表:

    • str: 实体标签

    • dict: 遵循 NodeType 架构,即包含 label(标签)、description(描述)和 properties(属性)键

    自 1.7.1 版本起弃用:请改用 schema

  • relations (Optional[List[Union[str, dict[str, str], RelationshipType]]]) –

    已弃用。以下项之一的列表:

    • str: 关系标签

    • dict: 遵循 RelationshipType 架构,即包含 label(标签)、description(描述)和 properties(属性)键

    自 1.7.1 版本起弃用:请改用 schema

  • potential_schema (Optional[List[tuple]]) –

    已弃用。潜在架构关系列表。

    自 1.7.1 版本起弃用:请改用 schema

  • from_pdf (bool) – 决定是否在管道中包含 PdfLoader。如果为 True,则 `run` 方法预期输入 `file_path`。如果为 False,则 `run` 方法预期输入 `text`。

  • text_splitter (Optional[TextSplitter]) – 文本拆分器组件。默认为 FixedSizeSplitter()。

  • pdf_loader (Optional[DataLoader]) – PDF 加载器组件。默认为 PdfLoader()。

  • kg_writer (Optional[KGWriter]) – 知识图谱写入器组件。默认为 Neo4jWriter()。

  • on_error (str) – 实体和关系提取器的错误处理策略。默认为 “IGNORE”,如果提取失败,该文本块将被忽略。可选值:“RAISE” 或 “IGNORE”。

  • perform_entity_resolution (bool) – 合并具有相同标签和名称的实体。默认值:True

  • prompt_template (str) – 用于提取的自定义提示词模板。

  • lexical_graph_config (Optional[LexicalGraphConfig], optional) – 词法图配置,用于自定义词法图中的节点标签和关系类型。

  • neo4j_database (Optional[str])

async run_async(file_path=None, text=None, document_metadata=None)[source]

异步运行知识图谱构建过程。

参数:
  • file_path (Optional[str]) – 要处理的 PDF 文件路径。如果 `from_pdf` 为 True 则必填。如果 `from_pdf` 为 False,可用于设置 Document 节点的 path 属性。

  • text (Optional[str]) – 要处理的文本内容。如果 `from_pdf` 为 False 则必填。

  • document_metadata (Optional[dict[str, Any]]) – 附加到文档的元数据。

返回:

管道执行的结果。

返回类型:

PipelineResult

配置文件

SimpleKGPipelineConfig

class neo4j_graphrag.experimental.pipeline.config.template_pipeline.simple_kg_builder.SimpleKGPipelineConfig(*, neo4j_config={}, llm_config={}, embedder_config={}, extras={}, template_=PipelineType.SIMPLE_KG_PIPELINE, from_pdf=False, entities=[], relations=[], potential_schema=None, schema=None, on_error=OnError.IGNORE, prompt_template=<neo4j_graphrag.generation.prompts.ERExtractionTemplate object>, perform_entity_resolution=True, lexical_graph_config=None, neo4j_database=None, pdf_loader=None, kg_writer=None, text_splitter=None)[source]
参数:

PipelineRunner

class neo4j_graphrag.experimental.pipeline.config.runner.PipelineRunner(pipeline_definition, config=None, do_cleaning=False)[source]

管道运行器(Pipeline runner)从不同的对象构建管道,并公开一个 run 方法来运行管道

管道可以从以下内容构建:- 一个 PipelineDefinition(`__init__` 方法)- 一个 PipelineConfig(`from_config` 方法)- 一个配置文件(`from_config_file` 方法)

参数:
  • pipeline_definition (PipelineDefinition)

  • config (Optional[AbstractPipelineConfig])

  • do_cleaning (bool)

检索器

RetrieverInterface

class neo4j_graphrag.retrievers.base.Retriever(driver, neo4j_database=None)[source]

Neo4j 检索器的抽象类

参数:
  • driver (neo4j.Driver)

  • neo4j_database (Optional[str])

index_name: str
VERIFY_NEO4J_VERSION = True
search(*args, **kwargs)[source]

搜索方法。调用 `get_search_results` 方法(该方法返回 `neo4j.Record` 列表),并使用 `get_result_formatter` 返回的函数对其进行格式化,最后返回 `RetrieverResult`。

参数:
返回类型:

RetrieverResult

abstract get_search_results(*args, **kwargs)[source]

此方法必须在每个子类中实现。它将接收提供给 `search` 方法公共接口的相同参数(在验证后)。它返回一个 `RawSearchResult` 对象,该对象由 `neo4j.Record` 对象列表和可选的 `metadata`(元数据)字典组成,该字典可包含检索器级别的信息。

注意,尽管此方法不打算从类外部调用,但我们将其设为公共,以便开发者清楚地了解它应该在子类中实现。

返回:

Neo4j 记录列表和可选的元数据字典

返回类型:

RawSearchResult

参数:
get_result_formatter()[source]

返回用于将 neo4j.Record 转换为 RetrieverResultItem 的函数。

返回类型:

Callable[[Record], RetrieverResultItem]

default_record_formatter(record)[source]

尽力推测节点到文本(node-to-text)的方法。继承类可以重写此方法以实现自定义文本格式。

参数:

record (Record)

返回类型:

RetrieverResultItem

get_parameters(parameter_descriptions=None)[source]

返回此检索器在工具转换(tool conversion)时预期的参数。

此方法自动从 get_search_results 方法签名中推断参数。

参数:

parameter_descriptions (Optional[Dict[str, str]]) – 参数的自定义描述。键应与 get_search_results 方法中的参数名称匹配。

返回:

此检索器的参数定义

返回类型:

ObjectParameter

convert_to_tool(name, description, parameter_descriptions=None)[source]

将此检索器转换为 Tool 对象。

参数:
  • name (str) – 工具名称。

  • description (str) – 工具功能的描述。

  • parameter_descriptions (Optional[Dict[str, str]]) – 每个参数的可选描述。键应与 get_search_results 方法中的参数名称匹配。

返回:

配置为使用此检索器搜索功能的 Tool 对象。

返回类型:

Tool

VectorRetriever

class neo4j_graphrag.retrievers.VectorRetriever(driver, index_name, embedder=None, return_properties=None, result_formatter=None, neo4j_database=None)[source]

提供使用嵌入向量搜索的检索方法。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

示例

import neo4j
from neo4j_graphrag.retrievers import VectorRetriever

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retriever = VectorRetriever(driver, "vector-index-name", custom_embedder)
retriever.search(query_text="Find me a book about Fremen", top_k=5)

或者,如果查询文本的向量嵌入可用

retriever.search(query_vector=..., top_k=5)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • index_name (str) – 向量索引名称。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • return_properties (Optional[list[str]]) – 要返回的节点属性列表。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) –

    提供的自定义函数,用于将 neo4j.Record 转换为 RetrieverResultItem。

    neo4j.Record 中提供了两个变量

    • node: 表示从向量索引搜索中检索到的节点。

    • score: 表示相似度分数。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_vector=None, query_text=None, top_k=5, effective_search_ratio=1, filters=None)

获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。有关更多详细信息,请参阅以下文档:

要按文本查询,必须在实例化类时提供嵌入器。如果传递了 `query_vector`,则不需要嵌入器。

参数:
  • query_vector (Optional[list[float]]) – 要获取其最近邻的向量嵌入。默认为 None。

  • query_text (Optional[str]) – 要获取其最近邻的文本。默认为 None。

  • top_k (int) – 要返回的邻居数量。默认为 5。

  • effective_search_ratio (int) – 通过乘以 top_k 来控制候选池大小,以平衡查询准确性和性能。默认为 1。

  • filters (Optional[dict[str, Any]]) – 用于元数据预过滤的过滤器。默认为 None。

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

VectorCypherRetriever

class neo4j_graphrag.retrievers.VectorCypherRetriever(driver, index_name, retrieval_query, embedder=None, result_formatter=None, neo4j_database=None)[source]

提供使用通过 Cypher 查询增强的向量相似度的检索方法。此检索器建立在 VectorRetriever 之上。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

注意:`node` 是基础查询中的一个变量,可以在 `retrieval_query` 中使用,如下例所示。

retrieval_query 是额外的 Cypher 语句,允许在检索到 `node` 后进行图遍历。

示例

import neo4j
from neo4j_graphrag.retrievers import VectorCypherRetriever

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retrieval_query = "MATCH (node)-[:AUTHORED_BY]->(author:Author)" "RETURN author.name"
retriever = VectorCypherRetriever(
  driver, "vector-index-name", retrieval_query, custom_embedder
)
retriever.search(query_text="Find me a book about Fremen", top_k=5)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • index_name (str) – 向量索引名称。

  • retrieval_query (str) – 附加的 Cypher 查询。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 提供的自定义函数,用于将 neo4j.Record 转换为 RetrieverResultItem。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

用户指南 中阅读更多内容。

search(query_vector=None, query_text=None, top_k=5, effective_search_ratio=1, query_params=None, filters=None)

获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。有关更多详细信息,请参阅以下文档:

要按文本查询,必须在实例化类时提供嵌入器。如果传递了 `query_vector`,则不需要嵌入器。

参数:
  • query_vector (Optional[list[float]]) – 要获取其最近邻的向量嵌入。默认为 None。

  • query_text (Optional[str]) – 要获取其最近邻的文本。默认为 None。

  • top_k (int) – 要返回的邻居数量。默认为 5。

  • effective_search_ratio (int) – 通过乘以 top_k 来控制候选池大小,以平衡查询准确性和性能。默认为 1。

  • query_params (Optional[dict[str, Any]]) – Cypher 查询的参数。默认为 None。

  • filters (Optional[dict[str, Any]]) – 用于元数据预过滤的过滤器。默认为 None。

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

HybridRetriever

class neo4j_graphrag.retrievers.HybridRetriever(driver, vector_index_name, fulltext_index_name, embedder=None, return_properties=None, result_formatter=None, neo4j_database=None)[source]

提供结合嵌入向量搜索和全文搜索的检索方法。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

示例

import neo4j
from neo4j_graphrag.retrievers import HybridRetriever

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retriever = HybridRetriever(
    driver, "vector-index-name", "fulltext-index-name", custom_embedder
)
retriever.search(query_text="Find me a book about Fremen", top_k=5)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • vector_index_name (str) – 向量索引名称。

  • fulltext_index_name (str) – 全文索引名称。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • return_properties (Optional[list[str]]) – 要返回的节点属性列表。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 提供的自定义函数,用于将 neo4j.Record 转换为 RetrieverResultItem。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

    neo4j.Record 中提供了两个变量

    • node: 表示从向量索引搜索中检索到的节点。

    • score: 表示相似度分数。

search(query_text, query_vector=None, top_k=5, effective_search_ratio=1, ranker=HybridSearchRanker.NAIVE, alpha=None)

获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。可以同时提供 query_vector 和 query_text。如果提供了 query_vector,则在向量搜索中它将优先于由 query_text 生成的嵌入。

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

要通过文本查询,必须在实例化类时提供嵌入器。

参数:
  • query_text (str) – 要获取其最近邻的文本。

  • query_vector (Optional[list[float]], optional) – 要获取其最近邻的向量嵌入。默认为 None。

  • top_k (int, optional) – 要返回的邻居数量。默认为 5。

  • effective_search_ratio (int) – 通过乘以 top_k 来控制向量索引的候选池大小,以平衡查询准确性和性能。默认为 1。

  • ranker (str, HybridSearchRanker) – 用于对检索结果进行排序的排序器类型。

  • alpha (Optional[float]) – 使用线性排序器时向量分数的权重。全文索引分数将乘以 (1 - alpha)。使用线性排序器时为必填项;必须在 0 和 1 之间。

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

HybridCypherRetriever

class neo4j_graphrag.retrievers.HybridCypherRetriever(driver, vector_index_name, fulltext_index_name, retrieval_query, embedder=None, result_formatter=None, neo4j_database=None)[source]

提供结合嵌入向量搜索和全文搜索并通过 Cypher 查询增强的检索方法。此检索器建立在 HybridRetriever 之上。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

注意:`node` 是基础查询中的一个变量,可以在 `retrieval_query` 中使用,如下例所示。

示例

import neo4j
from neo4j_graphrag.retrievers import HybridCypherRetriever

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retrieval_query = "MATCH (node)-[:AUTHORED_BY]->(author:Author)" "RETURN author.name"
retriever = HybridCypherRetriever(
    driver, "vector-index-name", "fulltext-index-name", retrieval_query, custom_embedder
)
retriever.search(query_text="Find me a book about Fremen", top_k=5)

要通过文本查询,必须在实例化类时提供嵌入器。

参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • vector_index_name (str) – 向量索引名称。

  • fulltext_index_name (str) – 全文索引名称。

  • retrieval_query (str) – 附加的 Cypher 查询。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 提供的自定义函数,用于将 neo4j.Record 转换为 RetrieverResultItem。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_text, query_vector=None, top_k=5, effective_search_ratio=1, query_params=None, ranker=HybridSearchRanker.NAIVE, alpha=None)

获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。可以同时提供 query_vector 和 query_text。如果提供了 query_vector,则在向量搜索中它将优先于由 query_text 生成的嵌入。

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

参数:
  • query_text (str) – 要获取其最近邻的文本。

  • query_vector (Optional[list[float]]) – 要获取其最近邻的向量嵌入。默认为 None。

  • top_k (int) – 要返回的邻居数量。默认为 5。

  • effective_search_ratio (int) – 通过乘以 top_k 来控制向量索引的候选池大小,以平衡查询准确性和性能。默认为 1。

  • query_params (Optional[dict[str, Any]]) – Cypher 查询的参数。默认为 None。

  • ranker (str, HybridSearchRanker) – 用于对检索结果进行排序的排序器类型。

  • alpha (Optional[float]) – 使用线性排序器时向量分数的权重。全文索引分数将乘以 (1 - alpha)。使用线性排序器时为必填项;必须在 0 和 1 之间。

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

Text2CypherRetriever

class neo4j_graphrag.retrievers.Text2CypherRetriever(driver, llm, neo4j_schema=None, examples=None, result_formatter=None, custom_prompt=None, neo4j_database=None)[source]

允许使用自然语言从 Neo4j 数据库检索记录。使用 LLM 将用户的自然语言查询转换为 Cypher 查询,然后使用生成的 Cypher 查询从 Neo4j 数据库检索记录。

参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • llm (neo4j_graphrag.generation.llm.LLMInterface) – 用于生成 Cypher 查询的 LLM 对象。

  • neo4j_schema (Optional[str]) – 用于生成 Cypher 查询的 Neo4j 模式(schema)。

  • examples (Optional[list[str], optional) – 可选的用户输入/查询对,供 LLM 作为示例使用。

  • custom_prompt (Optional[str]) – 用于替代自动生成提示词的可选自定义提示词。如果提供了 neo4j_schema 和 examples,它们将包含在提示词参数中。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]])

  • neo4j_database (Optional[str])

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_text, prompt_params=None)
使用 LLM 将 query_text 转换为 Cypher 查询。

使用生成的 Cypher 查询从 Neo4j 数据库检索记录。

参数:
  • query_text (str) – 用于搜索 Neo4j 数据库的自然语言查询。

  • prompt_params (Dict[str, Any]) – 要注入到自定义提示词(如果提供)中的附加值。如果指定了 schema 或 examples 参数,它将覆盖初始化期间传递的相应值。例如:{‘schema’: ‘这是图架构’}

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

ToolsRetriever

class neo4j_graphrag.retrievers.ToolsRetriever(driver, llm, tools, neo4j_database=None, system_instruction=None)[source]

一个使用 LLM 根据用户输入选择适当工具进行检索的检索器。

该检索器接收一个 LLM 实例和一个 Tool 对象列表。执行搜索时,它使用 LLM 分析查询并确定应使用哪些工具(如果有)来检索必要的数据。然后它执行选定的工具并返回合并后的结果。

示例

import neo4j
from neo4j_graphrag.retrievers import ToolsRetriever, VectorRetriever, Text2CypherRetriever
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.embeddings import OpenAIEmbeddings

driver = neo4j.GraphDatabase.driver("neo4j://:7687", auth=("neo4j", "password"))
llm = OpenAILLM(model_name="gpt-5", api_key="your-api-key")
embedder = OpenAIEmbeddings(model="text-embedding-3-small", api_key="your-api-key")

# Create retrievers and convert them to tools
vector_retriever = VectorRetriever(driver, "vector-index", embedder)
vector_tool = vector_retriever.convert_to_tool(
    name="vector_search",
    description="Search for documents using semantic similarity"
)

text2cypher_retriever = Text2CypherRetriever(driver, llm)
cypher_tool = text2cypher_retriever.convert_to_tool(
    name="cypher_search",
    description="Generate and execute Cypher queries for structured data retrieval"
)

# Initialize ToolsRetriever with the tools
tools_retriever = ToolsRetriever(
    driver=driver,
    llm=llm,
    tools=[vector_tool, cypher_tool]
)

# Use the retriever - the LLM will automatically select appropriate tools
result = tools_retriever.search("What movies did Tom Hanks act in and what are their plots?")
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • llm (LLMInterface) – 用于选择和协调工具执行的 LLM 实例。

  • tools (Sequence[Tool]) – 可供选择的工具列表。所有工具必须具有唯一的名称。

  • neo4j_database (Optional[str]) – Neo4j 数据库名称。如果未提供,则默认为服务器的默认数据库(默认为 “neo4j”)。

  • system_instruction (Optional[str]) – 用于指导 LLM 选择工具的自定义系统指令。如果未提供,将使用默认指令。

抛出异常:

ValueError – 如果工具列表中发现重复的工具名称。

search(query_text, message_history=None, **kwargs)

使用 LLM 根据查询选择并执行适当的工具。

参数:
  • query_text (str) – 用户的查询文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]], optional) – 之前的对话历史。默认为 None。

  • **kwargs (Any) – 传递给工具执行的附加参数。

返回:

来自执行工具的合并结果。

返回类型:

RawSearchResult

外部检索器

本节包含与 Neo4j 外部数据库集成的检索器。

WeaviateNeo4jRetriever

class neo4j_graphrag.retrievers.external.weaviate.weaviate.WeaviateNeo4jRetriever(driver, client, collection, id_property_external, id_property_neo4j, embedder=None, return_properties=None, retrieval_query=None, result_formatter=None, neo4j_database=None, node_label_neo4j=None)[source]

提供使用 Weaviate 数据库对嵌入向量进行搜索的检索方法。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import WeaviateNeo4jRetriever
from weaviate.connect.helpers import connect_to_local

with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
    with connect_to_local() as w_client:
        retriever = WeaviateNeo4jRetriever(
            driver=neo4j_driver,
            client=w_client,
            collection="Jeopardy",
            id_property_external="neo4j_id",
            id_property_neo4j="id"
        )

        result = retriever.search(query_text="biology", top_k=2)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • client (WeaviateClient) – Weaviate 客户端对象。

  • collection (str) – 共享相同数据结构的 Weaviate 对象集合名称。

  • id_property_external (str) – Weaviate 属性名称,其包含指向相应 Neo4j 节点 ID 属性的标识符。

  • id_property_neo4j (str) – 用作将 Weaviate 匹配项关联到 Neo4j 节点的标识符的 Neo4j 节点属性名称。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • return_properties (Optional[list[str]]) – 要返回的节点属性列表。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 将 neo4j.Record 转换为 RetrieverResultItem 的函数。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

  • node_label_neo4j (Optional[str]) – 要检索的 Neo4j 节点标签。如果需要,该标签必须正确转义,例如 “`Label with spaces`”。

  • retrieval_query (Optional[str])

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_vector=None, query_text=None, top_k=5, **kwargs)

使用 Weaviate 获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。可以同时提供 query_vector 和 query_text。如果提供了 query_vector,则向量搜索中它将优先于由 query_text 生成的嵌入。如果提供了 query_text,它将检查是否提供了嵌入器,并使用它来生成 query_vector。如果未提供嵌入器,它将假定在 Weaviate 中使用了向量化器(vectorizer)。

示例

import neo4j
from neo4j_graphrag.retrievers import WeaviateNeo4jRetriever

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retriever = WeaviateNeo4jRetriever(
    driver=driver,
    client=weaviate_client,
    collection="Jeopardy",
    id_property_external="neo4j_id",
    id_property_neo4j="id",
    node_label_neo4j="Document",
)

biology_embedding = ...
retriever.search(query_vector=biology_embedding, top_k=2)
参数:
  • query_text (Optional[str]) – 要获取其最近邻的文本。

  • query_vector (Optional[list[float]]) – 要获取其最近邻的向量嵌入。默认为 None。

  • top_k (int) – 要返回的邻居数量。默认为 5。

  • kwargs (Any)

抛出异常:

SearchValidationError – 如果输入参数验证失败。

返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

PineconeNeo4jRetriever

class neo4j_graphrag.retrievers.external.pinecone.pinecone.PineconeNeo4jRetriever(driver, client, index_name, id_property_neo4j, embedder=None, return_properties=None, retrieval_query=None, result_formatter=None, neo4j_database=None, node_label_neo4j=None)[source]

提供使用 Pinecone 数据库对嵌入向量进行搜索的检索方法。如果提供了嵌入器,它需要具有所需的 Embedder 类型。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import PineconeNeo4jRetriever
from pinecone import Pinecone

with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
    pc_client = Pinecone(PC_API_KEY)
    embedder = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

    retriever = PineconeNeo4jRetriever(
        driver=neo4j_driver,
        client=pc_client,
        index_name="jeopardy",
        id_property_neo4j="id",
        embedder=embedder,
    )

    result = retriever.search(query_text="biology", top_k=2)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • client (Pinecone) – Pinecone 客户端对象。

  • index_name (str) – Pinecone 索引名称。

  • id_property_neo4j (str) – 用作将 Pinecone 匹配项关联到 Neo4j 节点的标识符的 Neo4j 节点属性名称。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • return_properties (Optional[list[str]]) – 要返回的节点属性列表。

  • retrieval_query (str) – 附加的 Cypher 查询。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 将 neo4j.Record 转换为 RetrieverResultItem 的函数。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

  • node_label_neo4j (Optional[str]) – 要检索的 Neo4j 节点标签。如果需要,该标签必须正确转义,例如 “`Label with spaces`”。

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_vector=None, query_text=None, top_k=5, **kwargs)

使用 Pinecone 获取提供的 query_vector 或 query_text 的 top_k 个最近邻嵌入。可以同时提供 query_vector 和 query_text。如果提供了 query_vector,则在向量搜索中它将优先于由 query_text 生成的嵌入。如果提供了 query_text,它将检查是否提供了嵌入器并使用其生成 query_vector。

参阅以下文档了解更多详细信息: - 查询向量索引 - db.index.vector.queryNodes() - db.index.fulltext.queryNodes()

示例

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import PineconeNeo4jRetriever
from pinecone import Pinecone

with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
    pc_client = Pinecone(PC_API_KEY)
    retriever = PineconeNeo4jRetriever(
        driver=neo4j_driver,
        client=pc_client,
        index_name="jeopardy",
        id_property_neo4j="id",
        node_label_neo4j="Document",
    )
    biology_embedding = ...
    retriever.search(query_vector=biology_embedding, top_k=2)
参数:
  • query_text (str) – 要获取其最近邻的文本。

  • query_vector (Optional[list[float]], optional) – 要获取其最近邻的向量嵌入。默认为 None。

  • top_k (Optional[int]) – 返回邻居的数量。默认为 5。

  • kwargs (Any)

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

QdrantNeo4jRetriever

class neo4j_graphrag.retrievers.external.qdrant.qdrant.QdrantNeo4jRetriever(driver, client, collection_name, id_property_neo4j, id_property_external='id', using=None, embedder=None, return_properties=None, retrieval_query=None, result_formatter=None, neo4j_database=None, node_label_neo4j=None, id_property_getter=None)[source]

提供使用 Qdrant 数据库对嵌入向量进行搜索的检索方法。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import QdrantNeo4jRetriever
from qdrant_client import QdrantClient

with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
    client = QdrantClient()
    retriever = QdrantNeo4jRetriever(
        driver=neo4j_driver,
        client=client,
        collection_name="my_collection",
        using="my_vector",
        id_property_external="neo4j_id"
    )
    embedding = ...
    retriever.search(query_vector=embedding, top_k=2)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动程序。

  • client (QdrantClient) – Qdrant 客户端对象。

  • collection_name (str) – 要使用的 Qdrant 集合名称。

  • using (str) – 在多向量集合的情况下,包含在集合中的 Qdrant 向量的名称

  • id_property_neo4j (str) – 用作将 Qdrant 匹配项关联到 Neo4j 节点的标识符的 Neo4j 节点属性名称。

  • id_property_external (str) – Qdrant 有效负载(payload)属性名称,其包含指向相应 Neo4j 节点 ID 属性的标识符。

  • embedder (Optional[Embedder]) – 用于嵌入查询文本的嵌入器对象。

  • return_properties (Optional[list[str]]) – 要返回的节点属性列表。

  • result_formatter (Optional[Callable[[neo4j.Record], RetrieverResultItem]]) – 将 neo4j.Record 转换为 RetrieverResultItem 的函数。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

  • node_label_neo4j (Optional[str]) – 要检索的 Neo4j 节点标签。如果需要,该标签必须正确转义,例如 “`Label with spaces`”。

  • id_property_getter (Optional[Callable[[ScoredPoint], str]]) – 从 ScoredPoint 获取 ID 属性的函数。默认为 point.payload.get(id_property_external, point.id)。

  • retrieval_query (Optional[str])

抛出异常:

RetrieverInitializationError – 如果输入参数验证失败。

search(query_vector=None, query_text=None, top_k=5, **kwargs)

针对提供的 query_vector 或 query_text,使用 Qdrant 获取前 top_k 个最近邻嵌入。如果提供了 query_text,则使用提供的嵌入器(embedder)生成 query_vector。

参阅以下文档了解更多详细信息: - 查询向量索引 - db.index.vector.queryNodes() - db.index.fulltext.queryNodes()

示例

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import QdrantNeo4jRetriever
from qdrant_client import QdrantClient

with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
    client = QdrantClient()
    retriever = QdrantNeo4jRetriever(
        driver=neo4j_driver,
        client=client,
        collection_name="my_collection",
        id_property_external="neo4j_id",
        node_label_neo4j="Document",
    )
    embedding = ...
    retriever.search(query_vector=embedding, top_k=2)
参数:
  • query_text (str) – 要获取其最近邻的文本。

  • query_vector (Optional[list[float]], optional) – 要获取其最近邻的向量嵌入。默认为 None。

  • top_k (Optional[int]) – 要返回的邻居数量。默认为 5。

  • kwargs (Any) – 传递给 QdrantClient#query() 的额外关键字参数。

抛出异常:
返回:

搜索查询的结果,表现为 neo4j.Record 列表和可选的元数据字典

返回类型:

RawSearchResult

Embedder (嵌入器)

class neo4j_graphrag.embeddings.base.Embedder(rate_limit_handler=None)[source]

嵌入模型的接口。传入检索器(retriever)的嵌入器必须实现此接口。

参数:

rate_limit_handler (Optional[RateLimitHandler]) – 速率限制处理器。默认为带指数退避的重试。

abstract embed_query(text)[source]

嵌入查询文本。

参数:

text (str) – 要转换为向量嵌入的文本

返回:

向量嵌入。

返回类型:

list[float]

async async_embed_query(text)[source]

异步嵌入查询文本。

参数:

text (str) – 要转换为向量嵌入的文本

返回:

向量嵌入。

返回类型:

list[float]

SentenceTransformerEmbeddings

class neo4j_graphrag.embeddings.sentence_transformers.SentenceTransformerEmbeddings(model='all-MiniLM-L6-v2', rate_limit_handler=None, *args, **kwargs)[source]
参数:
embed_query(text)[source]

嵌入查询文本。

参数:

text (str) – 要转换为向量嵌入的文本

返回:

向量嵌入。

返回类型:

list[float]

OpenAIEmbeddings

class neo4j_graphrag.embeddings.openai.OpenAIEmbeddings(model='text-embedding-ada-002', rate_limit_handler=None, **kwargs)[source]

OpenAI 嵌入类。此类使用 OpenAI Python 客户端为文本数据生成嵌入。

参数:
  • model (str) – 要使用的 OpenAI 嵌入模型的名称。默认为 “text-embedding-ada-002”。

  • kwargs (Any) – 所有其他参数将传递给 openai.OpenAI 初始化。

  • rate_limit_handler (Optional[RateLimitHandler])

AzureOpenAIEmbeddings

class neo4j_graphrag.embeddings.openai.AzureOpenAIEmbeddings(model='text-embedding-ada-002', rate_limit_handler=None, **kwargs)[source]

Azure OpenAI 嵌入类。此类使用 Azure OpenAI Python 客户端为文本数据生成嵌入。

参数:
  • model (str) – 要使用的 Azure OpenAI 嵌入模型的名称。默认为 “text-embedding-ada-002”。

  • kwargs (Any) – 所有其他参数将传递给 openai.AzureOpenAI 初始化。

  • rate_limit_handler (Optional[RateLimitHandler])

OllamaEmbeddings

class neo4j_graphrag.embeddings.ollama.OllamaEmbeddings(model, rate_limit_handler=None, **kwargs)[source]

Ollama 嵌入类。此类使用 ollama Python 客户端为文本数据生成向量嵌入。

参数:
  • model (str) – 要使用的 Mistral AI 文本嵌入模型名称。默认为 “mistral-embed”。

  • rate_limit_handler (Optional[RateLimitHandler])

  • kwargs (Any)

embed_query(text, **kwargs)[source]

使用 Ollama 文本嵌入模型为给定查询生成嵌入。

参数:
  • text (str) – 要生成嵌入的文本。

  • **kwargs (Any) – 传递给 Ollama 客户端的额外关键字参数。

返回类型:

list[float]

async async_embed_query(text, **kwargs)[source]

使用 Ollama 文本嵌入模型异步生成给定查询的嵌入。

参数:
  • text (str) – 要生成嵌入的文本。

  • **kwargs (Any) – 传递给 Ollama 客户端的额外关键字参数。

返回类型:

list[float]

VertexAIEmbeddings

class neo4j_graphrag.embeddings.vertexai.VertexAIEmbeddings(model='text-embedding-004', rate_limit_handler=None)[source]

Vertex AI 嵌入类。此类使用 Vertex AI Python 客户端为文本数据生成向量嵌入。

参数:
  • model (str) – 要使用的 Vertex AI 文本嵌入模型名称。默认为 “text-embedding-004”。

  • rate_limit_handler (Optional[RateLimitHandler])

embed_query(text, task_type='RETRIEVAL_QUERY', **kwargs)[source]

使用 Vertex AI 文本嵌入模型为给定查询生成嵌入。

参数:
返回类型:

list[float]

MistralAIEmbeddings

class neo4j_graphrag.embeddings.mistral.MistralAIEmbeddings(model='mistral-embed', rate_limit_handler=None, **kwargs)[source]

Mistral AI 嵌入类。此类使用 Mistral AI Python 客户端为文本数据生成向量嵌入。

参数:
  • model (str) – 要使用的 Mistral AI 文本嵌入模型名称。默认为 “mistral-embed”。

  • rate_limit_handler (Optional[RateLimitHandler])

  • kwargs (Any)

embed_query(text, **kwargs)[source]

使用 Mistral AI 文本嵌入模型为给定查询生成嵌入。

参数:
  • text (str) – 要生成嵌入的文本。

  • **kwargs (Any) – 传递给 Mistral AI 客户端的额外关键字参数。

返回类型:

list[float]

CohereEmbeddings

class neo4j_graphrag.embeddings.cohere.CohereEmbeddings(model='', rate_limit_handler=None, **kwargs)[source]
参数:
embed_query(text, **kwargs)[source]

嵌入查询文本。

参数:
  • text (str) – 要转换为向量嵌入的文本

  • kwargs (Any)

返回:

向量嵌入。

返回类型:

list[float]

Generation (生成)

LLM (大语言模型)

LLMInterface (LLM 接口)

class neo4j_graphrag.llm.LLMInterface(model_name, model_params=None, rate_limit_handler=None, **kwargs)[source]

大语言模型的接口。

参数:
  • model_name (str) – 语言模型的名称。

  • model_params (Optional[dict]) – 发送文本到模型时传递的额外参数。默认为 None。

  • rate_limit_handler (Optional[RateLimitHandler]) – 速率限制处理器。默认为带指数退避的重试。

  • **kwargs (Any) – 初始化类时传递给模型的参数。默认为 None。

supports_structured_output: bool = False

此 LLM 是否支持结构化输出(带有 Pydantic 模型或 JSON 模式的 response_format)。

abstract invoke(input, message_history=None, system_instruction=None)[source]

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

abstract async ainvoke(input, message_history=None, system_instruction=None)[source]

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

invoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。

这是一个默认实现,支持工具/函数调用的 LLM 提供商应当重写此方法。

参数:
  • input (str) – 发送给 LLM 的文本。

  • tools (Sequence[Tool]) – 供 LLM 选择的 Tools 序列。每个 LLM 实现都应处理向其特定格式的转换。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:
async ainvoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

异步向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。

这是一个默认实现,支持工具/函数调用的 LLM 提供商应当重写此方法。

参数:
  • input (str) – 发送给 LLM 的文本。

  • tools (Sequence[Tool]) – 供 LLM 选择的 Tools 序列。每个 LLM 实现都应处理向其特定格式的转换。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:

OpenAILLM

class neo4j_graphrag.llm.openai_llm.OpenAILLM(model_name, model_params=None, rate_limit_handler=None, **kwargs)[source]

OpenAI LLM。

参数:
supports_structured_output: bool = True

此 LLM 是否支持结构化输出(带有 Pydantic 模型或 JSON 模式的 response_format)。

AzureOpenAILLM

class neo4j_graphrag.llm.openai_llm.AzureOpenAILLM(model_name, model_params=None, system_instruction=None, rate_limit_handler=None, **kwargs)[source]

Azure OpenAI LLM。

参数:
  • model_name (str)

  • model_params (Optional[dict[str, Any]])

  • system_instruction (Optional[str])

  • rate_limit_handler (Optional[RateLimitHandler])

  • kwargs (Any)

OllamaLLM

class neo4j_graphrag.llm.ollama_llm.OllamaLLM(model_name, model_params=None, rate_limit_handler=None, **kwargs)[source]

Ollama 模型的 LLM 包装器。

参数:
invoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
invoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str, Any] | None = None, **kwargs: Any) LLMResponse

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
async ainvoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str Any] | None = None, **kwargs: Any) LLMResponse

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

get_messages(input, message_history=None, system_instruction=None)[source]

构建 Ollama 聊天 API 的消息列表。

参数:
  • input (str)

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]])

  • system_instruction (Optional[str])

返回类型:

Sequence[Message]

get_messages_v2(input)[source]

构建 Ollama 聊天 API 的消息列表。

参数:

input (list[LLMMessage])

返回类型:

Sequence[Message]

invoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。 :param input: 发送给 LLM 的文本。 :type input: str :param tools: 供 LLM 选择的工具列表。 :type tools: List[Tool] :param message_history: 先前消息的集合,

每条消息都分配有特定的角色。

参数:
  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

  • input (str)

  • tools (Sequence[Tool])

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]])

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。 :param input: 发送给 LLM 的文本。 :type input: str :param tools: 供 LLM 选择的工具列表。 :type tools: List[Tool] :param message_history: 先前消息的集合,

每条消息都分配有特定的角色。

参数:
  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

  • input (str)

  • tools (Sequence[Tool])

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]])

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

VertexAILLM

class neo4j_graphrag.llm.vertexai_llm.VertexAILLM(model_name='gemini-1.5-flash-001', model_params=None, system_instruction=None, rate_limit_handler=None, **kwargs)[source]

Vertex AI 上大语言模型的接口。

参数:
  • model_name (str, optional) – 要使用的 LLM 名称。默认为 “gemini-1.5-flash-001”。

  • model_params (Optional[dict], optional) – 当向模型发送文本时,传递给 LLMInterface(V1) 的额外参数。默认为 None。

  • system_instruction (Optional[str]) – 设置对话中模型行为和上下文的额外指令。默认为 None。

  • rate_limit_handler (Optional[RateLimitHandler], optional) – LLMInterface(V1) 的速率限制处理器。默认为 None。

  • **kwargs (Any) – 初始化类时传递给模型的参数。默认为 None。

抛出异常:

LLMGenerationError – 如果在从模型生成响应时发生错误。

示例

from neo4j_graphrag.llm import VertexAILLM
from vertexai.generative_models import GenerationConfig

generation_config = GenerationConfig(temperature=0.0)
llm = VertexAILLM(
    model_name="gemini-1.5-flash-001", generation_config=generation_config
)
llm.invoke("Who is the mother of Paul Atreides?")
supports_structured_output: bool = True

此 LLM 是否支持结构化输出(带有 Pydantic 模型或 JSON 模式的 response_format)。

invoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
invoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str, Any] | None = None, **kwargs: Any) LLMResponse

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
async ainvoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str Any] | None = None, **kwargs: Any) LLMResponse

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

invoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。

这是一个默认实现,支持工具/函数调用的 LLM 提供商应当重写此方法。

参数:
  • input (str) – 发送给 LLM 的文本。

  • tools (Sequence[Tool]) – 供 LLM 选择的 Tools 序列。每个 LLM 实现都应处理向其特定格式的转换。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:
async ainvoke_with_tools(input, tools, message_history=None, system_instruction=None)[source]

异步向 LLM 发送带有工具定义的文本输入,并获取工具调用响应。

这是一个默认实现,支持工具/函数调用的 LLM 提供商应当重写此方法。

参数:
  • input (str) – 发送给 LLM 的文本。

  • tools (Sequence[Tool]) – 供 LLM 选择的 Tools 序列。每个 LLM 实现都应处理向其特定格式的转换。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的包含工具调用的响应。

返回类型:

ToolCallResponse

抛出异常:
get_messages(input, message_history=None)[source]

根据输入和消息历史为 Vertex AI 模型构建消息。

参数:
返回类型:

list[Content]

get_messages_v2(input)[source]

仅根据输入为 Vertex AI 模型构建消息。

参数:

input (list[LLMMessage])

返回类型:

tuple[str | None, list[Content]]

AnthropicLLM

class neo4j_graphrag.llm.anthropic_llm.AnthropicLLM(model_name, model_params=None, rate_limit_handler=None, **kwargs)[source]

Anthropic 上大语言模型的接口。

参数:
  • model_name (str, optional) – 要使用的 LLM 名称。默认为 “gemini-1.5-flash-001”。

  • model_params (Optional[dict], optional) – 当向模型发送文本时,传递给 LLMInterface(V1) 的额外参数。默认为 None。

  • system_instruction – Optional[str], optional): 设置对话中模型行为和上下文的额外指令。默认为 None。

  • rate_limit_handler (Optional[RateLimitHandler], optional) – LLMInterface(V1) 的速率限制管理处理器。默认为 None。

  • **kwargs (Any) – 初始化类时传递给模型的参数。默认为 None。

抛出异常:

LLMGenerationError – 如果在从模型生成响应时发生错误。

示例

from neo4j_graphrag.llm import AnthropicLLM

llm = AnthropicLLM(
    model_name="claude-3-opus-20240229",
    model_params={"max_tokens": 1000},
    api_key="sk...",   # can also be read from env vars
)
llm.invoke("Who is the mother of Paul Atreides?")
invoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
invoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str, Any] | None = None, **kwargs: Any) LLMResponse

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
async ainvoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str Any] | None = None, **kwargs: Any) LLMResponse

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

get_messages(input, message_history=None)[source]

根据输入和消息历史为 LLM 构建消息列表。

参数:
  • input (str)

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]])

返回类型:

Iterable[MessageParam]

get_messages_v2(input)[source]

根据输入为 LLM 构建消息列表。

参数:

input (list[LLMMessage])

返回类型:

tuple[Union[str, NotGiven], Iterable[MessageParam]]

CohereLLM

class neo4j_graphrag.llm.cohere_llm.CohereLLM(model_name='', model_params=None, rate_limit_handler=None, **kwargs)[source]

Cohere 平台上大语言模型的接口。

参数:
  • model_name (str, optional) – 要使用的 LLM 名称。默认为 “gemini-1.5-flash-001”。

  • model_params (Optional[dict], optional) – 当向模型发送文本时,传递给 LLMInterface(V1) 的额外参数。默认为 None。

  • system_instruction (Optional[str], optional) – 设置对话中模型行为和上下文的额外指令。默认为 None。

  • rate_limit_handler (Optional[RateLimitHandler], optional) – LLMInterface(V1) 的速率限制处理器,用于管理 API 速率限制。默认为 None。

  • **kwargs (Any) – 初始化类时传递给模型的参数。默认为 None。

抛出异常:

LLMGenerationError – 如果在从模型生成响应时发生错误。

示例

from neo4j_graphrag.llm import CohereLLM

llm = CohereLLM(api_key="...")
llm.invoke("Say something")
invoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
invoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str, Any] | None = None, **kwargs: Any) LLMResponse

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[source]
async ainvoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str Any] | None = None, **kwargs: Any) LLMResponse

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

get_messages(input, message_history=None, system_instruction=None)[源代码]

将输入和消息历史转换为 Cohere 的 ChatMessages。

参数:
  • input (str)

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]])

  • system_instruction (Optional[str])

返回类型:

ChatMessages

get_messages_v2(input)[源代码]

将 LLMMessage 列表转换为 Cohere 的 ChatMessages。

参数:

input (list[LLMMessage])

返回类型:

ChatMessages

MistralAILLM

class neo4j_graphrag.llm.mistralai_llm.MistralAILLM(model_name, model_params=None, rate_limit_handler=None, **kwargs)[源代码]
参数:
invoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[源代码]
invoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str, Any] | None = None, **kwargs: Any) LLMResponse

向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

async ainvoke(input: str, message_history: List[LLMMessage] | MessageHistory | None = None, system_instruction: str | None = None) LLMResponse[源代码]
async ainvoke(input: List[LLMMessage], response_format: Type[BaseModel] | dict[str Any] | None = None, **kwargs: Any) LLMResponse

异步向 LLM 发送文本输入并获取响应。

参数:
  • input (str) – 发送给 LLM 的文本。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • system_instruction (Optional[str]) – 针对此调用的可选 LLM 系统消息覆盖。

返回:

来自 LLM 的响应。

返回类型:

LLMResponse

抛出异常:

LLMGenerationError – 如果出现任何错误。

get_messages(input, message_history=None, system_instruction=None)[源代码]

为 Mistral 聊天补全模型构建消息列表。

参数:
  • input (str)

  • message_history (List[LLMMessage] | MessageHistory | None)

  • system_instruction (str | None)

返回类型:

list[Annotated[Annotated[AssistantMessage, Tag(tag=assistant)] | Annotated[SystemMessage, Tag(tag=system)] | Annotated[ToolMessage, Tag(tag=tool)] | Annotated[UserMessage, Tag(tag=user)], Discriminator(discriminator=~mistralai.models.chatcompletionrequest.<lambda>, custom_error_type=None, custom_error_message=None, custom_error_context=None)]]

get_messages_v2(input)[源代码]

为 Mistral 聊天补全模型构建消息列表。

参数:

input (list[LLMMessage])

返回类型:

list[Annotated[Annotated[AssistantMessage, Tag(tag=assistant)] | Annotated[SystemMessage, Tag(tag=system)] | Annotated[ToolMessage, Tag(tag=tool)] | Annotated[UserMessage, Tag(tag=user)], Discriminator(discriminator=~mistralai.models.chatcompletionrequest.<lambda>, custom_error_type=None, custom_error_message=None, custom_error_context=None)]]

速率限制

RateLimitHandler

class neo4j_graphrag.utils.rate_limit.RateLimitHandler[源代码]

速率限制处理策略的抽象基类。

abstract handle_sync(func)[源代码]

将速率限制处理应用于同步函数。

参数:

func (F) – 要进行速率限制处理封装的函数。

返回:

封装后的函数。

返回类型:

F

abstract handle_async(func)[源代码]

将速率限制处理应用于异步函数。

参数:

func (AF) – 要进行速率限制处理封装的异步函数。

返回:

封装后的异步函数。

返回类型:

AF

is_retryable_exception(exception)[源代码]

如果提供的异常应该重试,则返回 True。

默认行为将速率限制错误视为可重试。

重写此方法(或提供自定义处理器实现)以扩展重试分类,而无需修改库代码。

参数:

exception (Exception)

返回类型:

bool

to_retryable_error(exception)[源代码]

将提供商异常转换为可重试的错误类型。

默认行为通过 convert_to_rate_limit_error() 将提供商速率限制错误转换为 RateLimitError

重写此方法以封装额外的瞬态提供商错误。

参数:

exception (Exception)

返回类型:

RetryableError

RetryRateLimitHandler

class neo4j_graphrag.utils.rate_limit.RetryRateLimitHandler(max_attempts=3, min_wait=1.0, max_wait=60.0, multiplier=2.0, jitter=True, retryable_exceptions=(<class 'neo4j_graphrag.exceptions.RateLimitError'>, ))[源代码]

使用指数退避重试策略的速率限制处理器。

此处理器使用 tenacity 库实现带有指数退避的重试逻辑。

参数:
  • max_attempts (int) – 最大重试次数。默认为 3。

  • min_wait (float) – 重试之间的最小等待时间(秒)。默认为 1。

  • max_wait (float) – 重试之间的最大等待时间(秒)。默认为 60。

  • multiplier (float) – 指数退避乘数。默认为 2。

  • jitter (bool) – 是否向重试延迟添加随机抖动以防止惊群效应。默认为 True。

  • retryable_exceptions (tuple[type[BaseException], ...]) – 应重试的异常类型元组。默认为 (RateLimitError,)。

handle_sync(func)[源代码]

将重试逻辑应用于同步函数。

参数:

func (F)

返回类型:

F

handle_async(func)[源代码]

将重试逻辑应用于异步函数。

参数:

func (AF)

返回类型:

AF

NoOpRateLimitHandler

class neo4j_graphrag.utils.rate_limit.NoOpRateLimitHandler[源代码]

不应用任何速率限制的空操作(No-op)速率限制处理器。

handle_sync(func)[源代码]

原样返回函数。

参数:

func (F)

返回类型:

F

handle_async(func)[源代码]

原样返回异步函数。

参数:

func (AF)

返回类型:

AF

PromptTemplate

class neo4j_graphrag.generation.prompts.PromptTemplate(template=None, expected_inputs=None, system_instructions=None)[源代码]

此类用于生成参数化提示(Prompt)。它由一个字符串(模板,使用 Python 格式语法,参数置于花括号 {} 中)和所需输入列表定义。在将指令发送给 LLM 之前,调用 format 方法,该方法将用提供的值替换参数。如果缺少任何预期的输入,将引发 PromptMissingInputError

参数:
  • template (Optional[str])

  • expected_inputs (Optional[list[str]])

  • system_instructions (Optional[str])

DEFAULT_SYSTEM_INSTRUCTIONS: str = ''
DEFAULT_TEMPLATE: str = ''
EXPECTED_INPUTS: list[str] = []
format(*args, **kwargs)[源代码]

此方法用于用提供的值替换参数。参数必须通过以下方式提供:- 作为关键字参数 (kwargs) - 如果使用与预期输入相同的顺序,则作为位置参数 (args)。

示例

prompt_template = PromptTemplate(
    template='''Explain the following concept to {target_audience}:
    Concept: {concept}
    Answer:
    ''',
    expected_inputs=['target_audience', 'concept']
)
prompt = prompt_template.format('12 yo children', concept='graph database')
print(prompt)

# Result:
# '''Explain the following concept to 12 yo children:
# Concept: graph database
# Answer:
# '''
参数:
返回类型:

str

RagTemplate

class neo4j_graphrag.generation.prompts.RagTemplate(template=None, expected_inputs=None, system_instructions=None)[源代码]
参数:
  • template (Optional[str])

  • expected_inputs (Optional[list[str]])

  • system_instructions (Optional[str])

DEFAULT_SYSTEM_INSTRUCTIONS: str = '使用提供的上下文回答用户问题。'
DEFAULT_TEMPLATE: str = 'Context:\n{context}\n\nExamples:\n{examples}\n\nQuestion:\n{query_text}\n\nAnswer:\n'
EXPECTED_INPUTS: list[str] = ['context', 'query_text', 'examples']

ERExtractionTemplate

class neo4j_graphrag.generation.prompts.ERExtractionTemplate(template=None, expected_inputs=None, system_instructions=None)[源代码]
参数:
  • template (Optional[str])

  • expected_inputs (Optional[list[str]])

  • system_instructions (Optional[str])

DEFAULT_TEMPLATE: str = '\n你是一个顶尖算法,旨在提取结构化格式的信息以构建知识图谱。\n\n从以下文本中提取实体(节点)并指定它们的类型。\n同时提取这些节点之间的关系。\n\n使用以下格式以 JSON 形式返回结果:\n{{"nodes": [ {{"id": "0", "label": "Person", "properties": {{"name": "John"}} }}],\n"relationships": [{{"type": "KNOWS", "start_node_id": "0", "end_node_id": "1", "properties": {{"since": "2024-08-01"}} }}] }}\n\n仅使用以下节点和关系类型(如果已提供):\n{schema}\n\n为每个节点分配一个唯一的 ID(字符串),并在定义关系时重复使用该 ID。\n务必遵守关系对应的源节点和目标节点类型以及关系方向。\n\n请确保遵守以下规则以生成有效的 JSON 对象:\n- 除了其中的 JSON 之外,不要返回任何额外信息。\n- 省略 JSON 周围的任何反引号 - 只需输出 JSON 本身。\n- JSON 对象不得封装在列表中 - 它是一个独立的 JSON 对象。\n- 属性名必须用双引号括起来\n\n示例:\n{examples}\n\n输入文本:\n\n{text}\n'
EXPECTED_INPUTS: list[str] = ['text']

SchemaExtractionTemplate

class neo4j_graphrag.generation.prompts.SchemaExtractionTemplate(template=None, expected_inputs=None, system_instructions=None)[源代码]
参数:
  • template (Optional[str])

  • expected_inputs (Optional[list[str]])

  • system_instructions (Optional[str])

DEFAULT_TEMPLATE: str = '\n你是一个顶尖算法,旨在提取结构化格式的标签属性图模式。\n\n根据输入文本生成通用的图谱模式。识别关键节点类型、它们的关系类型以及属性类型。\n\n重要规则:\n1. 仅返回抽象模式信息,而不是具体的实例。\n2. 节点类型使用单数 PascalCase 标签(例如:Person, Company, Product)。\n3. 关系类型使用 UPPER_SNAKE_CASE 标签(例如:WORKS_FOR, MANAGES)。\n4. 仅在可以自信推断类型时才包含属性定义,否则请省略。\n5. 定义模式时,确保提到的每个节点标签和关系标签都存在于你的节点类型和关系类型列表中。\n6. 不要创建文本中未明确提到的节点类型。\n7. 保持模式简洁,并专注于文本中清晰可辨的模式。\n8. 唯一性约束:\n8.1 唯一性(UNIQUENESS)是可选的;每个 node_type 可能有也可能没有恰好一个唯一性约束。\n8.2 仅使用样本中似乎没有太多缺失值的属性。\n8.3 约束按标签引用 node_types,并指定哪个属性是唯一的。\n8.4 如果属性出现在唯一性约束中,它必须也作为属性出现在相应的 node_type 中。\n9. 必填属性:\n9.1 如果该节点/关系类型的每个实例都必须具有此属性(非空),则将属性标记为 "required": true。\n9.2 如果属性是可选的,并且在某些实例上可能不存在,则将属性标记为 "required": false。\n9.3 作为标识符、名称或基本特征的属性通常是必填的。\n9.4 作为补充信息(电话号码、描述、元数据)的属性通常是可选的。\n9.5 不确定时,默认为 "required": false。\n9.6 如果属性具有 UNIQUENESS 约束,它必须被标记为 "required": true。\n10. 严禁在节点标签或关系类型中使用双下划线(__)作为前缀或后缀(例如禁止使用 __Person__ 或 __KNOWS__)。\n\n可接受的属性类型有:BOOLEAN, DATE, DURATION, FLOAT, INTEGER, LIST, LOCAL_DATETIME, LOCAL_TIME, POINT, STRING, ZONED_DATETIME, ZONED_TIME。\n\n返回遵循此精确结构的有效 JSON 对象:\n{{\n "node_types": [\n {{\n "label": "Person",\n "properties": [\n {{\n "name": "name",\n "type": "STRING",\n "required": true\n }},\n {{\n "name": "email",\n "type": "STRING",\n "required": false\n }}\n ]\n }}\n ...\n ],\n "relationship_types": [\n {{\n "label": "WORKS_FOR"\n }}\n ...\n ],\n "patterns": [\n {{"source": "Person", "relationship": "WORKS_FOR", "target": "Company"}},\n ...\n ],\n "constraints": [\n {{\n "type": "UNIQUENESS",\n "node_type": "Person",\n "property_name": "name"\n }}\n ...\n ]\n}}\n\n示例:\n{examples}\n\n输入文本:\n{text}\n'
EXPECTED_INPUTS: list[str] = ['text']

Text2CypherTemplate

class neo4j_graphrag.generation.prompts.Text2CypherTemplate(template=None, expected_inputs=None, system_instructions=None)[源代码]
参数:
  • template (Optional[str])

  • expected_inputs (Optional[list[str]])

  • system_instructions (Optional[str])

DEFAULT_TEMPLATE: str = '\n任务:根据用户输入生成用于查询 Neo4j 图数据库的 Cypher 语句。\n\n模式:\n{schema}\n\n示例(可选):\n{examples}\n\n输入:\n{query_text}\n\n不要使用模式中未包含的任何属性或关系。\n在回复中,除了生成的 Cypher 语句外,不要包含三重反引号 ``` 或任何额外文本。\n\nCypher 查询:\n'
EXPECTED_INPUTS: list[str] = ['query_text']

RAG

GraphRAG

class neo4j_graphrag.generation.graphrag.GraphRAG(retriever, llm, prompt_template=<neo4j_graphrag.generation.prompts.RagTemplate object>)[源代码]

使用特定的检索器(Retriever)和 LLM 执行 GraphRAG 搜索。

示例

import neo4j
from neo4j_graphrag.retrievers import VectorRetriever
from neo4j_graphrag.llm.openai_llm import OpenAILLM
from neo4j_graphrag.generation import GraphRAG

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

retriever = VectorRetriever(driver, "vector-index-name", custom_embedder)
llm = OpenAILLM()
graph_rag = GraphRAG(retriever, llm)
graph_rag.search(query_text="Find me a book about Fremen")
参数:
  • retriever (Retriever) – 用于查找传递给 LLM 的相关上下文的检索器。

  • llm (LLMInterface, LLMInterfaceV2LangChain 聊天模型) – 用于生成答案的 LLM。

  • prompt_template (RagTemplate) – 将与上下文和用户问题一起格式化并传递给 LLM 的提示模板。

抛出异常:

RagInitializationError – 如果输入参数验证失败。

search(query_text='', message_history=None, examples='', retriever_config=None, return_context=None, response_fallback=None)[源代码]

警告

‘return_context’ 的默认值将在未来版本中由 ‘False’

更改为 ‘True’。

此方法执行完整的 RAG 搜索:
  1. 检索(Retrieval):上下文检索

  2. 增强(Augmentation):提示词格式化

  3. 生成(Generation):使用 LLM 生成答案

参数:
  • query_text (str) – 用户问题。

  • message_history (Optional[Union[List[LLMMessage], MessageHistory]]) – 先前消息的集合,每条消息都分配有特定的角色。

  • examples (str) – 添加到 LLM 提示词中的示例。

  • retriever_config (Optional[dict]) – 传递给检索器 search 方法的参数;例如:top_k

  • return_context (bool) – 是否将检索器结果附加到最终结果中(默认值:False)。

  • response_fallback (Optional[str]) – 如果不为空,当上下文为空时,将返回此消息而不调用 LLM。

返回:

LLM 生成的答案。

返回类型:

RagResultModel

is_langchain_compatible()[源代码]

检查 LLM 是否与 LangChain 兼容。

返回类型:

bool

conversation_prompt(summary, current_query)[源代码]
参数:
  • summary (str)

  • current_query (str)

返回类型:

str

数据库交互

neo4j_graphrag.indexes.create_vector_index(driver, name, label, embedding_property, dimensions, similarity_fn, fail_if_exists=False, neo4j_database=None)[源代码]

此方法构建 Cypher 查询并执行它,以在 Neo4j 中创建一个新的向量索引。

请参阅关于创建向量索引的 Cypher 手册。

确保提供的索引名称在数据库上下文中是唯一的。

示例

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",
    fail_if_exists=False,
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • name (str) – 索引的唯一名称。

  • label (str) – 要建立索引的节点标签。

  • embedding_property (str) – 包含嵌入值的节点属性键。

  • dimensions (int) – 向量嵌入维度。

  • similarity_fn (str) – 向量相似度函数的不区分大小写的值:euclidean(欧几里得距离)或 cosine(余弦相似度)。

  • fail_if_exists (bool) – 如果为 True,当索引已存在时抛出错误。默认为 False。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:
  • ValueError – 如果输入参数验证失败。

  • neo4j.exceptions.ClientError – 如果向量索引创建失败。

返回类型:

None

neo4j_graphrag.indexes.create_fulltext_index(driver, name, label, node_properties, fail_if_exists=False, neo4j_database=None)[源代码]

此方法构建 Cypher 查询并执行它,以在 Neo4j 中创建一个新的全文索引。

请参阅关于创建全文索引的 Cypher 手册。

确保提供的索引名称在数据库上下文中是唯一的。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import create_fulltext_index

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

INDEX_NAME = "fulltext-index-name"

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

# Creating the index
create_fulltext_index(
    driver,
    INDEX_NAME,
    label="Document",
    node_properties=["vectorProperty"],
    fail_if_exists=False,
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • name (str) – 索引的唯一名称。

  • label (str) – 要建立索引的节点标签。

  • node_properties (list[str]) – 创建全文索引的节点属性。

  • fail_if_exists (bool) – 如果为 True,当索引已存在时抛出错误。默认为 False。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:
  • ValueError – 如果输入参数验证失败。

  • neo4j.exceptions.ClientError – 如果全文索引创建失败。

返回类型:

None

neo4j_graphrag.indexes.drop_index_if_exists(driver, name, neo4j_database=None)[源代码]

此方法构建 Cypher 查询并在索引存在的情况下执行它以在 Neo4j 中删除该索引。请参阅关于删除向量索引的 Cypher 手册。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import drop_index_if_exists

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

INDEX_NAME = "fulltext-index-name"

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

# Dropping the index if it exists
drop_index_if_exists(
    driver,
    INDEX_NAME,
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • name (str) – 要删除的索引名称。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

neo4j.exceptions.ClientError – 如果删除索引失败。

返回类型:

None

neo4j_graphrag.indexes.upsert_vectors(driver, ids, embedding_property, embeddings, neo4j_database=None, entity_type=EntityType.NODE)[源代码]

此方法构建 Cypher 查询并执行它,以在一组节点或关系上更新或插入(upsert)嵌入向量。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import upsert_vectors

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

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

# Upsert embeddings data for several nodes
upsert_vectors(
    driver,
    ids=['123', '456', '789'],
    embedding_property="vectorProperty",
    embeddings=[
        [0.12, 0.34, 0.56],
        [0.78, 0.90, 0.12],
        [0.34, 0.56, 0.78],
    ],
    neo4j_database="neo4j",
    entity_type='NODE',
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • ids (List[int]) – 节点或关系的元素 ID 列表。

  • embedding_property (str) – 用于存储向量的属性名称。

  • embeddings (List[List[float]]) – 要存储的向量列表,每个 ID 对应一个向量。

  • neo4j_database (Optional[str]) – Neo4j 数据库名称。如果未提供,则默认为服务器的默认数据库。默认为 ‘neo4j’。

  • entity_type (EntityType) – 指定是更新节点 (‘NODE’) 还是关系 (‘RELATIONSHIP’)。默认为 ‘NODE’。

抛出异常:
  • ValueError – 如果 ID 列表和嵌入列表的长度不匹配,或者嵌入向量的维度不一致。

  • Neo4jInsertionError – 如果在 Neo4j 中尝试更新向量时发生错误。

返回类型:

None

neo4j_graphrag.indexes.upsert_vector(driver, node_id, embedding_property, vector, neo4j_database=None)[源代码]

警告

‘upsert_vector’ 已被弃用,并将在未来版本中删除,请改用 ‘upsert_vectors’。

此方法构建 Cypher 查询并执行它,以在特定节点上更新或插入(upsert)向量属性。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import upsert_vector

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

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

# Upsert the vector data
upsert_vector(
    driver,
    node_id="nodeId",
    embedding_property="vectorProperty",
    vector=...,
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • node_id (int) – 节点的元素 id。

  • embedding_property (str) – 用于存储向量的属性名称。

  • vector (list[float]) – 要存储的向量。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

Neo4jInsertionError – 如果更新向量失败。

返回类型:

None

neo4j_graphrag.indexes.upsert_vector_on_relationship(driver, rel_id, embedding_property, vector, neo4j_database=None)[源代码]

警告

‘upsert_vector_on_relationship’ 已被弃用,并将在未来版本中删除,请改用 ‘upsert_vectors’。

此方法构建 Cypher 查询并执行它,以在特定关系上更新或插入(upsert)向量属性。

示例

from neo4j import GraphDatabase
from neo4j_graphrag.indexes import upsert_vector_on_relationship

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

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

# Upsert the vector data
upsert_vector_on_relationship(
    driver,
    node_id="nodeId",
    embedding_property="vectorProperty",
    vector=...,
)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • rel_id (int) – 关系的元素 id。

  • embedding_property (str) – 用于存储向量的属性名称。

  • vector (list[float]) – 要存储的向量。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

Neo4jInsertionError – 如果更新向量失败。

返回类型:

None

async neo4j_graphrag.indexes.async_upsert_vector(driver, node_id, embedding_property, vector, neo4j_database=None)[源代码]

警告

‘async_upsert_vector’ 已被弃用,并将在未来版本中删除。

此方法构建 Cypher 查询并异步执行,以在特定节点上更新或插入(upsert)向量属性。

示例

from neo4j import AsyncGraphDatabase
from neo4j_graphrag.indexes import upsert_vector

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

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

# Upsert the vector data
async_upsert_vector(
    driver,
    node_id="nodeId",
    embedding_property="vectorProperty",
    vector=...,
)
参数:
  • driver (neo4j.AsyncDriver) – Neo4j Python 异步驱动实例。

  • node_id (int) – 节点的元素 id。

  • embedding_property (str) – 用于存储向量的属性名称。

  • vector (list[float]) – 要存储的向量。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

Neo4jInsertionError – 如果更新向量失败。

返回类型:

None

async neo4j_graphrag.indexes.async_upsert_vector_on_relationship(driver, rel_id, embedding_property, vector, neo4j_database=None)[源代码]

警告

‘async_upsert_vector_on_relationship’ 已被弃用,并将在未来版本中删除。

此方法构建 Cypher 查询并异步执行,以在特定关系上更新或插入(upsert)向量属性。

示例

from neo4j import AsyncGraphDatabase
from neo4j_graphrag.indexes import upsert_vector_on_relationship

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

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

# Upsert the vector data
async_upsert_vector_on_relationship(
    driver,
    node_id="nodeId",
    embedding_property="vectorProperty",
    vector=...,
)
参数:
  • driver (neo4j.AsyncDriver) – Neo4j Python 异步驱动实例。

  • rel_id (int) – 关系的元素 id。

  • embedding_property (str) – 用于存储向量的属性名称。

  • vector (list[float]) – 要存储的向量。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

抛出异常:

Neo4jInsertionError – 如果更新向量失败。

返回类型:

None

neo4j_graphrag.indexes.retrieve_vector_index_info(driver, index_name, label_or_type, embedding_property, neo4j_database=None)[源代码]

检查 Neo4j 数据库中是否存在向量索引并返回其信息。如果未找到匹配的索引,则返回 None。

参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • index_name (str) – 要查找的索引名称。

  • label_or_type (str) – 索引的标签(对于节点)或类型(对于关系)。

  • embedding_property (str) – 包含嵌入向量的属性名称。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

返回:

如果找到,则返回包含第一个匹配索引信息的字典,否则返回 None。

返回类型:

Optional[Dict[str, Any]]

neo4j_graphrag.indexes.retrieve_fulltext_index_info(driver, index_name, label_or_type, text_properties=[], neo4j_database=None)[源代码]

检查 Neo4j 数据库中是否存在全文索引并返回其信息。如果未找到匹配的索引,则返回 None。

参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • index_name (str) – 要查找的索引名称。

  • label_or_type (str) – 索引的标签(对于节点)或类型(对于关系)。

  • text_properties (List[str]) – 被索引的文本属性名称列表。

  • neo4j_database (Optional[str]) –

    Neo4j 数据库的名称。如果未提供,则默认为服务器的默认数据库(默认情况下为“neo4j”)(参阅文档参考)。

返回:

如果找到,则返回包含第一个匹配索引信息的字典,否则返回 None。

返回类型:

Optional[Dict[str, Any]]

neo4j_graphrag.schema.get_structured_schema(driver, is_enhanced=False, database=None, timeout=None, sanitize=False, sample=1000)[查看源码]

返回图的结构化模式。

返回具有以下格式的字典

{
    'node_props': {
        'Person': [{'property': 'id', 'type': 'INTEGER'}, {'property': 'name', 'type': 'STRING'}]
    },
    'rel_props': {
        'KNOWS': [{'property': 'fromDate', 'type': 'DATE'}]
    },
    'relationships': [
        {'start': 'Person', 'type': 'KNOWS', 'end': 'Person'}
    ],
    'metadata': {
        'constraint': [
            {'id': 7, 'name': 'person_id', 'type': 'UNIQUENESS', 'entityType': 'NODE', 'labelsOrTypes': ['Person'], 'properties': ['id'], 'ownedIndex': 'person_id', 'propertyType': None},
        ],
        'index': [
            {'label': 'Person', 'properties': ['name'], 'size': 2, 'type': 'RANGE', 'valuesSelectivity': 1.0, 'distinctValues': 2.0},
        ]
    }
}

注意

返回字典的内部结构取决于 apoc.meta.data 和 apoc.schema.nodes 过程。

警告

某些标签会从输出模式中排除

  • 由此包中的 KG Builder 流水线创建的 __Entity____KGBuilder__ 节点标签

  • 一些与 Bloom 内部相关的标签。

参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • is_enhanced (bool) – 标志,指示是以详细统计信息 (True) 还是以更简单的概览格式 (False) 格式化模式。

  • database (Optional[str]) – 要连接的数据库名称。默认为 ‘neo4j’。

  • timeout (Optional[float]) – 事务的超时时间(以秒为单位)。用于终止长时间运行的查询。默认情况下未设置超时。

  • sanitize (bool) – 指示是否从结果中删除包含超过 128 个元素的列表的标志。用于从数据库响应中删除类似嵌入(embedding)的属性。默认为 False。

  • sample (int) – 为 apoc.meta.data 过程采样的节点数量。将 sample 设置为 -1 将取消采样。默认为 1000。

返回:

结构化格式的图模式信息。

返回类型:

dict[str, Any]

neo4j_graphrag.schema.get_schema(driver, is_enhanced=False, database=None, timeout=None, sanitize=False, sample=1000)[查看源码]

以具有以下格式的字符串形式返回图的模式

Node properties:
Person {id: INTEGER, name: STRING}
Relationship properties:
KNOWS {fromDate: DATE}
The relationships:
(:Person)-[:KNOWS]->(:Person)
参数:
  • driver (neo4j.Driver) – Neo4j Python 驱动实例。

  • is_enhanced (bool) – 标志,指示是以详细统计信息 (True) 还是以更简单的概览格式 (False) 格式化模式。

  • database (Optional[str]) – 要连接的数据库名称。默认为 ‘neo4j’。

  • timeout (Optional[float]) – 事务的超时时间(以秒为单位)。用于终止长时间运行的查询。默认情况下未设置超时。

  • sanitize (bool) – 指示是否从结果中删除包含超过 128 个元素的列表的标志。用于从数据库响应中删除类似嵌入(embedding)的属性。默认为 False。

  • sample (int) – 为 apoc.meta.data 过程采样的节点数量。将 sample 设置为 -1 将取消采样。默认为 1000。

返回:

序列化格式的图模式信息。

返回类型:

str

neo4j_graphrag.schema.format_schema(schema, is_enhanced)[查看源码]

将结构化模式格式化为人类可读的字符串。

根据 is_enhanced 标志,此函数要么创建节点标签和关系类型及其属性的简洁列表,要么生成包含示例或可用值以及最小/最大统计信息等附加详细信息的增强、更详细的表示。它还包括格式化后的现有关系列表。

参数:
  • schema (Dict[str, Any]) – 结构化模式字典,包含节点和关系的属性以及关系定义。

  • is_enhanced (bool) – 标志,指示是以详细统计信息 (True) 还是以更简单的概览格式 (False) 格式化模式。

返回:

图模式的格式化字符串表示,包括节点属性、关系属性和关系模式。

返回类型:

str

消息历史记录

class neo4j_graphrag.message_history.InMemoryMessageHistory(messages=None)[查看源码]

存储在内存中的消息历史记录

示例

from neo4j_graphrag.message_history import InMemoryMessageHistory
from neo4j_graphrag.types import LLMMessage

history = InMemoryMessageHistory()

message = LLMMessage(role="user", content="Hello!")
history.add_message(message)
参数:

messages (Optional[List[LLMMessage]]) – 用于初始化历史记录的消息列表。默认为 None。

class neo4j_graphrag.message_history.Neo4jMessageHistory(session_id, driver, window=None, database=None)[查看源码]

存储在 Neo4j 数据库中的消息历史记录

示例

import neo4j
from neo4j_graphrag.message_history import Neo4jMessageHistory
from neo4j_graphrag.types import LLMMessage

driver = neo4j.GraphDatabase.driver(URI, auth=AUTH)

history = Neo4jMessageHistory(
    session_id="123", driver=driver, window=10
)

message = LLMMessage(role="user", content="Hello!")
history.add_message(message)
参数:
  • session_id (Union[str, int]) – 聊天会话的唯一标识符。

  • driver (neo4j.Driver) – Neo4j 驱动程序实例。

  • window (Optional[PositiveInt], optional) – 检索消息时返回的先前消息的数量。

  • database (Optional[str], optional) – Neo4j 数据库名称。

错误

Neo4jGraphRagError

class neo4j_graphrag.exceptions.Neo4jGraphRagError[查看源码]

基类:Exception

用于 neo4j-graphrag 包的全局异常。

RetrieverInitializationError

class neo4j_graphrag.exceptions.RetrieverInitializationError(errors)[查看源码]

基类:Neo4jGraphRagError

检索器初始化失败时抛出的异常。

参数:

errors (list[ErrorDetails])

SearchValidationError

class neo4j_graphrag.exceptions.SearchValidationError(errors)[查看源码]

基类:Neo4jGraphRagError

搜索过程中发生验证错误时抛出的异常。

参数:

errors (list[ErrorDetails])

FilterValidationError

class neo4j_graphrag.exceptions.FilterValidationError[查看源码]

基类:Neo4jGraphRagError

元数据过滤的输入验证失败时抛出的异常。

EmbeddingsGenerationError

class neo4j_graphrag.exceptions.EmbeddingsGenerationError[查看源码]

基类:Neo4jGraphRagError

嵌入生成失败时抛出的异常

EmbeddingRequiredError

class neo4j_graphrag.exceptions.EmbeddingRequiredError[查看源码]

基类:Neo4jGraphRagError

当需要嵌入方法但未提供时抛出的异常。

InvalidRetrieverResultError

class neo4j_graphrag.exceptions.InvalidRetrieverResultError[查看源码]

基类:Neo4jGraphRagError

当检索器未能返回结果时抛出的异常。

Neo4jIndexError

class neo4j_graphrag.exceptions.Neo4jIndexError[查看源码]

基类:Neo4jGraphRagError

处理 Neo4j 索引失败时抛出的异常。

Neo4jInsertionError

class neo4j_graphrag.exceptions.Neo4jInsertionError[查看源码]

基类:Neo4jGraphRagError

向 Neo4j 数据库插入数据失败时抛出的异常。

Neo4jVersionError

class neo4j_graphrag.exceptions.Neo4jVersionError[查看源码]

基类:Neo4jGraphRagError

当 Neo4j 版本不符合最低要求时抛出的异常。

Text2CypherRetrievalError

class neo4j_graphrag.exceptions.Text2CypherRetrievalError[查看源码]

基类:Neo4jGraphRagError

当 Text-to-Cypher 检索失败时抛出的异常。

SchemaFetchError

class neo4j_graphrag.exceptions.SchemaFetchError[查看源码]

基类:Neo4jGraphRagError

无法获取 Neo4jSchema 时抛出的异常。

RagInitializationError

class neo4j_graphrag.exceptions.RagInitializationError(errors)[查看源码]

基类:Neo4jGraphRagError

参数:

errors (list[ErrorDetails])

PromptMissingInputError

class neo4j_graphrag.exceptions.PromptMissingInputError[查看源码]

基类:Neo4jGraphRagError

当提示词(prompt)缺少必需的输入时抛出的异常。

LLMGenerationError

class neo4j_graphrag.exceptions.LLMGenerationError[查看源码]

基类:Neo4jGraphRagError

当 LLM 生成答案失败时抛出的异常。

RateLimitError

class neo4j_graphrag.exceptions.RateLimitError[查看源码]

基类:RetryableError

超过 API 速率限制时抛出的异常。

SchemaValidationError

class neo4j_graphrag.exceptions.SchemaValidationError[查看源码]

基类:Neo4jGraphRagError

模式配置错误的自定义异常。

PdfLoaderError

class neo4j_graphrag.exceptions.PdfLoaderError[查看源码]

基类:Neo4jGraphRagError

PDF 加载器错误的自定义异常。

PromptMissingPlaceholderError

class neo4j_graphrag.exceptions.PromptMissingPlaceholderError[查看源码]

基类:Neo4jGraphRagError

当提示词(prompt)缺少预期的占位符时抛出的异常。

InvalidHybridSearchRankerError

class neo4j_graphrag.exceptions.InvalidHybridSearchRankerError[查看源码]

基类:Neo4jGraphRagError

当为混合搜索提供了无效的排名器(ranker)类型时抛出的异常。

SearchQueryParseError

class neo4j_graphrag.exceptions.SearchQueryParseError[查看源码]

基类:Neo4jGraphRagError

当文本搜索字符串中存在查询解析错误时抛出的异常。

PipelineDefinitionError

class neo4j_graphrag.experimental.pipeline.exceptions.PipelineDefinitionError[查看源码]

基类:Neo4jGraphRagError

当流水线图无效时抛出

PipelineMissingDependencyError

class neo4j_graphrag.experimental.pipeline.exceptions.PipelineMissingDependencyError[查看源码]

基类:Neo4jGraphRagError

当任务已调度但其依赖项尚未完成时抛出

PipelineStatusUpdateError

class neo4j_graphrag.experimental.pipeline.exceptions.PipelineStatusUpdateError[查看源码]

基类:Neo4jGraphRagError

尝试进行无效的状态更改时抛出(例如 DONE => DOING)

InvalidJSONError

class neo4j_graphrag.experimental.pipeline.exceptions.InvalidJSONError[查看源码]

基类:Neo4jGraphRagError

当 JSON 修复未能生成有效的 JSON 时抛出。

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