# 条件节点功能说明

## ✅ 已完成

已实现强大的条件节点表达式解析功能，支持复杂的条件判断。

## 功能特性

### 1. 条件表达式解析器 (`backend/app/services/condition_parser.py`)

- 支持多种比较运算符
- 支持逻辑运算符（and, or, not）
- 支持括号分组
- 支持嵌套路径访问
- 安全的表达式评估

### 2. 支持的运算符

#### 比较运算符
- `==`: 等于
- `!=`: 不等于
- `>`: 大于
- `>=`: 大于等于
- `<`: 小于
- `<=`: 小于等于
- `in`: 包含
- `not in`: 不包含
- `contains`: 字符串包含
- `not contains`: 字符串不包含

#### 逻辑运算符
- `and`: 逻辑与
- `or`: 逻辑或
- `not`: 逻辑非

### 3. 工作流引擎集成

- 条件节点根据表达式结果选择分支
- 动态过滤执行路径
- 只执行符合条件的分支节点

## 使用方法

### 1. 在工作流中添加条件节点

1. 打开工作流设计器
2. 从节点工具箱拖拽"条件"节点到画布
3. 配置条件表达式

### 2. 配置条件表达式

在节点配置面板中，输入条件表达式：

#### 简单条件
```
{value} > 10
{status} == 'active'
{count} >= 0
```

#### 逻辑组合
```
{value} > 10 and {value} < 20
{status} == 'active' or {status} == 'pending'
```

#### 复杂条件（括号分组）
```
({value} > 10 and {value} < 20) and {status} == 'active'
({status} == 'a' or {status} == 'b') and {count} > 0
```

### 3. 连接分支

条件节点有两个输出：
- **True分支**（绿色）：条件为真时执行
- **False分支**（红色）：条件为假时执行

连接方式：
1. 从条件节点的底部连接点拖出
2. 选择True或False分支
3. 连接到目标节点

## 表达式语法

### 变量引用

使用 `{key}` 引用输入数据中的字段：

```
{value} > 10
{user.name} == 'admin'
{items[0].price} > 100
```

### 值类型

支持多种值类型：
- **数字**: `10`, `3.14`
- **字符串**: `'active'`, `"pending"`
- **布尔值**: `true`, `false`
- **None**: `null`, `None`

### 嵌套路径

支持访问嵌套数据：
- `{user.name}`: 访问 `user.name`
- `{items[0]}`: 访问数组第一个元素
- `{items[0].price}`: 访问嵌套对象

## 示例

### 示例1: 数值范围判断

```
条件表达式: {value} > 10 and {value} < 20

输入: {"value": 15}
结果: True → 走True分支

输入: {"value": 5}
结果: False → 走False分支
```

### 示例2: 状态判断

```
条件表达式: {status} == 'active' or {status} == 'pending'

输入: {"status": "active"}
结果: True → 走True分支

输入: {"status": "inactive"}
结果: False → 走False分支
```

### 示例3: 复杂条件

```
条件表达式: ({value} > 10 and {value} < 20) and {status} == 'active'

输入: {"value": 15, "status": "active"}
结果: True → 走True分支

输入: {"value": 15, "status": "inactive"}
结果: False → 走False分支
```

### 示例4: 字符串包含

```
条件表达式: {message} contains 'error'

输入: {"message": "发生错误"}
结果: True → 走True分支

输入: {"message": "成功"}
结果: False → 走False分支
```

## 工作流示例

### 示例工作流：条件分支处理

```
开始 → LLM节点(分析) → 条件节点(判断) → [True] → 输出节点1
                                      → [False] → 输出节点2
```

**配置**:
1. LLM节点: 分析输入数据，返回结果
2. 条件节点: `{result} contains 'error'`
3. True分支: 处理错误情况
4. False分支: 处理正常情况

## 测试结果

### 测试覆盖

- ✅ 简单条件表达式 (8/8通过)
- ✅ 逻辑组合条件 (6/6通过)
- ✅ 复杂条件表达式 (4/4通过)
- ✅ 工作流中的条件节点 (通过)

### 测试用例

1. **数值比较**: `{value} > 10`, `{value} == 10`
2. **字符串比较**: `{status} == 'active'`
3. **逻辑组合**: `{value} > 10 and {value} < 20`
4. **或运算**: `{status} == 'active' or {status} == 'pending'`
5. **括号分组**: `({value} > 10 and {value} < 20) and {status} == 'active'`

## 注意事项

1. **变量名**: 使用 `{key}` 格式，key必须存在于输入数据中
2. **字符串值**: 字符串值需要用引号包裹：`'active'` 或 `"active"`
3. **运算符优先级**: `not` > `and` > `or`，可以使用括号改变优先级
4. **分支选择**: 条件节点会根据表达式结果自动选择True或False分支
5. **错误处理**: 如果表达式评估失败，默认返回False

## 安全特性

- 使用安全的表达式评估（限制可用的内置函数）
- 不支持危险的Python操作
- 只允许访问输入数据中的字段
- 自动处理类型转换

## 后续计划

- [ ] 支持更多运算符（如正则匹配）
- [ ] 支持函数调用（如 `len({items}) > 0`）
- [ ] 支持数组操作（如 `{items}.length > 0`）
- [ ] 可视化条件表达式编辑器

---

**状态**: ✅ 已完成
**时间**: 2024年
