Skip to main content
每个独立 child 显式分配两次请求预算。省略预算可能让第一个 child 预留 parent 的全部剩余请求,使后续 worker 获得零预算。完成不代表可以隐式退款或重放未知 effect。

目标与前置条件

父执行先创建一个持久化的暂停 Session。显式 resolver 把已知 notes_agent 描述映射到本地子进程;每个 child 使用已安装包恢复真实 Session,不存在隐藏的分布式 worker 服务。 delegate、spawn 提交子工作,fan_out 批量提交,join 对操作 ID 使用显式策略等待。程序检查四个 child completion 与 closed join。resolver 处理 join 时不重跑已引用的 child。本章 child 的最终回答是固定脚本;编排成功不证明模型独立推理成功。 独立运行 handoff.py:目标进程继续同一个 work item,所有权改变,旧 owner 再次派发被拒绝。相比之下,生命周期章节的 fork 创建独立分支并保持 source head 不变。 需要 Python 基础;声明支持 Python ≥3.10,本轮本地验证使用 Python 3.12.7。每章可独立运行;继续已有项目时可复用环境和同名文件。以下命令为 macOS/Linux shell。

准备项目

将下方完整文件保存到当前目录。无需 clone 仓库、安装 editable 包或复制 tests。

运行并验证

预期出现以下输出片段(随机 ID 不固定)。每次运行都检查工具结果或持久化断言,成功退出码为 0。
Handoff 同时演示原有串行路径与 --concurrent:后者在 scheduler callable 内立即 restore/run 同一 Session。源在 dispatch 前持久化 transfer admission,迟到 callback 不再写 head。Admission wait 与目标子进程结果分开,只有后者证明业务完成。目标 restore 使用既有 owner/generation CAS;未知调用结果不自动重放,等待策略、业务重试与 reconciliation 由应用负责。

行为与支持边界

timeout 或 outcome_unknown 会使本例等待失败,不触发重新提交。LocalWorkScheduler 是进程内调度;持久化 receipt 不意味着分布式队列。

练习与参考答案

检查四条 completion,区分两个独立操作与两个 fan-out child。join 使用 operation ID,不使用展示名称。

常见错误与清理

ModuleNotFoundError:确认已激活安装指定 wheel/源码版本的环境,并保存本页所有文件。root 已存在:换一个新 --root,不要覆盖需要保留的证据。断言失败:检查第一个失败的工具或 typed error;不要只依赖最终文字。退出所有进程、停止 board 后,可自行删除本章新建且不再需要的运行目录;保留要调试的 SQLite、journal 和报告。

完整文件:复制到项目根目录

notes.py
agent.yaml
multi_agent.py
handoff.py

下一步与 API

API Reference · Configuration · Learning path · Next Source file (可选;全部所需代码已在本页)