从 Agent Loop 到推理引擎:哈佛大学 26 年秋季最新 CS2680〈现代 AI 系统〉课程深度解读

image

1. 哈佛大学 CS2680「Modern AI Systems: Agents and System Optimizations」

[!quote] 课程自述(10 月 10 日)
本学期我正在教授一门关于代理系统的全新课程,该课程深入探讨了 AI 系统的全栈:从构建和优化代理框架,到服务和优化 LLM 服务基础设施。学生们通过构建、测量和优化真实的代理和系统来学习,平衡能力、延迟和成本。我们的目标不仅是传授当今的 AI 技术,而是让学生准备好构建未来的技术。

哈佛大学 2026 年秋季由 Juncheng Yang(哈佛 SEAS 助理教授,MadSys 研究组负责人,存储与缓存系统领域知名学者,现转向 AI 系统研究)开设的研究生课程。它的独特之处可以用课程自己的话概括:“跟随一个 agentic system,从 agent loop 一路向下穿透整个 serving stack”(follows one agentic system from the agent loop down through the serving stack)。

课程主页:cs2680.seas.harvard.edu — CS2680 Modern AI Systems: Agents and System Optimizations(Harvard SEAS, Fall 2026)

市面上讲 LLM 应用和讲推理系统的课程都不少,但把两者用同一条系统主线串起来的课极少。CS2680 不是“LLM 应用课 + 系统课”的拼盘,而是让学生亲手搭建一个完整的 agent,然后一层层拆开它:上层是 agent 循环的设计,中层是对 API 黑盒的优化,底层是自己部署开源模型、控制推理引擎。学生在一个学期内完成从“agent 的用户”到“agent 运行时的作者”再到“推理引擎的运营者”的三级跳。

先修要求是 CS61 加至少一门研究生系统课,熟练 Python 和 PyTorch;这是一门面向系统研究者的 AI 课,而不是面向 AI 研究者的系统课入门。

2. 课程速览

项目 内容
开课 哈佛 SEAS · 2026 秋 · Juncheng Yang(MadSys 研究组)
定位 研究生课:agent 应用与 LLM 推理系统的纵向整合
先修 CS61 + 一门研究生系统课;熟练 Python / PyTorch
成绩构成 五个递进作业 70% + 期末项目 20% + 课堂参与 10%
作业主线 A1 观察 → A2 重写循环 → A3 优化 → A4 自建引擎 → A5 全栈优化
特色 Claude Code 必用 · session 存档审计 · leaderboard 竞争 · 负结果友好

3. 课程结构:一条主线,五个递进作业

3.1. 总体设计:解剖式的作业序列

CS2680 的课程内容分两大部分。

Part I 讲 LLM 与 agent:Claude Code 的深度使用、multi-agent 工程(有一讲题为 “100x Engineer”)、agent 设计(context 与工具、多 agent 协调、记忆与可靠性、评估、成本与性能、安全),以及 Snowflake 工程师主讲的企业级 agent 实战。

Part II 讲 LLM 系统:serving 基础、speculative decoding、调度与 prefix caching、剪枝与量化、GPU kernel、KV-cache 优化与新架构、路由与负载均衡,另有 Meta 工程师主讲的 AI 基础设施讲座。每个大作业之后都安排学生分享会。

但这门课真正的骨架是五个作业。它们不是五个独立题目,而是同一个系统的五次逐层解剖:学生先站在系统外面看它运行(A1),再打开它亲手重写核心循环(A2),然后在不许碰模型的前提下优化模型之外的一切(A3),接着把商业 API 整个换掉、自己运营推理引擎(A4),最后允许动所有层、但必须以严格的测量方法证明每个改动有效(A5)。五个作业全部个人完成,代码放进同一个私有 GitHub 仓库(教师和四位 TF 协作可见),权重分别为 10%、10%、20%、20%、10%,合计占课程总成绩的 70%。

几个贯穿全程的制度值得先交代:每次作业都要求提交 Claude Code 的 session 存档(作为 write-up 中过程性陈述的证据);每次作业都要求录一段演示或讲解视频;A3 和 A5 的 write-up 以公开发表的博客文章形式交付。作业说明书只在发布当天早上上线,这也是为什么 A4、A5 的完整规格目前(10 月中旬)尚不可见。

