Agent 的 HITL 与 YOLO
从「每一步都问」到「放手让它跑」
蘇里 · 2026-05-21
一个朴素的担心
我让它修个 bug,它会不会顺手把我整个 home 目录
rm -rf了?
Agent 本质是一个能调 shell、能改文件、能发请求的程序。
它能做的事 ≈ 你这台机器此刻能做的所有事。
两种工作模式
- HITL(Human In The Loop):每一步动作前都先问你「这一步可以做吗?」
- YOLO(You Only Live Once):缰绳一扔,想做就做,不再问你
看似是「保守 vs 激进」,其实是个工程问题:控制权放在哪一环。
Agent 是怎么「做事」的
读 → 想 → 调工具 → 看结果 → 再想 → 再调工具 → ...
「调工具」是 agent 从思考穿透到行动的瞬间。
HITL 与 YOLO 的全部分歧,就发生在这个瞬间。
HITL:把 agent 当实习生
每个不可逆的动作前,停下来,等你点头再执行。
好处很直接:你始终知道它下一步要做什么,能在事情发生前拦住它。
HITL 的代价
- 节奏:30 次工具调用,就要点 30 次同意
- 批准疲劳:你以为自己在审批,其实早就放弃审批了
- 思路被打断:agent 越快,你的反应时间在总耗时里占比越高
YOLO:把 agent 当自动驾驶
你只关心两端:一开始的目标,和最后的结果。
体验很爽:原本 5 分钟、点 20 次回车的活,现在 30 秒跑完。
YOLO 的代价
- 风险敞口:误判会立刻发生在真实文件、真实分支、真实数据库上
- 不可逆操作放大:
rm、git push --force、drop table
- 它不只听你的:还听它读到的文件、网页、issue
README 里被塞进的一段文字,可能让 YOLO agent 把
~/.ssh/id_rsa传到一个 gist 里。
两条回路放在一起看

YOLO 砍掉了「暂停 + 人类审批」两步——短,意味着快,也意味着没有任何检查点。
Human in / on / out the loop
- in:每次变道前,车都问你「现在可以变道吗?」
- on:车自己开,你坐驾驶位看仪表、看路况,随时接管
- out:你不在车上,只等最后一条「我到了」
On the loop ≈ YOLO 的驾驶舱
不是少点几次确认,而是把人工判断从「逐动作审批」升级成「过程监督 + 关键接管」。
计划可见 · 过程可观测 · 边界可配置 · 中断可接管 · 结果可审查
关键洞察
好的 YOLO 不是「关掉确认」, 而是「把安全前移到环境」。
换一个爆炸半径被限定的地方,让它尽情折腾。
裸 YOLO vs YOLO + 隔离

出事:前者赔上一晚上恢复;后者只是丢掉一个沙箱,5 秒重建。
隔离手段(从轻到重)
- Git worktree:同仓库的独立工作目录,分支互不污染
- Devcontainer / Docker:文件、网络、进程都和宿主机隔离
- 远程 VM / 云沙箱:你的真机完全不在场
共同点:让「能做什么」在物理层面被收窄,而不是靠它「想不想做」的自觉。
不止两档:中间地带
- 只读操作:自动放行,不弹窗
- 写操作:默认放行,反复改写到一定次数再确认
- 危险操作:无论 YOLO 与否,强制确认
- Allowlist / Denylist:预先配置允许与禁止的命令
一个判断框架
先看动作风险,再看环境边界,最后看人能不能接管。
风险决定要不要停下来问人;边界决定出事炸多大;接管决定能不能在偏航早期拉回来。
怎么选
- 不熟 agent / 改生产 / 动数据库 → 全 HITL
- 主分支日常开发 → 混合(Human on the loop)
- 批量重构 / 补测试 / 并行多 agent → YOLO + worktree
核心就一句:先估「出错成本 × 出错概率」,再选模式。
三个 takeaway
- HITL / YOLO 不是性格选择,是控制权放在哪一环的工程配置
- Human on the loop 是日常开发更值得追求的状态
- 真正可用的 YOLO,不是关掉确认,而是把安全前移到环境
谢谢
下次再有人说「我一不小心让 agent 把整个 repo 重写了」, 你想问的第一个问题大概不是「为什么不审一下」,而是——
「你为什么不让它在 worktree 里跑?」