# 数据转换节点功能说明 ## ✅ 已完成 已实现完整的数据转换节点功能,支持字段映射、数据过滤、数据计算等多种转换模式。 ## 功能特性 ### 1. 数据转换服务 (`backend/app/services/data_transformer.py`) - 字段映射:支持简单和嵌套字段映射 - 数据过滤:支持多种过滤规则 - 数据计算:支持表达式计算 - 嵌套路径访问:支持 `user.name`、`items[0].price` 等 ### 2. 支持的转换模式 #### 字段映射 (mapping) 将源字段映射到目标字段 #### 数据过滤 (filter) 根据条件过滤数据 #### 数据计算 (compute) 使用表达式计算新字段 #### 全部 (all) 同时应用所有转换模式 ## 使用方法 ### 1. 在工作流中添加转换节点 1. 打开工作流设计器 2. 从节点工具箱拖拽"转换"节点到画布 3. 配置转换规则 ### 2. 配置转换节点 #### 字段映射模式 **配置示例**: ```json { "mode": "mapping", "mapping": { "new_name": "old_name", "new_age": "old_age", "user_email": "email" } } ``` **输入**: ```json { "old_name": "张三", "old_age": 25, "email": "zhangsan@example.com" } ``` **输出**: ```json { "new_name": "张三", "new_age": 25, "user_email": "zhangsan@example.com" } ``` #### 嵌套字段映射 **配置示例**: ```json { "mode": "mapping", "mapping": { "user_name": "user.name", "user_age": "user.profile.age", "first_item_price": "items[0].price" } } ``` **输入**: ```json { "user": { "name": "李四", "profile": { "age": 30 } }, "items": [ {"id": 1, "price": 100}, {"id": 2, "price": 200} ] } ``` **输出**: ```json { "user_name": "李四", "user_age": 30, "first_item_price": 100 } ``` #### 数据过滤模式 **配置示例**: ```json { "mode": "filter", "filter_rules": [ {"field": "status", "operator": "==", "value": "active"}, {"field": "count", "operator": ">", "value": 10} ] } ``` **支持的运算符**: - `==`: 等于 - `!=`: 不等于 - `>`: 大于 - `>=`: 大于等于 - `<`: 小于 - `<=`: 小于等于 - `in`: 包含 - `not in`: 不包含 #### 数据计算模式 **配置示例**: ```json { "mode": "compute", "compute_rules": { "subtotal": "{price} * {quantity}", "total": "({price} * {quantity}) * (1 - {discount})" } } ``` **输入**: ```json { "price": 100, "quantity": 3, "discount": 0.1 } ``` **输出**: ```json { "price": 100, "quantity": 3, "discount": 0.1, "subtotal": 300, "total": 270.0 } ``` ## 前端配置 在节点配置面板中: 1. **选择转换模式**:字段映射、数据过滤、数据计算或全部 2. **配置映射规则**:JSON格式的字段映射 3. **配置过滤规则**:JSON数组格式的过滤规则 4. **配置计算规则**:JSON格式的计算表达式 ## 测试结果 ### 测试覆盖 - ✅ 字段映射 (通过) - ✅ 嵌套字段映射 (通过) - ✅ 数据过滤 (通过) - ✅ 数据计算 (通过) - ✅ 工作流中的转换节点 (通过) ### 测试用例 1. **简单字段映射**: `{"username": "name"}` ✅ 2. **嵌套字段映射**: `{"user_name": "user.name"}` ✅ 3. **数组索引访问**: `{"first_item_price": "items[0].price"}` ✅ 4. **数据过滤**: 多条件过滤 ✅ 5. **数据计算**: 复杂表达式计算 ✅ ## 工作流示例 ### 示例1: 数据格式转换 ``` 开始 → 转换节点(字段映射) → LLM节点 → 结束 ``` 转换节点配置: ```json { "mode": "mapping", "mapping": { "input_text": "raw_input", "user_id": "id" } } ``` ### 示例2: 数据预处理 ``` 开始 → 转换节点(过滤) → 条件节点 → [True] → LLM节点 → 结束 ``` 转换节点配置: ```json { "mode": "filter", "filter_rules": [ {"field": "status", "operator": "==", "value": "active"} ] } ``` ### 示例3: 数据计算 ``` 开始 → 转换节点(计算) → 输出节点 → 结束 ``` 转换节点配置: ```json { "mode": "compute", "compute_rules": { "total": "{price} * {quantity}", "discounted_price": "{total} * (1 - {discount})" } } ``` ## 注意事项 1. **JSON格式**: 配置规则必须是有效的JSON格式 2. **字段路径**: 嵌套路径使用点号分隔,数组使用方括号 3. **表达式安全**: 计算表达式只支持安全的数学运算 4. **错误处理**: 如果转换失败,节点会返回错误信息 ## 后续计划 - [ ] 支持更多转换函数(字符串处理、日期格式化等) - [ ] 支持数组操作(map、filter、reduce) - [ ] 可视化配置界面 - [ ] 转换规则模板 --- **状态**: ✅ 已完成 **时间**: 2024年