3.2. A1 “Mads-Lens”:观察 agent(10%,9/2–9/20,预计 4–6 小时)

任务:给 Claude Code 本身做一个 Web 前端。用户在页面上输入请求,agent 在指定目录上工作,页面实时展示它的全部活动。课程刻意把体量做小,且明确说明这是唯一一个不作为后续基准的作业。

作业分三部分。第一部分先在终端里跑通 headless 模式:用 claude -p --output-format stream-json --verbose 启动,学生会得到一个结构清晰的事件流;先是 init 事件,然后是 assistant 消息、工具调用(tool_use 块)、工具结果(tool_result),最后是携带 total_cost_usd、duration_ms、num_turns、session_id 的结果事件。通过把 session id 传回 --resume 可以续接会话。作业要求先把一次完整运行保存成 events.jsonl 文件;因为第二部分的 Web 前端,本质上就是这个事件流的一个渲染器。

第二部分实现七个必备功能:

  • 提交 prompt 并选择工作目录;
  • 实时流式渲染轨迹:assistant 文本和每次工具调用的名称与输入随事件到达而显示(而非运行结束后回放),markdown 要渲染成排版而非原始标记;
  • 展示工具结果,且长输出要折叠——这被明确标注为一个留给学生的设计决策;
  • 状态可见性:每个工具调用有 pending/error 状态(通过 tool_use 与 tool_result 的 id 配对判断),每次运行有进行中/完成/失败状态,失败(比如目录不存在)必须产生可见的错误,而不是让页面无限等待;
  • 续接会话;
  • 展示每次运行的数字:美元成本、耗时、轮次数;
  • 把轨迹渲染成树:子 agent 的事件携带 parent_tool_use_id 指向派生它的那次工具调用,需要把子 agent 事件嵌套渲染在该调用之下、可折叠,无子 agent 时退化为平铺列表,宽屏下还要在对话旁展示调用名称的大纲。

规格里嵌着大量真实的工程判断:开发时建议用“回放模式”(读保存好的 events.jsonl 而非真实运行),实现十秒级的编辑-测试循环;禁止使用 agent 框架、禁止自己重写 agent 循环(那是 A2 的事);若部署到公网,必须加随机 access token,因为“这个页面实际上是一个远程控制器”。评分是 70% 七个功能(各 10%,从演示视频中判定)、20% write-up、10% 视觉设计。Write-up 要求三条锚定到具体 session 时刻的观察(agent 如何工作、踩了什么坑、学到什么教训),并明确警告“泛泛的赞美拿不到分”;完全 AI 生成的 write-up 会被扣分。

这个作业表面轻松,实则完成了三件事:学会以程序化方式驱动一个 agent(而不是只会交互式使用)、建立“agent 运行 = 可观测的事件流”的心智模型、并从用户视角亲眼看到 token 和美元是如何被消耗的,这为 A3 的成本优化埋下伏笔。

3.3. A2 “Mads-Loop”:拥有循环(10%,9/21–10/4,预计 10–12 小时)

任务:从零实现一个名为 madsLoop 的最小 coding-agent harness,并在 SWE-bench Pro 上测试。课程对 agent 的定义直接写在作业里:“agent 就是一个处于循环中的模型;它提出工具调用,你的 harness 执行调用并把结果喂回去。”

具体约束相当严格:必须使用课程代理提供的 qwen3.6-35b-a3b 模型(OpenAI 兼容 API),API key 只能放环境变量;命令行接口为 python madsLoop.py -p "<问题描述>" [--log] <工作目录>,agent 只能在工作目录内读、搜、改、执行命令,正确答案以未暂存的 git 修改形式存在;建议的工具集是 bash、read_file、edit_file、done 四件套;循环每轮把完整消息历史(系统提示 + 问题陈述 + 交替的 assistant/工具结果消息)发给模型,直到模型不再发起工具调用。作业还规定了严格的 JSONL 日志 schema(run_start、api_request、api_retry、tool_call、tool_result、run_end,各有指定字段),隐藏测试探测的是运行时而非模型,考的是 harness 的健壮性。

