Open-Science 子代理委派完整指南:主Agent如何持久化分发任务并自动恢复
【免费下载链接】open-scienceAIPOCH Open-Science is an open-source, local-first, model-agnostic AI research workbench for macOS, Windows, and Linux, with scientific agents, Python/R notebooks, data connectors, and reproducible provenance.项目地址: https://gitcode.com/GitHub_Trending/open/open-science
Open-Science(AIPOCH Open-Science)是一款开源、本地优先(local-first)且模型无关的 AI 科研工作台,支持 macOS、Windows 和 Linux。它的核心亮点之一是**子代理委派(Subagent Delegation)**机制:主 Agent 可以把子任务分发给多个子代理并行执行,所有委派记录持久化落盘,应用重启、会话中断后还能自动恢复——任务不丢、状态不乱。
什么是子代理委派 🧩
普通 AI 应用里,Agent 一旦中断,上下文往往就丢了。Open-Science 的做法完全不同:
- 只有主 Agent 可以委派:权限模型上明确规定 "only the Main Agent can delegate work",子代理不能再向下派单,防止任务链失控。
- 持久化记录(Durable Records):每个被委派的任务(称为 child frame)连同它的执行尝试(Attempt)、使用的模型快照、消息队列、待回答问题,都会写入会话记录,而不是只存在内存里。
- 容量预留(Capacity Reservation):分发前先向执行后端"预留槽位",避免并发任务挤爆资源;预留失败会释放资源并给出明确的容量错误。
- 等待用户输入:子代理执行中若需要向用户提问,问题会被持久排队(
awaiting_user状态),用户回答后任务自动继续,而不是超时作废。
对应源码入口在 src/main/delegation/durable-delegated-work.ts,类型契约定义在 src/main/delegation/durable-delegated-work-contract.ts。
任务分发:一条任务如何"落盘" ⚙️
分发流程可以拆成 5 步,全程带"防冲突"保护:
- 鉴权:校验调用者角色、会话归属、源消息 ID 是否在活跃根会话内;
- 准入(Admission):由 delegated-work-admission.ts 解析目标代理——是复用"Main Agent",还是某个专家(Specialist)档案,并校验任务输入;
- 模型快照:为每个子任务固化执行模型快照,保证后续恢复时用的是同一套模型配置,而不是"当前设置碰巧是什么";
- 写记录:在准入锁保护下提交 child 记录,同时检查 Stop 操作是否已经使本次准入失效;
- 启动运行:分配槽位、启动运行时、订阅运行事件,直到任务进入持久化终态(completed / cancelled)。
值得注意的是幂等性:同一次工具调用(相同会话 + 相同 toolInvocationId)重复触发delegate时,会直接返回第一次调用的结果 Promise,不会重复分发任务。
恢复机制:三种场景都覆盖 🔁
这是子代理委派最硬核的部分,对应 src/main/delegation/ 目录下的几组关键模块:
| 场景 | 机制 | 相关源码 |
|---|---|---|
| 应用重启 | 会话记录从磁盘加载,未完成任务标记为待恢复;孤儿 Artifact 权限在重启恢复时自动撤销 | session-record-adapter.ts |
| 结算唤醒 | 子任务完成后,负责"叫醒"主 Agent 继续结算的守护逻辑 | delegation-settlement-wake-owner.ts |
| 消息可靠投递 | 子代理与主 Agent 之间的消息带收件状态,恢复时防止重复重放已确认的投递命令 | message-delivery-owner.ts |
| 继续追问(Continuation) | 给已完成的子代理发新消息,会开启新的 Attempt 并复用原模型快照 | durable-delegated-work.ts |
恢复不只是"把任务跑起来":
- 权限恢复:子代理待审批的权限请求随记录持久化,恢复后依然挂起等待用户决定(见 delegated-work-permissions.ts);
- 清理保证:停止会话时会批量取消运行中的子任务,并尽力撤销文件写入权、释放槽位,即使部分失败也会返回未确认的 Attempt 句柄,提示用户用
collect观察后再决策; - UI 投影:前端通过 src/shared/delegated-work-projection.ts 读取委派记录,渲染出子代理的实时状态;磁盘占用统计中也单列了
bg-storage-delegation存储类别(见 docs/design.md)。
子代理背后是谁:Specialist 专家体系 🎓
子代理不必都是"小号主 Agent"。Open-Science 内置了Specialist(专家)体系,每个专家有独立档案(profile),委派时通过profileId解析:
- 内置专家注册表:src/main/specialist/builtin-registry.ts
- 专家身份与会话绑定:src/main/specialist/identity.ts、session-binding.ts
- 模型发布门槛测试确保子代理模型与运行时兼容:e2e/subagent-model-release-gate.spec.ts
上手建议:新手怎么验证这套机制 ✅
- 在设置中选择受认证的 Agent 后端(Claude Code、OpenCode、Codex 或 CodeBuddy),见 docs/npm-release.md 的发布说明;
- 在会话中让主 Agent 并行处理多个子任务,观察任务面板中子代理的实时状态;
- 故意停止/重启应用,再次打开会话,确认子任务记录、待回答问题和权限请求都被完整恢复。
如果你想深入源码,建议从 durable-delegated-work.ts(核心编排)→ delegated-work-record-types.ts(记录类型)→ production-composition.ts(生产组合)这条路径读起,再配合 docs/design.md 中的存储分类表理解整体架构。
一句话总结:Open-Science 的子代理委派用"持久化记录 + 容量预留 + 幂等调用 + 结算唤醒"四件套,把多 Agent 协作从"跑得快"做到了"断得掉、接得上",这正是科研长任务最需要的基础设施。
【免费下载链接】open-scienceAIPOCH Open-Science is an open-source, local-first, model-agnostic AI research workbench for macOS, Windows, and Linux, with scientific agents, Python/R notebooks, data connectors, and reproducible provenance.项目地址: https://gitcode.com/GitHub_Trending/open/open-science
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考