[modify] fix workflow execute logic
This commit is contained in:
@@ -69,7 +69,17 @@ class WorkflowExecutor:
|
|||||||
初始化的工作流状态
|
初始化的工作流状态
|
||||||
"""
|
"""
|
||||||
user_message = input_data.get("message") or ""
|
user_message = input_data.get("message") or ""
|
||||||
conversation_vars = input_data.get("conversation_vars") or {}
|
|
||||||
|
# 会话变量处理:从配置文件获取变量定义列表,转换为字典(name -> default value)
|
||||||
|
config_variables_list = self.workflow_config.get("variables") or []
|
||||||
|
conversation_vars = {}
|
||||||
|
for var_def in config_variables_list:
|
||||||
|
if isinstance(var_def, dict):
|
||||||
|
var_name = var_def.get("name")
|
||||||
|
var_default = var_def.get("default")
|
||||||
|
if var_name:
|
||||||
|
conversation_vars[var_name] = var_default
|
||||||
|
|
||||||
input_variables = input_data.get("variables") or {} # Start 节点的自定义变量
|
input_variables = input_data.get("variables") or {} # Start 节点的自定义变量
|
||||||
|
|
||||||
# 构建分层的变量结构
|
# 构建分层的变量结构
|
||||||
|
|||||||
@@ -26,7 +26,12 @@ class WorkflowState(TypedDict):
|
|||||||
messages: Annotated[list[AnyMessage], add]
|
messages: Annotated[list[AnyMessage], add]
|
||||||
|
|
||||||
# 输入变量(从配置的 variables 传入)
|
# 输入变量(从配置的 variables 传入)
|
||||||
variables: dict[str, Any]
|
# 使用深度合并函数,支持嵌套字典的更新(如 conv.xxx)
|
||||||
|
variables: Annotated[dict[str, Any], lambda x, y: {
|
||||||
|
**x,
|
||||||
|
**{k: {**x.get(k, {}), **v} if isinstance(v, dict) and isinstance(x.get(k), dict) else v
|
||||||
|
for k, v in y.items()}
|
||||||
|
}]
|
||||||
|
|
||||||
# 节点输出(存储每个节点的执行结果,用于变量引用)
|
# 节点输出(存储每个节点的执行结果,用于变量引用)
|
||||||
# 使用自定义合并函数,将新的节点输出合并到现有字典中
|
# 使用自定义合并函数,将新的节点输出合并到现有字典中
|
||||||
@@ -544,9 +549,15 @@ class BaseNode(ABC):
|
|||||||
# 使用变量池获取变量
|
# 使用变量池获取变量
|
||||||
pool = VariablePool(state)
|
pool = VariablePool(state)
|
||||||
|
|
||||||
|
# 构建完整的 variables 结构
|
||||||
|
variables = {
|
||||||
|
"sys": pool.get_all_system_vars(),
|
||||||
|
"conv": pool.get_all_conversation_vars()
|
||||||
|
}
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
template=template,
|
template=template,
|
||||||
variables=pool.get_all_conversation_vars(),
|
variables=variables,
|
||||||
node_outputs=pool.get_all_node_outputs(),
|
node_outputs=pool.get_all_node_outputs(),
|
||||||
system_vars=pool.get_all_system_vars()
|
system_vars=pool.get_all_system_vars()
|
||||||
)
|
)
|
||||||
@@ -575,9 +586,15 @@ class BaseNode(ABC):
|
|||||||
# 使用变量池获取变量
|
# 使用变量池获取变量
|
||||||
pool = VariablePool(state)
|
pool = VariablePool(state)
|
||||||
|
|
||||||
|
# 构建完整的 variables 结构(包含 sys 和 conv)
|
||||||
|
variables = {
|
||||||
|
"sys": pool.get_all_system_vars(),
|
||||||
|
"conv": pool.get_all_conversation_vars()
|
||||||
|
}
|
||||||
|
|
||||||
return evaluate_condition(
|
return evaluate_condition(
|
||||||
expression=expression,
|
expression=expression,
|
||||||
variables=pool.get_all_conversation_vars(),
|
variables=variables,
|
||||||
node_outputs=pool.get_all_node_outputs(),
|
node_outputs=pool.get_all_node_outputs(),
|
||||||
system_vars=pool.get_all_system_vars()
|
system_vars=pool.get_all_system_vars()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -66,19 +66,26 @@ class TemplateRenderer:
|
|||||||
'分析结果: 正面情绪'
|
'分析结果: 正面情绪'
|
||||||
"""
|
"""
|
||||||
# 构建命名空间上下文
|
# 构建命名空间上下文
|
||||||
|
# variables 的结构:{"sys": {...}, "conv": {...}}
|
||||||
|
sys_vars = variables.get("sys", {}) if isinstance(variables, dict) else {}
|
||||||
|
conv_vars = variables.get("conv", {}) if isinstance(variables, dict) else {}
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"var": variables, # 用户变量:{{var.user_input}}
|
"conv": conv_vars, # 会话变量:{{conv.user_name}}
|
||||||
"node": node_outputs, # 节点输出:{{node.node_1.output}}
|
"node": node_outputs, # 节点输出:{{node.node_1.output}}
|
||||||
"sys": system_vars or {}, # 系统变量:{{sys.execution_id}}
|
"sys": {**(system_vars or {}), **sys_vars}, # 系统变量:{{sys.execution_id}}(合并两个来源)
|
||||||
}
|
}
|
||||||
|
|
||||||
# 支持直接通过节点ID访问节点输出:{{llm_qa.output}}
|
# 支持直接通过节点ID访问节点输出:{{llm_qa.output}}
|
||||||
# 将所有节点输出添加到顶层上下文
|
# 将所有节点输出添加到顶层上下文
|
||||||
context.update(node_outputs)
|
if node_outputs:
|
||||||
|
context.update(node_outputs)
|
||||||
|
|
||||||
# 为了向后兼容,也支持直接访问用户变量
|
# 支持直接访问会话变量(不需要 conv. 前缀):{{user_name}}
|
||||||
context.update(variables)
|
if conv_vars:
|
||||||
context["nodes"] = node_outputs # 旧语法兼容
|
context.update(conv_vars)
|
||||||
|
|
||||||
|
context["nodes"] = node_outputs or {} # 旧语法兼容
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tmpl = self.env.from_string(template)
|
tmpl = self.env.from_string(template)
|
||||||
|
|||||||
Reference in New Issue
Block a user