这个作业有两处教学设计尤为精彩。其一是规格书里明晃晃的警告 “DO NOT TRUST IT”,讲义的第 0、1 部分描述的是“一个设计选择,不是答案”,学生必须批判性地检验和修改它,write-up 专门要求写明“你和讲义做得不一样的地方”。这直接把作业从“照图施工”变成了“提出假设、用真实任务检验、再修改”的工程研究循环。其二是 mytest/ 自建任务:学生要自己写四个不属于任何基准的测试任务(问题描述、失败转通过的测试、Dockerfile、以及一个能让测试变绿的真实修复 gold.diff),其中两个必须设计成“初始解不出、但通过改进 agent 可以解出”(改进必须体现在提交的代码里),另两个则保持无解(但 gold.diff 必须能通过测试,证明题目本身是健全的)。这实质上是让学生学会构造可证伪的评测,解不出时,能分清是 agent 的锅还是题目本身无解。

评分:40% 来自在给定任务加隐藏的 SWE-bench Pro 任务上的解题率(在“可解任务”中计算;值得注意的是,对无解任务谎报 PASS 会倒扣分,一处精巧的反投机设计);40% 来自一页纸 write-up(无解性分析 20%、对讲义的偏离 10%、自建任务 10%);20% 来自三分钟代码讲解视频。运行环境在 Docker 容器中,补丁会应用到全新 checkout 上、被扣押的测试会被恢复;改测试文件来作弊是无效的。

3.4. A3 “Mads-Opt”:榨干每个 token(20%,10/5–10/20,预计 10–15 小时)

这是全课第一个“重”作业,也是竞争性最强的一个。任务:模型仍是黑盒 API,优化它周围的一切,在解题率不降的前提下压低成本和延迟。它不是书面作业,而是一场运行在专门基础设施上的公开赛。

基础设施的设计本身就值得一读:agent 容器(装着你写的 src/,只能写 .tasks/ 和日志目录)与任务容器(每个任务一个独立镜像)完全隔离,两者都不通互联网,agent 容器唯一的出口是一条通往课程 API 的 egress 代理;对任务容器的一切操作必须走 sandbox API(/exec、/read、/write),禁止本地 open() 和 subprocess。调度规则同样明确:同时最多 5 个任务打开;每个任务每次只能有一个正在评分的提交;单任务评分限时 35 分钟(挂起的测试套件按全失败计);总运行限时 4 小时,到点后所有未完成任务按当前状态结算。

成本结构是作业的核心变量。课程 API 提供三档模型,价格刻意拉开了两个数量级:

档位 输入 ($/1M tokens) 缓存输入 ($/1M tokens) 输出 ($/1M tokens)
Expert 2.00 0.10 10.00
Standard 0.08 0.004 0.28
Starter 0.01 0.0005 0.04

三档可任意混用,这实际上把模型路由(routing)从一个听课概念变成了学生必须做出的真实决策:哪些子任务值得 Expert,哪些 Starter 就够。加上缓存输入的巨大价差,KV-cache 与 prefix 复用的经济学也第一次变得可感知。

排行榜的规则相当精细:26 个任务,三个指标(解题数、每解出一题的成本、每解出一题的耗时),采用 skyline(Pareto 分层)排名,解出 ≥7 题的提交按三指标的支配关系分层排序,不足 7 题的排在所有达标提交之后。预算限制为每天 30 美元、每次提交 10 美元。计分公式为 max(81 − rank, 50),条件是你至少有一次提交打败基线(未达基线则直接按 81 − rank 计分,没有保底);官方基线是在 10 美元、4 小时内解出 16 题。也就是说,哪怕排名靠后,追平或超过基线就能保底 50 分;排名第一名得 80 分。80 分给排行榜,10 分给 write-up,10 分给露脸出声的三分钟视频。

两个细节最能说明这门课的性格。其一,失败原因会按任务逐条展示(未打开、未完成、无补丁、测试未运行、import 错误、破坏已有测试、新测试失败;崩溃和超时照样计入成绩),一切透明。其二,作业设有一个特别加分项:报告基础设施的安全漏洞最多可加 3 分,而利用漏洞作弊则整份提交作废,把安全研究也纳入了激励,同时堵死了投机。

