Skip to content

Commit 98f8ec7

Browse files
committed
fix: global variable reference failed
1 parent 6801f84 commit 98f8ec7

2 files changed

Lines changed: 37 additions & 30 deletions

File tree

‎apps/application/workflow/common.py‎

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
# coding=utf-8
22
"""
3-
@project: MaxKB
4-
@Author:虎虎虎
5-
@file: workflow.py
6-
@date:2026/6/29 10:58
7-
@desc:
3+
@project: MaxKB
4+
@Author:虎虎虎
5+
@file: workflow.py
6+
@date:2026/6/29 10:58
7+
@desc:
88
"""
9+
910
from enum import Enum
1011
from typing import List, Dict
1112

1213
from common.utils.common import group_by
1314

1415

1516
class Node:
16-
1717
def __init__(self, _id: str, _type: str, x: int, y: int, properties: dict, **kwargs):
1818
"""
1919
@@ -64,29 +64,29 @@ def init_fields(workflow):
6464
result = []
6565
for node in workflow.nodes:
6666
properties = node.properties
67-
node_name = properties.get('stepName')
67+
node_name = properties.get("stepName")
6868
node_id = node.id
69-
node_config = properties.get('config')
70-
result.append(NodeField(node_id, node_name, '异常信息', 'exception_message'))
69+
node_config = properties.get("config")
70+
result.append(NodeField(node_id, node_name, "异常信息", "exception_message"))
7171
if node_config is not None:
72-
fields = node_config.get('fields')
72+
fields = node_config.get("fields")
7373
if fields is not None:
7474
for field in fields:
75-
result.append(NodeField(node_id, node_name, field.get('label'), field.get('value')))
76-
global_fields = node_config.get('globalFields')
75+
result.append(NodeField(node_id, node_name, field.get("label"), field.get("value")))
76+
global_fields = node_config.get("globalFields")
7777
if global_fields is not None:
7878
for global_field in global_fields:
79-
result.append(NodeField('global', '全局变量', global_field.get('label'), global_field.get('value')))
80-
chat_fields = node_config.get('chatFields')
79+
result.append(NodeField("global", "全局变量", global_field.get("label"), global_field.get("value")))
80+
chat_fields = node_config.get("chatFields")
8181
if chat_fields is not None:
8282
for chat_field in chat_fields:
83-
result.append(NodeField('chat', 'chat', chat_field.get('label'), chat_field.get('value')))
83+
result.append(NodeField("chat", "chat", chat_field.get("label"), chat_field.get("value")))
8484
result.sort(key=lambda f: len(f.node_name + f.value), reverse=True)
8585
return result
8686

8787

8888
def get_node_parameters(node):
89-
return node.properties.get('node_data', {})
89+
return node.properties.get("node_data", {})
9090

9191

9292
class NodeField:
@@ -99,13 +99,18 @@ def __init__(self, node_id, node_name, label, value):
9999
def reset_variable(self, prompt: str):
100100
userVariable = self.node_name + "." + self.value
101101
systemVariable = f"context.get('{self.node_id}').get('{self.value}','')"
102-
return prompt.replace(userVariable, systemVariable)
102+
prompt = prompt.replace(userVariable, systemVariable)
103+
# 全局变量:前端用 global.xxx 引用,也要能解析到 context['global']
104+
if self.node_id == "global":
105+
prompt = prompt.replace(f"global.{self.value}", systemVariable)
106+
return prompt
103107

104108

105109
class Workflow:
106110
"""
107111
节点列表
108112
"""
113+
109114
nodes: List[Node]
110115
"""
111116
线列表
@@ -133,14 +138,15 @@ def __init__(self, nodes: List[Node], edges: List[Edge]):
133138
self.edges = edges
134139
self.node_map = {node.id: node for node in nodes}
135140

136-
self.up_node_map = {key: [EdgeNode(edge, self.node_map.get(edge.sourceNodeId)) for
137-
edge in edges] for
138-
key, edges in
139-
group_by(edges, key=lambda edge: edge.targetNodeId).items()}
141+
self.up_node_map = {
142+
key: [EdgeNode(edge, self.node_map.get(edge.sourceNodeId)) for edge in edges]
143+
for key, edges in group_by(edges, key=lambda edge: edge.targetNodeId).items()
144+
}
140145

141-
self.next_node_map = {key: [EdgeNode(edge, self.node_map.get(edge.targetNodeId)) for edge in edges] for
142-
key, edges in
143-
group_by(edges, key=lambda edge: edge.sourceNodeId).items()}
146+
self.next_node_map = {
147+
key: [EdgeNode(edge, self.node_map.get(edge.targetNodeId)) for edge in edges]
148+
for key, edges in group_by(edges, key=lambda edge: edge.sourceNodeId).items()
149+
}
144150
self.node_field_list = init_fields(self)
145151

146152
def get_node(self, node_id):
@@ -199,8 +205,8 @@ class WorkflowType(Enum):
199205

200206

201207
def new_instance(flow_obj: Dict, workflow_type: WorkflowType = WorkflowType.APPLICATION):
202-
nodes = flow_obj.get('nodes')
203-
edges = flow_obj.get('edges')
204-
nodes = [Node(node.get('id'), node.get('type'), **node) for node in nodes]
205-
edges = [Edge(edge.get('id'), edge.get('type'), **edge) for edge in edges]
208+
nodes = flow_obj.get("nodes")
209+
edges = flow_obj.get("edges")
210+
nodes = [Node(node.get("id"), node.get("type"), **node) for node in nodes]
211+
edges = [Edge(edge.get("id"), edge.get("type"), **edge) for edge in edges]
206212
return Workflow(nodes, edges)

‎apps/application/workflow/nodes/start_node/start_node.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,16 @@ def execute(self):
9393
for key, value in node_variable.items():
9494
self.write_context(key, value)
9595

96+
# 全局变量统一放进 context['global'],与 reset_variable / get_reference_field 的引用约定一致
9697
for key, value in workflow_variable.items():
97-
self.workflow_manage.context[key] = value
98+
self.workflow_manage.write_context("global", key, value)
9899

99100
config = self.node.properties.get("config", {})
100101
if config:
101102
for field in config.get("globalFields", []):
102103
key = field.get("value")
103104
if key:
104-
self.workflow_manage.context[key] = workflow_variable.get(key, "")
105+
self.workflow_manage.write_context("global", key, workflow_variable.get(key, ""))
105106

106107
def get_details(self, index: int = 0, position: dict = None, old_details: dict = None, **kwargs):
107108
details = super().get_details(index, position, old_details, **kwargs)

0 commit comments

Comments
 (0)