可不可以给trae做一个可视化节点界面。

# Trea系统数据流可视化功能设计方案

## 基于光点动画的提示词处理流程实时展示

-–

## 文档信息

| 项目 | 内容 |

|------|------|

| 版本 | v1.0 |

| 日期 | 2026-05-05 |

| 状态 | 设计方案 |

-–

## 1. 功能概述与设计理念

### 1.1 核心功能描述

数据流可视化模块用于实时展示用户提示词在Harness Engineering系统中的处理流程,通过光点动画形式让用户直观感知数据在各模型间的流转状态。

### 1.2 设计目标

- **直观性**:用户一眼可感知数据流向与处理阶段

- **实时性**:光点移动速度与实际处理速度成比例

- **层次性**:通过颜色区分不同层级模型交互

- **可控性**:支持暂停/播放,便于细节查看

### 1.3 视觉风格定义

| 元素 | 样式定义 |

|------|----------|

| 光点基础 | 圆形,半径6px,发光效果 |

| 主任务光点 | 蓝色 `#2196F3`,发光半径15px |

| 子任务光点 | 橙色 `#FF9800`,发光半径10px |

| 连接线 | 渐变线条,宽度2-4px(脉冲效果) |

| 模型节点 | 圆角矩形,60x60px,状态变化时缩放1.1倍 |

-–

## 2. 界面布局设计

### 2.1 整体布局

```

┌─────────────────────────────────────────────────────────────────┐

│ 数据流可视化 [暂停] [播放] │

├─────────────────────────────────────────────────────────────────┤

│ │

│ ┌─────────┐ │

│ │ 主模型 │ ← 光点从输入区飞来 │

│ │ Node-A │ │

│ └────┬────┘ │

│ │ 分裂成3个子光点 │

│ ┌─────────────┼─────────────┐ │

│ ↓ ↓ ↓ │

│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │

│ │ 子模型1 │ │ 子模型2 │ │ 子模型3 │ │

│ │ Node-B1 │ │ Node-B2 │ │ Node-B3 │ │

│ └─────────┘ └─────────┘ └─────────┘ │

│ │

├─────────────────────────────────────────────────────────────────┤

│ [用户输入区] → [处理中…] → [任务拆分可视化] → [结果聚合] │

└─────────────────────────────────────────────────────────────────┘

```

### 2.2 模型层级关系图结构

```

┌─────────────────────────────────────────────────────────────────┐

│ 模型层级关系图 │

├─────────────────────────────────────────────────────────────────┤

│ │

│ ┌───────────┐ │

│ │ Level 0 │ 主模型层 │

│ │ 主模型 │ │

│ └─────┬─────┘ │

│ │ │

│ ┌───────────────┼───────────────┐ │

│ ↓ ↓ ↓ │

│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │

│ │ Level 1 │ │ Level 1 │ │ Level 1 │ │

│ │ 子模型1 │ │ 子模型2 │ │ 子模型3 │ │

│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │

│ │ │ │ │

│ └───────────────┼───────────────┘ │

│ ↓ │

│ ┌───────────┐ │

│ │ Level 2 │ 细粒度任务处理层 │

│ │ 工具/原子 │ │

│ └───────────┘ │

│ │

└─────────────────────────────────────────────────────────────────┘

```

-–

## 3. 光点动画详细规格

### 3.1 光点属性定义

```typescript

interface LightPoint {

id: string; // 唯一标识

type: ‘primary’ | ‘sub’ | ‘result’; // 光点类型

color: string; // 颜色值

radius: number; // 半径

glowRadius: number; // 发光效果半径

position: { x: number; y: number }; // 当前位置

targetPosition: { x: number; y: number }; // 目标位置

speed: number; // 移动速度(px/帧)

opacity: number; // 透明度

trail: Position[]; // 拖尾轨迹点

}

interface Position {

x: number;

y: number;

timestamp: number;

}

```

### 3.2 光点类型与颜色

| 类型 | 颜色代码 | 含义 | 半径 | 发光半径 |

|------|----------|------|------|----------|

| 主光点 | `#2196F3` | 用户输入任务 | 6px | 15px |

