Skip to content

Commit 82b566d

Browse files
authored
fix: Having the same suffix for function node names can result in incorrect value retrieval (#2513)
1 parent 8b9998a commit 82b566d

File tree

1 file changed

+34
-17
lines changed

1 file changed

+34
-17
lines changed

apps/application/flow/workflow_manage.py

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,36 @@ def __init__(self, flow: Flow, params, work_flow_post_handler: WorkFlowPostHandl
269269
self.child_node = child_node
270270
self.future_list = []
271271
self.lock = threading.Lock()
272+
self.field_list = []
273+
self.global_field_list = []
274+
self.init_fields()
272275
if start_node_id is not None:
273276
self.load_node(chat_record, start_node_id, start_node_data)
274277
else:
275278
self.node_context = []
276279

280+
def init_fields(self):
281+
field_list = []
282+
global_field_list = []
283+
for node in self.flow.nodes:
284+
properties = node.properties
285+
node_name = properties.get('stepName')
286+
node_id = node.id
287+
node_config = properties.get('config')
288+
if node_config is not None:
289+
fields = node_config.get('fields')
290+
if fields is not None:
291+
for field in fields:
292+
field_list.append({**field, 'node_id': node_id, 'node_name': node_name})
293+
global_fields = node_config.get('globalFields')
294+
if global_fields is not None:
295+
for global_field in global_fields:
296+
global_field_list.append({**global_field, 'node_id': node_id, 'node_name': node_name})
297+
field_list.sort(key=lambda f: len(f.get('node_name')), reverse=True)
298+
global_field_list.sort(key=lambda f: len(f.get('node_name')), reverse=True)
299+
self.field_list = field_list
300+
self.global_field_list = global_field_list
301+
277302
def append_answer(self, content):
278303
self.answer += content
279304
self.answer_list[-1] += content
@@ -739,23 +764,15 @@ def get_workflow_content(self):
739764

740765
def reset_prompt(self, prompt: str):
741766
placeholder = "{}"
742-
for node in self.flow.nodes:
743-
properties = node.properties
744-
node_config = properties.get('config')
745-
if node_config is not None:
746-
fields = node_config.get('fields')
747-
if fields is not None:
748-
for field in fields:
749-
globeLabel = f"{properties.get('stepName')}.{field.get('value')}"
750-
globeValue = f"context.get('{node.id}',{placeholder}).get('{field.get('value', '')}','')"
751-
prompt = prompt.replace(globeLabel, globeValue)
752-
global_fields = node_config.get('globalFields')
753-
if global_fields is not None:
754-
for field in global_fields:
755-
globeLabel = f"全局变量.{field.get('value')}"
756-
globeLabelNew = f"global.{field.get('value')}"
757-
globeValue = f"context.get('global').get('{field.get('value', '')}','')"
758-
prompt = prompt.replace(globeLabel, globeValue).replace(globeLabelNew, globeValue)
767+
for field in self.field_list:
768+
globeLabel = f"{field.get('node_name')}.{field.get('value')}"
769+
globeValue = f"context.get('{field.get('node_id')}',{placeholder}).get('{field.get('value', '')}','')"
770+
prompt = prompt.replace(globeLabel, globeValue)
771+
for field in self.global_field_list:
772+
globeLabel = f"全局变量.{field.get('value')}"
773+
globeLabelNew = f"global.{field.get('value')}"
774+
globeValue = f"context.get('global').get('{field.get('value', '')}','')"
775+
prompt = prompt.replace(globeLabel, globeValue).replace(globeLabelNew, globeValue)
759776
return prompt
760777

761778
def generate_prompt(self, prompt: str):

0 commit comments

Comments
 (0)