feat: add AI学习助手 agent (KG+RAG ideal) and renshenguo feishu bot
- Add AI学习助手 agent creation script with all 39 tools, 3-layer KG+RAG memory - Add renshenguo (人参果) feishu bot integration (app_service + ws_handler) - Register renshenguo WS client in main.py startup - Add RENSHENGUO_APP_ID / RENSHENGUO_APP_SECRET / RENSHENGUO_AGENT_ID config - Reorganize docs from root into docs/ subdirectories - Move startup scripts to scripts/startup/ - Various backend optimizations and tool improvements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
286
docs/features/WebSocket实时推送说明.md
Normal file
286
docs/features/WebSocket实时推送说明.md
Normal file
@@ -0,0 +1,286 @@
|
||||
# WebSocket实时推送说明
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
已实现WebSocket实时推送功能,可以实时推送工作流执行状态。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. WebSocket连接管理器 (`backend/app/websocket/manager.py`)
|
||||
|
||||
- 管理多个WebSocket连接
|
||||
- 支持按执行ID分组连接
|
||||
- 支持广播消息到特定执行的所有连接
|
||||
- 自动处理连接断开
|
||||
|
||||
### 2. WebSocket API (`backend/app/api/websocket.py`)
|
||||
|
||||
- WebSocket端点:`/api/v1/ws/executions/{execution_id}`
|
||||
- 实时推送执行状态更新
|
||||
- 支持心跳检测(ping/pong)
|
||||
- 自动断开已完成或失败的执行
|
||||
|
||||
## WebSocket消息格式
|
||||
|
||||
### 客户端 → 服务器
|
||||
|
||||
#### 心跳消息
|
||||
```json
|
||||
{
|
||||
"type": "ping"
|
||||
}
|
||||
```
|
||||
|
||||
### 服务器 → 客户端
|
||||
|
||||
#### 状态更新消息
|
||||
```json
|
||||
{
|
||||
"type": "status",
|
||||
"execution_id": "execution-uuid",
|
||||
"status": "running",
|
||||
"progress": 50,
|
||||
"message": "执行中...",
|
||||
"result": null,
|
||||
"error": null,
|
||||
"execution_time": null
|
||||
}
|
||||
```
|
||||
|
||||
#### 心跳响应
|
||||
```json
|
||||
{
|
||||
"type": "pong"
|
||||
}
|
||||
```
|
||||
|
||||
#### 错误消息
|
||||
```json
|
||||
{
|
||||
"type": "error",
|
||||
"message": "错误描述"
|
||||
}
|
||||
```
|
||||
|
||||
## 状态值说明
|
||||
|
||||
- `pending`: 等待执行
|
||||
- `running`: 执行中
|
||||
- `completed`: 执行完成
|
||||
- `failed`: 执行失败
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 1. 建立WebSocket连接
|
||||
|
||||
```javascript
|
||||
const executionId = 'your-execution-id';
|
||||
const ws = new WebSocket(`ws://localhost:8037/api/v1/ws/executions/${executionId}`);
|
||||
|
||||
ws.onopen = () => {
|
||||
console.log('WebSocket连接已建立');
|
||||
};
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
const message = JSON.parse(event.data);
|
||||
console.log('收到消息:', message);
|
||||
|
||||
switch (message.type) {
|
||||
case 'status':
|
||||
// 更新执行状态
|
||||
updateExecutionStatus(message);
|
||||
break;
|
||||
case 'error':
|
||||
// 显示错误
|
||||
showError(message.message);
|
||||
break;
|
||||
case 'pong':
|
||||
// 心跳响应
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
ws.onerror = (error) => {
|
||||
console.error('WebSocket错误:', error);
|
||||
};
|
||||
|
||||
ws.onclose = () => {
|
||||
console.log('WebSocket连接已关闭');
|
||||
};
|
||||
```
|
||||
|
||||
### 2. 发送心跳消息
|
||||
|
||||
```javascript
|
||||
// 定期发送心跳(每30秒)
|
||||
setInterval(() => {
|
||||
if (ws.readyState === WebSocket.OPEN) {
|
||||
ws.send(JSON.stringify({ type: 'ping' }));
|
||||
}
|
||||
}, 30000);
|
||||
```
|
||||
|
||||
### 3. 处理状态更新
|
||||
|
||||
```javascript
|
||||
function updateExecutionStatus(message) {
|
||||
const { status, progress, result, error, execution_time } = message;
|
||||
|
||||
// 更新UI
|
||||
document.getElementById('status').textContent = status;
|
||||
document.getElementById('progress').style.width = `${progress}%`;
|
||||
|
||||
if (status === 'completed') {
|
||||
// 显示结果
|
||||
displayResult(result);
|
||||
} else if (status === 'failed') {
|
||||
// 显示错误
|
||||
displayError(error);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 前端集成示例(Vue 3)
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<div>
|
||||
<div>状态: {{ executionStatus }}</div>
|
||||
<div>进度: {{ progress }}%</div>
|
||||
<div v-if="result">结果: {{ result }}</div>
|
||||
<div v-if="error" class="error">错误: {{ error }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, onUnmounted } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
executionId: string
|
||||
}>()
|
||||
|
||||
const executionStatus = ref('pending')
|
||||
const progress = ref(0)
|
||||
const result = ref(null)
|
||||
const error = ref(null)
|
||||
let ws: WebSocket | null = null
|
||||
|
||||
onMounted(() => {
|
||||
// 获取WebSocket URL
|
||||
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
|
||||
const hostname = window.location.hostname
|
||||
const wsUrl = `${protocol}//${hostname}:8037/api/v1/ws/executions/${props.executionId}`
|
||||
|
||||
ws = new WebSocket(wsUrl)
|
||||
|
||||
ws.onopen = () => {
|
||||
console.log('WebSocket连接已建立')
|
||||
}
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
const message = JSON.parse(event.data)
|
||||
|
||||
if (message.type === 'status') {
|
||||
executionStatus.value = message.status
|
||||
progress.value = message.progress || 0
|
||||
result.value = message.result
|
||||
error.value = message.error
|
||||
}
|
||||
}
|
||||
|
||||
ws.onerror = (err) => {
|
||||
console.error('WebSocket错误:', err)
|
||||
}
|
||||
|
||||
ws.onclose = () => {
|
||||
console.log('WebSocket连接已关闭')
|
||||
}
|
||||
|
||||
// 心跳
|
||||
const heartbeat = setInterval(() => {
|
||||
if (ws?.readyState === WebSocket.OPEN) {
|
||||
ws.send(JSON.stringify({ type: 'ping' }))
|
||||
}
|
||||
}, 30000)
|
||||
|
||||
onUnmounted(() => {
|
||||
clearInterval(heartbeat)
|
||||
ws?.close()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
```
|
||||
|
||||
## 完整示例
|
||||
|
||||
### 1. 执行工作流并监听状态
|
||||
|
||||
```javascript
|
||||
// 1. 创建执行任务
|
||||
const response = await fetch('/api/v1/executions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
workflow_id: 'workflow-id',
|
||||
input_data: { input: 'test' }
|
||||
})
|
||||
})
|
||||
|
||||
const execution = await response.json()
|
||||
const executionId = execution.id
|
||||
|
||||
// 2. 建立WebSocket连接
|
||||
const ws = new WebSocket(`ws://localhost:8037/api/v1/ws/executions/${executionId}`)
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
const message = JSON.parse(event.data)
|
||||
if (message.type === 'status') {
|
||||
console.log('执行状态:', message.status)
|
||||
console.log('进度:', message.progress)
|
||||
|
||||
if (message.status === 'completed') {
|
||||
console.log('执行结果:', message.result)
|
||||
} else if (message.status === 'failed') {
|
||||
console.error('执行失败:', message.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **连接管理**:
|
||||
- WebSocket连接会在执行完成或失败后自动断开
|
||||
- 客户端应该处理连接断开的情况
|
||||
- 建议实现重连机制
|
||||
|
||||
2. **心跳检测**:
|
||||
- 客户端应该定期发送ping消息
|
||||
- 服务器会响应pong消息
|
||||
- 如果长时间没有收到消息,连接可能会被关闭
|
||||
|
||||
3. **错误处理**:
|
||||
- 处理网络错误
|
||||
- 处理执行失败的情况
|
||||
- 显示友好的错误信息
|
||||
|
||||
4. **性能考虑**:
|
||||
- 状态更新频率:每2秒更新一次
|
||||
- 多个客户端可以同时监听同一个执行
|
||||
- 连接会在执行完成后自动清理
|
||||
|
||||
## 后续计划
|
||||
|
||||
- [ ] 前端WebSocket组件封装
|
||||
- [ ] 执行进度百分比计算
|
||||
- [ ] 节点级别的状态推送
|
||||
- [ ] 执行日志实时推送
|
||||
- [ ] WebSocket认证支持
|
||||
|
||||
---
|
||||
|
||||
**状态**: ✅ 后端已完成,前端集成待完成
|
||||
**时间**: 2024年
|
||||
287
docs/features/内置工具列表.md
Normal file
287
docs/features/内置工具列表.md
Normal file
@@ -0,0 +1,287 @@
|
||||
# 内置工具列表
|
||||
|
||||
平台目前提供 **8个内置工具**,可以在LLM节点中启用工具调用来使用。
|
||||
|
||||
## 📋 工具列表
|
||||
|
||||
### 1. 🌐 http_request - HTTP请求工具
|
||||
|
||||
**功能**: 发送HTTP请求,支持GET、POST、PUT、DELETE方法
|
||||
|
||||
**用途**:
|
||||
- 调用外部API
|
||||
- 获取网页内容
|
||||
- 发送数据到服务器
|
||||
|
||||
**参数**:
|
||||
- `url` (必需): 请求的URL地址
|
||||
- `method` (可选): HTTP方法,默认GET
|
||||
- `headers` (可选): HTTP请求头
|
||||
- `body` (可选): 请求体(POST/PUT时使用)
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"url": "https://api.github.com/users/octocat",
|
||||
"method": "GET"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 📖 file_read - 文件读取工具
|
||||
|
||||
**功能**: 读取文件内容
|
||||
|
||||
**用途**:
|
||||
- 读取配置文件
|
||||
- 读取文档内容
|
||||
- 读取数据文件
|
||||
|
||||
**参数**:
|
||||
- `file_path` (必需): 文件路径(只能读取项目目录下的文件)
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"file_path": "backend/app/core/config.py"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. ✍️ file_write - 文件写入工具
|
||||
|
||||
**功能**: 写入文件内容
|
||||
|
||||
**用途**:
|
||||
- 保存处理结果
|
||||
- 创建配置文件
|
||||
- 写入日志文件
|
||||
|
||||
**参数**:
|
||||
- `file_path` (必需): 文件路径(只能写入项目目录下的文件)
|
||||
- `content` (必需): 要写入的内容
|
||||
- `mode` (可选): 写入模式(w=覆盖,a=追加),默认w
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"file_path": "output/result.txt",
|
||||
"content": "处理结果",
|
||||
"mode": "w"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 📊 text_analyze - 文本分析工具
|
||||
|
||||
**功能**: 分析文本内容
|
||||
|
||||
**用途**:
|
||||
- 统计文本字数、行数等
|
||||
- 提取关键词
|
||||
- 生成文本摘要
|
||||
|
||||
**参数**:
|
||||
- `text` (必需): 要分析的文本内容
|
||||
- `operation` (可选): 操作类型
|
||||
- `count`: 统计字数、字符数、行数、段落数
|
||||
- `keywords`: 提取关键词(基于词频)
|
||||
- `summary`: 生成摘要(取前3句)
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"text": "这是一段很长的文本...",
|
||||
"operation": "count"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 🕐 datetime - 日期时间工具
|
||||
|
||||
**功能**: 获取和处理日期时间信息
|
||||
|
||||
**用途**:
|
||||
- 获取当前时间
|
||||
- 格式化时间
|
||||
- 时间戳转换
|
||||
|
||||
**参数**:
|
||||
- `operation` (可选): 操作类型
|
||||
- `now`: 获取当前时间(默认)
|
||||
- `format`: 格式化时间
|
||||
- `format` (可选): 时间格式字符串,默认 "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"operation": "now",
|
||||
"format": "%Y-%m-%d %H:%M:%S"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 🔢 math_calculate - 数学计算工具
|
||||
|
||||
**功能**: 执行数学计算
|
||||
|
||||
**用途**:
|
||||
- 基本数学运算(加减乘除)
|
||||
- 数学函数计算(sqrt, sin, cos, log等)
|
||||
- 复杂数学表达式计算
|
||||
|
||||
**参数**:
|
||||
- `expression` (必需): 数学表达式
|
||||
|
||||
**支持的函数**:
|
||||
- `sqrt(x)`: 平方根
|
||||
- `sin(x)`, `cos(x)`, `tan(x)`: 三角函数
|
||||
- `log(x)`: 自然对数
|
||||
- `exp(x)`: 指数函数
|
||||
- `abs(x)`: 绝对值
|
||||
- `pow(x, y)`: 幂运算
|
||||
- `pi`: 圆周率
|
||||
- `e`: 自然常数
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"expression": "sqrt(16) + sin(0) * cos(0)"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 💻 system_info - 系统信息工具
|
||||
|
||||
**功能**: 获取系统信息
|
||||
|
||||
**用途**:
|
||||
- 查看操作系统信息
|
||||
- 查看Python版本
|
||||
- 查看系统架构
|
||||
|
||||
**参数**: 无
|
||||
|
||||
**返回信息**:
|
||||
- 操作系统平台
|
||||
- 系统版本
|
||||
- 处理器架构
|
||||
- Python版本
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. 📦 json_process - JSON处理工具
|
||||
|
||||
**功能**: 处理JSON数据
|
||||
|
||||
**用途**:
|
||||
- 解析JSON字符串
|
||||
- 序列化数据为JSON
|
||||
- 验证JSON格式
|
||||
|
||||
**参数**:
|
||||
- `json_string` (必需): JSON字符串
|
||||
- `operation` (可选): 操作类型
|
||||
- `parse`: 解析JSON(默认)
|
||||
- `stringify`: 序列化为JSON
|
||||
- `validate`: 验证JSON格式
|
||||
|
||||
**示例**:
|
||||
```json
|
||||
{
|
||||
"json_string": "{\"name\": \"test\"}",
|
||||
"operation": "parse"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 使用场景示例
|
||||
|
||||
### 场景1: 数据获取和处理
|
||||
```
|
||||
用户: "查询GitHub用户信息并保存到文件"
|
||||
→ LLM调用 http_request 获取数据
|
||||
→ LLM调用 json_process 解析数据
|
||||
→ LLM调用 file_write 保存结果
|
||||
```
|
||||
|
||||
### 场景2: 文本分析
|
||||
```
|
||||
用户: "分析这段文本的字数和关键词"
|
||||
→ LLM调用 text_analyze (count) 统计字数
|
||||
→ LLM调用 text_analyze (keywords) 提取关键词
|
||||
```
|
||||
|
||||
### 场景3: 数学计算
|
||||
```
|
||||
用户: "计算 2的10次方 加上 16的平方根"
|
||||
→ LLM调用 math_calculate("pow(2, 10) + sqrt(16)")
|
||||
```
|
||||
|
||||
### 场景4: 文件处理
|
||||
```
|
||||
用户: "读取config.json文件并解析"
|
||||
→ LLM调用 file_read 读取文件
|
||||
→ LLM调用 json_process 解析内容
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 安全限制
|
||||
|
||||
1. **文件操作限制**:
|
||||
- 只能读写项目目录下的文件
|
||||
- 不允许访问系统敏感文件
|
||||
|
||||
2. **数学计算限制**:
|
||||
- 只允许安全的数学函数
|
||||
- 不允许执行任意代码
|
||||
|
||||
3. **HTTP请求限制**:
|
||||
- 超时时间:30秒
|
||||
- 建议在生产环境中添加域名白名单
|
||||
|
||||
---
|
||||
|
||||
## 📝 如何启用工具
|
||||
|
||||
1. 在工作流编辑器中,选择LLM节点
|
||||
2. 打开"工具"标签页
|
||||
3. 启用"启用工具调用"开关
|
||||
4. 选择需要的工具(可多选)
|
||||
5. 保存配置
|
||||
|
||||
---
|
||||
|
||||
## 🔄 工具调用流程
|
||||
|
||||
```
|
||||
用户输入
|
||||
↓
|
||||
LLM节点(启用工具)
|
||||
↓
|
||||
LLM分析需求,决定调用哪个工具
|
||||
↓
|
||||
执行工具
|
||||
↓
|
||||
工具返回结果
|
||||
↓
|
||||
LLM基于结果生成最终回复
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-01-23
|
||||
**工具总数**: 8个
|
||||
157
docs/features/前端功能完成说明.md
Normal file
157
docs/features/前端功能完成说明.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 前端功能完成说明
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
已实现前端工作流模板、导入导出和执行历史优化功能。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 工作流模板功能
|
||||
|
||||
#### 模板选择界面
|
||||
- 在工作流列表页添加"从模板创建"按钮
|
||||
- 点击后弹出模板选择对话框
|
||||
- 显示所有可用模板(卡片式布局)
|
||||
- 每个模板显示名称和描述
|
||||
- 点击模板卡片或"使用此模板"按钮创建工作流
|
||||
|
||||
#### 快速创建工作流
|
||||
- 从模板创建时,可以自定义工作流名称
|
||||
- 自动跳转到工作流编辑器
|
||||
- 模板数据已预填充,可直接编辑
|
||||
|
||||
### 2. 工作流导入导出功能
|
||||
|
||||
#### 导出功能
|
||||
- 在工作流列表的操作列添加"导出"按钮
|
||||
- 点击后自动下载JSON格式的工作流文件
|
||||
- 文件名格式:`{工作流名称}_{时间戳}.json`
|
||||
|
||||
#### 导入功能
|
||||
- 在工作流列表页添加"导入工作流"按钮
|
||||
- 点击后弹出导入对话框
|
||||
- 支持拖拽上传或点击上传
|
||||
- 自动验证JSON格式
|
||||
- 导入成功后自动跳转到工作流编辑器
|
||||
|
||||
### 3. 执行历史优化
|
||||
|
||||
#### 分页功能
|
||||
- 使用Element Plus的Pagination组件
|
||||
- 支持每页10/20/50/100条记录
|
||||
- 显示总记录数和当前页码
|
||||
- 支持跳转到指定页码
|
||||
|
||||
#### 筛选功能
|
||||
- 状态筛选下拉框
|
||||
- 支持筛选:全部、等待中、执行中、已完成、失败
|
||||
- 筛选后自动刷新列表
|
||||
|
||||
#### 搜索功能
|
||||
- 搜索框支持实时搜索
|
||||
- 搜索范围:执行ID、工作流ID、任务ID
|
||||
- 支持回车键搜索
|
||||
- 支持清空搜索
|
||||
|
||||
#### UI优化
|
||||
- 筛选和搜索栏使用卡片式布局
|
||||
- 清晰的视觉层次
|
||||
- 响应式设计
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 1. 从模板创建工作流
|
||||
|
||||
1. 在工作流列表页点击"从模板创建"按钮
|
||||
2. 在对话框中选择模板
|
||||
3. 输入工作流名称
|
||||
4. 点击"创建"按钮
|
||||
5. 自动跳转到工作流编辑器
|
||||
|
||||
### 2. 导出工作流
|
||||
|
||||
1. 在工作流列表中找到要导出的工作流
|
||||
2. 点击操作列的"导出"按钮
|
||||
3. 自动下载JSON文件
|
||||
|
||||
### 3. 导入工作流
|
||||
|
||||
1. 在工作流列表页点击"导入工作流"按钮
|
||||
2. 选择或拖拽JSON文件
|
||||
3. 点击"导入"按钮
|
||||
4. 自动跳转到工作流编辑器
|
||||
|
||||
### 4. 执行历史查询
|
||||
|
||||
1. 进入执行历史页面
|
||||
2. 使用搜索框搜索执行记录
|
||||
3. 使用状态筛选下拉框筛选状态
|
||||
4. 使用分页组件浏览不同页的记录
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 1. Store更新
|
||||
|
||||
#### workflow.ts
|
||||
- `fetchTemplates()`: 获取模板列表
|
||||
- `fetchTemplate()`: 获取模板详情
|
||||
- `createWorkflowFromTemplate()`: 从模板创建工作流
|
||||
- `exportWorkflow()`: 导出工作流
|
||||
- `importWorkflow()`: 导入工作流
|
||||
|
||||
#### execution.ts
|
||||
- `fetchExecutions()`: 支持分页、筛选、搜索参数
|
||||
|
||||
### 2. 组件更新
|
||||
|
||||
#### Home.vue
|
||||
- 添加模板选择对话框
|
||||
- 添加导入对话框
|
||||
- 添加导出按钮
|
||||
- 优化按钮布局
|
||||
|
||||
#### Executions.vue
|
||||
- 添加筛选和搜索栏
|
||||
- 添加分页组件
|
||||
- 优化表格布局
|
||||
|
||||
## 界面截图说明
|
||||
|
||||
### 工作流列表页
|
||||
- 顶部操作栏:从模板创建、导入工作流、创建工作流
|
||||
- 表格操作列:编辑、导出、执行历史、删除
|
||||
|
||||
### 模板选择对话框
|
||||
- 卡片式布局,每个模板一个卡片
|
||||
- 显示模板名称和描述
|
||||
- 悬停效果
|
||||
|
||||
### 导入对话框
|
||||
- 拖拽上传区域
|
||||
- 文件选择按钮
|
||||
- 导入确认按钮
|
||||
|
||||
### 执行历史页
|
||||
- 筛选栏:搜索框、状态筛选、搜索/重置按钮
|
||||
- 数据表格:执行记录列表
|
||||
- 分页组件:底部分页控件
|
||||
|
||||
## 优势
|
||||
|
||||
1. **快速创建**:使用模板快速创建工作流,提高效率
|
||||
2. **工作流复用**:通过导入导出复用工作流,便于分享
|
||||
3. **高效查询**:执行历史支持分页、筛选、搜索,快速找到目标记录
|
||||
4. **用户友好**:清晰的UI和流畅的交互体验
|
||||
|
||||
## 后续计划
|
||||
|
||||
- [ ] 模板预览功能
|
||||
- [ ] 工作流搜索和筛选
|
||||
- [ ] 批量操作功能
|
||||
- [ ] 工作流收藏功能
|
||||
- [ ] 模板市场(用户分享模板)
|
||||
|
||||
---
|
||||
|
||||
**状态**: ✅ 已完成
|
||||
**时间**: 2024年
|
||||
160
docs/features/功能完成总结.md
Normal file
160
docs/features/功能完成总结.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# 功能完成总结
|
||||
|
||||
## ✅ 本次开发完成的功能
|
||||
|
||||
### 1. 执行结果展示页面 ✅
|
||||
|
||||
#### 1.1 执行历史列表页面 (`Executions.vue`)
|
||||
- ✅ 显示所有执行记录
|
||||
- ✅ 支持按工作流ID筛选
|
||||
- ✅ 显示执行状态、执行时间、创建时间
|
||||
- ✅ 点击行或按钮查看详情
|
||||
- ✅ 支持刷新列表
|
||||
|
||||
#### 1.2 执行详情页面 (`ExecutionDetail.vue`)
|
||||
- ✅ 显示完整的执行信息
|
||||
- ✅ 显示输入数据和输出数据(JSON格式)
|
||||
- ✅ 显示执行状态、执行时间、错误信息
|
||||
- ✅ 支持跳转到关联的工作流
|
||||
- ✅ 自动刷新执行状态(轮询)
|
||||
|
||||
### 2. WebSocket前端集成 ✅
|
||||
|
||||
#### 2.1 WebSocket Composable (`useWebSocket.ts`)
|
||||
- ✅ 封装WebSocket连接逻辑
|
||||
- ✅ 自动重连机制
|
||||
- ✅ 心跳检测(每30秒)
|
||||
- ✅ 状态管理(status, progress, result, error)
|
||||
- ✅ 消息处理(status, pong, error)
|
||||
|
||||
#### 2.2 执行详情页面集成
|
||||
- ✅ 实时显示执行状态
|
||||
- ✅ 实时显示执行进度
|
||||
- ✅ 实时显示执行结果
|
||||
- ✅ 连接状态指示器
|
||||
- ✅ 自动连接和断开
|
||||
|
||||
### 3. 路由和导航 ✅
|
||||
|
||||
- ✅ 添加执行历史路由 (`/executions`)
|
||||
- ✅ 添加执行详情路由 (`/executions/:id`)
|
||||
- ✅ 在工作流列表页面添加"执行历史"按钮
|
||||
- ✅ 支持从工作流跳转到执行历史
|
||||
|
||||
### 4. 状态管理 ✅
|
||||
|
||||
- ✅ 创建执行状态管理Store (`execution.ts`)
|
||||
- ✅ 支持获取执行列表
|
||||
- ✅ 支持获取执行详情
|
||||
- ✅ 支持创建执行任务
|
||||
- ✅ 支持获取执行状态
|
||||
|
||||
## 📊 功能特性
|
||||
|
||||
### 执行历史列表
|
||||
- **筛选功能**: 支持按工作流ID筛选执行记录
|
||||
- **状态显示**: 使用不同颜色的标签显示执行状态
|
||||
- **时间格式化**: 友好的时间显示格式
|
||||
- **快速操作**: 点击行或按钮快速查看详情
|
||||
|
||||
### 执行详情页面
|
||||
- **完整信息**: 显示执行的所有相关信息
|
||||
- **数据展示**: JSON格式的输入输出数据,易于阅读
|
||||
- **实时更新**: WebSocket实时推送执行状态
|
||||
- **进度显示**: 实时显示执行进度条
|
||||
- **错误处理**: 清晰显示错误信息
|
||||
|
||||
### WebSocket实时推送
|
||||
- **自动连接**: 执行进行中时自动建立连接
|
||||
- **自动重连**: 连接断开时自动重连
|
||||
- **心跳检测**: 保持连接活跃
|
||||
- **状态同步**: WebSocket状态与Store状态自动同步
|
||||
- **UI反馈**: 连接状态可视化指示
|
||||
|
||||
## 🎯 使用方式
|
||||
|
||||
### 查看执行历史
|
||||
|
||||
1. **从首页查看**:
|
||||
- 在工作流列表中点击"执行历史"按钮
|
||||
- 跳转到该工作流的执行历史页面
|
||||
|
||||
2. **直接访问**:
|
||||
- 访问 `/executions` 查看所有执行记录
|
||||
- 访问 `/executions?workflow_id=xxx` 查看特定工作流的执行记录
|
||||
|
||||
### 查看执行详情
|
||||
|
||||
1. **从执行历史**:
|
||||
- 点击执行记录行或"查看详情"按钮
|
||||
- 跳转到执行详情页面
|
||||
|
||||
2. **实时监控**:
|
||||
- 如果执行正在进行,页面会自动建立WebSocket连接
|
||||
- 实时显示执行状态、进度和结果
|
||||
- 执行完成后自动断开连接
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### 前端技术
|
||||
- **Vue 3 Composition API**: 使用最新的组合式API
|
||||
- **Pinia Store**: 状态管理
|
||||
- **Element Plus**: UI组件库
|
||||
- **WebSocket API**: 原生WebSocket API
|
||||
- **TypeScript**: 类型安全
|
||||
|
||||
### 后端技术
|
||||
- **FastAPI**: RESTful API
|
||||
- **WebSocket**: FastAPI WebSocket支持
|
||||
- **Celery**: 异步任务执行
|
||||
- **MySQL**: 数据存储
|
||||
|
||||
## 📝 代码文件
|
||||
|
||||
### 新增文件
|
||||
- `frontend/src/stores/execution.ts` - 执行状态管理
|
||||
- `frontend/src/views/Executions.vue` - 执行历史列表
|
||||
- `frontend/src/views/ExecutionDetail.vue` - 执行详情页面
|
||||
- `frontend/src/composables/useWebSocket.ts` - WebSocket Composable
|
||||
|
||||
### 修改文件
|
||||
- `frontend/src/router/index.ts` - 添加路由
|
||||
- `frontend/src/views/Home.vue` - 添加执行历史按钮
|
||||
- `backend/app/api/executions.py` - 修复响应模型(datetime类型)
|
||||
|
||||
## ✅ 测试建议
|
||||
|
||||
### 1. 执行历史列表测试
|
||||
- [ ] 查看所有执行记录
|
||||
- [ ] 按工作流ID筛选
|
||||
- [ ] 点击查看详情
|
||||
- [ ] 刷新列表
|
||||
|
||||
### 2. 执行详情页面测试
|
||||
- [ ] 查看已完成执行的详情
|
||||
- [ ] 查看失败执行的错误信息
|
||||
- [ ] 查看输入输出数据格式
|
||||
|
||||
### 3. WebSocket实时推送测试
|
||||
- [ ] 执行工作流时打开详情页面
|
||||
- [ ] 观察实时状态更新
|
||||
- [ ] 观察进度条变化
|
||||
- [ ] 观察结果自动显示
|
||||
- [ ] 测试连接断开和重连
|
||||
|
||||
## 🎉 完成度
|
||||
|
||||
- **第一阶段MVP**: 约 95% ✅
|
||||
- **整体项目**: 约 55%
|
||||
|
||||
## 📋 下一步计划
|
||||
|
||||
1. **条件节点表达式解析** - 支持更复杂的条件判断
|
||||
2. **数据转换节点完整实现** - 完善数据转换功能
|
||||
3. **前端组件优化** - 优化UI和用户体验
|
||||
4. **错误处理优化** - 更好的错误提示和处理
|
||||
|
||||
---
|
||||
|
||||
**完成时间**: 2024年
|
||||
**状态**: ✅ 已完成并测试
|
||||
1117
docs/features/可新增节点类型建议.md
Normal file
1117
docs/features/可新增节点类型建议.md
Normal file
File diff suppressed because it is too large
Load Diff
194
docs/features/工作流模板和导入导出功能说明.md
Normal file
194
docs/features/工作流模板和导入导出功能说明.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# 工作流模板和导入导出功能说明
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
已实现工作流模板功能、导入导出功能和执行历史优化。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 工作流模板功能
|
||||
|
||||
#### 预设模板
|
||||
|
||||
系统提供4个预设模板:
|
||||
|
||||
1. **简单LLM工作流** (`simple_llm`)
|
||||
- 开始 → LLM → 结束
|
||||
- 适合简单的LLM调用场景
|
||||
|
||||
2. **条件判断LLM工作流** (`conditional_llm`)
|
||||
- 开始 → 条件判断 → [True分支LLM / False分支LLM] → 结束
|
||||
- 适合根据条件调用不同LLM的场景
|
||||
|
||||
3. **数据转换+LLM工作流** (`data_transform_llm`)
|
||||
- 开始 → 数据转换 → LLM → 结束
|
||||
- 适合需要先转换数据再处理场景
|
||||
|
||||
4. **多LLM链式工作流** (`multi_llm_chain`)
|
||||
- 开始 → LLM1 → LLM2 → LLM3 → 结束
|
||||
- 适合需要多步LLM处理的场景
|
||||
|
||||
#### API端点
|
||||
|
||||
- `GET /api/v1/workflows/templates` - 获取模板列表
|
||||
- `GET /api/v1/workflows/templates/{template_id}` - 获取模板详情
|
||||
- `POST /api/v1/workflows/templates/{template_id}/create` - 从模板创建工作流
|
||||
|
||||
### 2. 工作流导入导出功能
|
||||
|
||||
#### 导出工作流
|
||||
|
||||
**API端点**: `GET /api/v1/workflows/{workflow_id}/export`
|
||||
|
||||
**响应格式**:
|
||||
```json
|
||||
{
|
||||
"id": "workflow-id",
|
||||
"name": "工作流名称",
|
||||
"description": "工作流描述",
|
||||
"nodes": [...],
|
||||
"edges": [...],
|
||||
"version": 1,
|
||||
"status": "active",
|
||||
"exported_at": "2024-01-17T01:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
#### 导入工作流
|
||||
|
||||
**API端点**: `POST /api/v1/workflows/import`
|
||||
|
||||
**请求格式**:
|
||||
```json
|
||||
{
|
||||
"name": "导入的工作流",
|
||||
"description": "工作流描述",
|
||||
"nodes": [...],
|
||||
"edges": [...]
|
||||
}
|
||||
```
|
||||
|
||||
**特性**:
|
||||
- 自动重新生成节点ID(避免ID冲突)
|
||||
- 自动更新边的源节点和目标节点ID
|
||||
- 自动验证工作流结构
|
||||
- 验证失败时返回详细错误信息
|
||||
|
||||
### 3. 执行历史优化
|
||||
|
||||
#### 分页功能
|
||||
|
||||
- `skip`: 跳过记录数(默认0)
|
||||
- `limit`: 每页记录数(默认100,最大100)
|
||||
|
||||
#### 筛选功能
|
||||
|
||||
- `workflow_id`: 按工作流ID筛选
|
||||
- `status`: 按状态筛选(pending, running, completed, failed)
|
||||
|
||||
#### 搜索功能
|
||||
|
||||
- `search`: 搜索关键词
|
||||
- 搜索范围:执行ID、工作流ID、任务ID
|
||||
|
||||
#### API端点
|
||||
|
||||
`GET /api/v1/executions?skip=0&limit=20&workflow_id=xxx&status=completed&search=keyword`
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 1. 获取模板列表
|
||||
|
||||
```bash
|
||||
curl -X GET "http://localhost:8037/api/v1/workflows/templates" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "simple_llm",
|
||||
"name": "简单LLM工作流",
|
||||
"description": "一个简单的LLM调用工作流..."
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
### 2. 从模板创建工作流
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8037/api/v1/workflows/templates/simple_llm/create?name=我的工作流" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
```
|
||||
|
||||
### 3. 导出工作流
|
||||
|
||||
```bash
|
||||
curl -X GET "http://localhost:8037/api/v1/workflows/{workflow_id}/export" \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-o workflow.json
|
||||
```
|
||||
|
||||
### 4. 导入工作流
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8037/api/v1/workflows/import" \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @workflow.json
|
||||
```
|
||||
|
||||
### 5. 获取执行历史(带筛选和搜索)
|
||||
|
||||
```bash
|
||||
curl -X GET "http://localhost:8037/api/v1/executions?skip=0&limit=20&status=completed&search=test" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
```
|
||||
|
||||
## 前端集成建议
|
||||
|
||||
### 模板选择界面
|
||||
|
||||
1. 显示模板列表(卡片式布局)
|
||||
2. 点击模板查看详情
|
||||
3. 一键从模板创建工作流
|
||||
|
||||
### 导入导出功能
|
||||
|
||||
1. **导出**:
|
||||
- 在工作流详情页添加"导出"按钮
|
||||
- 点击后下载JSON文件
|
||||
|
||||
2. **导入**:
|
||||
- 在工作流列表页添加"导入"按钮
|
||||
- 选择JSON文件上传
|
||||
- 显示导入结果
|
||||
|
||||
### 执行历史优化
|
||||
|
||||
1. **分页组件**:使用Element Plus的Pagination组件
|
||||
2. **筛选器**:下拉选择状态、工作流
|
||||
3. **搜索框**:实时搜索
|
||||
4. **表格**:显示筛选和搜索后的结果
|
||||
|
||||
## 优势
|
||||
|
||||
1. **快速创建**:使用模板快速创建工作流
|
||||
2. **工作流复用**:通过导入导出复用工作流
|
||||
3. **高效查询**:执行历史支持分页、筛选、搜索
|
||||
4. **数据安全**:导入时自动重新生成ID,避免冲突
|
||||
|
||||
## 后续计划
|
||||
|
||||
- [ ] 前端模板选择界面
|
||||
- [ ] 前端导入导出功能
|
||||
- [ ] 执行历史前端优化
|
||||
- [ ] 模板市场(用户分享模板)
|
||||
- [ ] 工作流版本对比
|
||||
|
||||
---
|
||||
|
||||
**状态**: ✅ 后端已完成
|
||||
**时间**: 2024年
|
||||
206
docs/features/工作流验证功能说明.md
Normal file
206
docs/features/工作流验证功能说明.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# 工作流验证功能说明
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
已实现完整的工作流验证功能,确保工作流的正确性和完整性。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 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年
|
||||
263
docs/features/数据转换节点功能说明.md
Normal file
263
docs/features/数据转换节点功能说明.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# 数据转换节点功能说明
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
已实现完整的数据转换节点功能,支持字段映射、数据过滤、数据计算等多种转换模式。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 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年
|
||||
218
docs/features/条件节点功能说明.md
Normal file
218
docs/features/条件节点功能说明.md
Normal 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年
|
||||
186
docs/features/节点测试功能说明.md
Normal file
186
docs/features/节点测试功能说明.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# 节点测试功能使用说明
|
||||
|
||||
## ✅ 已修复的问题
|
||||
|
||||
1. **输出为 null 的问题**:
|
||||
- 修复了后端未正确处理节点执行失败的情况
|
||||
- 现在会正确显示错误信息,而不是只显示 `null`
|
||||
|
||||
2. **错误信息显示**:
|
||||
- 改进了错误信息的传递和显示
|
||||
- 前端会清晰显示具体的错误原因
|
||||
|
||||
## 🔧 配置检查
|
||||
|
||||
### DeepSeek API 配置
|
||||
|
||||
已在 `docker-compose.dev.yml` 中配置:
|
||||
```yaml
|
||||
environment:
|
||||
- DEEPSEEK_API_KEY=sk-fdf7cc1c73504e628ec0119b7e11b8cc
|
||||
- DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||
```
|
||||
|
||||
### 验证配置是否生效
|
||||
|
||||
1. **检查后端服务状态**:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml ps
|
||||
```
|
||||
|
||||
2. **验证 API Key 是否加载**:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml exec backend python -c "from app.core.config import settings; print('DeepSeek API Key:', '已配置' if settings.DEEPSEEK_API_KEY else '❌ 未配置')"
|
||||
```
|
||||
|
||||
3. **查看后端日志**:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml logs --tail=50 backend
|
||||
```
|
||||
|
||||
## 📝 使用步骤
|
||||
|
||||
### 1. 打开 Agent 设计器
|
||||
|
||||
1. 登录系统
|
||||
2. 点击导航栏的"Agent管理"
|
||||
3. 选择一个 Agent,点击"设计"按钮
|
||||
|
||||
### 2. 配置 LLM 节点
|
||||
|
||||
1. 点击画布上的 LLM 节点(或添加新节点)
|
||||
2. 在右侧配置面板中设置:
|
||||
- **提供商**: 选择 "DeepSeek"
|
||||
- **模型**: 选择 "DeepSeek Chat" 或 "DeepSeek Coder"
|
||||
- **提示词**: 输入提示词,例如:`请处理用户请求:{input}`
|
||||
- **温度**: 0.5-0.7(推荐)
|
||||
- **最大Token数**: 1500(根据需要调整)
|
||||
|
||||
3. 点击"保存配置"按钮
|
||||
|
||||
### 3. 测试节点
|
||||
|
||||
1. 在"节点测试"区域:
|
||||
- **测试输入**: 编辑 JSON 格式的测试数据
|
||||
- 默认输入示例:
|
||||
```json
|
||||
{
|
||||
"input": "你好",
|
||||
"query": "你好"
|
||||
}
|
||||
```
|
||||
|
||||
2. 点击"运行测试"按钮
|
||||
|
||||
3. 查看测试结果:
|
||||
- **测试输出**: 显示 LLM 返回的内容
|
||||
- **状态**: 显示成功/失败状态
|
||||
- **执行时间**: 显示耗时(毫秒)
|
||||
- **错误信息**: 如果失败,会显示具体错误
|
||||
|
||||
## 🎯 测试示例
|
||||
|
||||
### 示例 1:简单对话
|
||||
|
||||
**节点配置**:
|
||||
- 提供商: DeepSeek
|
||||
- 模型: DeepSeek Chat
|
||||
- 提示词: `请回答用户的问题:{input}`
|
||||
|
||||
**测试输入**:
|
||||
```json
|
||||
{
|
||||
"input": "你好,介绍一下你自己"
|
||||
}
|
||||
```
|
||||
|
||||
**预期输出**:
|
||||
DeepSeek 的回复内容
|
||||
|
||||
### 示例 2:文本处理
|
||||
|
||||
**节点配置**:
|
||||
- 提供商: DeepSeek
|
||||
- 模型: DeepSeek Chat
|
||||
- 提示词: `请将以下文本翻译成英文:{input}`
|
||||
|
||||
**测试输入**:
|
||||
```json
|
||||
{
|
||||
"input": "你好,世界"
|
||||
}
|
||||
```
|
||||
|
||||
**预期输出**:
|
||||
"Hello, World"
|
||||
|
||||
## ⚠️ 常见问题
|
||||
|
||||
### 1. 输出为 null
|
||||
|
||||
**可能原因**:
|
||||
- API Key 未配置或配置错误
|
||||
- 模型名称不匹配
|
||||
- 网络连接问题
|
||||
- API 返回空内容
|
||||
|
||||
**解决方法**:
|
||||
1. 检查 `docker-compose.dev.yml` 中的 `DEEPSEEK_API_KEY` 配置
|
||||
2. 确认模型名称是 `deepseek-chat` 或 `deepseek-coder`
|
||||
3. 查看后端日志获取详细错误信息
|
||||
4. 重启后端服务:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml restart backend
|
||||
```
|
||||
|
||||
### 2. 显示错误信息
|
||||
|
||||
现在如果测试失败,会显示具体的错误信息,例如:
|
||||
- `DeepSeek API Key未配置,请在环境变量中设置DEEPSEEK_API_KEY`
|
||||
- `DeepSeek API调用失败: ...`
|
||||
- `DeepSeek API返回的内容为空,请检查API配置和模型名称`
|
||||
|
||||
根据错误信息进行相应的修复。
|
||||
|
||||
### 3. 测试超时
|
||||
|
||||
如果测试时间过长:
|
||||
1. 检查网络连接
|
||||
2. 减少 `max_tokens` 的值
|
||||
3. 检查 API 服务状态
|
||||
|
||||
## 🔄 重启服务
|
||||
|
||||
如果修改了配置,需要重启后端服务:
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml restart backend
|
||||
```
|
||||
|
||||
## 📊 功能特点
|
||||
|
||||
1. **实时测试**:边编排边测试,无需保存即可验证节点功能
|
||||
2. **输入编辑**:支持自定义 JSON 格式的测试输入
|
||||
3. **输出查看**:实时查看节点输出结果
|
||||
4. **错误提示**:清晰的错误信息,便于调试
|
||||
5. **执行时间**:显示节点执行耗时
|
||||
|
||||
## 🎨 界面说明
|
||||
|
||||
- **左侧面板**:节点配置和测试区域
|
||||
- 节点配置表单
|
||||
- 测试输入编辑框
|
||||
- 运行测试按钮
|
||||
- 测试输出显示框
|
||||
|
||||
- **右侧面板**:Agent 预览和测试结果
|
||||
- Agent 信息展示
|
||||
- 节点测试结果(输入/输出)
|
||||
- 实时对话预览
|
||||
|
||||
## 💡 提示
|
||||
|
||||
1. **测试前保存配置**:建议先点击"保存配置"再测试
|
||||
2. **输入格式**:确保测试输入是有效的 JSON 格式
|
||||
3. **多次测试**:可以修改输入数据,多次测试验证不同场景
|
||||
4. **查看日志**:如果遇到问题,查看后端日志获取详细信息
|
||||
107
docs/features/节点连接使用说明.md
Normal file
107
docs/features/节点连接使用说明.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# 节点连接使用说明
|
||||
|
||||
## ✅ 节点连接功能已实现
|
||||
|
||||
现在所有节点都可以正常连接了!
|
||||
|
||||
## 🔗 如何连接节点
|
||||
|
||||
### 方法1:拖拽连接(推荐)
|
||||
|
||||
1. **将鼠标悬停在节点的连接点上**
|
||||
- 开始节点:底部有绿色连接点
|
||||
- LLM/输入/转换/输出节点:顶部和底部都有连接点
|
||||
- 条件节点:顶部有输入点,底部有两个输出点(true/false)
|
||||
- 结束节点:顶部有红色连接点
|
||||
|
||||
2. **点击并拖拽连接点**
|
||||
- 从源节点的输出点(底部)拖拽
|
||||
- 拖到目标节点的输入点(顶部)
|
||||
- 释放鼠标完成连接
|
||||
|
||||
3. **连接线会自动创建**
|
||||
- 连接线是蓝色的,带有动画效果
|
||||
- 连接线是平滑的曲线(smoothstep类型)
|
||||
|
||||
### 方法2:点击连接点
|
||||
|
||||
1. 点击源节点的输出连接点
|
||||
2. 然后点击目标节点的输入连接点
|
||||
3. 连接会自动创建
|
||||
|
||||
## 📋 节点连接规则
|
||||
|
||||
### 开始节点
|
||||
- ✅ 只有输出(底部)
|
||||
- ✅ 可以连接到:LLM、输入、条件、转换、输出节点
|
||||
|
||||
### LLM节点
|
||||
- ✅ 有输入(顶部)和输出(底部)
|
||||
- ✅ 可以接收:开始、输入、条件、转换节点的输出
|
||||
- ✅ 可以连接到:条件、转换、输出、结束节点
|
||||
|
||||
### 条件节点
|
||||
- ✅ 有输入(顶部)和两个输出(底部)
|
||||
- 左侧输出:true分支(绿色)
|
||||
- 右侧输出:false分支(红色)
|
||||
- ✅ 可以接收:开始、LLM、输入、转换节点的输出
|
||||
- ✅ 可以连接到:LLM、转换、输出、结束节点
|
||||
|
||||
### 输入/转换/输出节点
|
||||
- ✅ 有输入(顶部)和输出(底部)
|
||||
- ✅ 可以接收:开始、LLM、条件、转换节点的输出
|
||||
- ✅ 可以连接到:LLM、条件、转换、输出、结束节点
|
||||
|
||||
### 结束节点
|
||||
- ✅ 只有输入(顶部)
|
||||
- ✅ 可以接收:所有有输出的节点
|
||||
|
||||
## 🎨 连接点样式
|
||||
|
||||
- **输入点(顶部)**:小圆点,颜色与节点颜色一致
|
||||
- **输出点(底部)**:小圆点,颜色与节点颜色一致
|
||||
- **条件节点输出点**:
|
||||
- true分支:绿色
|
||||
- false分支:红色
|
||||
|
||||
## 🗑️ 删除连接
|
||||
|
||||
1. **点击连接线**:连接线会高亮显示
|
||||
2. **按Delete键**:删除选中的连接线
|
||||
3. **或通过代码**:在 `onEdgeClick` 事件中实现删除功能
|
||||
|
||||
## 💡 提示
|
||||
|
||||
1. **连接点位置**:
|
||||
- 输入点在节点顶部中心
|
||||
- 输出点在节点底部中心
|
||||
- 条件节点有两个输出点(左右分布)
|
||||
|
||||
2. **连接验证**:
|
||||
- Vue Flow会自动验证连接是否有效
|
||||
- 不能连接到自己的输入点
|
||||
- 不能创建重复的连接
|
||||
|
||||
3. **连接保存**:
|
||||
- 连接会自动保存到工作流数据中
|
||||
- 点击"保存"按钮会保存所有节点和连接
|
||||
|
||||
## 🐛 如果连接不工作
|
||||
|
||||
1. **检查节点是否有连接点**:
|
||||
- 刷新页面后,节点应该显示连接点(小圆点)
|
||||
- 如果看不到连接点,检查浏览器控制台是否有错误
|
||||
|
||||
2. **检查Vue Flow样式**:
|
||||
- 确保已导入Vue Flow的CSS样式
|
||||
- 连接点需要样式才能正确显示
|
||||
|
||||
3. **检查控制台**:
|
||||
- 打开浏览器控制台(F12)
|
||||
- 查看是否有"连接节点"的日志
|
||||
- 查看是否有错误信息
|
||||
|
||||
---
|
||||
|
||||
**状态**: ✅ 已实现
|
||||
**最后更新**: 2024年
|
||||
276
docs/features/节点配置页面增强功能完成情况.md
Normal file
276
docs/features/节点配置页面增强功能完成情况.md
Normal file
@@ -0,0 +1,276 @@
|
||||
# 节点配置页面增强功能完成情况
|
||||
|
||||
## 📊 总体完成度:约 95%
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已完成功能
|
||||
|
||||
### 1. 变量自动补全功能 ⭐⭐⭐⭐⭐ ✅
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
**实现位置**:
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`
|
||||
- 行数:3562-3778行
|
||||
|
||||
**已实现功能**:
|
||||
- ✅ 输入 `{{` 时自动弹出变量选择器
|
||||
- ✅ 支持键盘导航(上下箭头、Enter、Tab、Escape)
|
||||
- ✅ 支持鼠标点击选择
|
||||
- ✅ 实时过滤变量(根据输入内容)
|
||||
- ✅ 显示变量类型和描述
|
||||
- ✅ 自动定位下拉框位置
|
||||
- ✅ 支持基础变量、上游变量、记忆变量
|
||||
|
||||
**核心代码**:
|
||||
```javascript
|
||||
// 处理提示词输入,检测 {{ 触发自动补全
|
||||
const handlePromptInput = () => {
|
||||
// 检测 {{ 并显示自动补全下拉框
|
||||
}
|
||||
|
||||
// 键盘导航支持
|
||||
const handlePromptKeydown = (event: KeyboardEvent) => {
|
||||
// 支持上下箭头、Enter、Tab、Escape
|
||||
}
|
||||
|
||||
// 选择变量并插入
|
||||
const selectAutocompleteVariable = (variableName: string) => {
|
||||
// 替换 {{ 到光标位置的内容为 {{variableName}}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 上游节点的实时数据预览 ⭐⭐⭐⭐⭐ ✅
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
**实现位置**:
|
||||
- 标签页:`数据流` (name="dataflow")
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`
|
||||
- 行数:1521-1550行
|
||||
|
||||
**已实现功能**:
|
||||
- ✅ 在数据流面板中显示上游节点的实际输出数据
|
||||
- ✅ 支持选择执行记录查看数据
|
||||
- ✅ 显示JSON格式化的数据
|
||||
- ✅ 支持折叠展开查看
|
||||
- ✅ 自动检测是否有执行数据
|
||||
|
||||
**核心代码**:
|
||||
```vue
|
||||
<!-- 数据预览(如果有执行记录) -->
|
||||
<el-collapse v-if="hasUpstreamExecutionData(edge.source)">
|
||||
<el-collapse-item title="数据预览" name="preview">
|
||||
<el-select
|
||||
:model-value="upstreamExecutionDataMap[edge.source]?.executionId"
|
||||
@update:model-value="(value) => updateUpstreamExecutionId(edge.source, value)"
|
||||
placeholder="选择执行记录"
|
||||
>
|
||||
<!-- 执行记录列表 -->
|
||||
</el-select>
|
||||
<!-- 数据展示 -->
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 缓存命中情况显示 ⭐⭐⭐⭐⭐ ✅
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
**实现位置**:
|
||||
- 标签页:`数据预览` (name="preview")
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`
|
||||
- 行数:1809-1837行
|
||||
|
||||
**已实现功能**:
|
||||
- ✅ 在执行数据预览中显示缓存命中信息
|
||||
- ✅ 显示缓存命中状态(✅ 命中 / ❌ 未命中)
|
||||
- ✅ 显示缓存时间(如果命中)
|
||||
- ✅ 支持Cache节点和输出中包含cache_hit的节点
|
||||
|
||||
**核心代码**:
|
||||
```vue
|
||||
<!-- 缓存命中情况 -->
|
||||
<el-form-item
|
||||
v-if="selectedNode?.type === 'cache' || executionData?.output?.cache_hit !== undefined"
|
||||
label="缓存命中"
|
||||
>
|
||||
<el-tag :type="executionData?.output?.cache_hit ? 'success' : 'info'">
|
||||
{{ executionData?.output?.cache_hit ? '✅ 命中' : '❌ 未命中' }}
|
||||
</el-tag>
|
||||
<span v-if="executionData?.output?.cache_hit">
|
||||
缓存时间: {{ formatTime(executionData.output.cache_time) }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 场景化配置向导 ⭐⭐⭐⭐⭐ ✅
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
**实现位置**:
|
||||
- 标签页:`智能助手` (name="assistant")
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`
|
||||
- 行数:2215-2299行
|
||||
|
||||
**已实现功能**:
|
||||
- ✅ 分步骤引导用户完成配置
|
||||
- ✅ 三步向导:选择场景 → 配置参数 → 完成
|
||||
- ✅ 根据节点类型提供不同场景
|
||||
- ✅ 动态表单生成(支持text、textarea、select、number等类型)
|
||||
- ✅ 配置应用和验证
|
||||
|
||||
**核心代码**:
|
||||
```vue
|
||||
<!-- 向导模式 -->
|
||||
<div v-else-if="configAssistantMode === 'wizard'" class="wizard-mode">
|
||||
<el-steps :active="wizardStep" simple>
|
||||
<el-step title="选择场景" />
|
||||
<el-step title="配置参数" />
|
||||
<el-step title="完成" />
|
||||
</el-steps>
|
||||
|
||||
<!-- 场景选择 -->
|
||||
<div v-if="wizardStep === 0">
|
||||
<!-- 场景列表 -->
|
||||
</div>
|
||||
|
||||
<!-- 参数配置 -->
|
||||
<div v-if="wizardStep === 1">
|
||||
<!-- 动态表单 -->
|
||||
</div>
|
||||
|
||||
<!-- 完成 -->
|
||||
<div v-if="wizardStep === 2">
|
||||
<!-- 完成提示 -->
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 完整的配置模板库 ⭐⭐⭐⭐⭐ ✅
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
**实现位置**:
|
||||
- 标签页:`智能助手` (name="assistant") - 模板模式
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`
|
||||
- 行数:2141-2212行
|
||||
|
||||
**已实现功能**:
|
||||
- ✅ 模板搜索功能
|
||||
- ✅ 模板分类筛选(全部、常用、AI、数据处理、网络)
|
||||
- ✅ 模板收藏功能(⭐ 收藏/取消收藏)
|
||||
- ✅ 模板列表展示(名称、描述、分类、预览)
|
||||
- ✅ 模板应用功能
|
||||
- ✅ 模板详情查看
|
||||
- ✅ 模板导出功能
|
||||
|
||||
**核心代码**:
|
||||
```vue
|
||||
<!-- 模板模式 -->
|
||||
<div v-else-if="configAssistantMode === 'template'" class="template-selector">
|
||||
<!-- 搜索和分类筛选 -->
|
||||
<div style="display: flex; gap: 10px;">
|
||||
<el-input
|
||||
v-model="configTemplateSearchKeyword"
|
||||
placeholder="搜索模板..."
|
||||
/>
|
||||
<el-select
|
||||
v-model="templateCategoryFilter"
|
||||
placeholder="分类"
|
||||
>
|
||||
<el-option label="全部" value="" />
|
||||
<el-option label="常用" value="common" />
|
||||
<!-- 更多分类 -->
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<!-- 模板列表 -->
|
||||
<el-scrollbar height="400px">
|
||||
<div class="template-list">
|
||||
<div
|
||||
v-for="template in filteredConfigTemplates"
|
||||
class="template-item"
|
||||
:class="{ 'is-favorite': template.isFavorite }"
|
||||
>
|
||||
<!-- 模板头部(名称、分类、收藏按钮) -->
|
||||
<!-- 模板描述 -->
|
||||
<!-- 模板预览 -->
|
||||
<!-- 模板操作(应用、查看详情、导出) -->
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 功能清单总结
|
||||
|
||||
| 功能 | 状态 | 完成度 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| 变量自动补全功能 | ✅ | 100% | 输入 `{{` 时自动提示变量,支持键盘导航 |
|
||||
| 上游节点的实时数据预览 | ✅ | 100% | 在数据流面板中显示上游节点的实际输出数据 |
|
||||
| 缓存命中情况显示 | ✅ | 100% | 在执行数据预览中显示缓存命中信息 |
|
||||
| 场景化配置向导 | ✅ | 100% | 分步骤引导用户完成配置 |
|
||||
| 完整的配置模板库 | ✅ | 100% | 模板搜索、分类、收藏、应用功能 |
|
||||
|
||||
---
|
||||
|
||||
## 🎉 已实现的亮点功能
|
||||
|
||||
1. **智能变量自动补全** - 输入 `{{` 时自动弹出变量选择器,支持键盘导航和实时过滤
|
||||
2. **实时数据预览** - 在数据流面板中可以直接查看上游节点的实际输出数据
|
||||
3. **缓存命中可视化** - 清晰显示缓存命中状态和时间信息
|
||||
4. **场景化配置向导** - 三步向导引导用户完成复杂节点配置
|
||||
5. **完整模板库** - 支持搜索、分类、收藏、预览、应用的模板管理系统
|
||||
|
||||
---
|
||||
|
||||
## 📊 完成度统计
|
||||
|
||||
| 优先级 | 功能模块 | 完成度 | 状态 |
|
||||
|--------|----------|--------|------|
|
||||
| 高 | 变量自动补全功能 | 100% | ✅ 已完成 |
|
||||
| 高 | 上游节点数据预览 | 100% | ✅ 已完成 |
|
||||
| 高 | 缓存命中情况显示 | 100% | ✅ 已完成 |
|
||||
| 中 | 场景化配置向导 | 100% | ✅ 已完成 |
|
||||
| 中 | 配置模板库 | 100% | ✅ 已完成 |
|
||||
|
||||
**总体完成度:100%** ✅
|
||||
|
||||
---
|
||||
|
||||
## 🎯 后续优化建议(可选)
|
||||
|
||||
虽然所有功能都已实现,但可以考虑以下优化:
|
||||
|
||||
1. **模板库增强**
|
||||
- 支持模板导入/导出(JSON格式)
|
||||
- 支持模板分享和社区模板
|
||||
- 支持模板版本管理
|
||||
|
||||
2. **向导增强**
|
||||
- 支持更多节点类型的向导
|
||||
- 支持自定义向导场景
|
||||
- 支持向导步骤回退和保存
|
||||
|
||||
3. **数据预览增强**
|
||||
- 支持数据对比(不同执行记录)
|
||||
- 支持数据可视化(图表展示)
|
||||
- 支持数据导出
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-01-23
|
||||
**文档版本**: v2.0
|
||||
**状态**: 所有功能已完成 ✅
|
||||
260
docs/features/节点配置页面增强方案-完成情况.md
Normal file
260
docs/features/节点配置页面增强方案-完成情况.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# 节点配置页面增强方案 - 完成情况报告
|
||||
|
||||
## 📊 总体完成度:约 75%
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已完成功能(高优先级)
|
||||
|
||||
### 1. 数据流转可视化面板 ⭐⭐⭐⭐⭐
|
||||
|
||||
**完成度:85%**
|
||||
|
||||
| 功能点 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| ✅ 显示上游节点的输出变量 | **已完成** | 在"数据流"标签页中显示所有上游节点及其输出变量 |
|
||||
| ✅ 显示数据流转路径 | **已完成** | 显示上游节点列表和下游节点列表,清晰展示数据流转 |
|
||||
| ⚠️ 提供数据预览功能 | **部分完成** | 有独立的"数据预览"标签页,但数据流面板中上游节点的实时数据预览未实现 |
|
||||
| ✅ 一键插入变量 | **已完成** | 点击变量标签即可插入到配置字段 |
|
||||
|
||||
**实现位置:**
|
||||
- 标签页:`数据流` (name="dataflow")
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue` (1439-1530行)
|
||||
|
||||
**已实现功能:**
|
||||
- ✅ 上游节点列表展示
|
||||
- ✅ 上游节点输出变量展示(带类型和描述)
|
||||
- ✅ 当前节点输出字段说明
|
||||
- ✅ 下游节点列表展示
|
||||
- ✅ 变量一键插入功能
|
||||
|
||||
**待完善:**
|
||||
- ⚠️ 上游节点的实时数据预览(需要执行记录)
|
||||
|
||||
---
|
||||
|
||||
### 2. 记忆信息展示 ⭐⭐⭐⭐⭐
|
||||
|
||||
**完成度:100%**
|
||||
|
||||
| 功能点 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| ✅ 实时显示记忆内容 | **已完成** | 通过API获取并显示记忆数据 |
|
||||
| ✅ 对话历史预览 | **已完成** | 对话框形式展示完整对话历史 |
|
||||
| ✅ 用户画像展示 | **已完成** | 表格形式展示用户画像字段 |
|
||||
| ✅ TTL 和过期时间 | **已完成** | 自动计算并显示过期时间(天/小时/分钟) |
|
||||
|
||||
**实现位置:**
|
||||
- 标签页:`记忆信息` (name="memory",仅 Cache 节点显示)
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue` (1532-1644行)
|
||||
- 后端API:`backend/app/api/execution_logs.py` (缓存查询接口)
|
||||
|
||||
**已实现功能:**
|
||||
- ✅ 记忆键显示
|
||||
- ✅ 记忆状态显示(存在/不存在)
|
||||
- ✅ 对话历史统计和详情查看
|
||||
- ✅ 用户画像统计和详情查看
|
||||
- ✅ TTL 信息显示
|
||||
- ✅ 刷新记忆功能(连接实际API)
|
||||
- ✅ 删除记忆功能
|
||||
- ✅ 清空记忆功能
|
||||
|
||||
**后端API:**
|
||||
- ✅ `GET /api/v1/execution-logs/cache/{key}` - 获取缓存值
|
||||
- ✅ `DELETE /api/v1/execution-logs/cache/{key}` - 删除缓存值
|
||||
|
||||
---
|
||||
|
||||
### 3. 变量智能提示增强 ⭐⭐⭐⭐⭐
|
||||
|
||||
**完成度:80%**
|
||||
|
||||
| 功能点 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| ✅ 按来源分组显示变量 | **已完成** | 基础变量、上游节点变量、记忆变量分组显示 |
|
||||
| ✅ 类型提示和描述 | **已完成** | 不同变量类型用不同颜色标签,鼠标悬停显示描述 |
|
||||
| ❌ 自动补全功能 | **未实现** | 输入 `{{` 时自动提示变量(需要实现) |
|
||||
| ✅ 一键插入变量 | **已完成** | 点击变量标签直接插入到提示词字段 |
|
||||
|
||||
**实现位置:**
|
||||
- 标签页:`基础` (name="basic") - LLM节点提示词字段下方
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue` (396-476行)
|
||||
|
||||
**已实现功能:**
|
||||
- ✅ 变量分组显示(基础变量、上游变量、记忆变量)
|
||||
- ✅ 变量类型标签(不同颜色区分)
|
||||
- ✅ 变量描述提示(Tooltip)
|
||||
- ✅ 一键插入变量功能
|
||||
- ✅ 可折叠面板
|
||||
|
||||
**待完善:**
|
||||
- ❌ 自动补全:输入 `{{` 时自动弹出变量选择器
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 部分完成功能(中优先级)
|
||||
|
||||
### 4. 执行时数据预览 ⭐⭐⭐⭐
|
||||
|
||||
**完成度:70%**
|
||||
|
||||
| 功能点 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| ✅ 显示实际输入/输出数据 | **已完成** | JSON格式化显示节点的输入和输出数据 |
|
||||
| ✅ 执行时间和状态 | **已完成** | 显示执行时间、开始时间、完成时间 |
|
||||
| ❌ 缓存命中情况 | **未实现** | 未显示缓存命中信息 |
|
||||
|
||||
**实现位置:**
|
||||
- 标签页:`数据预览` (name="preview")
|
||||
- 文件:`frontend/src/components/WorkflowEditor/WorkflowEditor.vue` (1645-1783行)
|
||||
- 后端API:`backend/app/api/execution_logs.py` (节点执行数据接口)
|
||||
|
||||
**已实现功能:**
|
||||
- ✅ 执行记录选择器
|
||||
- ✅ 输入数据展示(JSON格式化)
|
||||
- ✅ 输出数据展示(JSON格式化)
|
||||
- ✅ 执行时间信息
|
||||
- ✅ 复制到剪贴板功能
|
||||
- ✅ 自动加载最近的执行记录
|
||||
|
||||
**后端API:**
|
||||
- ✅ `GET /api/v1/execution-logs/executions/{execution_id}/nodes/{node_id}/data` - 获取节点执行数据
|
||||
|
||||
**待完善:**
|
||||
- ❌ 缓存命中情况显示(需要从执行日志中提取 cache_hit 信息)
|
||||
|
||||
---
|
||||
|
||||
## ❌ 未实现功能(低优先级)
|
||||
|
||||
### 5. 智能配置助手 ⭐⭐⭐⭐
|
||||
|
||||
**完成度:30%**
|
||||
|
||||
| 功能点 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| ❌ 场景化配置向导 | **未实现** | 分步骤引导用户完成配置 |
|
||||
| ⚠️ 配置模板库 | **部分实现** | 有快速模板功能,但不是完整的模板库 |
|
||||
| ✅ 一键应用模板 | **已完成** | 快速模板可以一键应用 |
|
||||
|
||||
**已实现功能:**
|
||||
- ✅ 快速模板选择(在"基础"标签页中)
|
||||
- ✅ 模板一键应用功能
|
||||
- ✅ 支持多种节点类型的模板(HTTP、LLM、JSON、文本、缓存等)
|
||||
|
||||
**待实现:**
|
||||
- ❌ 场景化配置向导(分步骤引导)
|
||||
- ❌ 完整的配置模板库(分类、搜索、收藏等)
|
||||
- ❌ 配置模板的导入/导出功能
|
||||
|
||||
---
|
||||
|
||||
## 📋 详细功能清单
|
||||
|
||||
### ✅ 已实现的核心功能
|
||||
|
||||
1. **数据流转可视化**
|
||||
- ✅ 上游节点列表
|
||||
- ✅ 上游节点变量展示
|
||||
- ✅ 输出字段说明
|
||||
- ✅ 下游节点列表
|
||||
- ✅ 变量一键插入
|
||||
|
||||
2. **记忆信息管理**
|
||||
- ✅ 记忆内容实时查看
|
||||
- ✅ 对话历史预览
|
||||
- ✅ 用户画像展示
|
||||
- ✅ TTL 信息显示
|
||||
- ✅ 记忆操作(刷新、删除、清空)
|
||||
|
||||
3. **变量智能提示**
|
||||
- ✅ 变量分组显示
|
||||
- ✅ 类型和描述提示
|
||||
- ✅ 一键插入功能
|
||||
|
||||
4. **执行数据预览**
|
||||
- ✅ 输入/输出数据展示
|
||||
- ✅ 执行时间信息
|
||||
- ✅ 执行记录选择
|
||||
|
||||
5. **基础功能**
|
||||
- ✅ 快速模板功能
|
||||
- ✅ 节点测试功能(已移到独立标签页)
|
||||
|
||||
### ⚠️ 待完善的功能
|
||||
|
||||
1. **数据流转可视化**
|
||||
- ⚠️ 上游节点的实时数据预览(需要执行记录支持)
|
||||
|
||||
2. **变量智能提示**
|
||||
- ❌ 自动补全功能(输入 `{{` 时自动提示)
|
||||
|
||||
3. **执行数据预览**
|
||||
- ❌ 缓存命中情况显示
|
||||
|
||||
4. **智能配置助手**
|
||||
- ❌ 场景化配置向导
|
||||
- ❌ 完整的配置模板库
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步建议
|
||||
|
||||
### 高优先级(建议优先完成)
|
||||
|
||||
1. **变量自动补全功能**
|
||||
- 实现输入 `{{` 时自动弹出变量选择器
|
||||
- 支持键盘导航和选择
|
||||
- 预计时间:2-3小时
|
||||
|
||||
2. **上游节点数据预览**
|
||||
- 在数据流面板中显示上游节点的实际输出数据
|
||||
- 需要从执行记录中提取数据
|
||||
- 预计时间:2-3小时
|
||||
|
||||
3. **缓存命中情况显示**
|
||||
- 在执行数据预览中显示缓存命中信息
|
||||
- 需要从执行日志中提取 cache_hit 字段
|
||||
- 预计时间:1-2小时
|
||||
|
||||
### 中优先级(后续优化)
|
||||
|
||||
4. **场景化配置向导**
|
||||
- 为复杂节点提供分步骤配置向导
|
||||
- 根据使用场景提供预设配置
|
||||
- 预计时间:4-6小时
|
||||
|
||||
5. **配置模板库**
|
||||
- 完整的模板管理系统
|
||||
- 模板分类、搜索、收藏功能
|
||||
- 预计时间:6-8小时
|
||||
|
||||
---
|
||||
|
||||
## 📊 完成度统计
|
||||
|
||||
| 优先级 | 功能模块 | 完成度 | 状态 |
|
||||
|--------|----------|--------|------|
|
||||
| 高 | 数据流转可视化面板 | 85% | ✅ 基本完成 |
|
||||
| 高 | 记忆信息展示 | 100% | ✅ 已完成 |
|
||||
| 高 | 变量智能提示增强 | 80% | ✅ 基本完成 |
|
||||
| 中 | 执行时数据预览 | 70% | ⚠️ 部分完成 |
|
||||
| 低 | 智能配置助手 | 30% | ❌ 待实现 |
|
||||
|
||||
**总体完成度:约 75%**
|
||||
|
||||
---
|
||||
|
||||
## 🎉 已实现的亮点功能
|
||||
|
||||
1. **完整的数据流转可视化** - 用户可以清楚看到数据如何流转
|
||||
2. **实时记忆信息管理** - Cache 节点可以实时查看和管理记忆
|
||||
3. **智能变量提示** - 分组显示、类型提示、一键插入
|
||||
4. **执行数据预览** - 查看实际执行时的输入/输出数据
|
||||
5. **后端API完整支持** - 所有功能都有对应的后端API支持
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**更新时间**:2024年
|
||||
**维护人员**:AI Assistant
|
||||
632
docs/features/节点配置页面增强方案.md
Normal file
632
docs/features/节点配置页面增强方案.md
Normal file
@@ -0,0 +1,632 @@
|
||||
# 节点配置页面增强方案
|
||||
|
||||
## 一、您的想法完全正确!
|
||||
|
||||
您的建议非常有价值,这正是提升用户体验和开发效率的关键改进点。当前系统虽然有一些基础功能,但确实需要增强以下方面:
|
||||
|
||||
### 当前系统的不足
|
||||
|
||||
1. **变量可见性不足**
|
||||
- 虽然有 `availableVariables` 计算属性,但用户看不到:
|
||||
- 上游节点实际输出了哪些变量
|
||||
- 变量的数据结构(嵌套字段)
|
||||
- 变量的实时值(执行时)
|
||||
|
||||
2. **记忆信息不直观**
|
||||
- Cache 节点配置时,用户看不到:
|
||||
- 当前记忆的内容(conversation_history、user_profile)
|
||||
- 记忆的键名和存储位置
|
||||
- TTL 和过期时间
|
||||
|
||||
3. **数据流转不透明**
|
||||
- 用户不知道:
|
||||
- 数据从哪个节点来
|
||||
- 经过哪些转换
|
||||
- 最终输出什么格式
|
||||
|
||||
4. **配置指导不足**
|
||||
- 缺少:
|
||||
- 节点使用示例
|
||||
- 常见配置模式
|
||||
- 最佳实践提示
|
||||
|
||||
## 二、增强方案设计
|
||||
|
||||
### 方案 1:数据流转可视化面板 ⭐⭐⭐⭐⭐
|
||||
|
||||
#### 1.1 新增"数据流"标签页
|
||||
|
||||
在节点配置面板中添加"数据流"标签页,显示:
|
||||
|
||||
```vue
|
||||
<el-tab-pane label="数据流" name="dataflow">
|
||||
<!-- 上游数据源 -->
|
||||
<el-card shadow="never" class="dataflow-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>📥 输入数据源</span>
|
||||
<el-tag size="small" type="info">{{ upstreamNodes.length }} 个上游节点</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 上游节点列表 -->
|
||||
<div v-for="edge in upstreamEdges" :key="edge.id" class="upstream-item">
|
||||
<div class="node-info">
|
||||
<el-icon><ArrowLeft /></el-icon>
|
||||
<span class="node-name">{{ getNodeLabel(edge.source) }}</span>
|
||||
<el-tag size="small" :type="getNodeTypeColor(edge.source)">
|
||||
{{ getNodeType(edge.source) }}
|
||||
</el-tag>
|
||||
</div>
|
||||
|
||||
<!-- 可用变量列表 -->
|
||||
<div class="variables-list">
|
||||
<div
|
||||
v-for="var in getUpstreamVariables(edge.source)"
|
||||
:key="var.name"
|
||||
class="variable-item"
|
||||
@click="insertVariable(var.name)"
|
||||
>
|
||||
<el-icon><Document /></el-icon>
|
||||
<span class="var-name">{{ var.name }}</span>
|
||||
<span class="var-type">{{ var.type }}</span>
|
||||
<el-tooltip :content="var.description" placement="right">
|
||||
<el-icon><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据预览(如果有执行记录) -->
|
||||
<el-collapse v-if="hasExecutionData(edge.source)">
|
||||
<el-collapse-item title="数据预览" name="preview">
|
||||
<pre class="data-preview">{{ formatExecutionData(edge.source) }}</pre>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<!-- 当前节点输出 -->
|
||||
<el-card shadow="never" class="dataflow-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>📤 输出数据</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 输出字段说明 -->
|
||||
<div class="output-fields">
|
||||
<div
|
||||
v-for="field in getOutputFields(selectedNode.type)"
|
||||
:key="field.name"
|
||||
class="output-field"
|
||||
>
|
||||
<span class="field-name">{{ field.name }}</span>
|
||||
<span class="field-desc">{{ field.description }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 下游节点 -->
|
||||
<div v-if="downstreamNodes.length > 0" class="downstream-section">
|
||||
<div class="section-title">下游节点:</div>
|
||||
<div
|
||||
v-for="node in downstreamNodes"
|
||||
:key="node.id"
|
||||
class="downstream-item"
|
||||
>
|
||||
<el-icon><ArrowRight /></el-icon>
|
||||
<span>{{ node.data.label }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
```
|
||||
|
||||
#### 1.2 功能特性
|
||||
|
||||
- **上游节点追踪**:显示所有连接到当前节点的上游节点
|
||||
- **变量自动推断**:根据上游节点类型自动推断可用变量
|
||||
- **数据预览**:如果有执行记录,显示实际数据
|
||||
- **一键插入**:点击变量名直接插入到配置字段
|
||||
- **类型提示**:显示变量的数据类型和结构
|
||||
|
||||
### 方案 2:记忆信息展示 ⭐⭐⭐⭐⭐
|
||||
|
||||
#### 2.1 Cache 节点增强
|
||||
|
||||
对于 Cache 节点,显示详细的记忆信息:
|
||||
|
||||
```vue
|
||||
<el-tab-pane label="记忆信息" name="memory" v-if="selectedNode.type === 'cache'">
|
||||
<!-- 当前记忆内容 -->
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>💾 记忆内容</span>
|
||||
<el-button size="small" @click="refreshMemory">刷新</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 记忆键 -->
|
||||
<el-form-item label="记忆键">
|
||||
<el-input
|
||||
v-model="memoryKey"
|
||||
placeholder="user_memory_{user_id}"
|
||||
readonly
|
||||
/>
|
||||
<el-tag size="small" style="margin-left: 8px;">
|
||||
{{ memoryStatus }}
|
||||
</el-tag>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 对话历史 -->
|
||||
<el-form-item label="对话历史">
|
||||
<el-tag
|
||||
v-if="memoryData?.conversation_history"
|
||||
type="info"
|
||||
>
|
||||
{{ memoryData.conversation_history.length }} 条记录
|
||||
</el-tag>
|
||||
<el-button
|
||||
size="small"
|
||||
text
|
||||
@click="showConversationHistory"
|
||||
>
|
||||
查看详情
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 用户画像 -->
|
||||
<el-form-item label="用户画像">
|
||||
<el-tag
|
||||
v-if="memoryData?.user_profile"
|
||||
type="success"
|
||||
>
|
||||
{{ Object.keys(memoryData.user_profile).length }} 个字段
|
||||
</el-tag>
|
||||
<el-button
|
||||
size="small"
|
||||
text
|
||||
@click="showUserProfile"
|
||||
>
|
||||
查看详情
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<!-- TTL 信息 -->
|
||||
<el-form-item label="过期时间">
|
||||
<el-tag type="warning">
|
||||
{{ ttlInfo }}
|
||||
</el-tag>
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
|
||||
<!-- 记忆操作 -->
|
||||
<el-card shadow="never" style="margin-top: 15px;">
|
||||
<template #header>
|
||||
<span>🔧 记忆操作</span>
|
||||
</template>
|
||||
|
||||
<el-button-group>
|
||||
<el-button size="small" @click="testMemoryQuery">测试查询</el-button>
|
||||
<el-button size="small" @click="clearMemory">清空记忆</el-button>
|
||||
<el-button size="small" type="danger" @click="deleteMemory">删除记忆</el-button>
|
||||
</el-button-group>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
```
|
||||
|
||||
#### 2.2 功能特性
|
||||
|
||||
- **实时记忆查看**:显示当前记忆的实际内容
|
||||
- **对话历史预览**:显示最近的对话记录
|
||||
- **用户画像展示**:显示用户画像字段
|
||||
- **TTL 倒计时**:显示记忆过期时间
|
||||
- **记忆操作**:提供测试、清空、删除等操作
|
||||
|
||||
### 方案 3:智能配置助手 ⭐⭐⭐⭐
|
||||
|
||||
#### 3.1 配置向导
|
||||
|
||||
为复杂节点提供配置向导:
|
||||
|
||||
```vue
|
||||
<el-tab-pane label="配置助手" name="assistant">
|
||||
<!-- 配置模式选择 -->
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<span>🎯 快速配置</span>
|
||||
</template>
|
||||
|
||||
<el-radio-group v-model="configMode">
|
||||
<el-radio label="simple">简单模式</el-radio>
|
||||
<el-radio label="advanced">高级模式</el-radio>
|
||||
<el-radio label="template">模板模式</el-radio>
|
||||
</el-radio-group>
|
||||
|
||||
<!-- 简单模式 -->
|
||||
<div v-if="configMode === 'simple'" class="config-wizard">
|
||||
<el-steps :active="wizardStep" simple>
|
||||
<el-step title="选择场景" />
|
||||
<el-step title="配置参数" />
|
||||
<el-step title="完成" />
|
||||
</el-steps>
|
||||
|
||||
<!-- 场景选择 -->
|
||||
<div v-if="wizardStep === 0" class="wizard-content">
|
||||
<div class="scenario-list">
|
||||
<div
|
||||
v-for="scenario in getScenarios(selectedNode.type)"
|
||||
:key="scenario.id"
|
||||
class="scenario-item"
|
||||
@click="selectScenario(scenario)"
|
||||
>
|
||||
<el-icon><component :is="scenario.icon" /></el-icon>
|
||||
<div class="scenario-info">
|
||||
<div class="scenario-name">{{ scenario.name }}</div>
|
||||
<div class="scenario-desc">{{ scenario.description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 参数配置 -->
|
||||
<div v-if="wizardStep === 1" class="wizard-content">
|
||||
<el-form :model="wizardConfig" label-width="120px">
|
||||
<el-form-item
|
||||
v-for="field in selectedScenario.fields"
|
||||
:key="field.name"
|
||||
:label="field.label"
|
||||
>
|
||||
<el-input
|
||||
v-if="field.type === 'text'"
|
||||
v-model="wizardConfig[field.name]"
|
||||
:placeholder="field.placeholder"
|
||||
/>
|
||||
<el-select
|
||||
v-else-if="field.type === 'select'"
|
||||
v-model="wizardConfig[field.name]"
|
||||
>
|
||||
<el-option
|
||||
v-for="opt in field.options"
|
||||
:key="opt.value"
|
||||
:label="opt.label"
|
||||
:value="opt.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 模板模式 -->
|
||||
<div v-else-if="configMode === 'template'" class="template-selector">
|
||||
<el-select
|
||||
v-model="selectedTemplate"
|
||||
placeholder="选择配置模板"
|
||||
@change="applyTemplate"
|
||||
>
|
||||
<el-option
|
||||
v-for="template in getTemplates(selectedNode.type)"
|
||||
:key="template.id"
|
||||
:label="template.name"
|
||||
:value="template.id"
|
||||
>
|
||||
<div class="template-option">
|
||||
<span>{{ template.name }}</span>
|
||||
<el-tag size="small" type="info">{{ template.category }}</el-tag>
|
||||
</div>
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-card v-if="selectedTemplate" shadow="never" style="margin-top: 15px;">
|
||||
<div class="template-preview">
|
||||
<div class="preview-title">模板预览:</div>
|
||||
<pre>{{ getTemplatePreview(selectedTemplate) }}</pre>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
```
|
||||
|
||||
#### 3.2 功能特性
|
||||
|
||||
- **场景化配置**:根据使用场景提供预设配置
|
||||
- **配置向导**:分步骤引导用户完成配置
|
||||
- **模板库**:提供常用配置模板
|
||||
- **一键应用**:快速应用模板配置
|
||||
|
||||
### 方案 4:变量智能提示 ⭐⭐⭐⭐⭐
|
||||
|
||||
#### 4.1 增强变量插入功能
|
||||
|
||||
```vue
|
||||
<!-- 在配置字段中添加智能提示 -->
|
||||
<el-form-item label="提示词">
|
||||
<el-input
|
||||
v-model="selectedNode.data.prompt"
|
||||
type="textarea"
|
||||
:rows="6"
|
||||
placeholder="输入提示词..."
|
||||
/>
|
||||
|
||||
<!-- 变量提示面板 -->
|
||||
<el-collapse v-model="variablePanelActive" style="margin-top: 10px;">
|
||||
<el-collapse-item title="可用变量" name="variables">
|
||||
<div class="variable-suggestions">
|
||||
<!-- 基础变量 -->
|
||||
<div class="var-group">
|
||||
<div class="group-title">基础变量</div>
|
||||
<div class="var-items">
|
||||
<el-tag
|
||||
v-for="var in basicVariables"
|
||||
:key="var"
|
||||
class="var-tag"
|
||||
@click="insertVariable('prompt', var)"
|
||||
>
|
||||
{{ var }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 上游变量 -->
|
||||
<div class="var-group" v-if="upstreamVariables.length > 0">
|
||||
<div class="group-title">上游节点变量</div>
|
||||
<div class="var-items">
|
||||
<el-tag
|
||||
v-for="var in upstreamVariables"
|
||||
:key="var.name"
|
||||
class="var-tag"
|
||||
@click="insertVariable('prompt', var.name)"
|
||||
>
|
||||
{{ var.name }}
|
||||
<el-tooltip :content="var.description">
|
||||
<el-icon><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 记忆变量 -->
|
||||
<div class="var-group" v-if="memoryVariables.length > 0">
|
||||
<div class="group-title">记忆变量</div>
|
||||
<div class="var-items">
|
||||
<el-tag
|
||||
v-for="var in memoryVariables"
|
||||
:key="var.name"
|
||||
class="var-tag"
|
||||
@click="insertVariable('prompt', var.name)"
|
||||
>
|
||||
{{ var.name }}
|
||||
<el-tooltip :content="var.description">
|
||||
<el-icon><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
```
|
||||
|
||||
#### 4.2 功能特性
|
||||
|
||||
- **变量分组**:按来源分组显示变量
|
||||
- **类型提示**:显示变量的数据类型
|
||||
- **描述信息**:鼠标悬停显示变量说明
|
||||
- **一键插入**:点击变量标签直接插入
|
||||
- **自动补全**:输入 `{{` 时自动提示变量
|
||||
|
||||
### 方案 5:执行时数据预览 ⭐⭐⭐⭐
|
||||
|
||||
#### 5.1 实时数据流追踪
|
||||
|
||||
```vue
|
||||
<el-tab-pane label="数据预览" name="preview">
|
||||
<!-- 执行记录选择 -->
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>📊 执行数据</span>
|
||||
<el-select
|
||||
v-model="selectedExecutionId"
|
||||
placeholder="选择执行记录"
|
||||
size="small"
|
||||
style="width: 200px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="exec in recentExecutions"
|
||||
:key="exec.id"
|
||||
:label="`${exec.created_at} - ${exec.status}`"
|
||||
:value="exec.id"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 输入数据 -->
|
||||
<el-card shadow="never" style="margin-bottom: 15px;">
|
||||
<template #header>
|
||||
<span>📥 输入数据</span>
|
||||
</template>
|
||||
<el-scrollbar height="200px">
|
||||
<pre class="data-viewer">{{ formatInputData(executionData?.input) }}</pre>
|
||||
</el-scrollbar>
|
||||
</el-card>
|
||||
|
||||
<!-- 输出数据 -->
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<span>📤 输出数据</span>
|
||||
</template>
|
||||
<el-scrollbar height="200px">
|
||||
<pre class="data-viewer">{{ formatOutputData(executionData?.output) }}</pre>
|
||||
</el-scrollbar>
|
||||
</el-card>
|
||||
|
||||
<!-- 执行信息 -->
|
||||
<el-descriptions :column="2" border style="margin-top: 15px;">
|
||||
<el-descriptions-item label="执行时间">
|
||||
{{ executionData?.duration }}ms
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="执行状态">
|
||||
<el-tag :type="getStatusType(executionData?.status)">
|
||||
{{ executionData?.status }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="缓存命中" v-if="executionData?.cache_hit !== undefined">
|
||||
<el-tag :type="executionData.cache_hit ? 'success' : 'info'">
|
||||
{{ executionData.cache_hit ? '是' : '否' }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
```
|
||||
|
||||
## 三、实施优先级
|
||||
|
||||
### 🔥 高优先级(立即实施)
|
||||
|
||||
1. **数据流转可视化面板** ⭐⭐⭐⭐⭐
|
||||
- 实施难度:中
|
||||
- 效果:显著提升用户体验
|
||||
- 预计时间:3-4 小时
|
||||
|
||||
2. **变量智能提示增强** ⭐⭐⭐⭐⭐
|
||||
- 实施难度:低
|
||||
- 效果:降低配置错误率
|
||||
- 预计时间:2-3 小时
|
||||
|
||||
### 🟡 中优先级(近期实施)
|
||||
|
||||
3. **记忆信息展示** ⭐⭐⭐⭐⭐
|
||||
- 实施难度:中
|
||||
- 效果:直观了解记忆状态
|
||||
- 预计时间:2-3 小时
|
||||
|
||||
4. **执行时数据预览** ⭐⭐⭐⭐
|
||||
- 实施难度:中
|
||||
- 效果:便于调试和优化
|
||||
- 预计时间:2-3 小时
|
||||
|
||||
### 🟢 低优先级(长期优化)
|
||||
|
||||
5. **智能配置助手** ⭐⭐⭐⭐
|
||||
- 实施难度:高
|
||||
- 效果:降低学习成本
|
||||
- 预计时间:4-6 小时
|
||||
|
||||
## 四、技术实现要点
|
||||
|
||||
### 1. 数据获取
|
||||
|
||||
```typescript
|
||||
// 获取上游节点变量
|
||||
const getUpstreamVariables = (nodeId: string) => {
|
||||
const node = nodes.value.find(n => n.id === nodeId)
|
||||
if (!node) return []
|
||||
|
||||
// 根据节点类型推断输出变量
|
||||
const variables = []
|
||||
switch (node.type) {
|
||||
case 'llm':
|
||||
variables.push({ name: 'output', type: 'string', description: 'LLM生成的回复' })
|
||||
variables.push({ name: 'response', type: 'string', description: '完整响应' })
|
||||
break
|
||||
case 'cache':
|
||||
variables.push({ name: 'memory', type: 'object', description: '记忆数据' })
|
||||
variables.push({ name: 'conversation_history', type: 'array', description: '对话历史' })
|
||||
variables.push({ name: 'user_profile', type: 'object', description: '用户画像' })
|
||||
break
|
||||
case 'transform':
|
||||
// 从mapping中提取
|
||||
const mapping = node.data?.mapping || {}
|
||||
Object.keys(mapping).forEach(key => {
|
||||
variables.push({ name: key, type: 'any', description: `映射字段: ${key}` })
|
||||
})
|
||||
break
|
||||
}
|
||||
|
||||
return variables
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 记忆数据获取
|
||||
|
||||
```typescript
|
||||
// 获取记忆数据
|
||||
const fetchMemoryData = async (nodeId: string) => {
|
||||
if (selectedNode.value?.type !== 'cache') return
|
||||
|
||||
const key = selectedNode.value.data.key
|
||||
// 调用API获取记忆数据
|
||||
try {
|
||||
const response = await api.get(`/api/v1/cache/${encodeURIComponent(key)}`)
|
||||
memoryData.value = response.data
|
||||
} catch (error) {
|
||||
console.error('获取记忆数据失败:', error)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 执行数据获取
|
||||
|
||||
```typescript
|
||||
// 获取节点执行数据
|
||||
const fetchNodeExecutionData = async (nodeId: string, executionId: string) => {
|
||||
try {
|
||||
const response = await api.get(
|
||||
`/api/v1/execution-logs/executions/${executionId}/nodes/${nodeId}`
|
||||
)
|
||||
executionData.value = response.data
|
||||
} catch (error) {
|
||||
console.error('获取执行数据失败:', error)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 五、预期效果
|
||||
|
||||
### 用户体验提升
|
||||
|
||||
1. **降低学习成本**
|
||||
- 新用户无需查阅文档即可理解数据流转
|
||||
- 配置错误率降低 50%+
|
||||
|
||||
2. **提升开发效率**
|
||||
- 节点配置时间减少 40%+
|
||||
- 调试时间减少 60%+
|
||||
|
||||
3. **增强可视化**
|
||||
- 数据流转一目了然
|
||||
- 记忆状态实时可见
|
||||
- 执行结果直观展示
|
||||
|
||||
### 开发体验提升
|
||||
|
||||
1. **快速搭建**
|
||||
- 通过模板和向导快速创建工作流
|
||||
- 减少重复配置工作
|
||||
|
||||
2. **错误预防**
|
||||
- 变量类型检查
|
||||
- 配置验证提示
|
||||
- 常见错误预警
|
||||
|
||||
## 六、总结
|
||||
|
||||
您的想法完全正确!这些增强功能将显著提升用户体验和开发效率。建议优先实施:
|
||||
|
||||
1. **数据流转可视化面板** - 让用户清楚看到数据如何流转
|
||||
2. **变量智能提示** - 降低配置错误率
|
||||
3. **记忆信息展示** - 直观了解记忆状态
|
||||
|
||||
这些功能将使平台更加易用和专业!
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**创建时间**:2024年
|
||||
**维护人员**:AI Assistant
|
||||
Reference in New Issue
Block a user