Files
aiagent/工作流验证功能说明.md
2026-01-19 00:09:36 +08:00

207 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工作流验证功能说明
## ✅ 已完成
已实现完整的工作流验证功能,确保工作流的正确性和完整性。
## 功能特性
### 1. 工作流验证器 (`backend/app/services/workflow_validator.py`)
- 节点验证检查节点ID唯一性、节点类型
- 边验证:检查边的源节点和目标节点是否存在
- 结构验证:检查是否有开始节点、结束节点
- 循环检测使用DFS算法检测工作流中的循环
- 可达性验证:检查所有节点是否从开始节点可达
- 连接验证:验证节点连接的正确性
- 配置验证:验证节点配置的完整性
### 2. 验证规则
#### 错误(会导致验证失败)
1. **缺少节点**:工作流必须包含至少一个节点
2. **节点ID重复**节点ID必须唯一
3. **缺少开始节点**:工作流必须包含至少一个开始节点
4. **循环检测**:工作流中不能存在循环
5. **边连接错误**:边的源节点或目标节点不存在
6. **自环检测**:节点不能连接到自身
#### 警告(不会导致验证失败)
1. **多个开始节点**:工作流包含多个开始节点
2. **缺少结束节点**:工作流建议包含至少一个结束节点
3. **不可达节点**:存在从开始节点不可达的节点
4. **开始节点入边**:开始节点不应该有入边
5. **结束节点出边**:结束节点不应该有出边
6. **条件节点分支**条件节点缺少True或False分支
7. **节点配置不完整**LLM节点缺少提示词或模型配置
## 使用方法
### 1. 后端API
#### 验证工作流(不保存)
```http
POST /api/v1/workflows/validate
Content-Type: application/json
Authorization: Bearer {token}
{
"name": "",
"nodes": [...],
"edges": [...]
}
```
**响应**:
```json
{
"valid": true,
"errors": [],
"warnings": ["工作流建议包含至少一个结束节点"]
}
```
#### 创建/更新工作流时自动验证
创建或更新工作流时,系统会自动验证工作流。如果验证失败,会返回错误信息。
### 2. 验证结果格式
```json
{
"valid": true, // 是否有效
"errors": [], // 错误列表(会导致验证失败)
"warnings": [] // 警告列表(不会导致验证失败)
}
```
## 验证示例
### 示例1: 有效的工作流
```json
{
"nodes": [
{"id": "start-1", "type": "start", "data": {"label": "开始"}},
{"id": "llm-1", "type": "llm", "data": {"label": "LLM", "prompt": "测试"}},
{"id": "end-1", "type": "end", "data": {"label": "结束"}}
],
"edges": [
{"id": "e1", "source": "start-1", "target": "llm-1"},
{"id": "e2", "source": "llm-1", "target": "end-1"}
]
}
```
**验证结果**: ✅ 通过
### 示例2: 缺少开始节点
```json
{
"nodes": [
{"id": "llm-1", "type": "llm", "data": {"label": "LLM"}},
{"id": "end-1", "type": "end", "data": {"label": "结束"}}
],
"edges": [
{"id": "e1", "source": "llm-1", "target": "end-1"}
]
}
```
**验证结果**: ❌ 失败
- 错误: `["工作流必须包含至少一个开始节点"]`
### 示例3: 循环检测
```json
{
"nodes": [
{"id": "start-1", "type": "start", "data": {"label": "开始"}},
{"id": "node-1", "type": "default", "data": {"label": "节点1"}},
{"id": "node-2", "type": "default", "data": {"label": "节点2"}}
],
"edges": [
{"id": "e1", "source": "start-1", "target": "node-1"},
{"id": "e2", "source": "node-1", "target": "node-2"},
{"id": "e3", "source": "node-2", "target": "node-1"} // 形成循环
]
}
```
**验证结果**: ❌ 失败
- 错误: `["检测到循环: node-2 -> node-1"]`
### 示例4: 条件节点分支验证
```json
{
"nodes": [
{"id": "start-1", "type": "start", "data": {"label": "开始"}},
{"id": "condition-1", "type": "condition", "data": {"label": "条件", "condition": "{value} > 10"}},
{"id": "end-1", "type": "end", "data": {"label": "结束"}}
],
"edges": [
{"id": "e1", "source": "start-1", "target": "condition-1"},
{"id": "e2", "source": "condition-1", "target": "end-1", "sourceHandle": "true"}
// 缺少false分支
]
}
```
**验证结果**: ✅ 通过(但有警告)
- 警告: `["条件节点 condition-1 缺少False分支"]`
## 测试结果
### 测试覆盖
- ✅ 有效工作流验证 (通过)
- ✅ 缺少开始节点检测 (通过)
- ✅ 循环检测 (通过)
- ✅ 不可达节点检测 (通过)
- ✅ 条件节点分支验证 (通过)
### 测试用例
1. **有效工作流**: 正常通过验证 ✅
2. **缺少开始节点**: 正确检测错误 ✅
3. **循环检测**: 正确检测循环 ✅
4. **不可达节点**: 正确生成警告 ✅
5. **条件节点**: 正确检测分支缺失 ✅
## 集成说明
### 自动验证
- 创建工作流时自动验证
- 更新工作流时自动验证
- 验证失败时阻止保存
### 手动验证
- 通过 `/api/v1/workflows/validate` 端点手动验证
- 不保存工作流,只返回验证结果
## 优势
1. **提前发现问题**:在保存前发现工作流问题
2. **详细错误信息**:提供清晰的错误和警告信息
3. **多种验证规则**:覆盖节点、边、结构、配置等多个方面
4. **区分错误和警告**:错误阻止保存,警告仅提示
## 后续计划
- [ ] 前端集成验证提示
- [ ] 实时验证(编辑时)
- [ ] 更多验证规则(数据流验证、类型检查等)
- [ ] 验证规则自定义
---
**状态**: ✅ 已完成
**时间**: 2024年