问题验证
- 我已经在文档和discord上寻找答案。
问题
我尝试在发送给查询引擎的查询中使用retriever_mode="embedding"。当我第一次为知识图谱创建时,这可以工作。但是当我第二次加载图谱(即知识图谱已经被创建)时,对查询的响应是空的。没有检索到三元组。
以下是我如何创建数据库并进行查询的方法:
import kuzu
db = kuzu.Database("llamaindex_crypto_10")
from llama_index.graph_stores.kuzu import KuzuGraphStore
graph_store = KuzuGraphStore(db)
storage_context = StorageContext.from_defaults(graph_store=graph_store)
index = KnowledgeGraphIndex(
[],
storage_context=storage_context,
include_embeddings=True,
max_triplets_per_chunk=25,
llm=llm_openai
)
query_engine = index.as_query_engine(
response_mode="tree_summarize",
verbose=False,
llm=llm_openai,
include_text=False,
max_keywords_per_query=20,
retriever_mode="embedding",
use_global_node_triplets=True,
max_knowledge_sequence=15,
num_chunks_per_query=10,
similarity_top_k=10,
)
我正在使用以下代码单独插入知识图谱三元组:index.upsert_triplet_and_node(tuple1, node1, include_embeddings=True)
我尝试了Kuzu、neo4j和nebula,它们都有这个问题。我是否需要在某个地方传递向量存储索引?或者是否有其他缺失的参数?
3条答案
按热度按时间7xllpg7q1#
嘿@shalinanvai!我在这里帮助你解决任何bug、问题或贡献。让我们一起解决这个问题!
你遇到的问题是由于
_retrieve_embedding
方法在KnowledgeGraphIndex
类中没有实现。这个方法对于基于嵌入的检索至关重要,目前引发了一个NotImplementedError
,表示功能尚未可用。以下是相关代码的部分内容,显示该方法尚未实现:
要解决此问题,你需要实现
_retrieve_embedding
方法来处理基于嵌入的检索。在实现此方法之前,当加载已经创建的知识图谱1(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/indices/knowledge_graph/retrievers.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/indices/knowledge_graph/retrievers.py)时,retriever_mode="embedding"
将无法正常工作。zxlwwiss2#
看起来在检索器模式为"hybrid"时,基于嵌入的检索正确实现了。这是准确的吗?
dtcbnfnu3#
是的,
retriever_mode="hybrid"
模式已正确实现用于KnowledgeGraphIndex
类的嵌入检索。来自代码的支持证据:
KGTableRetriever
类有一个处理不同检索模式的方法,包括HYBRID
。retriever_mode
设置为HYBRID
时,该方法将关键字检索和嵌入检索结合在一起。get_top_k_embeddings
函数进行,该函数检索最相似的前k个嵌入。以下是相关的代码片段:
此外,
KGTableRetriever
类设计为支持不同的检索模式,包括HYBRID
,如其初始化参数和KGRetrieverMode
枚举中指定的那样。这确保了混合检索模式正确实现且功能正常。