第十三章 · 可视化编排与执行追踪

本章定位:上一章讲了工作流有哪些节点(积木)。本章回答两个问题:用户怎么在界面上把积木搭成流程图?搭完后系统怎么执行这张图、并实时展示「执行到哪一步了」? 前者是可视化编辑(基于 AntV X6),后者是引擎执行 + SSE 实时追踪 + 执行详情回填。两者合起来,构成了 SparkX 工作流「所见即所得、所执行即所见」的完整体验。


一、可视化编排:用 AntV X6 搭节点图

1. 为什么用 X6

工作流编辑器需要一个图形画布——用户拖拽节点、连线、看到整张流程图。SparkX 选用 AntV X6

需求 X6 的支持
拖拽放节点 graph.addNode() + drop 事件
连线 端口(port)+ 连接校验(allowPort
节点用 Vue 组件渲染 @antv/x6-vue-shape 注册 Vue 组件为节点形状
序列化/反序列化 graph.toJSON() / graph.fromJSON()
禁止环路 allowLoop: false(只允许 DAG)

2. 画布初始化

// admin/src/views/workflow/edit.vue
const graph = new Graph({
    container: containerEl,
    selecting: true,      // 可选中
    history: true,        // 撤销重做
    panning: true,        // 可平移
    scroller: true,       // 可滚动
    interacting: true,    // 可交互
    connecting: {
        connector: 'smooth',       // 贝塞尔曲线连线
        allowLoop: false,          // ★ 禁止自环(DAG)
        allowNode: false,
        allowBlank: false,
        allowPort: validatePort,   // ★ 连接校验
        createEdge: () => new Shape.Edge({ /* 样式 */ })
    }
});

3. 节点用 Vue 组件渲染

每个节点类型注册一个 Vue 组件作为 X6 形状:

// admin/src/views/workflow/node.js
import { register } from '@antv/x6-vue-shape';
import LlmNode from './node/llm.vue';
import DatasetNode from './node/dataset.vue';
// ...

register({ shape: 'llm-node', component: LlmNode });
register({ shape: 'dataset-node', component: DatasetNode });
// ...
---

## 🔒 以上为本章部分预览(约 10%)

> 本章剩余 **90%** 内容包含:关键源码逐行拆解、设计细节与工程权衡、代码示例与生产实践要点。

<div class="unlock-cta">
  <button class="unlock-btn" onclick="openModal()">
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2">
      <rect x="3" y="11" width="18" height="11" rx="2"/>
      <path d="M7 11V7a5 5 0 0 1 10 0v4"/>
    </svg>
    🔑 点击解锁本章完整内容
  </button>
  <span class="unlock-hint">加入知识星球,获取《SparkX 源码深度解析》全部 13 章</span>
</div>

> 💡 **本次展示的仅为部分预览内容(约 10%)**。完整的源码深度解析包含每一个技术点的完整实现细节。点击上方按钮扫码加入知识星球,解锁全部内容。
🔒

本章为知识星球会员专属内容

完整源码解析、设计决策与落地实践,加入知识星球即可解锁全部章节。

知识星球
🌟 加入知识星球
解锁源码与设计详解
知识星球二维码 了解详情