3.5. A4 “Mads-Serve”:自建引擎(20%,10/21–11/10,预计 10–14 小时)

详细规格要到 10 月 21 日发布当天才上线,但方向已在课程页明确:拿掉商业 API,自己用一个推理引擎部署 7–8B 的开源权重模型,运行你自己的 agent。然后测量质量损失了多少、诊断损失来自哪里,并通过 agent harness(而不是换更大的模型或退回商业 API)把性能补回来。这是全课最点题的作业:它把 Part II 所学的 serving、量化、KV-cache、speculative decoding 全部从“听课内容”变成“你必须亲手操作并获得反馈的杠杆”,同时逼学生直面“小模型 + 好系统”与“前沿模型 API”之间的真实差距,并用上层工程手段弥合它。可以预期它的评测集正是 A2/A3 沿用的那套任务;同一 workload 下,唯一变量就是你自己的 serving 栈。

3.6. A5 “Mads-Stack”:全栈优化(10%,11/11–11/29,预计 12–18 小时)

规格同样未发布,但方法论要求已经写得很清楚,而且相当严格:profile 整条执行路径,解释时间、token 和算力分别花在了哪里;在改动任何东西之前先写下性能假设;然后跨所有层(agent 循环、模型选择、serving 系统)做优化,重跑同一 workload,验证哪些改动真正起了作用。评分延续 leaderboard 模式(80 分性能 + 20 分写作),延迟作为新增指标加入排名。交付物是公开发表的博客。如果说 A3 训练的是“在固定质量下省钱”,A5 训练的就是系统研究最核心的习惯,假设驱动的测量,以及诚实的归因。

3.7. 递进逻辑:约束的逐层释放

回头看这五个作业的设计,可以看到一条清晰的约束控制线:A1 什么都不能改(只能看),A2 只许改运行时(模型是定的),A3 只许改模型之外的一切(三档模型任选但都是黑盒),A4 必须换掉模型(自己 serve),A5 允许动一切(但必须先写假设)。每一层的自由度都在扩大,而每一层都继承了前一层的产出;A2 建立的评测集成为后续所有作业的基准,A3 的成本意识、A4 的 serving 能力在 A5 汇合。配合 session 存档审计、反投机评分和对无解任务的诚实分析要求,这套作业序列教的不只是五项技能,而是一个完整的纵向系统观:知道钱花在哪,知道时间花在哪,并且能用证据说话。

4. 期末项目:科研训练的浓缩

期末项目占 20%,分产品赛道(做一个真正打败现有最强替代品的工具)和研究赛道(提出一个可证伪的原创论断,分 agent 侧和 systems 侧)。四项评分维度等权:问题与动机、技术执行、评估、报告。

几个要求体现了纯正的系统研究方法论:

  • “Reproduce before you improve”,先在自己的环境里复现最接近的已有结果,再谈改进;
  • 基线必须是“最强现有系统”,且明确指出“把输入贴给前沿模型也算一个基线”;
  • 实验前先固定 workload、指标和协议,重复试验、报告不确定性、测边界条件;
  • 引用 Ousterhout 的原则要求“往深一层测量”,做组件级分解,而非只看端到端数字;
  • 负面结果受到明确尊重,一个没做成的项目,只要有出色的分析和诚实的局限说明,可以拿到接近满分。

最终交付形式是 12 月 7 日的现场 poster/demo(同伴互评)和 12 月 8 日通过 PR 提交到课程博客仓库的博文与可复现仓库。

5. 制度设计:几处罕见而值得思考的规定

AI 使用政策是这个课程最“当代”的部分。 AI 工具不是被容忍,而是被鼓励;但强制披露,未披露的 AI 使用按学术不端处理,披露了则零惩罚。更进一步的措施:Claude Code 是全部五个作业的必需工具,学生必须提交导出的 session 文件作为过程证据,支撑 write-up 中的过程性陈述。同时责任完全归己:AI 产生的 bug 和错误论断就是你的 bug 和错误论断,学生须能独立答辩。这大概是“AI 时代如何教系统课”这一问题目前最完整的回答之一:不禁止、不放任,而是让 AI 使用可审计。

