4.8 KiB
4.8 KiB
条件节点功能说明
✅ 已完成
已实现强大的条件节点表达式解析功能,支持复杂的条件判断。
功能特性
1. 条件表达式解析器 (backend/app/services/condition_parser.py)
- 支持多种比较运算符
- 支持逻辑运算符(and, or, not)
- 支持括号分组
- 支持嵌套路径访问
- 安全的表达式评估
2. 支持的运算符
比较运算符
==: 等于!=: 不等于>: 大于>=: 大于等于<: 小于<=: 小于等于in: 包含not in: 不包含contains: 字符串包含not contains: 字符串不包含
逻辑运算符
and: 逻辑与or: 逻辑或not: 逻辑非
3. 工作流引擎集成
- 条件节点根据表达式结果选择分支
- 动态过滤执行路径
- 只执行符合条件的分支节点
使用方法
1. 在工作流中添加条件节点
- 打开工作流设计器
- 从节点工具箱拖拽"条件"节点到画布
- 配置条件表达式
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分支(红色):条件为假时执行
连接方式:
- 从条件节点的底部连接点拖出
- 选择True或False分支
- 连接到目标节点
表达式语法
变量引用
使用 {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
配置:
- LLM节点: 分析输入数据,返回结果
- 条件节点:
{result} contains 'error' - True分支: 处理错误情况
- False分支: 处理正常情况
测试结果
测试覆盖
- ✅ 简单条件表达式 (8/8通过)
- ✅ 逻辑组合条件 (6/6通过)
- ✅ 复杂条件表达式 (4/4通过)
- ✅ 工作流中的条件节点 (通过)
测试用例
- 数值比较:
{value} > 10,{value} == 10 - 字符串比较:
{status} == 'active' - 逻辑组合:
{value} > 10 and {value} < 20 - 或运算:
{status} == 'active' or {status} == 'pending' - 括号分组:
({value} > 10 and {value} < 20) and {status} == 'active'
注意事项
- 变量名: 使用
{key}格式,key必须存在于输入数据中 - 字符串值: 字符串值需要用引号包裹:
'active'或"active" - 运算符优先级:
not>and>or,可以使用括号改变优先级 - 分支选择: 条件节点会根据表达式结果自动选择True或False分支
- 错误处理: 如果表达式评估失败,默认返回False
安全特性
- 使用安全的表达式评估(限制可用的内置函数)
- 不支持危险的Python操作
- 只允许访问输入数据中的字段
- 自动处理类型转换
后续计划
- 支持更多运算符(如正则匹配)
- 支持函数调用(如
len({items}) > 0) - 支持数组操作(如
{items}.length > 0) - 可视化条件表达式编辑器
状态: ✅ 已完成 时间: 2024年