
保留输出与一次性结算Shepherd 如何让你先审查、再决定 select/apply/discard Agent 产物【免费下载链接】shepherdA runtime substrate that turns an agents execution into a reversible, Git-like trace, so meta-agents can observe, fork, replay, and revert any run. Couples agent and environments in a copy-on-write fork ~5x faster than docker commit, with ~95% KV-cache reuse on replay. Framework built for meta-agents to supervise, optimize, and train other agents项目地址: https://gitcode.com/gh_mirrors/shepherd16/shepherdShepherd 是一个面向 Agent 的运行时底座runtime substrate它把 Agent 的每次执行变成一条可观察、可回滚的 Git 式记录。它的核心机制是保留输出retained output与一次性结算settlementAgent 改完文件后不会立刻动你的主线代码而是先把产物留存起来等你审查完 Changeset 之后再用select/apply/discard/release四个动作之一做一次性决定。本文将用 5 个小节讲清这套先审查、再决定的流程。为什么必须先审查、再结算传统 Agent 框架里模型直接写进你的工作目录——写得对不对事后才知道想撤销只能靠git兜底。Shepherd 的思路完全不同运行只发生在副本上每次run都在 copy-on-write 的 fork 里执行改动先落在隔离的候选输出里产物不会自动合并候选输出RunOutput在结算之前与主线完全隔离你想跑 10 个候选就跑 10 个主线不动分毫结算是一次性的每个保留输出只能被结算一次select、release 或 discard 三选一或 apply 合并结算记录会写进运行账本事后可审计。官方概念页把这一层称为 Effects边界效应Agent 对世界的每一次触碰都是命名、带类型、可拒绝、被记录的事件保留输出捕获与结算决定本身也是其中被完整记录的一环。审查面Changeset 是你的代码评审单结算前你凭什么判断好坏答案是Changeset——每个保留输出都附带一个只读视图列出它改了哪些路径、改了多少内容。想看产物清单run.changeset()或 CLI 的shepherd run changeset run-ref想看完整过程shepherd run trace run-ref按顺序回放出每一次边界穿越模型请求、写文件、产物捕获、结算决定想看权限证据RunOutput.run_authority()/settlement_policy()能告诉你这次运行被授权触碰的范围。相关心智模型见 Runs 概念页一次执行 一个 runrun 携带结果、trace、artifacts 与用量保留输出是这个 run 的世界侧产物等待你结算。一次性结算select、release、discard 三个动作在 workspace 句柄层结算动词非常克制完整清单见 workspace-handles 示例 README动作语义典型场景workspace.select(output)快进合并把候选产物提升为主线工作区基点前进N 选 1选定赢家workspace.release(output)显式释放该输出的托管权不做合并候选作废但保留现场workspace.discard(output)丢弃该输出关闭其账本明确否决workspace.apply(output)三方合并把候选 diff 合入已前进的主线仅当路径不相交重叠则 fail-closed绝不合成内容两个候选改不同文件先后都收编关键点select是fast-forward-only——一旦你结算了某个候选工作区基点前进其他从旧基点 fork 出来的候选就无法再被select。这正是保留apply的原因实现细节可看 retained_output_authority.py 中对 selection / application 两条结算通道的区分。上手示例best-of-N 与主线已前进时的 apply场景一N 个候选挑一个。best_of_n.py 是最直观的入门程序跑 3 个保留候选alpha/winner/omega逐个读 Changeset 打分然后一次性结算winner max(outputs, keylambda o: review[o.output_id][score]) selection workspace.select(winner) # 赢家合并进主线 released workspace.release(losers[0].refresh()) discarded workspace.discard(losers[1].refresh())场景二主线已经前进再收编第二个候选。apply_onto_moved_workspace.py 演示了先 select 一个改docs.md的候选再把改code.py的候选apply到前进后的主线——路径不相交三方合并成功若两个候选改了同一文件apply会直接失败fail-closed把冲突交还给人。类似的跑到可接受为止流程见 retry_until_acceptable.py每轮重试产生一个新保留输出直到审查通过才结算中间的失败轮次全部留痕。小结把决定权从模型手里拿回来运行不结算task.run(...)只产生保留输出主线零风险审查靠数据Changeset trace 权限证据构成完整的评审单结算有且仅有一次select/release/discard三选一apply负责主线前进后的不相交合并全部可审计每个结算动作都记录在运行账本里meta-agent 可以事后观察、fork、回放或回滚任何一次决定。想动手试试按 workspace-handles/README.md 中的命令uv run python examples/workspace-handles/best_of_n.py即可脚本默认创建临时工作区、运行后打印 JSON 结算摘要——你会直观看到selected / released / discarded三种结算状态如何各归其位。【免费下载链接】shepherdA runtime substrate that turns an agents execution into a reversible, Git-like trace, so meta-agents can observe, fork, replay, and revert any run. Couples agent and environments in a copy-on-write fork ~5x faster than docker commit, with ~95% KV-cache reuse on replay. Framework built for meta-agents to supervise, optimize, and train other agents项目地址: https://gitcode.com/gh_mirrors/shepherd16/shepherd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考