全景
◆ lecture.logStanford CS146S2026-10-08
CS146S · Lecture

How always-on
agents work

always-on agent 是怎么运转的

阅读约 14 分钟

Speaker
Lee Robinson
Course
Stanford CS146S
Date
2026-10-08
Runtime
45:17

讲者现于 SpaceX(据其个人网站做 ML,此前在 Cursor);产品叫 Bot,口播称 GrokBot;录屏不含 Q&A。

一句话主旨

always-on agent 就是把最基础的 agent loop 搬上服务器。这个 loop 即 “model + tools in a loop”:模型在循环里反复调用工具,直到不再需要工具为止;CS146S 学生在课程第一周亲手写过它。搬上服务器之后:

  • 事件唤醒它,跑完一轮就停;
  • 配一台会休眠的云电脑;
  • 状态全部存进数据库。

让它成立的有两样东西:模型能力的提升,以及 loop 周围的基础设施和 context 工程。

◎ panorama5 acts · 13 ch00:00–45:17
问题

怎样把一个关掉终端就会停的 loop,变成能连续工作几个月的同事?

  1. I00:00–10:04
    起点Why

    模型变强后,agent 从“等你批准”变成“自己干活、你随时转向”,界面反而越来越简单。

  2. II10:04–18:07
    骨架Always on

    没事时什么都不跑:事件唤醒,跑一轮就停,状态全部存库,崩溃后从断点继续。

  3. III18:07–27:24
    HarnessHow it works

    只用一个工具和你说话,其余工具按需加载;重活交给 helpers,外加四道安全防线。

  4. IV27:24–34:27
    ContextStay sharp, stay cheap

    前缀不变,趁缓存还热先压缩,记忆分层:长期运行也不会变笨、变贵。

  5. V34:27–45:17
    未来Where it goes

    每个失败都变成 eval;尽量少造东西;学好新的积木和底层原理。

CH 0000:00–02:34S01–S05

Your agent vs. an always-on agent

从 week-one loop 到 always-on

同一个 loop,换一种运行方式

CS146S 学生在课程第一周写过一个最基础的 agent(S03 标题:You built this in week one),它一关终端就停。本讲讲的是,怎样让同一个 loop 一直跑下去。

要点

课程第一周写的基础 loopS03

messages = [system_prompt, user_message]
while True:
    reply = llm(messages, tools=TOOLS)
    messages.append(reply)
    if not reply.tool_calls:
        print(reply.text)
        break
    for call in reply.tool_calls:
        messages.append(run_tool(call))
可视化
对照表S04
维度WEEK-ONE终端里的基础 loopALWAYS-ON服务器上的 agent
在哪跑你的终端服务器:崩溃、部署、合上笔记本都不影响
电脑你的笔记本自己的云电脑,有桌面、浏览器和文件
记忆只有 messages 列表保存状态、记忆和技能,旧消息会被总结
说话打印每一条回复只在调用 send 工具时说话,所以可以保持安静
启动你打字才启动由事件启动:消息、定时任务、Slack、电话、完成的工作
寿命做完一件事就退出用同一份记忆工作好几个月
讲者补充
  • 它像同事:知道什么时候该安静,在后台干活,有重要进展才来找你。目标是能连续工作几周甚至几个月。
slides · S01–S05 · 5
CH 0102:34–06:13S06–S08

How developers work with AI

怎么走到这里

从审批到转向

AI 做的事越来越多,人的角色从逐步批准变成随时转向;界面反而简单得像发短信。

可视化
四个时代阶梯S06

2022–23复制粘贴在浏览器里聊天,手动把代码搬来搬去。

2024–25终端里的 agent它改文件、跑命令,每一步都要你批准。

2025–26为 agent 做的 app多个 agent 在后台或云端并行,你审查结果。

Nowalways-on你发一条消息,它带着自己的电脑、工具和记忆一直干活。

台阶越高,AI 做的越多。

Before / Now 双轨S07
BEFORE
Approve?Approve?Approve?

Before:每一步都停在 “Approve?” 等你。

NOW
插话插话发日历邀请auto-review

