Agent Engineering 课程阅读
首页/课程十 · 常驻主动式 Agent/全景与基线:会话式的天花板

在 GitHub 查看原文

本页目录

Lesson 00 — 全景与基线:会话式的天花板

本课目标:建立「pull vs push」的范式认知,交付贯穿全课程的 5 日模拟时间线,跑出会话式范式在盯梢任务上的裸基线——之后每课修一环,L08 对着这份基线量收益。

学完你能回答面试官那句:「会话式和常驻式 Agent 的架构差别在哪?」——答案是五个环节的倒置:谁发起、研究什么、何时开口、怎么开口、谁守着它。


0. 三层递进:本课在整个课程体系中的位置

ops-lessons 护「一次请求」,agent-ops-lessons 护「一条轨迹」,本课运营「一个常驻服务」——Agent 从被叫醒干活的工具,变成一直在岗、知道什么时候该开口的同事。

课程 被观测对象 典型问题
请求 ops-lessons(课程五) 一次 LLM 调用 鉴权、限流、注入防御、单价选型
轨迹 agent-ops-lessons(课程九) 一次自主运行 死循环、超支、崩溃恢复、副作用
服务 本课(课程十) 跨很多次运行的常驻进程 谁触发、要不要打扰人、睡觉时烧钱、挂了没人知道

前九门课的 Agent 全是会话式(pull):人发起、Agent 应答、跑完即散。本课把范式倒过来(push):Agent 常驻后台、由触发器叫醒、自己判断世界变了什么、只在值得打扰时主动找人。这是 2025–2026 的活跃前沿(OpenAI scheduled tasks / ChatGPT Pulse、LangChain ambient agents、Claude Code 后台任务都在此方向探索),尚未收敛——所以本课程讲流派与取舍,不讲「标准答案」。


1. 范式倒置:五个环节,每课倒一环

会话式的五个环节全靠人。本课程的路线图就是把它们逐个交给 Agent:

 会话式(现状 v3,pull)              常驻式(v4 目标,push)
┌──────────────────────────┐      ┌──────────────────────────────┐
│ ① 人发起(忘了问=全盲)    │  →   │ 调度器/触发器叫醒     …… L01 │
│ ② 人指定研究什么(全量)   │  →   │ 信源变化检测定对象    …… L02 │
│ ③ 人肉 diff 增量          │  →   │ 增量研究+修正标注     …… L03 │
│ ④ 有产出就全量推送        │  →   │ 判级:通知/攒着/沉默  …… L04 │
│ ⑤ 怎么送 & 人不在场怎么办 │  →   │ 收件箱+自主级别阶梯   …… L05 │
│ ⑥ 人守着进程(其实没人守)│  →   │ daemon+心跳+时段预算  …… L06/07 │
└──────────────────────────┘      └──────────────────────────────┘

在 v3 架构图上标出本课要加的六个位置:

                       ┌─[L01 调度器]──叫醒──┐
                       │                     ▼
  [L02 watcher]──变化集──→ [L03 增量路由] → research_team → writer → reviewer
   (信源快照 diff)              │       (v3 双层图原样复用,治理机制照常生效)
                                 │                                    │
                                 ▼                                    ▼
                       [L04 主动性判级] ← 增量简报 ←──────────── (publish/HITL)
                        major/minor/none                              │
                                 │                                    │
                                 ▼                                    ▼
                       [L05 收件箱 inbox] ←──── 待审批条目 ←──────────┘
                                 ▲
                       [L06 daemon 守护 + L07 心跳/时段预算/日报]

🎯 核心认知:本课不改研究图本身——双层图、治理机制(步数/成本/熔断/幂等/HITL)原样复用。新增的全部在图的外面:什么时候进图(触发)、带什么进图(增量)、出图之后说不说(主动性)。


2. 边界表:本课 vs 已有课程(全课程红线)

一句话:前九门课回答「Agent 被问到时怎么答好、跑起来时怎么不失控」;本课回答「没人问的时候 Agent 该干什么、干完了该不该说话」。

