本页目录
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 里逐个做了,每个机制的收益都对着这份裸基线量。」