Skip to content

Commit 28ed136

Browse files
committed
fix: 修复【问答页面】- 当应用关联的知识库中含有禁用状态的文档时,问答时点击换个答案不会换一批命中分段 #759 (#765)
(cherry picked from commit be49147)
1 parent 16f4905 commit 28ed136

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

apps/application/flow/step_node/search_dataset_node/i_search_dataset_node.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from rest_framework import serializers
1414

1515
from application.flow.i_step_node import INode, NodeResult
16+
from common.util.common import flat_map
1617
from common.util.field_message import ErrMessage
1718

1819

@@ -43,6 +44,13 @@ def is_valid(self, *, raise_exception=False):
4344
super().is_valid(raise_exception=True)
4445

4546

47+
def get_paragraph_list(chat_record, node_id):
48+
return flat_map([chat_record.details[key].get('paragraph_list', []) for key in chat_record.details if
49+
(chat_record.details[
50+
key].get('type', '') == 'search-dataset-node') and chat_record.details[key].get(
51+
'paragraph_list', []) is not None and key == node_id])
52+
53+
4654
class ISearchDatasetStepNode(INode):
4755
type = 'search-dataset-node'
4856

@@ -53,7 +61,13 @@ def _run(self):
5361
question = self.workflow_manage.get_reference_field(
5462
self.node_params_serializer.data.get('question_reference_address')[0],
5563
self.node_params_serializer.data.get('question_reference_address')[1:])
56-
return self.execute(**self.node_params_serializer.data, question=str(question), exclude_paragraph_id_list=[])
64+
history_chat_record = self.flow_params_serializer.data.get('history_chat_record', [])
65+
paragraph_id_list = [p.get('id') for p in flat_map(
66+
[get_paragraph_list(chat_record, self.node.id) for chat_record in history_chat_record if
67+
chat_record.problem_text == question])]
68+
exclude_paragraph_id_list = list(set(paragraph_id_list))
69+
return self.execute(**self.node_params_serializer.data, question=str(question),
70+
exclude_paragraph_id_list=exclude_paragraph_id_list)
5771

5872
def execute(self, dataset_id_list, dataset_setting, question,
5973
exclude_paragraph_id_list=None,

apps/application/serializers/application_serializers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,8 @@ def one(self, with_valid=True):
576576
'dataset_id_list': dataset_id_list}
577577

578578
def get_search_node(self, work_flow):
579+
if work_flow is None:
580+
return []
579581
return [node for node in work_flow.get('nodes', []) if node.get('type', '') == 'search-dataset-node']
580582

581583
def update_search_node(self, work_flow, user_dataset_id_list: List):

apps/embedding/vector/pg_vector.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ def query(self, query_text: str, query_embedding: List[float], dataset_id_list:
105105
return []
106106
query_set = QuerySet(Embedding).filter(dataset_id__in=dataset_id_list, is_active=is_active)
107107
if exclude_document_id_list is not None and len(exclude_document_id_list) > 0:
108-
exclude_dict.__setitem__('document_id__in', exclude_document_id_list)
108+
query_set = query_set.exclude(document_id__in=exclude_document_id_list)
109109
if exclude_paragraph_list is not None and len(exclude_paragraph_list) > 0:
110-
exclude_dict.__setitem__('paragraph_id__in', exclude_paragraph_list)
110+
query_set = query_set.exclude(paragraph_id__in=exclude_paragraph_list)
111111
query_set = query_set.exclude(**exclude_dict)
112112
for search_handle in search_handle_list:
113113
if search_handle.support(search_mode):

0 commit comments

Comments
 (0)