贴边课程 它管的 本课管的 关系
frontier-L10 TaskLedger 计划进度增量:任务做到哪了(「我做了什么」) 世界状态增量:信源变了什么(「世界发生了什么」) L03 接线:watcher 发现世界增量 → 只对增量开研究 → ledger 记进度 → 复用 generate_incremental_brief 出简报
agent-ops L05 HITL 审批:Agent 问人「能不能做」,阻塞等答复 通知:Agent 决定「要不要说、现在说还是攒着」,不阻塞 后台场景组合:人不在场时审批降级为「inbox 待办」(复用 interrupt/submit_approval)
agent-ops L06 断点续跑 单次运行崩溃恢复(checkpoint 续跑) 调度层守护:错过的班次补不补(catch-up)、上一轮没完新一轮到了(overlap) L06 复用 recover_orphans,其上加调度语义
agent-ops L02 成本预算 单条轨迹的钱包 时段钱包:一天 N 次自主运行的总预算 + 无变化降频 L07 扩展而非重写
agent-ops L07 可观测 一次运行一行 run summary N 次运行的日报聚合 + 缺勤检测(沉默也要有心跳) L07 复用 run_summary 字段聚合
ops-L10 语义缓存 同义问题去重(省一次回答) 信源内容去重(识别「没有新东西」) 思路亲缘,对象不同

红线:interrupt / checkpoint / 幂等键 / 轨迹预算 / run summary / 账本 API——只引用复用,不重讲不重写。本课的增量全部在「触发、感知、决策开口、常驻运营」四件事上。


3. 常驻式的新风险地图(与 agent-ops 风险对照)

agent-ops 的风险在轨迹内(一次运行会死循环/超支/崩溃);常驻式的风险在轨迹之间

新风险 形态 后果 兜住它的课
通知疲劳 每次运行都推全量产出 用户把通知关掉 = 系统白跑 L04 判级 + 配额
静默失败 信源打不开/进程挂了,但没人问就没人知道 「没消息」被误读为「没变化」 L02 结构化 failed + L07 心跳
成本累积 单次都正常,但一天自主跑 N 次 睡觉时烧钱,月底看账单才发现 L07 时段预算 + 降频
后台副作用 危险动作触发时人不在场 无人审批就执行 or 永远卡死 L05 收件箱审批(复用 HITL)

💡 注意对称性:agent-ops 用「六类故障注入器」拷问轨迹内风险;本课用「5 日模拟时间线 + 可注入时钟」拷问轨迹间风险。时钟之于本课,等于注入器之于课程九。


4. 流派对比:盯一个主题,有几种做法?

流派 做法 取舍
人肉盯(现状) 人每天来问一次 ✅ 零开发;🚫 忘了问=全盲、每问全量重研、增量靠人肉 diff(本课基线量化了全部代价)
OS cron + 全量脚本(穷人版) crontab 每天跑一次 cli.py,报告写文件 ✅ 解决「定时跑」;🚫 不增量(天天全量烧钱)、不判断(有没有料都产报告)、不闭嘴(等于每天一封全量邮件)、错过不补、挂了没人知道
常驻智能体(本课) 调度+变化检测+增量研究+主动性判级+收件箱+心跳 ✅ 只研究新的、只在值得时开口、故障与缺勤显式呈现;🚫 复杂度高——所以逐课拆开每次只加一环,且每环默认关

业界锚点(各家站在哪条路线上,点到定位即可): - OpenAI scheduled tasks / ChatGPT Pulse:托管定时 + 主动推送摘要——平台替你做了 ①→③ 的跃迁,但策略不可编程。 - LangChain ambient agents:提出 notify / question / review 三姿势(对应本课 L05 的通知/审批/草稿确认),主张「ambient agent 的 UX 核心是别把人变成瓶颈」。 - Claude Code 后台任务:会话工具向常驻方向的延伸——定时任务 + 后台运行 + 完成回报。

三家共识:难点不在定时跑,在「何时开口」——这正是 L04 是全课程价值观核心的原因。


5. 贯穿硬任务:盯梢任务 + 5 日模拟时间线

盯梢任务:持续追踪「Agent 框架生态动态」(可配置),信源是脚本化 5 日时间线(eval_agent/ambient_timeline.py,全离线、确定性):

