# Pipeline DSL 系统
> **版本**: v0.10.0
> **更新日期**: 2026-04-01
> **状态**: ✅ 完整实现 (90% 完整度)
> **架构**: Rust 后端 (zclaw-pipeline crate) + React 前端
> **Crate 完整度**: **90%**
---
## 一、概述
Pipeline DSL 是 ZCLAW 的自动化工作流编排系统,允许用户通过声明式 YAML 配置定义多步骤任务。
### 1.1 核心特性
- **声明式配置**: 使用 YAML 定义工作流步骤
- **状态管理**: ExecutionContext 管理步骤间数据传递
- **表达式解析**: 支持 `${inputs.topic}`、`${steps.step1.output}` 等表达式
- **并行执行**: 支持 `parallel` 动作并行处理多个项目
- **LLM 集成**: 内置 `llm_generate` 动作调用大语言模型
- **文件导出**: 支持 PPTX/HTML/PDF/Markdown 等格式导出
- **Agent 集成**: 在对话中智能推荐相关 Pipeline
### 1.2 设计原则
- **用户只看到 Pipeline**: Hands/Skills 作为内部实现被隐藏
- **行业扩展**: 支持垂直扩展(不同学科)和水平扩展(跨行业)
- **智能推荐**: Agent 主动识别用户意图,推荐合适的 Pipeline
---
## 二、架构设计
### 2.1 分层架构
```
┌─────────────────────────────────────────────────────────┐
│ User Interface │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Pipeline List│ │ Pipeline Run│ │ Result Preview │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Pipeline Engine │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ DSL Parser │ │ Executor │ │ State Manager │ │
│ │ YAML/TOML │ │ DAG Runner │ │ Context Store │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐
│ Skills (隐藏) │ │ Hands (隐藏)│ │ Exporters │
│ prompt templates│ │ executors │ │ pptx/html/pdf │
└─────────────────┘ └─────────────┘ └─────────────────┘
```
### 2.2 核心组件
| 组件 | 职责 | 位置 | 实现状态 |
|------|------|------|---------|
| PipelineParser | YAML 解析 | `crates/zclaw-pipeline/src/parser.rs` | ✅ 100% |
| PipelineExecutor | 执行引擎 | `crates/zclaw-pipeline/src/executor.rs` | ✅ 100% |
| ExecutionContext | 状态管理 | `crates/zclaw-pipeline/src/state.rs` | ✅ 100% |
| ActionRegistry | 动作注册 | `crates/zclaw-pipeline/src/actions/mod.rs` | ✅ 100% |
| PipelineClient | 前端客户端 | `desktop/src/lib/pipeline-client.ts` | ✅ 95% |
| PipelinesPanel | UI 组件 | `desktop/src/components/PipelinesPanel.tsx` | ✅ 90% |
| PipelineRecommender | 智能推荐 | `desktop/src/lib/pipeline-recommender.ts` | ✅ 85% |
| ClassroomPreviewer | 课堂预览 | `desktop/src/components/ClassroomPreviewer.tsx` | ✅ 90% |
### 2.3 Action 实现状态
| Action | 状态 | 说明 |
|--------|------|------|
| `llm_generate` | ✅ | LLM 生成 |
| `parallel` | ✅ | 并行执行 |
| `sequential` | ✅ | 顺序执行 |
| `condition` | ✅ | 条件判断 |
| `skill` | ✅ | 技能调用 |
| `hand` | ✅ | Hand 调用 |
| `classroom` | ✅ | 课堂生成 |
| `export` | ✅ | 文件导出 |
| `http` | ✅ | HTTP 请求 |
---
## 三、Pipeline 配置格式
### 3.1 基本结构
```yaml
apiVersion: zclaw/v1
kind: Pipeline
metadata:
name: my-pipeline
displayName: 我的 Pipeline
category: productivity
description: 这是一个示例 Pipeline
tags:
- 示例
- 测试
icon: 🚀
author: ZCLAW
version: 1.0.0
spec:
inputs:
- name: topic
type: string
required: true
label: 主题
placeholder: 请输入主题
steps:
- id: step1
description: 第一步
action:
type: llm_generate
template: |
处理以下主题: {{topic}}
json_mode: true
temperature: 0.7
max_tokens: 1000
outputs:
result: ${steps.step1.output}
on_error: stop
timeout_secs: 300
```
### 3.2 输入类型
| 类型 | 说明 | 默认值 |
|------|------|--------|
| `string` | 单行文本 | `""` |
| `text` | 多行文本 | `""` |
| `number` | 数字 | `0` |
| `boolean` | 布尔值 | `false` |
| `select` | 单选 | `null` |
| `multi-select` | 多选 | `[]` |
| `file` | 文件 | `null` |
### 3.3 动作类型
| 动作 | 说明 | 示例 |
|------|------|------|
| `llm_generate` | LLM 生成 | 文本生成、数据分析 |
| `parallel` | 并行执行 | 批量处理 |
| `sequential` | 顺序执行 | 条件分支 |
| `condition` | 条件判断 | 流程控制 |
| `skill` | 调用技能 | 使用预定义技能 |
| `hand` | 调用 Hand | 浏览器操作、文件处理 |
| `file_export` | 文件导出 | PPTX/HTML/PDF |
| `http_request` | HTTP 请求 | API 调用 |
| `set_var` | 设置变量 | 数据转换 |
| `delay` | 延迟 | 等待操作 |
### 3.4 表达式语法
```yaml
# 输入参数
${inputs.topic}
# 步骤输出
${steps.step1.output}
${steps.step1.output.items}
# 循环变量 (在 parallel 中)
${item}
${index}
# 变量引用
${vars.my_variable}
# 函数调用
${chrono::Utc::now().to_rfc3339()}
```
---
## 四、已实现的 Pipeline 模板
### 4.1 教育类 (education)
| Pipeline | 说明 | 文件 |
|----------|------|------|
| 互动课堂生成器 | 输入课题,自动生成完整课件 | `pipelines/education/classroom.yaml` |
### 4.2 营销类 (marketing)
| Pipeline | 说明 | 文件 |
|----------|------|------|
| 营销方案生成器 | 输入产品信息,生成完整营销策略 | `pipelines/marketing/campaign.yaml` |
### 4.3 法律类 (legal)
| Pipeline | 说明 | 文件 |
|----------|------|------|
| 合同智能审查 | 上传合同,识别风险条款并生成建议 | `pipelines/legal/contract-review.yaml` |
### 4.4 研究类 (research)
| Pipeline | 说明 | 文件 |
|----------|------|------|
| 文献综述生成器 | 输入研究主题,生成文献综述报告 | `pipelines/research/literature-review.yaml` |
### 4.5 生产力类 (productivity)
| Pipeline | 说明 | 文件 |
|----------|------|------|
| 智能会议纪要 | 输入会议内容,生成结构化纪要 | `pipelines/productivity/meeting-summary.yaml` |
---
## 五、前端组件
### 5.1 PipelinesPanel
Pipeline 列表和运行界面。
```tsx
import { PipelinesPanel } from './components/PipelinesPanel';
// 在路由中使用
} />
```
**功能**:
- 分类过滤
- 关键词搜索
- Pipeline 卡片展示
- 运行对话框(输入参数配置)
- 进度显示
### 5.2 PipelineResultPreview
Pipeline 执行结果预览组件。
```tsx
import { PipelineResultPreview } from './components/PipelineResultPreview';
setShowResult(false)}
/>
```
**预览模式**:
- JSON 数据预览
- Markdown 渲染
- 文件下载列表
- 自动模式检测
### 5.3 ClassroomPreviewer
课堂内容专用预览器。
```tsx
import { ClassroomPreviewer } from './components/ClassroomPreviewer';
handleExport(format)}
/>
```
**功能**:
- 幻灯片导航
- 大纲视图
- 自动播放
- 全屏模式
- 讲解文本显示
- 导出功能
---
## 六、Agent 对话集成
### 6.1 智能推荐
PipelineRecommender 分析用户消息,推荐相关 Pipeline:
```tsx
import { pipelineRecommender } from './lib/pipeline-recommender';
// 分析用户消息
const recommendations = await pipelineRecommender.recommend(userMessage);
if (recommendations.length > 0) {
const topRec = recommendations[0];
// 向用户展示推荐
const message = pipelineRecommender.formatRecommendationForAgent(topRec);
}
```
### 6.2 意图识别模式
| 类别 | 关键词模式 | 推荐 Pipeline |
|------|------------|---------------|
| 教育 | 课件、教案、备课 | classroom-generator |
| 营销 | 营销、推广、宣传 | marketing-campaign |
| 法律 | 合同审查、风险条款 | contract-review |
| 研究 | 文献综述、学术研究 | literature-review |
| 生产力 | 会议纪要、待办事项 | meeting-summary |
### 6.3 推荐阈值
- **置信度 >= 0.8**: 直接推荐
- **置信度 0.6-0.8**: 询问用户
- **置信度 < 0.6**: 不推荐
---
## 七、Tauri 命令
### 7.1 命令列表
| 命令 | 说明 | 参数 |
|------|------|------|
| `pipeline_list` | 列出所有 Pipeline | `category?` |
| `pipeline_get` | 获取 Pipeline 详情 | `pipelineId` |
| `pipeline_run` | 运行 Pipeline | `request` |
| `pipeline_progress` | 获取运行进度 | `runId` |
| `pipeline_result` | 获取运行结果 | `runId` |
| `pipeline_cancel` | 取消运行 | `runId` |
| `pipeline_runs` | 列出所有运行 | - |
| `pipeline_refresh` | 刷新 Pipeline 列表 | - |
### 7.2 使用示例
```typescript
// 列出所有 Pipeline
const pipelines = await invoke('pipeline_list', { category: null });
// 运行 Pipeline
const { runId } = await invoke('pipeline_run', {
request: {
pipelineId: 'classroom-generator',
inputs: { topic: '牛顿第二定律', difficulty: '中级' }
}
});
// 获取进度
const progress = await invoke('pipeline_progress', { runId });
```
---
## 八、文件结构
```
crates/zclaw-pipeline/
├── Cargo.toml
├── src/
│ ├── lib.rs
│ ├── parser.rs # YAML 解析
│ ├── executor.rs # 执行引擎
│ ├── state.rs # 状态管理
│ ├── types.rs # 类型定义
│ └── actions/ # 内置动作
│ ├── mod.rs
│ ├── llm.rs
│ ├── parallel.rs
│ └── export.rs
pipelines/
├── education/
│ └── classroom.yaml
├── marketing/
│ └── campaign.yaml
├── legal/
│ └── contract-review.yaml
├── research/
│ └── literature-review.yaml
└── productivity/
└── meeting-summary.yaml
desktop/src/
├── lib/
│ ├── pipeline-client.ts # 前端客户端
│ └── pipeline-recommender.ts # 智能推荐
└── components/
├── PipelinesPanel.tsx # Pipeline 列表
├── PipelineResultPreview.tsx # 结果预览
└── ClassroomPreviewer.tsx # 课堂预览器
```
---
## 九、智能展示层 (Smart Presentation Layer)
### 9.1 概述
智能展示层是 Pipeline 输出的渲染系统,能够自动分析数据结构并推荐最佳展示格式。
### 9.2 支持的展示类型
| 类型 | 说明 | 检测规则 |
|------|------|---------|
| `document` | Markdown 文档 | 包含 content 或 text 字段 |
| `chart` | 数据可视化 | 包含 datasets、series 或 chartType |
| `quiz` | 互动测验 | 包含 questions 数组 |
| `slideshow` | 幻灯片 | 包含 slides 数组 |
| `whiteboard` | 交互式白板 | 包含 elements 数组 |
### 9.3 Rust 后端组件
| 组件 | 职责 | 位置 |
|------|------|------|
| PresentationType | 类型枚举 | `crates/zclaw-pipeline/src/presentation/types.rs` |
| PresentationAnalyzer | 数据分析器 | `crates/zclaw-pipeline/src/presentation/analyzer.rs` |
| PresentationRegistry | 渲染器注册表 | `crates/zclaw-pipeline/src/presentation/registry.rs` |
### 9.4 React 前端组件
| 组件 | 职责 | 位置 |
|------|------|------|
| PresentationContainer | 主容器组件 | `desktop/src/components/presentation/PresentationContainer.tsx` |
| TypeSwitcher | 类型切换器 | `desktop/src/components/presentation/TypeSwitcher.tsx` |
| ChartRenderer | 图表渲染 | `desktop/src/components/presentation/renderers/ChartRenderer.tsx` |
| QuizRenderer | 测验渲染 | `desktop/src/components/presentation/renderers/QuizRenderer.tsx` |
| SlideshowRenderer | 幻灯片渲染 | `desktop/src/components/presentation/renderers/SlideshowRenderer.tsx` |
| DocumentRenderer | 文档渲染 | `desktop/src/components/presentation/renderers/DocumentRenderer.tsx` |
### 9.5 使用示例
```tsx
import { PresentationContainer } from '@/components/presentation';
// 在 Pipeline 结果展示中使用
```
### 9.6 Tauri 命令
| 命令 | 说明 | 参数 |
|------|------|------|
| `analyze_presentation` | 分析数据推荐展示类型 | `data: Value` |
### 9.7 检测算法
```rust
// 检测逻辑示例
fn detect_quiz(data: &Value) -> f64 {
if let Some(obj) = data.as_object() {
if obj.contains_key("questions") && obj["questions"].is_array() {
return 0.95;
}
}
0.0
}
```
---
## 十、扩展指南
### 9.1 添加新 Pipeline
1. 在 `pipelines/` 目录下创建 YAML 文件
2. 定义 `metadata`(名称、类别、描述等)
3. 定义 `inputs`(输入参数)
4. 定义 `steps`(执行步骤)
5. 定义 `outputs`(输出映射)
### 9.2 添加新 Action
1. 在 `crates/zclaw-pipeline/src/actions/` 创建新模块
2. 实现 `ActionExecutor` trait
3. 在 `ActionRegistry` 中注册
4. 更新 Parser 支持新动作类型
---
## 十一、变更历史
| 日期 | 版本 | 变更内容 |
|------|------|---------|
| 2026-03-26 | v0.5.0 | 新增智能展示层 (Smart Presentation Layer),支持自动类型检测和多种渲染器 |
| 2026-03-25 | v0.4.0 | 代码现状验证:90% 完整度,新增 Action 实现状态表 |
| 2026-03-25 | v0.3.0 | Pipeline DSL 系统实现,包含 5 类 Pipeline 模板 |