| 子光点 | `#FF9800` | 拆分后子任务 | 5px | 10px |

| 返回光点 | `#4CAF50` | 结果返回 | 6px | 12px |

| 聚合光点 | `#9C27B0` | 结果聚合 | 7px | 15px |

### 3.3 光点生成与分裂动画

#### 3.3.1 初始光点生成

```

触发时机:用户提交提示词后100ms内

生成动画:

1. 在输入区域中心生成光点(scale: 0 → 1,200ms)

2. 光点出现后立即开始移动

3. 移动轨迹:贝塞尔曲线,从输入区到主模型节点

```

#### 3.3.2 光点分裂动画

```

触发时机:主模型返回任务拆分结果时

分裂过程:

┌─────────────────────────────────────────────────────┐

│ │

│ ● 主光点 │

│ (移动到分裂节点位置) │

│ │ │

│ │ 触发分裂 │

│ ↓ │

│ ┌─────────────────┐ │

│ │ 分裂动画区 │ │

│ │ 延迟: 150ms │ │

│ │ 原光点渐隐 │ │

│ └────────┬────────┘ │

│ ┌─────────┼─────────┐ │

│ ↓ ↓ ↓ │

│ ● ● ● │

│ 子光点1 子光点2 子光点3 │

│ (依次出现,间隔50ms) │

│ │

└─────────────────────────────────────────────────────┘

动画参数:

- 分裂延迟:150ms

- 子光点出现间隔:50ms

- 单个子光点生成动画:150ms (scale 0→1)

```

-–

## 4. 动态连接线规格

### 4.1 连接线类型

| 类型 | 样式 | 应用场景 |

|------|------|----------|

| 实线 | 普通实线 | 稳定的数据流 |

| 虚线 | 短划线动画 | 等待处理状态 |

| 脉冲线 | 宽度动态变化 | 正在传输中的数据 |

### 4.2 脉冲效果实现

```typescript

interface PulseLine {

baseWidth: number; // 基础线宽 2px

maxWidth: number; // 最大线宽 4px

pulseSpeed: number; // 脉冲速度 0.1/帧

pulseWidth: number; // 当前脉冲宽度

flowDirection: ‘forward’ | ‘backward’; // 流向

}

// 脉冲动画伪代码

function updatePulse(line: PulseLine) {

line.pulseWidth += line.pulseSpeed;

if (line.pulseWidth > line.maxWidth) {

line.pulseWidth = line.baseWidth;

}

// 绘制时使用 line.pulseWidth 作为线宽

}

```

### 4.3 动态路径绘制

```

路径绘制规则:

1. 根据起止节点位置计算贝塞尔曲线控制点

2. 控制点偏移量 = 节点间距 * 0.3

3. 路径上叠加脉冲效果动画

4. 箭头指示流向(位于路径末端)

```

-–

## 5. 模型节点状态动画

### 5.1 状态类型定义

| 状态 | 视觉表现 | 动画参数 |

|------|----------|----------|

| 空闲 | 正常显示 | 无 |

| 接收中 | 颜色加深10%,边框高亮 | 150ms ease-out |

| 处理中 | 轻微脉动动画 | scale 1.0-1.05, 500ms循环 |

| 完成 | 颜色恢复,绿色标记 | 200ms |

| 错误 | 红色边框,抖动 | shake 3次 |

### 5.2 状态动画规格

```typescript

interface NodeAnimation {

// 接收状态动画

onReceive: {

scale: 1.0 → 1.1 → 1.0,  // 轻微放大

duration: 150,

easing: 'ease-out'

},

// 处理中动画

onProcessing: {

scale: 1.0 → 1.05 → 1.0,  // 脉动

duration: 500,

repeat: true,

easing: 'ease-in-out'

},

// 完成动画

onComplete: {

colorShift: normal → highlight → normal,

duration: 200,

easing: 'ease-out'

}

}

```

-–

## 6. 交互控制功能

### 6.1 暂停/播放控制

| 功能 | 快捷键 | 按钮位置 | 说明 |

|------|--------|----------|------|

