fix(lightrag): 修复只有实体没有关系的chunk处理逻辑

- 只有实体没有关系时,继续处理,而不是直接return
- 当只有实体而没有关系的图片在高阶查询关系时会返回空,这里优化返回,当没有关系时降级为local查询
This commit is contained in:
Magic_yuan
2024-12-10 14:13:11 +08:00
parent 11d8440393
commit 58c0f94346

View File

@@ -412,15 +412,17 @@ async def extract_entities(
): ):
all_relationships_data.append(await result) all_relationships_data.append(await result)
if not len(all_entities_data): if not len(all_entities_data) and not len(all_relationships_data):
logger.warning("Didn't extract any entities, maybe your LLM is not working")
return None
if not len(all_relationships_data):
logger.warning( logger.warning(
"Didn't extract any relationships, maybe your LLM is not working" "Didn't extract any entities or relationships, maybe your LLM is not working"
) )
return None return None
if not len(all_entities_data):
logger.warning("Didn't extract any entities")
if not len(all_relationships_data):
logger.warning("Didn't extract any relationships")
if entity_vdb is not None: if entity_vdb is not None:
data_for_vdb = { data_for_vdb = {
compute_mdhash_id(dp["entity_name"], prefix="ent-"): { compute_mdhash_id(dp["entity_name"], prefix="ent-"): {
@@ -630,6 +632,13 @@ async def _build_query_context(
text_chunks_db, text_chunks_db,
query_param, query_param,
) )
if (
hl_entities_context == ""
and hl_relations_context == ""
and hl_text_units_context == ""
):
logger.warn("No high level context found. Switching to local mode.")
query_param.mode = "local"
if query_param.mode == "hybrid": if query_param.mode == "hybrid":
entities_context, relations_context, text_units_context = combine_contexts( entities_context, relations_context, text_units_context = combine_contexts(
[hl_entities_context, ll_entities_context], [hl_entities_context, ll_entities_context],
@@ -865,7 +874,7 @@ async def _get_edge_data(
results = await relationships_vdb.query(keywords, top_k=query_param.top_k) results = await relationships_vdb.query(keywords, top_k=query_param.top_k)
if not len(results): if not len(results):
return None return "", "", ""
edge_datas = await asyncio.gather( edge_datas = await asyncio.gather(
*[knowledge_graph_inst.get_edge(r["src_id"], r["tgt_id"]) for r in results] *[knowledge_graph_inst.get_edge(r["src_id"], r["tgt_id"]) for r in results]