## 六阶段流水线
每次 Robot 执行依次经过最多六个阶段:
| 阶段 | 名称 | 触发条件 | 说明 |
|------|------|----------|------|
| P0 | Inspiration | 仅 Clock | 根据上下文、计划和资源生成每日简报 |
| P1 | Goals | 全部 | 将触发输入(或 P0 报告)转化为具体目标 |
| P2 | Tasks | 全部 | 将目标拆分为有序的可执行任务列表 |
| P3 | Run | 全部 | 使用 Agent、MCP 工具或 Yao Process 逐个执行任务 |
| P4 | Delivery | 全部 | 汇总结果并推送到外部系统 |
| P5 | Learning | 全部 | 提取模式并保存到 Robot 的私有知识库 |
**Clock 触发**从 P0 开始。**Human** 和 **Event** 触发跳过 P0,从 P1 开始 —— 触发输入本身作为目标上下文。
```
Clock ──► P0 ──► P1 ──► P2 ──► P3 ──► P4 ──► P5
Human ──────────► P1 ──► P2 ──► P3 ──► P4 ──► P5
Event ──────────► P1 ──► P2 ──► P3 ──► P4 ──► P5
```
## Phase-Agent 插槽
每个阶段由专门的 Agent 执行。Yao 通过两级优先链解析 Agent ID:
1. **单 Robot 覆盖** —— `robot_config` 中的 `resources.phases`
2. **全局默认** —— `agent.yml` 中的 `uses` 节
```yaml
# agent.yml —— 所有 Robot 的全局默认
uses:
inspiration: myns/inspiration-agent
goals: myns/goals-agent
tasks: myns/tasks-agent
delivery: myns/delivery-agent
learning: myns/learning-agent
host: myns/host-agent # 跨阶段,处理人机交互
validation: myns/validation-agent # 任务输出验证
```
> **注意:** P3(Run)没有 Agent 插槽 —— 它是内置的任务调度器。P0–P2、P4–P5、Host 和 Validation 可配置。
单个 Robot 覆盖设置在 `robot_config` 中:
```json
{
"resources": {
"phases": {
"inspiration": "myns/special-inspiration",
"delivery": "myns/slack-delivery"
}
}
}
```
只覆盖你指定的阶段,其余保持全局默认。
## Execution 对象
所有阶段共享一个 `Execution` 对象,随流水线流转逐步积累状态:
```
Execution
├── TriggerType ("clock" | "human" | "event")
├── Input (触发载荷)
├── Inspiration (P0 输出)
├── Goals (P1 输出)
├── Tasks[] (P2 输出)
├── Results[] (P3 输出 —— 每个任务一条)
├── Delivery (P4 输出)
└── Learning[] (P5 输出)
```
每个阶段读取前序字段并写入自己的字段。Delivery Agent(P4)可以访问完整的执行历史,即使个别任务失败也能做出全面的汇总。
## 并发与配额
单个 Robot 可以同时运行多个执行。在 `robot_config` 中设置配额控制:
```json
{
"quota": {
"max": 2,
"queue": 10,
"priority": 5
}
}
```
| 字段 | 默认值 | 说明 |
|------|--------|------|
| `max` | `2` | 最大并发执行数 |
| `queue` | `10` | 最大排队数 |
| `priority` | `5` | 调度优先级(1 = 最低,10 = 最高) |
当新触发到达时,如果 `max` 已满则排队(最多 `queue` 个)。超出排队限制的触发将被拒绝。
## 执行器模式
Robot 支持三种执行器模式:
| 模式 | 说明 |
|------|------|
| `standard` | 生产模式 —— 真实 Agent 调用,完整持久化 |
| `dryrun` | 模拟模式 —— 不调用 LLM,用于测试阶段路由 |
| `sandbox` | 容器隔离模式(为未来 CLI Agent 集成保留) |
模式在触发时按执行设置。Dry-run 在配置新 Robot 时特别有用,可以验证阶段路由是否正确后再启用真实 LLM 调用。