Agent Engineering 课程阅读
首页/课程十一 · Agent 执行骨架/运行中改道与权限门:长途驾驶舱

在 GitHub 查看原文

本页目录

Lesson 07 — 运行中改道与权限门:长途驾驶舱

本课目标:长任务不是发射后不管——改道走安全点协商(指令入队 → 源间隙合并进 plan.md → recitation 即刻生效,10 源劳动不陪葬);软停出诚实半程报告;危险工具调用 100% 过权限门并留痕。


1. 问题:任务越长,发射时的指令越可能过时

v4 的运行是「发射后不管」:人看到中间产物想说「重点挪到 X」,只有两个选项——等它跑完(浪费后半程)或杀掉重跑(已研 10 源的劳动全部陪葬)。长途驾驶舱补三个部件:改道通道、停的两档、权限门

2. 改道:协商合并,不是抢占

人(随时)── submit_instruction ──► steering 队列(sqlite,留痕)
                                        │
agent:…研第 7 源(不被打断)…          │
        ▼ 安全点(源与源之间)           ▼
        poll_safepoint ──合并──► plan.md(+改道记录)
        ▼
        recitation(L06)现读 plan.md ──► 新计划即刻生效于后续每步

四个设计决定:

  • 安全点而非抢占:指令在源与源的间隙被拉取——当前源做完再变道,不产生「半个源」的碎片状态。真流式抢占(逐 token 中断)在流派对比里讨论,不实现。
  • 合并而非替换:指令追加为计划的「改道记录」小节(生产里由 LLM 协商合并——判断交给模型;机械合并是本课的保底实现)。
  • 留痕铁律:队列表记 applied_at + merge_note,计划内附改道记录——与 L02 压缩审计同宗:任何行为变更都显式可追溯。
  • 与 L06 的联动是免费的:改道改的是 plan.md,而 recitation 每步现读文件——「文件是事实源,窗口是缓存」在这里兑现了它的第二次红利(第一次是崩溃续跑)。

实测改道线(python code.py):第 10 源后投「优先 safety、跳过 marketing」→ 安全点受理 → 源序变为 S13→S16→S22→S27→…(safety 提前)→ 4 个营销源三态标注「跳过≠失败」(done / skipped_by_instruction / failed 可区分——报告读者能分清「没研究」是执行指令还是出了事故)→ 完成 26/30 而在场率仍 20/20(营销源零关键事实的语料设计在此兑现:跳过无损)。

3. 停的两档

语义 产出
cancel(软停) 完成当前源即止 诚实半程报告:「应用户软停指令,于第 12 源后收尾:已研 12/30,以下为基于已有材料的部分结果」——半途产物也是产物,显式标注不冒充完整(呼应 agent-ops L01 诚实收尾)
kill(硬停) 进程级终止 靠 checkpoint(课程九)+ workspace(L06)双恢复——只引用不重讲

4. 权限门:把审批点从「发布环节」推广到「任意工具调用」

agent-ops L05 给 publish 装了审批门;本课把门推广到任意危险工具调用,三条机械规则(红线测试 100% 拦截):

  1. 写文件出工作区 → needs_approval(工作区是自留地,外面是别人家);
  2. 网络写操作(POST/PUT/DELETE/PATCH)→ needs_approval(副作用出网,覆水难收);
  3. 花费超阈 → needs_approval(钱包保险丝,接课程九成本预算的语汇)。

两个纪律细节:放行与拦截同样留痕(「拦过什么」与「放过什么」都可审计——事后追责需要的是完整判定日志,不是只有坏消息的日志);审批流复用(interrupt/inbox 是课程九/十资产,本课只造门不造流程)。与课程十 agency ladder 的衔接:act 档(先斩后奏)也要过门——自主级别再高,三条红线仍在。

5. 流派对比:运行中干预的四条路线

流派 思路 取舍
发射后不管 v4 现状 简单;需求一变全程作废
杀掉重跑 kill + 从头来 可控;丢进度(无工作区时 100% 陪葬)
安全点协商改道 队列+间隙合并+留痕 本课:不丢进度、不打断当前源;代价是响应有延迟(至多一个源)
逐 token 抢占 真流式中断 响应最快;碎片状态难收拾、实现深度绑定推理框架(讲概念不实现)

业界锚点:Claude Code 的 steering(运行中插话,agent 在工具调用间隙消化——你大概率对它做过这件事)与权限模式(每个危险工具调用弹审批——本课 gate 的产品形态);LangGraph interrupt(课程九已学的地基,本课把它从「审批点」扩展为「改道面」的支撑件)。

6. 跑起来

cd harness-lessons/07_steering_gate
python code.py   # 通道微演示 → 改道线 → 软停线 → 权限门

7. 落地清单

文件 改动
src/research_assistant/steering.py 新增:steering 队列(sqlite+set_db_path_for_test)/ poll_safepoint 协商合并留痕 / default_merge / ToolAction+gate_tool 三规则+判定日志
src/research_assistant/config.py enable_steeringenable_tool_gate(默认 off)、tool_gate_cost_threshold=10000
eval_agent/harness_runs.py 新增 run_steered_longhaul(改道线/软停线/三态标注/诚实声明)
tests/test_steering.py 新增 12 测试(队列/安全点/权限门红线/改道行为/软停/确定性)

验收

cd portfolio-projects/research-assistant
python -m pytest tests/test_steering.py -q   # 12 passed
python -m pytest -q                           # 435 passed(423 + 12)
cd ../../harness-lessons/07_steering_gate && python code.py

8. 本课在两条主线上的位置

窗口经济:改道保住的是已花掉的注意力——需求变化不再让 10 源投入作废;软停把部分投入兑换成诚实的部分产出。外置化:驾驶舱的抓手全在窗口外——指令住队列、计划住 plan.md、审计住判定日志;窗口只在安全点看一眼最新计划。

🎯 面试话术

「长任务要有驾驶舱。改道走安全点协商:人随时投指令进队列,agent 在源与源的间隙拉取、合并进计划文件并双重留痕——因为计划是每步现读的(recitation),新指令即刻生效,已研的 10 源不陪葬;跳过的源三态标注,读报告能分清『执行指令』和『出事故』。停有两档:软停出诚实半程报告,硬停靠双恢复。权限门把 HITL 从发布环节推广到任意工具调用——写出工作区、网络写、超阈花费三条红线 100% 拦截,且放行与拦截同样留痕:审计要的是完整判定日志,不是只有坏消息的日志。」