Now:你的插话(“Also check the Slack thread”“Actually, make it Thursday”)汇入同一条工作流;发日历邀请这一步由 auto-review 自动批准◐。

要点
  • 讲者团队的实现叫 Bot(S08)。界面左边是一列 bot(Sales Outbound、Inbox Manager……),右边是聊天。缺少 Salesforce 登录时,它会在自己的电脑上请你登录。
讲者补充
  • 很多公司把“用独立模型审查每条命令”叫作 auto review。讲者认为,这比人疲劳地逐条批准上百条命令更安全。他还假设:如果做盲测,模型多半审得更好。
slides · S06–S08 · 3
CH 0206:13–10:04S09–S11

Six new model capabilities

模型变了什么

知识住在文件里

六项新的模型能力让 always-on 成为可能;知识就放在普通文件里,正如幻灯片所说:“Everything is computer”。

要点

六项能力S10

  1. 长时间工作,并一直遵守指令。
  2. 把任务交给 helper,每个 helper 都有全新的 context。
  3. 使用真实工具:shell、文件、浏览器、MCP。
  4. 操作电脑,没有 API 的应用也能用。
  5. 知识存在文件里。
  6. 你演示一遍,它就存成 skill。
可视化
文件树S11 · 简化示例
memory/profile.md常驻 prompt。
memory/log/2026-10.md带日期的事实,一行一条。
skills/*/SKILL.md需要时才加载(“Use this when…”)。
routines/morning-brief一段 prompt,工作日 8:00 运行。

为什么用文件

  • 模型极其擅长用 shell。
  • 纯文本,人和 agent 都能读写。
  • 你说一次偏好,它就存进记忆。
  • skills 按需加载,所以多装也不贵。
slides · S09–S11 · 3
CH 0310:04–15:25S12–S18

Inside an always-on agent

生命周期与三段式架构

没事时什么都不跑

always-on 不是机器一直开着,而是没事时什么都不跑,状态都已存好,任何触发都能把它拉回来。

可视化
生命周期模拟器S13 · S15
LANENOW
进程被触发才运行,空闲 2 分钟后停
○ 停
电脑工具需要时才恢复;空闲几分钟后存快照并停
○ 休眠
状态数据库加存储(会话、记忆、routines、skills),始终都在
● 始终都在
  • 一轮正在进行时,电脑绝不休眠。
  • routine 用不到电脑时,电脑保持休眠。
  • 进程没在运行时,不会有工具调用。
  1. t0—
唤醒路由图S14
Router去重并选出会话
会话队列一次只跑一轮
有值得说的吗?
是:发到正确的地方
否:保持安静

每次唤醒都会记录来源◐ —

三段式系统图S16
客户端
桌面
手机和网页
Slack
邮件 / webhook / 定时任务
电话和会议
服务器
入口
每个会话一个队列
agent loop
模型
读写数据库
云电脑
文件与 connector 服务
命令执行器
每个 agent 一块屏加 Chrome◐

结论:所有端看到同一个会话。

要点
  • 云电脑(S15):每个用户一台 Firecracker 虚拟机,里面跑 Debian 容器,由 supervisor 保持运行。文件、已装的工具、浏览器登录状态都跨会话保留。
  • 为什么 loop 跑在服务器上(S17):合上电脑照样干活;手机电脑无缝切换;发版不等 App Store;要跑几个月的 agent 不能放在设备上◐。
  • 关键一条(S18):状态都在服务器上,所以虚拟机随时可以重建(比如修复 Linux 0-day 漏洞),不打断 loop。
讲者补充
  • 给每个人的电脑都一直开着太贵,“世界上没有那么多电脑”。在 SpaceX,常有人派 bot 进会议记笔记。
slides · S12–S18 · 7
CH 0415:25–18:07S19–S21

Messages, crashes and the queue

可靠性

消息、崩溃与插队

可靠性靠三件事:消息带唯一 ID 和序号,每一轮都跑在 durable workflow 里,新消息按优先级排队。

要点

按下发送之后S19

  1. 发送:消息先在本地显示,并带上唯一 ID;服务器丢弃重复的 ID,所以重试是安全的。
  2. 一轮:消息进入队列,一个会话一次只跑一轮,每一步都存进数据库。
  3. 通知:服务器只发一个“有变化”的信号,各端自己去拉数据,所以丢掉一个信号也无害。
  4. 排序:每个更新都带序号(41、42、43),缺了哪个就从数据库重新加载◐。
可视化
崩溃模拟器S20
Job queue从 Step 1 重做
durable workflow从 Step 3 继续

重复执行步数:0 / 0

图注:每一步都有记录;每一步都是幂等的(执行两次也无害);Temporal 这类开源引擎自带定时器和取消功能◐。

插队与合并S21

你在 1:1 对话里说“改成周四”或按 Stop:消息插队,打断正在跑的那一轮。

群聊、Slack、routine、helper 的消息:排到队尾;连发的 3 条合并成 1 轮。

slides · S19–S21 · 3
CH 0518:07–19:59S22–S24

One tool for talking to you

Harness ①:一个对话工具

SendToUser

agent 只用一个工具和你说话,就是 SendToUser;需要你确认的事,交给专门的 UI 控件。

可视化
枢纽图S23
12 个干活的工具
ShellFilesBrowserDesktopMemorySkillsHelper agentsCloud agentsApp connectorsWeb searchImage generationScreen recording
SendToUser
DesktopWebMobileSlackEmailVoice
  • 思考不外露。
  • 没有新东西就不说话。
  • 富消息:文件、多选、安全的密码输入。
  • 最后一条消息直接结束这一轮。
UI 控件S24

登录

••••

由 1Password 填表,密码不经过模型。

付款

等你点 Allow 或 Deny。

邮件草稿

由你选 Send 或 Discard。

表情回应◐

讲者补充
  • 讲者说,和课程第一周写的基础 harness 相比(可能也包括一些同类产品),最大的不同就是客户端和服务器之间只有这一个工具。
slides · S22–S24 · 3
CH 0619:59–26:27S25–S29

Tools and helpers

Harness ②:工具与 helpers

先走最便宜的路

工具先只给名字;获取信息的方式按成本逐级升级;重活交给 helper,主 agent 只收简报。

可视化
Context 占用对比S25 · 示意图
一开始就加载全部工具

工具细节 62 格 · 空闲 8 格

先只给名字,细节按需加载

工具 8 格(细节 6、名字 2)· 空闲 62 格

System prompt工具细节工具名对话空闲

每格 = 1%,按幻灯片示意比例。这种做法也叫 dynamic tool discovery / tool search tool。

成本阶梯S26
已知信息
app API(connector)
web search
自己登录的浏览器
完整桌面
问你

越往后越慢、越贵◐

规则:connector 坏了,不要改用浏览器绕过去,而是告诉你。

主 agent + helpersS28
主 agent
大任务
helper 分四类:通用(shell、web、connectors)电脑操作视频云端写代码◐
简短报告

主 agent 自己回答简单问题,把大任务交出去,收回一份简短报告。

要点

用电脑的三种方式S27

  • 读页面结构:拿到按钮和链接的列表,快且稳。
  • 点像素:在 1280×800 的屏幕上点,用于桌面 app 和系统对话框。
  • 问人:遇到登录、两步验证、captcha、付款时交给你。
  • 点击由 helper 完成,截图不会进入主 context。

工具设计 4 条S29

  1. 两轮之间不增删工具。
  2. 每个工具的描述加 schema 少于 4,000 字符。
  3. 存状态用专用工具,方便审查。
  4. 错误信息要写清下一步,例如:“The computer is asleep. Use Shell or Read to wake it, then try again.”
讲者补充
  • 每个 helper 都是一个 durable workflow,崩溃后能接着做。产品因此“感觉像有无限的 context”。
slides · S25–S29 · 5
CH 0726:27–27:24S30

How we keep it safe

安全

四道防线

四道防线:模型审查、来源标记、先问再发、密码隔离。

要点
防线规则
自动审查独立模型在高风险操作执行前检查;被拦下时请你批准,15 秒没有回应就维持拦截
追踪来源邮件和 webhook 的文本标为不可信;记忆是信息,不是指令
先问你没要求,就不给别人发消息;新的 routine 需要你同意
藏好密码密码放在环境变量里,不进模型;要动你的笔记本,需要你批准
可视化
auto-review 流程S30
风险操作
模型审查
通过执行
被拦下请你批准15 秒倒计时没有回应就维持拦截
slides · S30 · 1
CH 0827:24–31:31S31–S34

Keep the start of the prompt the same

Context 工程 ①:Prompt 缓存

cache miss 就是 bug

长期运行的 agent,大部分 token 都应该命中缓存。做法是:prompt 开头保持不变,新内容只加在末尾,出现 cache miss 就当 bug 修。

可视化
缓存堆叠图S32
不变层
工具定义system prompt(含记忆和 routines 的快照)首条消息(环境信息、工具名)
对话历史
只往末尾追加
最新消息
时间、变化说明、你的话

命中缓存cache miss

要点
  • 主 context 只留指针或总结(S33):长输出存文件,截图和重活交给 helper,旧消息换成总结,指令写成 skill。
  • 把 cache miss 当 bug(S34):总结前前缀一字不改;部署改了工具描述,就给进行中的对话追加说明;顺序固定、分段哈希;用户一打字就预热缓存。
讲者补充
  • 今年 1 月 OpenClaw 流行时,出现了大量 cache miss,后来做了很多修复。做 A/B 测试时,也不能打乱 prompt 的顺序。
slides · S31–S34 · 4
CH 0931:31–34:27S35–S36

Summarize while you're away

Context 工程 ②:压缩与记忆

趁缓存还热先总结

趁缓存还热,先把对话压缩成总结。记忆分四层:Profile 常驻 prompt,Log 只放最相关的 30 条。

可视化
压缩时间线S35
01一大轮结束(超过 10 万 tokens)
02约 10 分钟后(缓存还热)
03写总结(复用缓存)
04你的下一条消息从总结开始
  • 后台任务马上要唤醒 agent 时,就跳过这次总结。
  • 最后几条消息逐字保留。
  • 一轮太长时,可以在中途总结。
记忆四层S36
Profile核心事实,常驻 prompt,最多 100 条、4,000 字符。
Log带日期的事件,只取最相关的近 30 条。
Notes短期细节,很快就淡出。
其余用搜索工具找。
  • 重要的事实排在前面,旧的慢慢下沉。
  • 只能删除自己看到过的事实。
  • 关于你的事实,你的所有 agent 共享。
  • 记忆是信息,不是指令。
讲者补充
  • 所有压缩都有损,“可能有整篇博士论文专门研究这个问题”。
slides · S35–S36 · 2
CH 1034:27–37:43S37–S38

Product and model improve together

产品与模型一起进化

每个失败都是 eval

模型要为产品专门训练。每个失败都会变成一条 eval:内循环用它修 harness,外循环用它训练下一代模型。

要点
  • 训练三阶段(S37):
    • 预训练:学语言、代码和通用知识。
    • SFT:学会 harness,包括工具和格式、什么时候该快速回复。
    • RL:练习遵循长指令、使用 skills 和记忆、点对位置(grounding)、与其他 bot 协作。
  • 推理也分开调:主 agent 几秒内就要回复;helper 要能可靠地跑好几个小时◐。
可视化
双循环S38
内循环(每天)
  1. 01bot 出错
  2. 02变成 eval
  3. 03修 harness、prompt 或推理
  4. 04跑 evals
  5. 05发布
Evals guide training
外循环(每几个月)
  1. 01用 harness 和 evals 训练新模型
  2. 02换进产品
  3. 03用户用出新用法(比如满是 bot 的群聊)
  4. 04做新的评估和训练
slides · S37–S38 · 2
CH 1137:43–43:22S39–S42

Where this is going

往哪里走

Delete the product

Delete the product:假设模型会大幅变强,围绕它尽量少造东西,用不上的就删掉。

要点
6–12 个月的预测(S40)对应的开放问题(S41)
更长的项目(几个月)怎样测试跑几周的 agent
更好的记忆正确的记忆:更新、遗忘、不编造
更强的工具prompt injection:邮件和网页里的骗人文字
更简单的界面(也许只用语音)何时开口:太多是噪音,太少看不见进展
在工作中学会新技能协作:多 agent 共用电脑和记忆=分布式系统问题
知识被写下来成本:空闲近乎免费,活跃也要便宜

左右两栏按主题两两对照。

可视化
积木映射S42
每个 web app 都有的
服务器数据库缓存CRUD 界面
每个 agent 产品都会有的
durable workflows04 能用电脑0306 记忆和 skills0209 触发器和定时任务03 connectors 和授权0506 文字和语音渠道05 支付和身份0507 evals 和可观测性10

芯片 = 本讲相关章节

讲者补充
  • “今天的模型是它们最差的时候”,半年后可能要把 UI 整个重做。他口头还补充了一个开放问题:安全,不能让 agent 被坏人接管。
slides · S39–S42 · 4
CH 1243:22–45:17S43–S44

What to take away

带走什么

架构会复利

代码越容易写,懂得部件怎么组合就越重要。

要点
  • 架构会复利:写代码便宜了,对的架构能让你走得比别人快。
  • 自己造一个:从课程第一周写的基础 agent 出发,加上服务器、电脑和记忆。开源的 always-on agent 很适合拿来学。
  • 学 LLM 的基本原理:就像做网站要懂数据库◐。
可视化
“自己造一个”清单建议顺序0 / 6
讲者补充
  • 他仍然会读自己写的代码,尤其要理解自己发布出去的架构。
slides · S43–S44 · 2
SUMMARY

Summary

总结

贯穿全讲的 6 条原则读后归纳

原则出处
状态是唯一的真相,其他都可以丢03生命周期04可靠性
默认沉默,开口要有理由03生命周期05对话工具
主 context 最稀缺06工具与 helpers08Prompt 缓存09压缩与记忆
只追加,不修改04可靠性08Prompt 缓存
先走最便宜、最可控的路06工具与 helpers07安全
每个失败都是 eval10训练飞轮

讲者的收尾:假设模型会大幅变强,围绕它尽量少造东西;代码越容易写,懂得部件怎么组合就越重要。

GLOSSARY

Glossary

术语

glossary25 terms
术语中文解释例子
Always-on agent状态常驻服务器、由事件唤醒、能长期工作的 agent;没事时什么都不跑Bot / GrokBot
Harness包在模型外面的运行框架:工具、prompt、loop、状态管理GrokBot harness
Agent loop模型调工具、拿回结果、再调工具的循环S03
Routine按计划或由 webhook 触发的一段 prompt,类似 cron job工作日 8:00 的晨报
Router去重,并把事件分到正确会话的组件S14
Turnagent 处理一批消息的一轮运行S19
Firecracker轻量级虚拟机技术,便于快照和重启agent 的云电脑
Thin client, thick server客户端轻、服务器重的架构S17
Durable workflow每一步都有记录、崩溃后能从断点恢复的执行方式Temporal
Idempotent 幂等同一步执行两次,结果相同且无害S20
SendToUseragent 和你说话的唯一工具S23
MCP / Connector让模型调用外部应用的协议 / 接入某个 app API 的工具Gmail、Plaid
Dynamic tool discovery先只给工具名,用到时再加载细节S25
Computer use模型看屏幕,用鼠标和键盘操作电脑1280×800 屏幕
Accessibility tree页面元素的结构化列表,比截图省 tokenS27
Grounding把指令对应到屏幕上正确位置的能力“点对位置”
Subagent / helper主 agent 派出去的、有独立 context 的子 agentVideo helper
Auto-review独立模型在执行前审查高风险操作;被拦下时请你批准15 秒无回应就维持拦截
Prompt injection外部文本里藏着骗 agent 的指令钓鱼邮件
Context window模型一次能处理的 token 上限例:20 万 tokens
Prompt caching / cache miss复用相同的前缀来降低费用 / 前缀变了,按全价计费S32、S34
Compaction把长对话压缩成总结,会有信息损失S35
Eval衡量模型或产品行为的测试用例S38
SFT / RL监督微调 / 强化学习S37
Delete the product假设模型会变强,尽量少造东西,及时删掉多余部分S39