diff --git a/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py index 59dba2ff953..ee92b88a52c 100644 --- a/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py +++ b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py @@ -23,9 +23,14 @@ def merge_reranker_list(reranker_list, result=None): merge_reranker_list(document, result) elif isinstance(document, dict): content = document.get('title', '') + document.get('content', '') - result.append(str(document) if len(content) == 0 else content) + title = document.get("title") + dataset_name = document.get("dataset_name") + document_name = document.get('document_name') + result.append( + Document(page_content=str(document) if len(content) == 0 else content, + metadata={'title': title, 'dataset_name': dataset_name, 'document_name': document_name})) else: - result.append(str(document)) + result.append(Document(page_content=str(document), metadata={})) return result @@ -43,6 +48,21 @@ def filter_result(document_list: List[Document], max_paragraph_char_number, top_ return result +def reset_result_list(result_list: List[Document], document_list: List[Document]): + r = [] + document_list = document_list.copy() + for result in result_list: + filter_result_list = [document for document in document_list if document.page_content == result.page_content] + if len(filter_result_list) > 0: + item = filter_result_list[0] + document_list.remove(item) + r.append(Document(page_content=item.page_content, + metadata={**item.metadata, 'relevance_score': result.metadata.get('relevance_score')})) + else: + r.append(result) + return r + + class BaseRerankerNode(IRerankerNode): def save_context(self, details, workflow_manage): self.context['document_list'] = details.get('document_list', []) @@ -55,16 +75,18 @@ def execute(self, question, reranker_setting, reranker_list, reranker_model_id, **kwargs) -> NodeResult: documents = merge_reranker_list(reranker_list) top_n = reranker_setting.get('top_n', 3) - self.context['document_list'] = documents + self.context['document_list'] = [{'page_content': document.page_content, 'metadata': document.metadata} for + document in documents] self.context['question'] = question reranker_model = get_model_instance_by_model_user_id(reranker_model_id, self.flow_params_serializer.data.get('user_id'), top_n=top_n) result = reranker_model.compress_documents( - [Document(page_content=document) for document in documents if document is not None and len(document) > 0], + documents, question) similarity = reranker_setting.get('similarity', 0.6) max_paragraph_char_number = reranker_setting.get('max_paragraph_char_number', 5000) + result = reset_result_list(result, documents) r = filter_result(result, max_paragraph_char_number, top_n, similarity) return NodeResult({'result_list': r, 'result': ''.join([item.get('page_content') for item in r])}, {}) diff --git a/ui/src/components/ai-chat/ExecutionDetailDialog.vue b/ui/src/components/ai-chat/ExecutionDetailDialog.vue index b4802660f80..52c20844193 100644 --- a/ui/src/components/ai-chat/ExecutionDetailDialog.vue +++ b/ui/src/components/ai-chat/ExecutionDetailDialog.vue @@ -147,7 +147,11 @@ )" :key="paragraphIndex" > - + - @@ -423,17 +427,11 @@ v-for="(paragraph, paragraphIndex) in item.document_list" :key="paragraphIndex" > - - - - - - - + - @@ -449,27 +447,11 @@ v-for="(paragraph, paragraphIndex) in item.result_list" :key="paragraphIndex" > - - - {{ paragraph.metadata.relevance_score?.toFixed(3) }} - - - - - - - - - + - diff --git a/ui/src/components/ai-chat/ParagraphSourceDialog.vue b/ui/src/components/ai-chat/ParagraphSourceDialog.vue index ac31dc39fbd..f680c709dee 100644 --- a/ui/src/components/ai-chat/ParagraphSourceDialog.vue +++ b/ui/src/components/ai-chat/ParagraphSourceDialog.vue @@ -22,7 +22,7 @@ - + - @@ -79,7 +79,6 @@ defineExpose({ open }) @media only screen and (max-width: 768px) { .paragraph-source { width: 90% !important; - } } diff --git a/ui/src/components/ai-chat/component/ParagraphCard.vue b/ui/src/components/ai-chat/component/ParagraphCard.vue index d99ac6f2dc8..de8010debf2 100644 --- a/ui/src/components/ai-chat/component/ParagraphCard.vue +++ b/ui/src/components/ai-chat/component/ParagraphCard.vue @@ -12,7 +12,7 @@ {{ data.similarity?.toFixed(3) }} - + @@ -62,6 +62,10 @@ const props = defineProps({ type: Object, default: () => {} }, + content: { + type: String, + default: '' + }, index: { type: Number, default: 0 diff --git a/ui/src/components/card-box/index.vue b/ui/src/components/card-box/index.vue index 8fc81feb449..41c8816bf67 100644 --- a/ui/src/components/card-box/index.vue +++ b/ui/src/components/card-box/index.vue @@ -2,13 +2,13 @@ - + - + {{ title }} diff --git a/ui/src/styles/app.scss b/ui/src/styles/app.scss index 50d43fb2da0..90bab9c1124 100644 --- a/ui/src/styles/app.scss +++ b/ui/src/styles/app.scss @@ -495,7 +495,7 @@ h5 { } .avatar-light { - background: var(--el-color-primary-light-4); + background: var(--el-color-primary-light-3); } .avatar-purple {