From d25cbb1b1674b3a2630c8eff0c9da66a1c5e0450 Mon Sep 17 00:00:00 2001 From: Ethan-Zhang Date: Sat, 2 Aug 2025 06:15:01 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20=E8=A7=A3=E5=86=B3=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=8E=E7=B1=BB=E5=9E=8B=E4=B8=8D?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E5=AF=BC=E8=87=B4=E6=97=A0=E6=B3=95=E6=9F=A5?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/routers/variable.py | 8 ++++---- apps/scheduler/variable/base.py | 8 +++++--- apps/services/predecessor_cache_service.py | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/routers/variable.py b/apps/routers/variable.py index ea1a22e0..2e04e8ad 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 94beaaeb..a038e843 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 b300e075..0e88c6bd 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(), -- Gitee