第一次提交

This commit is contained in:
rjb
2026-01-19 00:09:36 +08:00
parent de4b5059e9
commit 6674060f2f
191 changed files with 40940 additions and 0 deletions

218
条件节点功能说明.md Normal file
View File

@@ -0,0 +1,218 @@
# 条件节点功能说明
## ✅ 已完成
已实现强大的条件节点表达式解析功能,支持复杂的条件判断。
## 功能特性
### 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年