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 的代价

  • 风险敞口:误判会立刻发生在真实文件、真实分支、真实数据库上
  • 不可逆操作放大rmgit push --forcedrop table
  • 它不只听你的:还听它读到的文件、网页、issue

README 里被塞进的一段文字,可能让 YOLO agent 把 ~/.ssh/id_rsa 传到一个 gist 里。

两条回路放在一起看

HITL 与 YOLO 的两条决策回路

YOLO 砍掉了「暂停 + 人类审批」两步——短,意味着快,也意味着没有任何检查点。

Human in / on / out the loop

  • in:每次变道前,车都问你「现在可以变道吗?」
  • on:车自己开,你坐驾驶位看仪表、看路况,随时接管
  • out:你不在车上,只等最后一条「我到了」

On the loop ≈ YOLO 的驾驶舱

不是少点几次确认,而是把人工判断从「逐动作审批」升级成「过程监督 + 关键接管」。

计划可见 · 过程可观测 · 边界可配置 · 中断可接管 · 结果可审查

关键洞察

好的 YOLO 不是「关掉确认」, 而是「把安全前移到环境」。

换一个爆炸半径被限定的地方,让它尽情折腾。

裸 YOLO vs YOLO + 隔离

裸 YOLO vs YOLO + 隔离

出事:前者赔上一晚上恢复;后者只是丢掉一个沙箱,5 秒重建。

隔离手段(从轻到重)

  • Git worktree:同仓库的独立工作目录,分支互不污染
  • Devcontainer / Docker:文件、网络、进程都和宿主机隔离
  • 远程 VM / 云沙箱:你的真机完全不在场

共同点:让「能做什么」在物理层面被收窄,而不是靠它「想不想做」的自觉。

不止两档:中间地带

  • 只读操作:自动放行,不弹窗
  • 写操作:默认放行,反复改写到一定次数再确认
  • 危险操作:无论 YOLO 与否,强制确认
  • Allowlist / Denylist:预先配置允许与禁止的命令

一个判断框架

先看动作风险,再看环境边界,最后看人能不能接管。

风险决定要不要停下来问人;边界决定出事炸多大;接管决定能不能在偏航早期拉回来。

怎么选

  • 不熟 agent / 改生产 / 动数据库 → 全 HITL
  • 主分支日常开发 → 混合(Human on the loop)
  • 批量重构 / 补测试 / 并行多 agent → YOLO + worktree

核心就一句:先估「出错成本 × 出错概率」,再选模式。

三个 takeaway

  1. HITL / YOLO 不是性格选择,是控制权放在哪一环的工程配置
  1. Human on the loop 是日常开发更值得追求的状态
  1. 真正可用的 YOLO,不是关掉确认,而是把安全前移到环境

谢谢

下次再有人说「我一不小心让 agent 把整个 repo 重写了」, 你想问的第一个问题大概不是「为什么不审一下」,而是——

「你为什么不让它在 worktree 里跑?」

← Agent 的 HITL 与 YOLO
1 / 19