如何从已有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
相关产品推荐
相关产品推荐

