You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从已有Neo4j数据库创建LlamaIndex的KnowledgeGraphIndex对象?

从已有Neo4j数据库构建LlamaIndex KnowledgeGraphIndex及实现LLM驱动的相似性搜索

一、LlamaIndex v0.10.15是否支持直接从Neo4j创建KnowledgeGraphIndex

没有官方提供的from_graph_stores这类直接从已有Neo4j图存储创建KnowledgeGraphIndex的方法。KnowledgeGraphIndex的核心设计是从文本文档中提取三元组来构建图谱,而非直接导入已有的成熟图谱。

二、替代实现方案

方案1:自定义加载Neo4j三元组构建KnowledgeGraphIndex

通过从Neo4j导出所有三元组,将其转换为LlamaIndex可识别的Document格式,再构建KnowledgeGraphIndex:

from neo4j import GraphDatabase
from llama_index.core import Document
from llama_index.core.graph_stores import Neo4jGraphStore
from llama_index.core import StorageContext
from llama_index.core.indices.knowledge_graph import KnowledgeGraphIndex

# 1. 连接Neo4j并导出所有三元组
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "your_password"))

def export_neo4j_triplets():
    triplet_list = []
    with driver.session() as session:
        # 根据你的节点/关系属性调整Cypher语句,这里假设节点有name属性
        result = session.run("MATCH (s)-[r]->(o) RETURN s.name AS subject, type(r) AS relation, o.name AS object")
        for record in result:
            triplet_list.append(f"{record['subject']} {record['relation']} {record['object']}")
    driver.close()
    return triplet_list

# 2. 将三元组转换为Document对象
triplet_texts = export_neo4j_triplets()
documents = [Document(text="。".join(triplet_texts))]

# 3. 初始化Neo4j图存储并构建索引
graph_store = Neo4jGraphStore(
    username="neo4j",
    password="your_password",
    url="bolt://localhost:7687",
)
storage_context = StorageContext.from_defaults(graph_store=graph_store)

index = KnowledgeGraphIndex.from_documents(
    documents,
    storage_context=storage_context,
    max_triplets_per_chunk=100,  # 根据三元组数量调整
    include_embeddings=True,
)

# 4. 创建查询引擎执行相似性搜索
query_engine = index.as_query_engine(
    include_text=True,
    response_mode="tree_summarize",
    embedding_mode="hybrid",
    similarity_top_k=5,
)

# 示例查询
response = query_engine.query("找出所有与Alice存在关联的节点")
print(response)

方案2:使用Neo4jQueryEngine直接实现LLM驱动的自然语言查询(含相似性搜索)

如果不需要构建KnowledgeGraphIndex,可直接用Neo4jQueryEngine,它能将自然语言转为Cypher查询,同时支持基于节点嵌入的相似性搜索(需提前为Neo4j节点生成嵌入向量):

from llama_index.core.query_engine import Neo4jQueryEngine
from llama_index.llms.openai import OpenAI
from neo4j import GraphDatabase

# 1. 初始化LLM
llm = OpenAI(model="gpt-3.5-turbo")

# 2. 连接Neo4j
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "your_password"))

# 3. 创建查询引擎,开启相似性搜索
query_engine = Neo4jQueryEngine.from_driver(
    driver,
    llm=llm,
    verbose=True,
    similarity_top_k=5,  # 开启相似性检索,需节点提前存入embedding属性
)

# 4. 自然语言查询(含相似性匹配)
response = query_engine.query("找出与Alice兴趣相似的用户")
print(response)

注意:使用相似性搜索前,需要提前为Neo4j节点生成嵌入向量(比如用OpenAI Embeddings),并将向量存入节点的embedding属性中,LLM会自动生成包含向量相似性匹配逻辑的Cypher语句。

内容的提问来源于stack exchange,提问作者Kaihua Hou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:18:27