| 暂停 | `Space` | 顶部工具栏 | 暂停所有动画 |

| 播放 | `Space` | 顶部工具栏 | 恢复动画 |

| 停止 | `Esc` | 顶部工具栏 | 停止并重置 |

| 慢速 | `S` | 顶部工具栏 | 0.5倍速播放 |

| 正常速 | `N` | 顶部工具栏 | 1倍速播放 |

| 快速 | `F` | 顶部工具栏 | 2倍速播放 |

### 6.2 时间轴控制

```

时间轴组件设计:

┌─────────────────────────────────────────────────────────────────┐

│ [|<] [<] [:play_button:/❚❚] [>] [>|] [0%]═══════[100%] │

│ 重置 后退 播放/暂停 前进 结尾 进度滑块 │

└─────────────────────────────────────────────────────────────────┘

功能说明:

- 支持拖拽定位到任意时间点

- 显示当前处理阶段名称

- 显示已用时间/预计总时间

```

### 6.3 细节查看模式

| 功能 | 触发方式 | 效果 |

|------|----------|------|

| 节点高亮 | 悬停节点 | 非相关节点降低透明度 |

| 数据预览 | 点击节点 | 弹出数据详情面板 |

| 路径高亮 | 悬停光点 | 完整路径高亮显示 |

| 速度调节 | 滚轮 | 调整播放速度0.1x-3x |

-–

## 7. 数据结构设计

### 7.1 核心数据结构

```typescript

// 数据流事件

interface DataFlowEvent {

id: string;

timestamp: number;

type: EventType;

sourceNodeId: string;

targetNodeId?: string;

data?: any;

duration?: number; // 预计处理时长

}

type EventType =

| ‘input_received’ // 输入接收

| ‘task_splitting’ // 任务拆分

| ‘subtask_created’ // 子任务创建

| ‘subtask_processing’ // 子任务处理中

| ‘subtask_complete’ // 子任务完成

| ‘result_aggregating’ // 结果聚合

| ‘flow_complete’; // 流程完成

// 可视化节点

interface VisualNode {

id: string;

modelId: string;

modelName: string;

level: number; // 层级 0, 1, 2

position: { x: number; y: number };

status: NodeStatus;

inputConnections: string[];

outputConnections: string[];

}

// 可视化连接

interface VisualConnection {

id: string;

sourceNodeId: string;

targetNodeId: string;

type: ‘primary’ | ‘secondary’;

active: boolean;

progress: number; // 0-1 传输进度

}

// 数据流状态

interface DataFlowState {

events: DataFlowEvent[];

activeLightPoints: LightPoint[];

connections: VisualConnection[];

currentPhase: string;

totalDuration: number;

elapsedTime: number;

isPaused: boolean;

playbackSpeed: number;

}

```

### 7.2 事件序列示例

```

用户输入:“分析销售数据并生成报告”

事件序列:

1. { type: ‘input_received’, timestamp: 0 }

└─ 在输入区生成主光点

2. { type: ‘task_splitting’, timestamp: 200, targetNodeId: ‘main_model’ }

└─ 光点移动到主模型

3. { type: ‘subtask_created’, timestamp: 500, data: { count: 3 } }

└─ 主光点分裂为3个子光点

4. { type: ‘subtask_processing’, timestamp: 600, targetNodeId: ‘sub_model_1’ }

└─ 子光点1移动到子模型1

5. { type: ‘subtask_processing’, timestamp: 650, targetNodeId: ‘sub_model_2’ }

└─ 子光点2移动到子模型2

6. { type: ‘subtask_processing’, timestamp: 700, targetNodeId: ‘sub_model_3’ }

└─ 子光点3移动到子模型3

7. { type: ‘result_aggregating’, timestamp: 2000 }

└─ 子光点返回,聚合

8. { type: ‘flow_complete’, timestamp: 2500 }

└─ 最终结果光点到达输出区

```

-–

## 8. 技术实现方案

### 8.1 技术选型

| 层级 | 技术 | 说明 |

|------|------|------|

| 渲染引擎 | Pixi.js | 高性能2D渲染,适合粒子动画 |

