Stanford CS329A:自我改进 AI Agent\ 1:课程总览
| 字段 | 内容 |
|---|---|
| 作者/整理 | AI Course Notes & Codex |
| 来源 | Stanford Online |
| 日期 | 2026 年 8 月 10 日 |
这门课试图回答什么
CS329A 关注的不是如何让一个语言模型在单次调用里回答得更像人,而是如何构造一个能利用额外计算、外部工具和环境反馈持续提升表现的系统。课程把过去几年的能力扩展路径串成一条连续主线:
- 预训练扩展(pre-training scaling):增加参数、数据与训练计算;
- 后训练(post-training):通过指令数据、偏好数据和强化学习改变模型行为;
- 测试时扩展(test-time scaling):在参数固定后,通过采样、搜索、验证和更长推理换取更高成功率;
- Agent 系统:把模型放入行动--反馈闭环,让它调用工具、读写环境、规划并纠错;
- 自我改进:把生成、验证、反馈和训练重新连接成可迭代的闭环。
本讲的总问题
当单纯扩大预训练规模的边际收益开始下降时,能力提升还能从哪里来?本讲给出的答案是:把计算从训练阶段扩展到推理阶段,并把单次模型调用升级为带验证与环境反馈的 Agent 工作流。
学习目标
完成本讲后,读者应能:
- 解释参数、数据和训练计算为何形成预训练 scaling laws;
- 区分 zero-shot、few-shot、chain-of-thought 与 instruction tuning;
- 说明 RLHF 如何把人类偏好压缩为可优化的奖励信号;
- 推导 repeated sampling 的成功概率,并理解 generation--verification gap;
- 区分 LLM、agentic workflow 与自主 Agent;
- 用统一的“生成--验证--反馈--更新”视角理解整门课程。
本章小结
CS329A 的对象是完整系统:基础模型提供候选能力,推理计算扩大候选覆盖,验证器负责选择,工具与环境提供真实反馈,训练或记忆机制再把反馈沉淀为下一轮能力。
第一条扩展路径:预训练 Scaling Laws
三个共同扩展的轴
预训练阶段的经验规律是:在合理的数据与优化配置下,增加训练计算量、训练数据规模和模型参数量通常都会降低测试损失。常用的抽象形式是幂律:
- \(L(x)\):给定资源规模 \(x\) 时的测试损失;
- \(L_{\infty}\):该数据分布和建模假设下难以消除的损失下界;
- \(A\):与任务、数据和模型族相关的比例常数;
- \(x\):可以表示计算量、数据量或参数量;
- \(\alpha\):幂律指数,决定资源增加后损失下降的速度。
幂律的重要性不在于“永远有效”,而在于它曾经让团队能够在训练前预测更大模型的收益,并据此投入更大规模的算力与数据工程。
来源:视频讲解区间:00:02:50–00:03:53。
“更大”不是只指参数更多
一个参数极大的模型如果数据不足,会重复记忆有限样本;如果训练计算不足,参数得不到充分优化;如果数据质量差,额外计算只会更充分地拟合噪声。因此现代 scaling 的核心是参数、token 和有效计算的协同配置。
从 BERT、GPT-2 到 GPT-4:规模成为能力来源
2018--2024 年间,主流语言模型的规模快速增长。课程用这段历史强调两点:第一,扩大规模带来了连续的平均性能提升;第二,某些能力并非在小模型上平滑可见,而是在达到一定规模后突然成为可观测行为。
来源:视频讲解区间:00:03:55–00:04:46。
这里应避免一个常见误解:图中参数规模增长并不意味着参数是唯一因果变量。数据配比、架构、优化器、训练稳定性和后训练方法都在同期变化,因此历史曲线表达的是系统工程整体扩展的结果。
Zero-shot、Few-shot 与上下文学习
GPT-3 之后,一个关键变化是模型可以直接从 prompt 中理解任务:
- Zero-shot:只给任务说明和输入,不给示例;
- One-shot:额外给一个输入--输出示例;
- Few-shot:给少量示例,让模型从上下文推断任务映射。
这类能力被称为 in-context learning:模型权重没有更新,但上下文中的模式改变了本次前向计算的行为。
来源:视频讲解区间:00:05:40–00:06:38。
上下文学习不等于参数学习
Few-shot 示例不会在推理时永久写入权重。它更像为当前请求建立一个临时任务解释。上下文结束后,这个“学习结果”通常不会跨请求保留,除非系统另有外部记忆或继续训练机制。
Chain-of-Thought:把中间过程也放进上下文
Chain-of-thought(CoT)提示的关键不是多写几句话,而是提供从问题到答案的中间推理轨迹。相比只展示最终答案,模型可以模仿问题分解、状态更新和局部计算方式。
来源:视频讲解区间:00:07:18–00:09:01。
课程强调,CoT 效果随模型规模增长而明显增强。在小模型上,给出推理示例可能只增加模仿负担;在足够大的模型上,它能触发更可靠的多步计算。
来源:视频讲解区间:00:09:01–00:10:18。
从“预测下一个 token”到“执行一个计算过程”
CoT 表明,同一个 next-token predictor 可以在上下文中表现得像一个迭代计算器。模型并未改变目标函数,但通过生成中间 token,把一次困难映射拆成多个更容易的局部映射。后续的 reasoning model 与 Agent 都沿用了这个思想:允许系统在给出最终答案前消耗更多中间步骤。
本章小结
预训练 scaling 同时扩大了模型的平均能力和可被 prompt 激活的潜在行为。Zero-shot、few-shot 与 CoT 展示了上下文如何在不更新权重的情况下重新组织模型计算,但模型“知道什么”与“按人类意图行动”仍是两件事。
第二条扩展路径:Post-Training 与人类偏好
为什么预训练模型还不能直接成为助手
预训练目标要求模型拟合互联网文本分布。它会学习知识、语法和推理模式,却没有天然理由遵循用户指令、拒绝有害请求或偏好简洁有用的答案。Post-training 的作用是改变行为分布:让模型在已有知识能力之上,形成更稳定的任务接口。
来源:视频讲解区间:00:12:41–00:14:07。
Instruction Tuning:先学会“按题目作答”
Instruction tuning 使用人工或合成的指令--回答数据做监督微调。其价值在于建立统一接口:无论是翻译、问答、摘要还是代码生成,都可表示为“指令 + 上下文 \(\rightarrow\) 响应”。
若监督数据为 \(\mathcal{D}_{\mathrm{SFT}}=\{(x_i,y_i)\}\),常见目标是:
- \(x_i\):指令与输入上下文;
- \(y_i\):示范回答;
- \(\pi_{\theta}\):参数为 \(\theta\) 的语言模型策略;
- \(\mathcal{L}_{\mathrm{SFT}}\):监督微调的负对数似然损失。
SFT 能教会格式和任务遵循,却很难用单一“标准答案”表示开放式回答的质量差异,因此还需要偏好学习。
RLHF:把排序偏好变成奖励函数
RLHF 的典型流水线包含三步:
- 对同一 prompt 采样多个回答;
- 请人类比较回答,训练奖励模型 \(r_{\phi}(x,y)\);
- 用强化学习提高高奖励回答的概率,同时限制策略偏离 SFT 模型。
来源:视频讲解区间:00:16:54–00:19:05。
可将优化目标抽象为:
- \(r_{\phi}(x,y)\):奖励模型对回答的偏好分数;
- \(\pi_{\theta}\):正在优化的策略模型;
- \(\pi_{\mathrm{ref}}\):参考模型,通常来自 SFT;
- \(D_{\mathrm{KL}}\):策略偏离参考模型的程度;
- \(\beta\):奖励提升与行为漂移之间的权衡系数。
奖励模型只是偏好的近似代理
如果策略发现了奖励模型的漏洞,它可能得到高分却产生低质量行为,这就是 reward hacking。RLHF 的有效性取决于偏好数据覆盖、标注一致性、奖励模型泛化和策略约束,而不是“有一个 reward 就自然对齐”。
本章小结
Post-training 把通用生成模型改造成可交互助手。SFT 建立指令接口,偏好模型压缩人类比较,RL 在奖励与行为漂移之间优化。它也第一次明确引入了课程后续反复出现的结构:生成候选、评估候选、根据评估更新生成器。
第三条扩展路径:Inference-Time Scaling
参数固定后,仍可用更多计算换成功率
Large Language Monkeys 的出发点非常直接:对同一道题独立采样很多次,只要模型对该题存在非零成功概率,就可能在某次采样中命中正确解。系统分成两步:
- Generation:生成大量候选解,追求 coverage;
- Verification:从候选中识别正确解,追求 precision。
来源:视频讲解区间:00:20:03–00:22:43。
假设一次采样独立成功的概率为 \(p\),采样 \(k\) 次至少成功一次的概率是:
- \(p\):单次采样得到正确候选的概率;
- \(k\):推理时采样预算;
- \((1-p)^k\):\(k\) 次都失败的概率;
- \(P_{\mathrm{solve}}(k)\):候选集合中至少存在一个正确解的概率。
当 \(p\) 很小时,需要很大的 \(k\) 才能看到明显收益;当 \(p=0\) 时,再多采样也无济于事。这解释了 test-time scaling 的边界:它能挖掘模型低概率但已经存在的能力,却不能凭空创造模型完全不会的算法。
Coverage 与最终准确率不是一回事
Oracle pass@\(k\) 假设我们能知道候选中哪个答案正确,衡量生成覆盖;真实系统还要面对选择问题。若 verifier 无法识别正确答案,候选集合再好也无法转化为最终 pass@1。这一差值就是 generation--verification gap。
为什么小模型也能被大量采样“放大”
实验显示,不同模型对不同题目往往存在长尾成功概率:某个 8B 模型可能大多数时候做错一道题,但在极少数轨迹中会走对。增加采样数会逐步收集这些稀有成功轨迹,使小模型在 oracle 评价下接近甚至超过强模型的单次表现。
来源:视频讲解区间:00:23:49–00:27:12。
但计算收益存在递减:当容易题已被覆盖,新增采样主要消耗在极难题上。系统设计不能只问“再采样是否提升”,还要问“每单位 token、延迟和能耗带来多少边际成功率”。
训练计算与测试时计算是两种不同预算
Reasoning model 把更长的思维链、搜索与自我修正纳入推理过程。课程用 o1 的训练曲线和测试时曲线说明:能力既可随训练计算增长,也可在模型固定后随 test-time compute 增长。
来源:视频讲解区间:00:29:40–00:32:07。
来源:视频讲解区间:00:32:08–00:33:55。
并行扩展与串行扩展
并行扩展独立生成多个候选,易于并行但候选之间不共享经验;串行扩展让后续步骤读取前面的结果并进行修订、搜索或回溯,可能更高效,但一旦早期状态错误也会把偏差传播到后续。实际系统通常混合两者。
推理预算应按问题难度自适应
固定给每道题相同 token 预算会浪费计算:简单题一次即可解决,困难题需要更多探索。更合理的控制器应根据不确定性、验证分数、候选一致性或中间失败信号决定是否继续计算。
可把预算分配写成约束优化:
- \(k_i\):问题 \(i\) 获得的推理步骤或采样数;
- \(U_i(k_i)\):额外计算带来的期望效用;
- \(c_i\):每一步的成本;
- \(B\):总 token、延迟或金钱预算。
本章小结
Inference-time scaling 把“更多计算”从训练集群迁移到每次请求。Repeated sampling 提升 coverage,reasoning/search 提升单条轨迹质量,而 verifier 决定这些额外候选能否转化为最终准确率。整门课后续大量方法都可以看作对这三部分的改进。
从 LLM 调用到 Agent 系统
Agent 的最小闭环
单次 LLM 调用的输入输出边界是固定的;Agent 则在一个循环中维护目标和状态:观察环境、决定行动、执行工具、读取反馈,再决定下一步。其最小抽象为:
- \(g\):用户目标;
- \(s_t\):第 \(t\) 步可见状态,包括历史、工具结果和外部环境;
- \(a_t\):模型选择的动作;
- \(T\):环境执行动作后的状态转移;
- \(\pi_{\theta}\):决定下一步动作的模型策略。
来源:视频讲解区间:00:42:20–00:43:53。
Agent 的核心不是“多调用几次模型”
只有当后续决策读取了真实执行结果,并能据此改变计划时,系统才形成反馈闭环。没有环境状态、工具执行或反馈消费的多轮文本生成,更接近 prompt pipeline,而非完整 Agent。
Agentic Workflow:把可靠结构写进代码
Agentic workflow 使用预定义控制流组织模型和工具。它牺牲部分自主性,换取可预测性、可观测性和易调试性。例如先生成、再评审、失败则重试的流程,其控制逻辑由程序规定,而不是每次都由模型自由决定。
来源:视频讲解区间:00:43:53–00:44:31。
课程列出五类常见模式:
| 模式 | 机制 | 适用场景 |
|---|---|---|
| Prompt chaining | 前一步输出成为后一步输入 | 文档生成、信息抽取、逐阶段转换 |
| Routing | 先判断请求类型,再分配给专用模型或工具 | 客服分流、模型级联、风险分级 |
| Parallelization | 同时生成多个候选或处理多个子任务 | 多样化采样、独立检索、批量分析 |
| Orchestrator–worker | 中央规划器拆任务,多个 worker 执行,最后整合 | 代码库修改、深度研究、复杂报告 |
| Evaluator–optimizer | 生成器与评审器迭代,直到满足标准或预算耗尽 | 写作修订、代码测试、方案优化 |
来源:视频讲解区间:00:44:32–00:49:00。
Workflow 与自主 Agent 的工程取舍
- 固定 workflow:高可控、易测试、成本上界明确,但遇到新情况缺乏适应性;
- 自主 Agent:能动态规划和选择工具,但行为分支爆炸,错误会在长轨迹中累积;
- 混合系统:把高风险边界、权限和验收写死,把开放式搜索交给模型。
自主性越高,评估越不能只看最终答案
长轨迹系统可能偶然得到正确结果,却经历危险动作、无效循环或不可接受的成本。评估应同时记录最终质量、工具调用正确性、步骤数、延迟、费用、权限边界和失败恢复行为。
本章小结
Agent 把推理扩展成状态化行动过程;agentic workflow 把常见分解、路由、并行和评审模式写进控制流。它们都需要课程后续主题:规划决定做什么,工具提供环境反馈,verifier 判断是否正确,训练与记忆让系统下次做得更好。
三个典型应用域
Coding Agent:代码库是可执行环境
编码任务具有天然反馈:编译器、测试、静态分析和运行日志都能充当 verifier。Coding agent 的价值不仅是补全代码,而是维护一个持续变化的工作状态:搜索仓库、编辑多个文件、运行测试、读取失败、定位根因并迭代。
来源:视频讲解区间:00:52:44–00:54:34。
为什么代码是自我改进方法的理想试验场
代码任务同时具备开放式生成与相对便宜的自动验证:候选程序空间巨大,但单元测试、类型检查和执行结果可快速过滤候选。这使代码成为 repeated sampling、search、execution feedback 和 RL 的高价值交汇点。
Customer Support Agent:反馈来自业务状态
客服 Agent 需要访问订单、工单、退款和知识库,并执行真实业务动作。成功标准通常不是“回答听起来合理”,而是问题是否解决、状态是否正确更新、用户是否需要再次联系。
来源:视频讲解区间:00:54:34–00:55:43。
这类系统的难点是权限与不可逆动作:模型可以建议退款,但真正执行前往往需要规则检查、额度限制或人工确认。
Research Agent:把研究过程分成可验证阶段
科研代理覆盖想法生成、文献检索、实验设计、代码执行、结果分析和论文写作。不同阶段的 verifier 差异很大:检索可检查引用是否存在,代码可运行测试,实验结论却需要统计严谨性和领域判断。
来源:视频讲解区间:00:56:00–00:59:03。
“自动完成报告”不等于完成研究
Research agent 最容易在引用真实性、实验可复现性和因果解释上产生表面完整但证据薄弱的结果。高质量系统必须把来源核验、实验日志、统计检验和反例搜索纳入工作流,而不能只优化最终文本的流畅度。
本章小结
三类应用的共同点是:模型必须离开纯文本空间,与可变化的外部状态交互。它们的差异主要来自 verifier 的成本与可靠性:代码执行反馈最便宜,业务成功信号更延迟,科研正确性最难自动化判断。
统一视角:自我改进闭环
本讲可以压缩成一个四阶段循环:
- Generate:模型或多个 Agent 产生候选动作、解答或计划;
- Verify:测试、奖励模型、规则或环境信号评估候选;
- Select / Act:选择候选并在环境中执行;
- Update:把反馈用于当前轨迹修正、记忆更新或参数训练。
整门课程的概念地图
Test-time scaling 主要改进 Generate 与 Select;robust verification 改进 Verify;tool use 和 planning 改进 Act;RL 与 synthetic data 把反馈写回参数;memory 与 continual learning 把经验跨任务保留。所谓 self-improving agent,就是让这条链路能稳定、可度量地循环。
设计一个自我改进系统时的检查清单
- 候选多样性来自哪里,是否只是重复生成相同错误?
- verifier 是否比 generator 更可靠,还是共享同一盲点?
- 反馈是立即、延迟,还是只能用代理指标近似?
- 哪些动作可逆,哪些动作需要权限或人工确认?
- 额外计算带来的边际收益是否覆盖成本和延迟?
- 更新会不会导致 reward hacking、遗忘或能力漂移?
本章小结
把模型、验证器、工具和更新机制拆开后,可以更清楚地定位系统瓶颈。很多“模型不够聪明”的失败实际上来自验证器、状态管理、工具接口或预算分配,而不一定需要重新训练更大的基础模型。
拓展阅读
- Brown et al., Large Language Monkeys: Scaling Inference Compute with Repeated Sampling
- Anthropic, Building Effective Agents
- Stanford CS329A 课程主页与 reading list
- 官方 9-Part 播放列表
总结与延伸
本讲从预训练 scaling laws 出发,解释了大模型能力为何曾长期依赖参数、数据和训练计算的共同扩展;随后通过 zero/few-shot 与 chain-of-thought 展示上下文如何激活模型内部潜在计算;通过 instruction tuning 与 RLHF 说明后训练如何塑造行为;再用 Large Language Monkeys 和 reasoning model 引出推理时计算;最后把这些能力放入带工具和反馈的 Agent 系统。
最值得保留的三个判断是:
- 能力不只存在于权重,也存在于可调用的计算过程。 同一模型在不同采样、搜索和推理预算下可呈现显著不同的成功率。
- 生成能力和验证能力必须分开测量。 候选中“有正确答案”不等于系统“能交付正确答案”。
- Agent 的价值来自闭环。 只有真实执行、反馈消费和状态更新,才能把语言模型升级为可持续完成任务的系统。
下一讲将专门讨论 test-time compute scaling:重复采样为何呈幂律收益、并行采样与串行修订如何比较、reward model 如何指导搜索,以及何时额外预训练仍优于额外推理计算。