Files
jczxw-pc/public/docs/workflow.md
2026-04-23 16:30:57 +08:00

327 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI 工作流配置
> 使用 OpenClaw 工作流引擎,构建定时任务与自动化业务流。
## 🔄 什么是工作流?
工作流Workflow是预定义的一系列自动化步骤可以
-**定时执行**:每天早上发送报表
- 🔗 **事件触发**:用户注册后自动发送欢迎邮件
- 🔁 **条件分支**:根据条件执行不同操作
- 📊 **数据处理**:批量处理数据
## 🏗️ 核心概念
| 概念 | 说明 |
|------|------|
| **触发器 (Trigger)** | 工作流的启动条件 |
| **节点 (Node)** | 工作流中的单个步骤 |
| **连接 (Edge)** | 节点之间的数据流向 |
| **变量 (Variable)** | 存储和传递数据 |
| **执行日志** | 每次运行的记录 |
## 🚀 创建第一个工作流
### 方式一:代码定义
```typescript
import { WorkflowBuilder } from '@websopy/ai-sdk'
const workflow = new WorkflowBuilder({
name: '每日数据报告',
description: '每天早上 9 点生成数据报告'
})
// 添加触发器:定时执行
workflow.addTrigger({
type: 'schedule',
config: {
cron: '0 9 * * *', // 每天 9:00
timezone: 'Asia/Shanghai'
}
})
// 添加节点:获取数据
workflow.addNode('fetch-data', {
type: 'http-request',
config: {
url: 'https://api.analytics.com/daily-stats',
method: 'GET'
}
})
// 添加节点:生成报告
workflow.addNode('generate-report', {
type: 'ai-agent',
config: {
prompt: '根据以下数据生成日报:{{fetch-data.output}}'
}
})
// 添加节点:发送邮件
workflow.addNode('send-email', {
type: 'email',
config: {
to: ['team@company.com'],
subject: '📊 每日数据报告',
body: '{{generate-report.output}}'
}
})
// 节点连接
workflow.connect('fetch-data', 'generate-report')
workflow.connect('generate-report', 'send-email')
// 保存
const created = await client.workflow.create(workflow.toJSON())
console.log('工作流 ID:', created.id)
```
### 方式二:可视化编辑器
在控制台 → AI 功能 → 工作流,点击「新建工作流」打开可视化编辑器。
## 📦 节点类型
### 1. HTTP 请求
```typescript
workflow.addNode('call-api', {
type: 'http-request',
config: {
url: 'https://api.example.com/data',
method: 'POST',
headers: {
'Authorization': 'Bearer xxx'
},
body: {
query: 'SELECT * FROM orders'
}
}
})
```
### 2. AI 智能体
```typescript
workflow.addNode('analyze', {
type: 'ai-agent',
config: {
model: 'gpt-4',
prompt: '分析以下数据,找出异常:{{input}}',
temperature: 0.5
}
})
```
### 3. 条件分支
```typescript
workflow.addNode('check-status', {
type: 'condition',
config: {
conditions: [
{
expression: '{{input.amount}} > 10000',
nextNode: 'high-value-handler'
},
{
expression: '{{input.amount}} > 1000',
nextNode: 'medium-handler'
}
],
default: 'low-value-handler'
}
})
```
### 4. 循环
```typescript
workflow.addNode('process-items', {
type: 'loop',
config: {
items: '{{batch-data.items}}',
maxIterations: 100,
// 循环体节点
nodes: [...]
}
})
```
### 5. 等待/延迟
```typescript
workflow.addNode('delay', {
type: 'delay',
config: {
duration: '24h' // 或 3600000毫秒
}
})
```
### 6. Webhook
```typescript
workflow.addNode('notify', {
type: 'webhook',
config: {
url: 'https://your-server.com/webhook',
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: {
event: 'workflow.completed',
data: '{{workflow-output}}'
}
}
})
```
## 🔔 触发器类型
### 定时触发
```typescript
workflow.addTrigger({
type: 'schedule',
config: {
cron: '0 */4 * * *', // 每 4 小时
// 或使用简单表达式
interval: 'daily', // daily, weekly, monthly
time: '09:00'
}
})
```
### Webhook 触发
```typescript
workflow.addTrigger({
type: 'webhook',
config: {
// 创建后获得 webhook URL
}
})
```
### 事件触发
```typescript
workflow.addTrigger({
type: 'event',
config: {
events: [
'user.created',
'order.completed',
'ai.task.failed'
]
}
})
```
## 🔧 变量与数据处理
### 定义变量
```typescript
workflow.addNode('process', {
type: 'transform',
config: {
variables: {
totalAmount: '{{input.orders}} | sum("amount")',
avgScore: '{{input.reviews}} | avg("score")',
userNames: '{{input.users}} | map("name")'
}
}
})
```
### 数据转换
```typescript
workflow.addNode('transform', {
type: 'transform',
config: {
// 过滤器
filter: '{{data}} | filter(item => item.active == true)',
// 映射
map: '{{data}} | map(item => ({ id: item.id, name: item.name }))',
// 排序
sort: '{{data}} | sortBy("created_at", "desc")'
}
})
```
## 📊 执行与监控
### 手动执行
```typescript
// 立即执行一次
const run = await client.workflow.run(workflowId, {
input: {
date: '2024-01-15'
}
})
console.log('执行 ID:', run.id)
```
### 查看执行日志
```typescript
const logs = await client.workflow.getRunLogs(run.id)
for (const log of logs) {
console.log(`[${log.timestamp}] ${log.node}: ${log.status}`)
if (log.error) {
console.log(' 错误:', log.error)
}
}
```
### 执行状态
```typescript
const status = await client.workflow.getRunStatus(run.id)
console.log('状态:', status.status) // running, completed, failed
console.log('当前节点:', status.currentNode)
console.log('已用时间:', status.elapsedTime)
```
## ❓ 常见问题
### Q: 工作流执行失败怎么办?
1. 查看执行日志定位问题节点
2. 检查输入数据格式
3. 查看节点配置是否正确
4. 联系支持时提供执行 ID
### Q: 如何调试工作流?
使用「测试执行」功能,传入测试数据,逐步查看每个节点的输出。
### Q: 可以嵌套工作流吗?
是的,可以在一个工作流中调用另一个工作流:
```typescript
workflow.addNode('sub-workflow', {
type: 'workflow',
config: {
workflowId: 'wf-xxx',
input: '{{current-data}}'
}
})
```
---
**上一步:** [RAG 知识库搭建](./rag.md)
**下一步:** [Docker Compose 部署](./docker.md)