模拟日 世界发生了什么 常驻式应有行为
Day 1 4 条基础条目 建仓:全量研究(唯一该全量的一天)
Day 2 内容不变,仅顺序打乱+空白微调 识别「没新东西」:不研究、不打扰,浪费≈0
Day 3 新增 1 条次要条目(框架 Y 补丁) 只研究增量,进 digest,不立即打扰
Day 4 重磅新增 + item-c 反转(与 Day1 矛盾 立即通知 + ✏️ 修正标注
Day 5 信源打不开(抛 SourceUnavailableError 诚实报「没能看到」,绝不冒充「没有变化」
(叠加) Day3 夜里 daemon 进程被杀 缺勤被检测、错过班次按策略补跑(L06/L07 考)

🎯 本课灵魂案例藏在 Day5:「没有变化」和「没能看到」是两回事。把后者报成前者,是常驻系统最危险的静默谎言——这是 agent-ops L03「诚实降级」(不让超时字符串混进材料)在常驻场景的直系延伸。


6. 跑起来:人肉盯梢裸基线

cd ambient-agent-lessons/00_overview
python code.py        # 零 API、零联网、零真实等待(可注入时钟快进 5 天)

实际输出(baseline_ambient.json 同步存档):

日    问了?   token(估)   文本相似   内容相似   标增量  标修正  污染   打扰
Day1  是         1046        0%        0%        否      否     否    是
Day2  是         1053       49%       94%        否      否     否    是
Day3  是         1209       93%       93%        否      否     否    是
Day4  是         1404       52%       78%        否      否     否    是
Day5  是          298        4%        4%        否      否     是    是
5 日总消耗:5010 token(估)——其中 Day2 的 1053 是纯重复劳动

解读(每一格都是后面某课的靶子)

  • Day2:内容相似度 94%(世界没变)却全量重研 + 全量推送。更妙的是文本相似度只有 49%——条目顺序一打乱,「肉眼/文本 diff」就失效了。这直接论证 L02 为什么用 item 级内容哈希 而不是全文 diff。
  • Day3:只多一条小更新,重研全部子题;新增内容埋在全量报告里,要用户自己找。→ L03 增量研究。
  • Day4:重大反转出现,报告没有任何 ✏️ 修正标注,旧结论被静默覆盖。→ L03 矛盾标注 + L04 立即通知。
  • Day5:信源故障,现状 web_search 兜底把失败字符串混进材料——「没能看到」被写成了「今天的情况」(污染=是)。→ L02 结构化 failed。
  • 「人忘了问」支线:跳过 Day4 再跑一遍——重大进展日全盲,永远没人知道。→ L01 触发器。
  • 打扰列全是「是」:包括没新东西的 Day2——现状没有「不说话」的选项。→ L04 判级。

7. 落地清单

文件 改动 如何验证
src/research_assistant/clock.py 新增Clock / FakeClock(可注入时钟,全课程测试地基) python -c "from research_assistant.clock import FakeClock; c=FakeClock(); c.advance_days(3); print(c.now())"
eval_agent/ambient_timeline.py 新增:5 日时间线信源 + SourceUnavailableError(结构化故障) python -c "from eval_agent.ambient_timeline import AmbientTimeline; print(len(AmbientTimeline().fetch_items(1)))"
00_overview/baseline_ambient.json 新增:裸基线档案(范式缺口逐条记录) code.py 再生成,对比一致

主链路(graph/nodes/service)零改动——L00 只立靶子不修靶子。219 个现有测试不受影响。

验收

cd portfolio-projects/research-assistant && python -m pytest -q   # 219 passed(零改动证明)
cd ../../ambient-agent-lessons/00_overview && python code.py      # 基线表 + json 档案

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

  • 倒置主线:本课画出「五个环节全靠人」的全景并量化其代价——这是倒置的起点,之后每课倒一环。
  • 注意力经济主线:基线里 5 天打扰 5 次(含毫无新意的 Day2),总消耗 5010 token 里近一半是重复劳动——「花用户注意力和睡觉时的钱」目前完全不受管理,这是本课程要建立的预算对象。

🎯 面试话术

「我把会话式 Agent 的天花板量化过:同一主题盯五天,人肉重问的结局是——世界没变也全量重研(内容相似 94% 的两天烧了双份钱)、新增内容埋在全量报告里要人肉 diff、重大反转无修正标注、信源故障字符串混进报告冒充结论、忘了问的那天全盲。

所以常驻式不是『加个 cron』——cron 只解决定时跑,解决不了只研究新的、只在值得时开口、故障时诚实说没看到。这三件事分别要变化检测、主动性判级、结构化降级,我在 v4 里逐个做了,每个机制的收益都对着这份裸基线量。」