Ralph 迭代飞轮与 Goal 系统¶
Fresh-Agent 零上下文污染自主迭代飞轮与长程多轮目标推进系统。
在处理特大规模任务(如完整重构整个前端、解决复杂的跨模块 Issue)时,传统 Agent 经常在执行 20~30 步后陷入混乱:之前的报错信息、过期的临时探索占满了数万 Token,导致模型"注意力涣散",开始反复犯同样的低级错误。
DSH 给出了两项前沿解决方案:Ralph 迭代飞轮 与 Goal 目标驱动器。
核心文件速查¶
| 路径 | 职责 | 重要度 |
|---|---|---|
packages/workflow/tool-ralph/src/index.ts |
Ralph 循环驱动工具与状态协议 | ⭐⭐⭐ |
packages/goal/goal/src/index.ts |
Goal 服务定义与状态迁移机 | ⭐⭐⭐ |
packages/goal/goal-round-driver/ |
跨轮次自主推进驱动器 | ⭐⭐⭐ |
Ralph 循环:Fresh-Agent 范式¶
Ralph 循环 是一种前台自治的迭代执行范式。它的核心思想是:"每一轮都使用干净的 Fresh-Agent,共享工作区是唯一持久记忆"。
Ralph Objective: "完成 100% 单元测试覆盖率"
│
┌──────────────────────┴──────────────────────┐
│ │
Round 1 (Fresh Agent) Round 2 (Fresh Agent)
┌──────────────────────────────────────┐ ┌──────────────────────────────────────┐
│ - 零历史上下文 (Zero Conversation) │ │ - 零历史上下文 (Zero Conversation) │
│ - 读取上轮结构化摘要报告 │ │ - 读取上轮结构化摘要报告 │
│ - 检查当前工作区代码与测试通过率 │ │ - 检查当前工作区代码与测试通过率 │
│ - 编写 5 个测试用例,运行并修复 │ │ - 编写剩余 3 个用例,运行并修复 │
│ - 生成结构化汇报: 8/10 测试已通过 │ │ - 生成结构化汇报: 10/10 测试全部通过 │
└──────────────────┬───────────────────┘ └──────────────────┬───────────────────┘
│ │
▼ ▼
Shared Workspace (磁盘文件持久化) Report Complete -> Exit Loop
Ralph 循环的三大定律:¶
- 零上下文继承:每一轮打开一个全新的 Child Agent,不继承上一轮的对话历史,彻底消除上下文膨胀(Context Bleed);
- 物理工作区为真理:磁盘上的真实文件、Git 提交和测试运行结果是跨轮次的唯一长期记忆;
- 有界的结构化报告:上一轮 Agent 仅通过一份极度紧凑的结构化汇报(Structured Report)告诉下一轮"做了什么、现状如何、下一步建议"。
Goal 系统:长程目标的跨轮持久推进¶
对于不需要彻底重开 Fresh-Agent,但需要跨越多个自主轮次(Autonomous Continuation Rounds)推进的同会话长程任务,DSH 提供了 Goal 体系:
┌────────────────────────────────────────────────────────────┐
│ Goal State Machine │
│ │
│ ┌─────────┐ resume ┌─────────┐ │
│ │ armed │ ◄─────────────── │ paused │ │
│ └────┬────┘ └────▲────┘ │
│ │ (Auto continue) │ │
│ ▼ │ pause │
│ ┌─────────┐ block ┌────┴────┐ │
│ │ active │ ───────────────► │ blocked │ │
│ └────┬────┘ └─────────┘ │
│ │ complete │
│ ▼ │
│ ┌─────────┐ │
│ │ completed │
│ └─────────┘ │
└────────────────────────────────────────────────────────────┘
create_goal:在当前会话中设立一个持久目标,并设定最大自主推进轮次;get_goal:查询当前目标的精确版本号(Revision)、已完成轮数与阻塞状态;update_goal:在多轮推进中更新目标状态(完成complete、阻塞blocked、暂停pause或继续resume)。
本章思考与自测¶
- 思考题:在什么场景下应该使用
ralph工具,而在什么场景下应该使用create_goal? - 自测题:在 Ralph 循环中,如果某个子 Agent 陷入死循环并在达到单轮上限前未主动报告,Ralph 驱动器是如何通过最大轮次上限(
maxRounds)进行兜底保护的?