| 动画库 | GSAP | 专业动画库,支持时间线控制 |

| 状态管理 | Zustand | 轻量级,支持中间件 |

| 框架 | React 18 | 组件化开发 |

### 8.2 核心模块架构

```

┌─────────────────────────────────────────────────────────────┐

│ DataFlowVisualization │

├─────────────────────────────────────────────────────────────┤

│ │

│ ┌─────────────────┐ ┌─────────────────┐ │

│ │ CanvasLayer │ │ UILayer │ │

│ │ - 光点渲染 │ │ - 控制面板 │ │

│ │ - 连接线渲染 │ │ - 时间轴 │ │

│ │ - 节点渲染 │ │ - 状态显示 │ │

│ └────────┬────────┘ └────────┬────────┘ │

│ │ │ │

│ └────────────┬───────────┘ │

│ ↓ │

│ ┌─────────────────┐ │

│ │ AnimationEngine │ │

│ │ - 光点动画管理 │ │

│ │ - 脉冲效果控制 │ │

│ │ - 状态机管理 │ │

│ └────────┬────────┘ │

│ ↓ │

│ ┌─────────────────┐ │

│ │ DataFlowStore │ │

│ │ - 状态管理 │ │

│ │ - 事件队列 │ │

│ │ - 回放支持 │ │

│ └─────────────────┘ │

│ │

└─────────────────────────────────────────────────────────────┘

```

### 8.3 性能优化策略

| 优化项 | 方案 | 预期效果 |

|--------|------|----------|

| 光点数量 | 对象池复用 | 减少GC |

| 渲染批次 | 批量绘制光点 | 提升60%性能 |

| 连接线 | 预计算路径 | 减少计算量 |

| 动画 | requestAnimationFrame | 流畅60fps |

| 拖尾效果 | 限制轨迹点数量 | 10个点/光点 |

-–

## 9. 组件清单

### 9.1 组件列表

| 组件名 | 功能 | 状态 |

|--------|------|------|

| DataFlowCanvas | 主画布容器 | 待开发 |

| LightPoint | 光点渲染组件 | 待开发 |

| ConnectionLine | 动态连接线 | 待开发 |

| ModelNode | 模型节点展示 | 待开发 |

| ControlPanel | 播放控制面板 | 待开发 |

| Timeline | 时间轴组件 | 待开发 |

| DataPreview | 数据预览弹窗 | 待开发 |

| PhaseIndicator | 阶段指示器 | 待开发 |

### 9.2 组件API示例

```tsx

// DataFlowCanvas 使用示例

<DataFlowCanvas

width={1200}

height={800}

nodes={modelNodes}

connections={connections}

events={dataFlowEvents}

playbackSpeed={1}

onNodeClick={(nodeId) => console.log(‘node clicked:’, nodeId)}

onPhaseChange={(phase) => console.log(‘phase:’, phase)}

/>

// ControlPanel 使用示例

<ControlPanel

isPaused={isPaused}

playbackSpeed={speed}

progress={progress}

onPlay={() => setIsPaused(false)}

onPause={() => setIsPaused(true)}

onSpeedChange={(s) => setSpeed(s)}

onSeek={(p) => seekTo(p)}

/>

```

-–

## 10. 实施计划

### 10.1 开发阶段

| 阶段 | 内容 | 周期 |

|------|------|------|

| Phase 1 | 基础画布搭建,节点渲染 | 3天 |

| Phase 2 | 光点动画系统 | 4天 |

| Phase 3 | 连接线动态效果 | 2天 |

| Phase 4 | 交互控制系统 | 3天 |

| Phase 5 | 状态管理与数据流集成 | 3天 |

| Phase 6 | 性能优化与测试 | 3天 |

### 10.2 验收标准

| 指标 | 目标值 |

|------|--------|

| 动画流畅度 | ≥55fps |

| 光点数量支持 | ≥50个同时动画 |

| 内存占用 | 增加≤100MB |

| 首屏加载 | ≤1.5s |

| 事件响应 | ≤16ms |

-–

**文档结束**

1 个赞

您好,指的是markdown的预览是吗?