diff --git a/KAG_VERSION b/KAG_VERSION index bcaecb89..f9c29c3b 100644 --- a/KAG_VERSION +++ b/KAG_VERSION @@ -1 +1 @@ -0.7.0b2 +0.7.0b2 \ No newline at end of file diff --git a/kag/common/utils.py b/kag/common/utils.py index 7608e21d..480305c5 100644 --- a/kag/common/utils.py +++ b/kag/common/utils.py @@ -351,6 +351,7 @@ def get_recall_node_label(label_set): for l in label_set: if l != "Entity": return l + return "Entity" def node_2_doc(node: dict): diff --git a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kag_merger.py b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kag_merger.py index f03562f5..a4fb397b 100644 --- a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kag_merger.py +++ b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kag_merger.py @@ -76,9 +76,7 @@ class KagMerger(FlowComponent): top_k, llm_module: LLMClient = None, summary_prompt: PromptABC = None, - vector_chunk_retriever: VectorChunkRetriever = None, vectorize_model: VectorizeModelABC = None, - search_api: SearchApiABC = None, **kwargs, ): super().__init__(**kwargs) @@ -96,22 +94,6 @@ class KagMerger(FlowComponent): ) self.text_similarity = TextSimilarity(vectorize_model) - self.search_api = search_api or SearchApiABC.from_config( - {"type": "openspg_search_api"} - ) - self.vector_chunk_retriever = vector_chunk_retriever or VectorChunkRetriever( - vectorize_model=self.vectorize_model, search_api=self.search_api - ) - - def recall_query(self, query): - sim_scores_start_time = time.time() - """Process a single query for similarity scores in parallel.""" - query_sim_scores = self.vector_chunk_retriever.invoke(query, self.top_k * 20) - logger.info( - f"`{query}` Similarity scores calculation completed in {time.time() - sim_scores_start_time:.2f} seconds." - ) - return query_sim_scores - def invoke( self, cur_task: FlowComponentTask, @@ -157,7 +139,11 @@ class KagMerger(FlowComponent): "FINISH", component_name=self.name, chunk_num=len(limited_merged_chunks), - desc="kag_merger_digest", + desc=( + "kag_merger_digest" + if len(limited_merged_chunks) > 0 + else "kag_merger_digest_failed" + ), ) # summary formatted_docs = [] diff --git a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_cs/default_kg_cs_retriever.py b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_cs/default_kg_cs_retriever.py index 4b7af507..03ba0edf 100644 --- a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_cs/default_kg_cs_retriever.py +++ b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_cs/default_kg_cs_retriever.py @@ -29,7 +29,7 @@ class KgConstrainRetrieverWithOpenSPG(KagLogicalFormComponent): **kwargs ): super().__init__(**kwargs) - self.name = "kg_cs" + self.name = kwargs.get("name", "kg_cs") self.llm = llm or LLMClient.from_config(get_default_chat_llm_config()) self.path_select = path_select or PathSelect.from_config( {"type": "exact_one_hop_select"} diff --git a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_fr/default_kg_fr_retriever.py b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_fr/default_kg_fr_retriever.py index 1ca62529..d6c5af55 100644 --- a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_fr/default_kg_fr_retriever.py +++ b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/kg_fr/default_kg_fr_retriever.py @@ -2,7 +2,7 @@ import logging from typing import List, Optional from kag.common.config import get_default_chat_llm_config -from kag.interface import LLMClient, Task +from kag.interface import LLMClient, Task, ToolABC from kag.interface.solver.base_model import LogicNode from kag.interface.solver.model.one_hop_graph import RetrievedData from kag.interface.solver.reporter_abc import ReporterABC @@ -37,12 +37,12 @@ class KgFreeRetrieverWithOpenSPG(KagLogicalFormComponent): path_select: PathSelect = None, entity_linking=None, llm: LLMClient = None, - ppr_chunk_retriever_tool: PprChunkRetriever = None, + ppr_chunk_retriever_tool: ToolABC = None, top_k=10, **kwargs, ): super().__init__(**kwargs) - self.name = "kg_fr" + self.name = kwargs.get("name", "kg_fr") self.llm = llm or LLMClient.from_config(get_default_chat_llm_config()) self.path_select = path_select or PathSelect.from_config( {"type": "fuzzy_one_hop_select"} @@ -122,7 +122,7 @@ class KgFreeRetrieverWithOpenSPG(KagLogicalFormComponent): ) logger.info(f"`{query}` Retrieved chunks num: {len(chunks)}") - cur_task.logical_node.get_fl_node_result().spo = match_spo + cur_task.logical_node.get_fl_node_result().spo = match_spo + selected_rel cur_task.logical_node.get_fl_node_result().chunks = chunks cur_task.logical_node.get_fl_node_result().sub_question = ppr_sub_query if reporter: diff --git a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/rc/default_rc_retriever.py b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/rc/default_rc_retriever.py index 3f1dd9df..8594c79f 100644 --- a/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/rc/default_rc_retriever.py +++ b/kag/solver/executor/retriever/local_knowledge_base/kag_retriever/kag_component/rc/default_rc_retriever.py @@ -45,7 +45,7 @@ class RCRetrieverOnOpenSPG(KagLogicalFormComponent): **kwargs, ): super().__init__(**kwargs) - self.name = "kg_rc" + self.name = kwargs.get("name", "kg_rc") self.top_k = top_k self.vectorize_model = vectorize_model or VectorizeModelABC.from_config( KAG_CONFIG.all_config["vectorize_model"] diff --git a/kag/solver/reporter/open_spg_reporter.py b/kag/solver/reporter/open_spg_reporter.py index 534de8fc..47d6c420 100644 --- a/kag/solver/reporter/open_spg_reporter.py +++ b/kag/solver/reporter/open_spg_reporter.py @@ -143,6 +143,10 @@ class OpenSPGReporter(ReporterABC): self.report_sub_segment = {} self.thinking_enabled = kwargs.get("thinking_enabled", True) self.word_mapping = { + "kag_merger_digest_failed": { + "zh": "未检索到相关信息。", + "en": "No relevant information was found.", + }, "kag_merger_digest": { "zh": "排序文档后,输出{chunk_num}篇文档, 检索信息已足够回答问题。", "en": "{chunk_num} documents were output, sufficient information retrieved to answer the question.", diff --git a/kag/tools/algorithm_tool/chunk_retriever/ppr_chunk_retriever.py b/kag/tools/algorithm_tool/chunk_retriever/ppr_chunk_retriever.py index 53bd154e..35bb72bf 100644 --- a/kag/tools/algorithm_tool/chunk_retriever/ppr_chunk_retriever.py +++ b/kag/tools/algorithm_tool/chunk_retriever/ppr_chunk_retriever.py @@ -369,7 +369,7 @@ class PprChunkRetriever(ToolABC): ) ) return matched_docs, self._convert_relation_datas( - chunk_docs=matched_docs, matched_entities=matched_entities[:top_k] + chunk_docs=matched_docs[:top_k], matched_entities=matched_entities ) def _convert_relation_datas(self, chunk_docs, matched_entities):