diff --git a/apps/routers/variable.py b/apps/routers/variable.py index ea1a22e0ff579aa8ead43f8bd7efa1f65ced7aa5..2e04e8adfa533a9428381a092c6c0e945ac28de0 100644 --- a/apps/routers/variable.py +++ b/apps/routers/variable.py @@ -98,8 +98,8 @@ async def _get_predecessor_node_variables( updated_at=datetime.fromisoformat(var_data['updated_at'].replace('Z', '+00:00')) ) - # 创建变量对象,并附加缓存的节点信息 - variable = create_variable(metadata, var_data.get('value', '')) + # 创建变量对象,并附加缓存的节点信息(使用None避免类型验证失败) + variable = create_variable(metadata, var_data.get('value')) # 将节点信息附加到变量对象上(用于后续响应格式化) if hasattr(variable, '_cache_data'): @@ -995,8 +995,8 @@ async def _create_node_output_variables(node, user_sub: str) -> List: updated_at=datetime.now(UTC) ) - # 创建变量对象 - variable = create_variable(metadata, "") # 配置阶段的潜在变量,值为空 + # 创建变量对象(使用None作为默认值,避免类型验证失败) + variable = create_variable(metadata, None) # 配置阶段的潜在变量,值为None variables.append(variable) logger.info(f"为节点 {node_id} 创建了 {len(variables)} 个输出变量: {[v.name for v in variables]}") diff --git a/apps/scheduler/variable/base.py b/apps/scheduler/variable/base.py index 94beaaebc0f084c1a5dbec6696f7b233a5d66154..a038e8439d67b6a4d4f0c97b24c98ebbbc95334d 100644 --- a/apps/scheduler/variable/base.py +++ b/apps/scheduler/variable/base.py @@ -82,9 +82,11 @@ class BaseVariable(ABC): if self.scope == VariableScope.SYSTEM and not getattr(self, '_initializing', False): raise ValueError("系统级变量不能修改") - # 验证类型 - if not self._validate_type(new_value): - raise TypeError(f"变量 {self.name} 的值类型不匹配,期望: {self.var_type}") + # 对于None值,跳过类型验证(允许任意类型的变量设置为None) + if new_value is not None: + # 验证类型 + if not self._validate_type(new_value): + raise TypeError(f"变量 {self.name} 的值类型不匹配,期望: {self.var_type}") self._value = new_value self.metadata.updated_at = datetime.now(UTC) diff --git a/apps/services/predecessor_cache_service.py b/apps/services/predecessor_cache_service.py index b300e07560a22d10ac10e3ef86125f40f9026378..0e88c6bd3527529a05726f670644fc3e77281893 100644 --- a/apps/services/predecessor_cache_service.py +++ b/apps/services/predecessor_cache_service.py @@ -491,7 +491,7 @@ class PredecessorCacheService: 'name': f"{node_id}.{param_name}", 'var_type': var_type.value, 'scope': VariableScope.CONVERSATION.value, - 'value': "", # 配置阶段的潜在变量,值为空 + 'value': None, # 配置阶段的潜在变量,值为None 'description': description or f"来自节点 {node_id} 的输出参数 {param_name}", 'created_at': datetime.now(UTC).isoformat(), 'updated_at': datetime.now(UTC).isoformat(),