第 4 卷
| 17 | Ralph worker reported completion after1round. |
|---|---|
| 18 | Final report: |
| 19 | {"status":"complete", … } |
20
| 21 | ---共享工作区里留下了什么(每轮都写进这一份)--- |
|---|---|
| 22 | NOTES.md: |
| 23 | #本次示例要点笔记 |
| 24 | … |
对着这个输出逐条看,Ralph 的机制就清楚了。这个示例的目标一轮就能完成,所以只跑 1 轮就 complete 收手;多轮才看得到的机制,比如每轮换新、跨轮交接,输出里看不到,要看
脚本⻣架,每轮重开一个全新子 agent,把上一轮的 report 作为 previous 交接给下一轮:
传入什么:模型只传了目标(objective)和轮次上限(maxRounds)。
每轮一个全新子 agent:脚本每轮都开一个新子 agent,谁也不继承谁。为什么偏要全新?
因为让同一个子 agent 带着完整历史跑,上下文会越滚越大、越滚越杂、越跑越偏。
跨轮只靠两样:共享工作区 + 交接,并排看最清楚:
对比共享工作区交接
每轮传的结构化报告(status / summary / evidence 是什么共用的工作目录 cwd / nextSteps / blocker)
| 作用 | 存实际产物(跨轮保留) | 报上一轮情况 |
|---|---|---|
| 可信度 | 事实来源 | 自报(需核实) |
| 上限 | 无 | maxHandoffChars(字符数) |
最后成功完成:这次第 1 轮就报了 complete,循环立刻收手,工具返回 Ralph worker
的循环判定,而非你逐轮手动决定。想亲眼看多轮接力,把目标设成一轮完不成的任务,或把 maxRounds 调到小于任务所需轮数、让轮次耗尽触发 budget-limited 终态即可。
Ralph 的核心:编排是写死在工具里的一段脚本,模型只传一个目标。无论目标换成什么,脚本都是同一个 for 循环,每轮派一个全新子 agent、靠共享工作区 + 交接跨轮,反复推进。
Workflow 与 Ralph:差异对比
里。前者每次重新生成,后者永远不变,变的只是 objective 和 maxRounds,表里其余维度都是这两条路各自的展开。
本讲小结
两种编排机制都建立在 16 讲的 subagent 之上:脚本里每一次 agent(),底层就是一次 subagent 委派,只是由一段脚本驱动,Workflow 的脚本是模型现写的、Ralph 的脚本是写
死的循环,而非模型逐轮手动委派。两者是并列、不是嵌套关系,能同时装上、模型按需调用。
Workflow 是模型驱动的动态编排策略:模型现场写脚本,用 agent() 原语派活、 parallel() / pipeline() 原语编排,灵活、通用;代价是依赖模型、每次不同难评审。
Ralph 是写死的固定策略:脚本写死在 RALPH_SCRIPT 里,模型只传 objective + maxRounds,每轮用 agent() 原语派一个全新子 agent;跨轮只靠两样:共享工作区(长
期记忆)+ 交接(报告传递),朝一个目标反复迭代,每轮干净重启,不会越跑越偏;代价是不能一次派多个子 agent 并行、完成只靠子 agent 自报(无独立评估)。
这背后真正的变化是,编排引擎统一封装:workflowEngine 把“怎么跑编排脚本”统一封装一次,Workflow / Ralph 共用这一套,不用各自重造。编排引擎与编排策略解耦:编排策略
(脚本)由工具决定,加新工具不用改编排引擎。
加上前面几讲,编排篇收口了:AgentLoop 让一个 agent 跑起来,Preset 定它的工具与人设,Goal 让它自己续跑,Subagent 让它委派子 agent,Workflow / Ralph 把多个子 agent
编排起来。
下一讲进入新的实战篇:构建规则自进化系统,从用 DSH 扩展点搭规则引擎开始,一路走到让 Agent 从异常请求里长出候选规则、评测确认后形成闭环。