**Leaderboard 评分(A3、A5)**引入了直接竞争:80 分按排名给(公式 max(81 − rank, 50),达基线才有保底 50),另 20 分给写作和视频。A3 比解题率与成本,A5 还加延迟。课程设有公开排行榜(leaderboard.cs2680.com)。教授也明说:大多数人在这两个作业拿不到 80。这把真实的性能竞争引入了课堂。

严格的 20% A 档曲线、四天迟交额度(之后每天贬值 20%)、参与度占 10% 且“零参与就是零分”、嘉宾讲座不得录制、学生和嘉宾演讲时全员合上笔记本。这些细节共同传递出一种高强度的研究文化。

加分项(上限 10%)也有特色:做分享最多各 4%;提出让 ChatGPT、Claude、Gemini 全部答错的 “AI-stumper” 问题每个值 2%;要求附精确 prompt、三个模型带日期的回答、有出处正确答案和失败分析。这个设计本身就是一个关于当前模型能力边界的众包实验。

算力配置相当扎实:课程自有 HPC 提供 72 台 CPU 服务器和 120 台 RTX PRO 6000 Blackwell GPU 服务器,A1–A3 用 Claude Code 和 API(费用课程承担),AWS 可选。对一门 80 人的课来说,这个资源投入说明了学校对它的定位。

6. 阅读清单的取向

阅读材料几乎全部来自一线实践而非教科书:ReAct、Lilian Weng 的 agent 综述、Anthropic 的 multi-agent 研究系统复盘、Cognition 的《Don’t Build Multi-Agents》(一篇反对多 agent 架构的著名檄文)、MemGPT、Claude Code 最佳实践、Simon Willison 的 agentic 工程模式。把 Anthropic 和 Cognition 两家立场对立的文章并排放进同一门课,本身就是在教学生:这个领域没有定论,读一手工程复盘比读二手综述重要。背景参考书则是 OSTEP、MLSys Book 等经典系统教材。

清单内容我放在最后面。

7. 总体感受

这门课的重要性体现在三个层面。

作为课程设计,它是“纵向整合”的典范。现有课程要么教 prompt 工程和 agent 框架(应用层),要么教 vLLM/调度/量化(推理系统层),两者之间存在一条真实的认知鸿沟;做应用的人不理解 serving 的成本结构,做系统的人不理解 agent 的行为模式。CS2680 的五作业序列让学生被迫同时握住两头,而 A4(小模型 + 优秀 harness 追平大模型 API)正是这条鸿沟上最关键的一跳,也是当下业界(推理成本优化、边缘部署、模型路由)的真实问题。

作为学科信号,它标志着“AI 系统”作为独立学科方向的正式成型;不再是大模型课程的附属,而是有自己完整的课程体系、方法论(假设驱动的全栈 profiling)、和评价标准(可复现、负结果友好、基线严格)。授课教师从存储/缓存系统转向 AI 系统,也代表了这一代系统研究者的典型轨迹。

作为 AI 时代教学制度的实验,它的“AI 强制使用 + session 存档审计 + 披露免责”三元组,为“作业到底在考什么”提供了一个自洽答案:考的是驾驭 AI 的过程与对结果的完全责任,而非与 AI 隔离的手工能力。

如果说有什么值得留意的张力:20% A 档曲线叠加 leaderboard 竞争,配合 70% 权重的作业,课程压力会相当大;而“课程不教所有细节、强调自主学习”的定位,也意味着它对学生的自驱力要求高于一般研究生课。这符合它培养研究者的目标,但确实不是一门轻松的课。

一句话总结:CS2680 是目前对“如何把 agent 应用与推理系统教成一件事”最完整、最诚实的一次课程实验;它教的不只是知识,而是当前 AI 工程领域最稀缺的那种纵贯全栈的判断力。

8. 推荐阅读清单

8.1. Sep 9 · Agents Use I: How Claude Code Works

8.2. Sep 14 · Agents Use II: 100x Engineer with Multi-agents

8.3. Sep 16 · Agents Design I: Context Management and Tool Design

Agent 基础:

面向缓存复用的上下文组织(这个小标题本身就点出了系统视角):

工具设计:

8.4. Sep 23 · Agents Design II: Multi-agent Architecture, Coordination, and Communication

8.5. Sep 28 · Agents Design III: Agent Memory and Reliability