快速跳转

Week 01 · Introduction to Coding LLMs and AI Development

Course logistics · What is an LLM actually · Mon 9/22 / Fri 9/26

进入 Week 01 详情页

课程PPT笔记

CS146S 第一周笔记总结:Introduction to Coding LLMs and AI Development

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 9/22 Introduction and How LLMs are Made 课程介绍 + LLM 原理
Fri 9/26 Power Prompting for LLMs Prompt Engineering 技术详解

第一讲:课程介绍 & LLM 是如何制造的(9/22)

1. 课程定位与核心理念

这不是一门 "Vibe Coding" 课程。 Vibe coding(YOLO 式地盲目接受 AI 生成的代码)不足以构建真正好的软件。距离 vibe coding 能够可靠地构建生产级软件,可能还需要 2-10+ 年。

这门课的目标是让有经验的工程师真正成为 10x 工程师

行业现状(2025):

  • 坏消息:软件工程行业正在被大幅重塑,CS 专业入学人数下降了 20%
  • 好消息:软件开发者的生产力有潜力达到历史最高水平。借助 AI 编程,工程师可以以前所未有的速度掌握新的技术栈和工具

核心观点:

"You won't be replaced by AI. You'll be replaced by a competent engineer who knows how to use AI." (你不会被 AI 取代,你会被一个懂得使用 AI 的工程师取代。)

  • 如果你唯一的价值是知道如何从 StackOverflow 复制粘贴,那你会被 AI 取代
  • 如果你能进行系统性思维、理解业务上下文、设计健壮的架构和抽象,AI 会极大地提升你的生产力

📚 延伸阅读: OpenAI Codex 文章(阅读 5)用大量实例验证了这一理念——OpenAI 工程师不是被 Codex 取代,而是通过 Codex 实现 "一天开会还能合并 4 个 PR" 的生产力飞跃。

2. 核心理念(The Takeaway)

Human-Agent Engineering(人-智能体协同工程):

  • 不是 vibe coding,而是学会管理 AI agent
  • 聚焦于那些 AI 系统尚未取代的技能:业务理解、架构设计、成为 Tech Lead
  • 如今的"坏代码"不仅是架构上的错误决策,还包括由 LLM 幻觉导致的功能性错误软件

LLMs 的能力取决于你自身的水平:

  • 好的上下文(context)→ 好的代码
  • 如果你自己都无法理解你的代码库,LLM 也无法理解

📚 延伸阅读: Anthropic 视频(阅读 4)中也强调了这一点——"talking to a model is a lot like talking to a person"。你的沟通能力直接决定了 LLM 的输出质量。OpenAI Codex 文章中维护 AGENTS.md 的实践也是同一逻辑:你对代码库理解越深,提供给 AI 的上下文越好,输出质量越高。

要大量阅读和审查代码:

  • 学会辨别好代码和坏代码
  • 培养"好品味"(good taste)

积极实验:

  • 目前还没有成熟的软件模式,所有人都在摸索
  • 工具会过时,找到适合你自己的工作流

3. LLM 工作原理(5 张幻灯片精华版)

基础概念

  • LLM(大语言模型)是自回归模型,用于下一个 token 预测
  • 处理流程:
    1. Tokenization(分词):使用固定词表将输入文本分割为 token
    2. Embedding(嵌入):将 token 转换为固定维度的数值向量(~1-3K 维)
    3. Transformer 层(12-96+ 层):使用 Self-Attention 机制(Vaswani et al., 2017)学习词与词之间的语法和语义关系
    4. 输出:得到最可能的下一个 token 的概率分布

📚 延伸阅读: Karpathy 视频(阅读 1)用 3.5 小时详细讲解了完整流水线——从 FineWeb 数据集的 12 亿网页爬取、BPE 分词,到 GPT-2 vs LLaMA 3 的规模差异。课堂 5 张幻灯片是精华版,Karpathy 视频是完整版,建议结合观看。

训练流程(三阶段)

阶段 名称 方法 数据规模
Stage 1 自监督预训练 在大量公开数据上学习语言概念 千亿到万亿+ tokens
Stage 2 监督微调(SFT) 用高质量的 prompt-response 对教模型遵循指令 数万到数十万对
Stage 3 偏好调优(RLHF) 对齐模型输出与人类偏好(有用性、正确性、可读性) 数万到数十万对人类标注比较

训练数据来源举例: Common Crawl、Wikipedia、StackExchange、公开 GitHub 仓库等。英文维基百科约 30 亿 tokens,作为参考。

推理模型(Reasoning Models):

  • 使用 Chain-of-Thought 推理训练扩展
  • 集成工具使用能力
  • 通过强化学习学习如何评估推理过程、回溯等
  • 通常模型名称带有 "-think"

📚 延伸阅读: Karpathy(阅读 1)用 AlphaGo "Move 37" 做类比——就像 AlphaGo 通过 RL 发现了超越人类棋手的策略,LLM 也能通过 RL 发展出新颖的推理技术。DeepSeek-R1 的 "aha moment" 就是这类涌现行为的实例。

模型规模参考: GPT-3/Claude 3.5 Sonnet: ~175B 参数;LLaMA 3.1: 405B;GPT-4: ~1.8T(传闻)

实际使用中的优势与局限

优势: 专家级代码补全、代码理解、代码修复

局限:

  • 幻觉(Hallucinations):生成不存在或过时的 API(可通过良好的上下文工程缓解)
  • 上下文窗口限制:~100-200K tokens,但存在 primacy/recency bias 和 "lost-in-the-middle" 效应
  • 延迟:每个请求数秒到数分钟(需要规划好任务委派,合理进行人类上下文切换)
  • 成本:最佳模型输入约 $1-3/百万 tokens,输出 $10+/百万 tokens(但成本每年约下降 10 倍)

📚 延伸阅读: 关于幻觉,Karpathy(阅读 1)从训练层面解释了根本原因——标注者以自信语气回答导致模型也"自信地不知道";课堂第二讲则从实用层面给出缓解手段(Tool Use、RAG、Self-Consistency)。两者形成完整的"原因→解决方案"链条。


第二讲:LLM 强力 Prompting 技术(9/26)

1. Prompting 背景

  • Prompt 是与 LLM 沟通的通用语言,也是对 LLM 进行编程的方式
  • 在编程语言的演化中,prompting 是下一个阶段
  • Prompting 既是艺术也是科学:LLM 的黑箱本质意味着有效的 "LLM whispering" 需要一些技巧,但也存在经过实证验证的技术

📚 延伸阅读: Google Cloud(阅读 2)和 promptingguide.ai(阅读 3)分别从入门和进阶角度系统化了 prompting 技术。Anthropic 视频(阅读 4)则强调了实践层面的哲学——prompt engineering 本质是"与模型沟通"。这三份材料构成了课堂技术讲解的理论背景。

2. 七大核心 Prompting 技术

① Zero-Shot Prompting(零样本提示)

  • 直接要求 LLM 完成任务,不给示例、不给支持
  • 适合 LLM 已经熟悉的常见任务

💡 实战示例:

# 基础 zero-shot
Write a Python function that validates email addresses using regex.

# 更好的 zero-shot(加入明确约束)
Write a Python function called `validate_email` that:
- Takes a single string parameter
- Returns True if the string is a valid email, False otherwise
- Uses the `re` module
- Handles edge cases like missing @ or domain

📚 阅读关联: Google Cloud(阅读 2)指出 zero-shot 最适合直接、明确的任务。Anthropic 工程师(阅读 4)补充说,即使是 zero-shot,也要像"对一个没有上下文的人说话"一样清晰。

② K-Shot Prompting(少样本提示 / In-Context Learning)

  • 给 LLM 提供一些如何完成任务的示例
  • 常用 k = 1, 3, 5
  • 适用场景: 特定领域的 API、LLM 较少见过的语言、需要特定代码风格/命名规范
  • 避免: 通用编码任务、过度约束 LLM

💡 实战示例:

# 场景:让 LLM 遵循团队的 API 响应格式

Convert these API endpoints to match our standard response format.

<example>
Input: GET /users → returns { data: [...] }
Output: GET /users → returns { status: "ok", payload: { users: [...] }, metadata: { count: N } }
</example>

<example>
Input: GET /orders → returns { orders: [...] }
Output: GET /orders → returns { status: "ok", payload: { orders: [...] }, metadata: { count: N } }
</example>

Now convert: POST /products → returns { id: "123", name: "Widget" }
# 场景:特定命名规范的代码生成(课堂原始示例)

Write a for-loop iterating over a list of strings using the naming convention in our repo.
Here are some examples of how we typically format variable names.
<example>var StRaRrAy = ['cat', 'dog', 'wombat']</example>
<example>def func CaPiTaLiZeStR = () => {}</example>

📚 阅读关联: Google Cloud(阅读 2)的 Few-Shot 策略强调"展示期望的风格、语调和详细程度"。OpenAI Codex 文章(阅读 5)中的最佳实践 "Implement this the same way as [module X]" 本质上就是 K-Shot——用已有代码作为示例引导生成。

③ Chain-of-Thought (CoT) Prompting(思维链提示)

  • 展示或要求推理步骤
  • Multi-Shot CoT: 提供带推理过程的示例
  • Zero-Shot CoT: 简单加一句 "Let's think step-by-step"
  • 也可要求在 <reasoning> 标签中显式推理
  • 适用场景: 需要多步逻辑的编程和数学任务
  • 这是很多推理模型的核心技术

💡 实战示例:

# Zero-Shot CoT
This function is supposed to find the longest palindromic substring,
but it returns wrong results for "cbbd". Debug it step by step.

def longestPalindrome(s):
    # ... buggy code ...

Think through the logic step by step:
1. What should the expected output be?
2. Trace through the code with input "cbbd"
3. Where does the logic break?
4. Provide the fix.
# Multi-Shot CoT(提供带推理的示例)
Given a SQL query, analyze its time complexity.

<example>
Query: SELECT * FROM users WHERE id = 5
Reasoning: This is a point lookup on the primary key. With a B-tree index,
this is O(log n). Without index, it's O(n) full table scan.
Complexity: O(log n) with index, O(n) without
</example>

Now analyze: SELECT * FROM orders o JOIN users u ON o.user_id = u.id WHERE u.country = 'US'
# 使用 XML 标签强制推理(课堂推荐格式)
Review this React component for potential performance issues.
Before giving your answer, show your reasoning in <reasoning> tags.

<reasoning>
[Model will think through the component's render behavior, 
state management, and potential re-render triggers here]
</reasoning>

Then provide your recommendations.

📚 阅读关联: Karpathy(阅读 1)从理论层面解释了 CoT 为何有效——LLM 的推理分布在多个 token 上,每个 token 的计算预算是固定的,因此"让模型多说话"相当于给它更多计算预算。Anthropic(阅读 4)从实践角度补充:要求模型先解释再回答可以显著提高准确率。promptingguide.ai(阅读 3)进一步扩展了 CoT 到 Tree of Thoughts——并行探索多条推理路径。

④ Self-Consistency Prompting(自一致性提示)

  • 多次采样输出(通常结合 CoT),取最常见的结果
  • 通过对多样化推理路径的模型集成,减少幻觉和错误答案
  • 实质是一种**模型集成(ensembling)**方法

💡 实战示例:

# 概念:对同一问题多次采样,取多数答案
# 在实践中,可以手动多次提交相同 prompt 并比较结果

# 也可以在 prompt 中要求模型自行尝试多种方法:
Solve this concurrency bug using three different approaches.
For each approach:
1. Explain the reasoning
2. Provide the fix
3. Note potential tradeoffs

Then recommend which approach is most robust and why.

📚 阅读关联: OpenAI Codex 文章(阅读 5)的 "Best-of-N" 实践就是 Self-Consistency 的工业级应用——同时生成多个响应,选最好的一个或组合多个优点。promptingguide.ai(阅读 3)将其定义为"通过多样化推理路径的多数投票来减少错误"。

⑤ Tool Use(工具使用)

  • 允许 LLM 调用外部系统
  • 减少幻觉、增强 LLM 自主能力最重要的技术之一

💡 实战示例:

# 课堂原始示例(提供测试工具)
Fix the IndexError in src/parser.py. Ensure the CI tests still pass.
Here are the available tools:
<tools>
pytest -s tests/unit/test_parser.py
pytest -v tests/integration/
python -m mypy src/parser.py
</tools>

# 更复杂的场景(多工具协作)
Investigate why the /api/orders endpoint returns 500 errors intermittently.
<tools>
curl -X GET http://localhost:8080/api/orders     # 测试 endpoint
docker logs app-server --tail 100                 # 查看服务器日志
psql -c "SELECT count(*) FROM orders WHERE created_at > now() - interval '1 hour'"  # 检查数据库
</tools>
Use these tools to diagnose the issue, then propose a fix.

📚 阅读关联: Karpathy(阅读 1)从训练层面解释了 Tool Use 的原理——模型学会在输出中生成特殊 token 来触发工具调用。promptingguide.ai(阅读 3)的 ReAct 框架(Thought → Action → Observation)就是 Tool Use 的结构化实现。OpenAI Codex(阅读 5)的"迭代改进开发环境"实践——设置启动脚本、环境变量——本质上是在为 AI agent 提供更好的工具集。

⑥ Retrieval Augmented Generation (RAG)(检索增强生成)

  • 为 LLM 注入上下文数据
  • 保持 LLM 信息更新(无需重训练),迭代更快
  • 免费获得可解释性和引用
  • 减少幻觉
  • 在 Cursor/Windsurf 等工具中使用 @context 就是在利用 RAG

💡 实战示例:

# 在 Cursor/Windsurf 中使用 RAG(@context 引用)
@src/auth/middleware.ts @src/auth/types.ts
Add rate limiting to our authentication middleware.
Follow the existing error handling patterns in the codebase.

# 手动模拟 RAG(在 prompt 中嵌入检索到的上下文)
Here is our current database schema:
<context>
CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR UNIQUE, role VARCHAR);
CREATE TABLE orders (id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id), total DECIMAL);
CREATE INDEX idx_orders_user ON orders(user_id);
</context>

Write a query to find users who placed more than 5 orders last month,
optimized for our existing indexes.

📚 阅读关联: 这是所有阅读材料的交叉重点。Karpathy(阅读 1)解释了为什么 RAG 必要——模型的知识在预训练时就固定了,RAG 让模型能获取训练后的新信息。promptingguide.ai(阅读 3)将 RAG 的优势总结为:时效性、可解释性、减少幻觉。OpenAI Codex(阅读 5)的 AGENTS.md 本质上是 RAG 的一种形式——为 AI 提供无法从代码直接推断的业务知识。

⑦ Reflexion(反思)

  • 让 LLM 反思自己的输出
  • 环境信号的反馈被重新融入上下文
  • 多轮 prompting: 第一轮给出初步答案 → 第二轮要求反思和修正
  • 这是自主编码 agent 的核心机制,也叫 "self-critique"
  • 现代编码 IDE 中实现完全 agentic 行为的关键

💡 实战示例:

# 第一轮:生成初始代码
Write a function to merge two sorted linked lists.

# 第二轮:要求反思(课堂推荐的 Reflexion 模式)
Now critique your solution:
- Does it handle edge cases (empty lists, single element)?
- What is the time and space complexity?
- Is there a more elegant approach?
If you find issues, provide an improved version.

# 在 system prompt 中内置反思机制
<system>
After providing any code solution, always:
1. List potential edge cases you might have missed
2. Rate your confidence (1-10) in the solution's correctness
3. If confidence < 8, revise your solution
</system>
# 多轮对话中的 Reflexion 实战
User: Write a Redis caching layer for our user service.
Assistant: [generates initial implementation]
User: The tests are failing with this error:
      <error>ConnectionResetError: Redis connection pool exhausted</error>
      Reflect on what went wrong and fix it.
Assistant: [analyzes error, identifies missing connection pool config, provides fix]

📚 阅读关联: Anthropic(阅读 4)的"当模型犯错时,问它为什么错了"就是 Reflexion 的手动版本。promptingguide.ai(阅读 3)将 Reflexion 形式化为 Observe → Reflect → Extend Prompt 循环。OpenAI Codex(阅读 5)的 "Ask Mode → Code Mode" 两步流程也体现了 Reflexion 思想——先让 AI 思考计划,再执行代码。

3. 重要术语

术语 定义
System Prompt 提供给 LLM 的第一条消息(通常用户不可见),定义角色、规则、输出风格
User Prompt 用户的实际请求或指令
Assistant LLM 实际生成的回复

💡 System Prompt 实战示例:

<system>
You are a senior backend engineer specializing in Python and PostgreSQL.
When writing code:
- Always include type hints
- Follow PEP 8 strictly
- Prefer SQLAlchemy ORM over raw SQL
- Include docstrings for all public functions

When reviewing code:
- Focus on security vulnerabilities first
- Then performance, then readability
- Always explain WHY something is an issue, not just WHAT

If you are unsure about something, say "I'm not certain" rather than guessing.
Output format: Use <code> tags for code blocks and <explanation> for reasoning.
</system>

📚 阅读关联: Anthropic(阅读 4)强调 system prompt 中应"积极使用 Role Prompting",且要像代码一样进行版本控制。OpenAI Codex(阅读 5)的 AGENTS.md 本质上就是一个持久化的 system prompt——提供命名规范、业务逻辑等 AI 需要的背景信息。

4. Best Practices(最佳实践)

  1. 使用 prompt improvement 工具(如 Anthropic 的 prompt improver)
  2. 清晰提示:把 prompt 给一个没有上下文的人看——如果他们困惑,LLM 也会困惑
  3. 积极使用 Role Prompting:通过 system prompt 赋予角色,使输出更强大
  4. 结构化格式:使用 XML 标签(如 <log>, <e> 等)组织 prompt 结构
  5. 明确指定你想要什么:语言、技术栈、库、约束条件
  6. 任务分解(Decompose Tasks):把大任务拆分成小步骤(后续课程会深入讨论)

💡 Best Practices 综合示例——好的 Prompt vs 坏的 Prompt:

# ❌ 模糊、缺乏上下文的 prompt
Fix my code, it's not working.

# ✅ 清晰、结构化、有上下文的 prompt
<context>
Language: TypeScript
Framework: Express.js + Prisma ORM
Issue: The `createOrder` endpoint returns 400 for valid requests
</context>

<code>
// src/routes/orders.ts
async function createOrder(req: Request, res: Response) {
  const { userId, items } = req.body;
  // ... code here ...
}
</code>

<error>
POST /api/orders with body {"userId": 1, "items": [{"id": 5, "qty": 2}]}
Response: 400 Bad Request - "Invalid items format"
</error>

<task>
1. Identify why valid requests are being rejected
2. Fix the validation logic
3. Add a test case that covers this scenario
</task>

📚 延伸阅读: Anthropic(阅读 4)的六条实践建议,以及 Google Cloud(阅读 2)的六大优化策略,都是对这些 best practices 的更详细展开。OpenAI Codex(阅读 5)的"像写 GitHub Issue 一样写 Prompt"是这些原则在工业环境中的最佳实践体现。


📚 第一周推荐阅读

# 材料 与课堂的关系
1 Deep Dive into LLMs (Karpathy) 第一讲 LLM 原理的完整版,详细覆盖训练流水线和 LLM "心理学"
2 Prompt Engineering Overview (Google Cloud) 第二讲 prompting 技术的入门补充,六大优化策略对应课堂 best practices
3 Prompt Engineering Guide 第二讲技术的进阶扩展,覆盖课堂未详述的 ReAct、ToT、Prompt Chaining
4 AI Prompt Engineering: A Deep Dive (Anthropic) 第二讲 best practices 的工程师视角,强调实战中的迭代和沟通
5 How OpenAI Uses Codex 课程核心理念 Human-Agent Engineering 的真实案例集,展示 AI 辅助工程的实际工作流

🛠️ 第一周作业:LLM Prompting Playground

阅读材料笔记

CS146S 第一周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 对应课堂内容
1 Deep Dive into LLMs (Andrej Karpathy) 视频 3.5h LLM 完整训练流水线 第一讲 LLM 原理的完整展开
2 Prompt Engineering Overview (Google Cloud) 文章 Prompt Engineering 概念与策略 第二讲技术的入门补充
3 Prompt Engineering Guide (promptingguide.ai) 指南 高级 Prompting 技术大全 第二讲技术的进阶扩展
4 AI Prompt Engineering: A Deep Dive (Anthropic) 视频 1.5h Anthropic 工程师的实战经验 第二讲 best practices 的工程师视角
5 How OpenAI Uses Codex PDF OpenAI 内部如何使用 Codex 课程核心理念的真实案例集

📖 阅读 1:Deep Dive into LLMs like ChatGPT

作者: Andrej Karpathy(前 OpenAI 联合创始人、前 Tesla AI 总监)

🔗 课堂关联: 这篇阅读是第一讲 "LLM 工作原理(5 张幻灯片)" 的完整版本。课堂用 5 张幻灯片概括了三阶段训练,Karpathy 用 3.5 小时详细讲解每个阶段的技术细节和背后的直觉。

第一阶段:预训练(Pre-training)

数据收集与清洗: LLM 从互联网上爬取海量文本数据构建数据集(如 FineWeb,包含超过 12 亿网页)。原始数据充满噪音,需要严格的清洗流程:

  • URL 过滤: 去除垃圾、恶意软件和低质量网站
  • 语言过滤: 按目标语言筛选(如只保留英文)
  • 去重(Deduplication): 去除互联网上的大量重复内容
  • PII 移除: 检测并删除个人身份信息
  • 最终数据集如 FineWeb 大约 44TB,经过了激进的过滤

Tokenization(分词): 文本通过 Byte Pair Encoding (BPE) 等技术转换为 token 序列。现代 LLM(如 GPT-4)使用约 100,000 个 token 的词表。

🔗 课堂关联: 课堂提到 tokenization 使用"固定词表",Karpathy 这里补充了具体机制——BPE 通过迭代合并最频繁的字节对来构建词表。这也解释了课堂提到的 LLM 局限之一"拼写困难"——因为 token ≠ 字符,模型对字符级操作天然不擅长。

Transformer 神经网络:

  • GPT-2(2019):16 亿参数,1000 亿 tokens 训练,上下文长度 1024 tokens
  • LLaMA 3(2024):4050 亿参数,15 万亿 tokens 训练
  • 模型的预测是随机的(stochastic),这既赋予了创造性,也导致了幻觉

训练成本趋势: GPT-2 原始训练成本约 $40,000。Karpathy 用 llm.c 复现 GPT-2 只花了 $672,随着优化可能降到约 $100。

🔗 课堂关联: 课堂提到 LLM 成本每年下降约 10 倍。Karpathy 的 GPT-2 复现数据($40K → $672 → ~$100)用具体数字印证了这一趋势。

第二阶段:监督微调(Supervised Fine-Tuning / SFT)

  • 将基础模型(base model)转变为助手(assistant)
  • 预训练可能需要 3 个月,而后训练可能只需 3 小时
  • 使用结构化对话数据集(较小规模)
  • 近年来越来越多地使用 LLM + 人类编辑器来生成对话数据集
  • 如果查询存在于后训练数据集中,助手会模拟人类标注者的行为;如果不存在,响应具有"涌现性"

LLM 的"心理学":

  • 幻觉(Hallucinations): 训练时标注者以自信的语气回答问题,即使模型"不知道"也会自信作答。解决方案:添加"我不知道"的训练样本
  • 工具使用: LLM 学会调用外部工具(搜索、代码解释器)来增强能力
  • 知识/工作记忆: 模型的推理分布在输出序列的多个 token 上;每个 token 的计算预算是固定的,复杂任务需分解
  • 参差不齐的智能(Jagged Intelligence): LLM 性能不均匀,可能在简单任务上出现莫名错误
  • 拼写困难: Tokenization 导致字符级任务(拼写、计数字母)容易出错

🔗 课堂关联(重要!): Karpathy 的"心理学"分析直接解释了课堂多个概念的底层原理:

  • 幻觉:课堂说"幻觉可通过上下文工程缓解"——Karpathy 解释了为什么:幻觉源于训练数据中标注者的自信语气
  • 工具使用:课堂第二讲的 Tool Use 技术——Karpathy 从训练层面解释了模型如何学会调用工具
  • 每个 token 计算预算固定:这就是课堂第二讲 CoT 有效的根本原因——让模型多生成 token = 给它更多计算资源
  • Jagged Intelligence:这解释了课堂强调的"积极实验"和"培养好品味"——因为 LLM 表现不一致,人类必须能审查输出

第三阶段:强化学习(Reinforcement Learning)

  • RLHF: 人类评估者对多个输出进行排名,训练奖励模型来模拟人类判断。需要谨慎管理以防模型利用奖励系统
  • 与 AlphaGo 的类比: 就像 AlphaGo 发现了超越人类策略的"Move 37",LLM 可以通过 RL 发展出新的推理技术
  • DeepSeek-R1 的重要性: 其论文公开讨论了 LLM 的 RL 和 FT 过程,展示了模型的"aha moment"——这不是通过数据集训练能显式教会的,而是模型通过 RL 自己发现的
  • 优点:推理能力增强;缺点:消耗更多 tokens

🔗 课堂关联: 课堂提到的"推理模型(Reasoning Models)"正是经过 RL 阶段训练的产物。模型名称带 "-think" 的就是这类模型——它们在推理时会消耗更多 token,但准确率更高。

核心要点

LLM 是文本的统计模拟器,不是有意识的生命体。它们是强大的工具,但需要人类监督。用户应始终验证 LLM 生成的信息。


📖 阅读 2:Prompt Engineering Overview (Google Cloud)

🔗 课堂关联: 这篇阅读是第二讲 prompting 技术的入门级补充。课堂讲了 7 种核心技术,Google Cloud 从更基础的角度讲解了 prompt 设计的通用原则。特别是它的"六大优化策略"与课堂的 "Best Practices" 高度对应。

什么是 Prompt Engineering?

Prompt Engineering 是设计和优化 prompt 的艺术与科学,用于引导 AI 模型生成期望的响应。就像为 AI 提供路线图,引导它朝特定输出方向前进。

Prompt 的关键要素

  • Prompt 格式: 不同模型对不同格式(自然语言问题、直接命令、结构化输入)有不同偏好
  • 上下文和示例: 在 prompt 中提供背景和相关示例帮助 AI 理解任务
  • 微调与适应: 根据反馈持续调整 prompt
  • 多轮对话: 支持连续且上下文感知的交互

Prompt 类型

类型 说明 课堂对应
Zero-Shot 不提供额外上下文或示例的直接指令 第二讲技术 ①
One/Few/Multi-Shot 提供一个或多个输入-输出示例对 第二讲技术 ②
Chain of Thought 鼓励模型将复杂推理分解为中间步骤 第二讲技术 ③
Zero-Shot CoT 结合 CoT 与 Zero-Shot("Let's think step-by-step") 第二讲技术 ③

六大 Prompt 优化策略

1. 设定清晰目标 → 对应课堂 Best Practice #5 "明确指定你想要什么"

  • 使用动作动词指定期望行为
  • 定义输出的长度和格式
  • 指定目标受众

💡 示例对比:

# ❌ 模糊目标
Help me with this database.

# ✅ 清晰目标(遵循 Google Cloud 的建议)
Write a PostgreSQL migration script that:
- Adds a `status` enum column to the `orders` table with values ('pending', 'shipped', 'delivered')
- Sets default to 'pending' for existing rows
- Creates an index on the new column
- Output as a reversible migration (include both UP and DOWN)

2. 提供上下文和背景信息 → 对应课堂核心理念 "好的上下文 → 好的代码"

  • 包含相关事实和数据
  • 引用特定来源或文档
  • 定义关键术语

💡 示例:

# 通过提供上下文减少幻觉
Our API uses JWT tokens with RS256 signing. The tokens include custom claims:
- `org_id`: the user's organization
- `permissions`: array of permission strings like "read:orders", "write:users"

<context>
Current auth middleware in src/middleware/auth.ts uses the `jsonwebtoken` library v9.0.
We DO NOT use passport.js or any other auth framework.
</context>

Add organization-level permission checking to the `/api/reports` endpoint.

3. 使用 Few-Shot Prompting → 对应第二讲技术 ② K-Shot

  • 提供期望的输入-输出示例
  • 展示期望的风格或语调
  • 展示期望的详细程度

4. 具体明确 → 对应课堂 Best Practice #4 "结构化格式" + #5

  • 使用精确语言,避免歧义
  • 尽可能量化请求
  • 将复杂任务分解为小步骤

5. 迭代实验 → 对应课堂核心理念 "积极实验"

  • 尝试不同措辞和关键词
  • 调整详细程度和具体性
  • 测试不同的 prompt 长度

6. 利用 Chain of Thought → 对应第二讲技术 ③

  • 鼓励逐步推理
  • 要求模型解释推理过程
  • 引导模型通过逻辑序列思考

Prompt 应用场景

涵盖四大类:语言和文本生成(创意写作、总结、翻译、对话)、问答(开放式、特定、多选、假设性、观点性)、代码生成(补全、翻译、优化、调试)、图像生成(写实、艺术、抽象、编辑)。


📖 阅读 3:Prompt Engineering Guide (promptingguide.ai)

🔗 课堂关联: 这篇阅读是第二讲的进阶扩展。课堂讲了 7 种核心技术,promptingguide.ai 在此基础上增加了多种高级技术——特别是 ReAct、Tree of Thoughts、Prompt Chaining——这些在后续课程中讨论自主 agent 时非常重要。

基础技术(课堂已覆盖)

技术 核心思想 课堂对应
Zero-Shot 直接指令,不给示例 技术 ①
Few-Shot 提供 1-5 个输入-输出示例对 技术 ②
Chain-of-Thought (CoT) 展示/要求中间推理步骤 技术 ③
Self-Consistency 多次采样 + 多数投票 技术 ④

进阶技术(课堂未详述,本指南的独特价值)

技术 核心思想 与课堂的联系
Meta Prompting 用提示来生成更好的提示 课堂 Best Practice #1 提到的 "prompt improvement 工具"
Prompt Chaining 将复杂任务分解为一系列子 prompt 课堂 Best Practice #6 "任务分解" 的具体实现方式
Tree of Thoughts (ToT) 探索多个推理路径的树状结构 CoT 的升级版——不是单条链,而是多条路径并行探索
RAG 检索增强生成,为模型注入外部知识 课堂技术 ⑥,本指南提供了更系统的理论框架
ReAct 结合推理和行动的交替循环 Tool Use(技术 ⑤)+ CoT(技术 ③)的结构化融合
Reflexion 让模型反思自身输出并改进 课堂技术 ⑦,本指南将其形式化为 Observe → Reflect → Extend 循环
Automatic Prompt Engineer (APE) 自动化生成和优化 prompt Meta Prompting 的自动化版本

关键概念深入

Prompt Chaining(提示链): 将一个大任务拆分成多个子任务,前一步的输出作为后一步的输入。这提高了透明度、可控性和可靠性。

💡 Prompt Chaining 实战示例:

# 步骤 1:分析需求
Analyze this feature request and list the required database changes,
API endpoints, and frontend components:
"Users should be able to export their order history as CSV"

# 步骤 2:基于步骤 1 的输出生成数据库迁移
Based on the analysis above, write the database migration for [列出的数据库变更].

# 步骤 3:基于步骤 1 的输出生成 API
Now implement the API endpoint for [列出的 API 端点].

# 步骤 4:基于步骤 1 的输出生成前端
Finally, create the React component for [列出的前端组件].

🔗 课堂关联: 课堂 Best Practice #6 说"把大任务拆分成小步骤",Prompt Chaining 就是这一原则的具体实现模式。后续课程讨论 agentic coding 时会大量使用这个概念。

ReAct 框架: 在 Thought → Action → Observation 循环中交替进行。模型先思考下一步该做什么,然后执行动作(如搜索),观察结果,再决定下一步。

💡 ReAct 实战示例:

# ReAct 本质是 Tool Use + CoT 的结合
Debug why the user registration endpoint is returning 500 errors.

Thought: I should first check the server logs to understand the error.
Action: docker logs app --tail 50 | grep "registration"
Observation: [NullPointerException at UserService.java:42]

Thought: The error is at line 42 of UserService. Let me check that code.
Action: cat src/main/java/com/app/UserService.java
Observation: [line 42: user.getProfile().getName()]

Thought: getProfile() might return null for new users without a profile.
Action: Add null check before accessing profile.

🔗 课堂关联: ReAct = 课堂技术 ⑤(Tool Use)+ 技术 ③(CoT)的结构化版本。这正是现代 agentic IDE(如 Cursor Agent Mode)的内部工作方式——模型循环执行 "思考 → 调用工具 → 观察结果 → 思考下一步"。

RAG 的核心优势:

  • 保持信息时效性(无需重训练)
  • 提供引用来源(可解释性)
  • 显著减少幻觉
  • 适用于知识密集型任务

📖 阅读 4:AI Prompt Engineering: A Deep Dive (Anthropic)

来源: Anthropic 官方视频,由四位 Anthropic 工程师参与讨论——Amanda Askell(微调/对齐)、David Hershey(应用 AI)、Alex Albert(Prompt Engineering)、Zack Witten(Prompt Engineering)

🔗 课堂关联: 这篇阅读是第二讲 "Best Practices" 的工程师实战视角。课堂给了 6 条简洁的最佳实践,Anthropic 工程师从日常工作经验出发,解释了为什么这些实践重要、以及实际操作中的细节和坑。

什么是 Prompt Engineering?

  • Prompt Engineering 本质上是与模型沟通——类似与人交流
  • 要理解模型的"心理",用清晰的语言表达需求
  • Prompt 就像"代码"一样,是编程模型的方式
  • 需要像对待代码一样对待 prompt:版本控制、持续测试

优秀 Prompt 工程师的特质

特质 说明 课堂对应
清晰沟通能力 清楚地表达、理解任务、描述概念 Best Practice #2 "清晰提示"
迭代思维 真正的 prompt 工程师发送数十甚至数百次调整 核心理念 "积极实验"
系统思维 考虑数据来源、延迟权衡、整体集成 核心理念 "Human-Agent Engineering"
仔细阅读输出 分析响应过程,验证推理是否合理 核心理念 "培养好品味"

关键实践建议

1. 当模型犯错时,问它为什么错了

🔗 课堂关联: 这本质是课堂技术 ⑦(Reflexion)的手动应用——让模型反思错误并修正。

💡 示例:

# 模型生成了一个有 bug 的排序函数后
Your merge sort implementation fails on this input: [3, 1, 4, 1, 5].
The output is [1, 1, 3, 5] instead of [1, 1, 3, 4, 5].

1. Analyze why the 4 was dropped
2. Explain what instruction I should have given you to avoid this error
3. Provide the corrected implementation

2. 处理歧义情况:为模型提供明确的 fallback 指令

💡 示例:

Classify the following code changes into categories:
- "bugfix", "feature", "refactor", "docs", "test"

If the change doesn't clearly fit any category,
output <uncertain>category1 or category2</uncertain>
rather than guessing.

<change>
-  const timeout = 5000;
+  const timeout = parseInt(process.env.TIMEOUT) || 5000;
</change>

3. 使用 Chain of Thought:要求模型先解释再回答

🔗 课堂关联: 直接对应课堂技术 ③。Karpathy(阅读 1)解释了底层原理——更多推理 token = 更多计算资源。

4. 让模型"采访"你:当你不确定自己想要什么时

💡 示例:

I need to add caching to our application but I'm not sure about the best approach.

Before proposing a solution, ask me 5 questions about:
- Our current architecture and traffic patterns
- Performance requirements and SLAs
- Data freshness requirements
- Infrastructure constraints
Then use my answers to recommend a caching strategy.

🔗 课堂关联: 这与课堂核心理念 "LLMs 的能力取决于你自身的水平" 形成有趣互补——如果你自己不清楚需求,可以让 LLM 帮你梳理。这也体现了 Human-Agent 协作的双向性。

5. 大量阅读他人的 prompt 和输出

🔗 课堂关联: 与课堂"要大量阅读和审查代码"一脉相承——培养好品味,不仅是审查代码,还要审查 prompt。

6. 集成是关键:不是"写一个 prompt 就完了"

🔗 课堂关联: 对应 OpenAI Codex(阅读 5)中强调的"迭代改进开发环境"——Prompt 只是系统的一部分,还需要考虑工具集成、环境配置、上下文管理。

核心观点

"Clear communicating is the most important thing... talking to a model is a lot like talking to a person." (清晰沟通是最重要的...与模型对话很像与人对话。)


📖 阅读 5:How OpenAI Uses Codex

来源: OpenAI 官方 PDF,基于对 OpenAI 工程师的访谈和内部使用数据编写。

🔗 课堂关联: 这是整个第一周最重要的实践材料。它用真实案例展示了课程核心理念 Human-Agent Engineering 在工业环境中的运作方式。课堂说"不是 vibe coding,而是管理 AI agent"——这篇文章展示了 OpenAI 工程师具体是怎么"管理" Codex 的。

Codex 在 OpenAI 的七大使用场景

1. 代码理解(Code Understanding)

  • 在不熟悉的代码库中快速上手
  • 定位功能核心逻辑,映射服务/模块关系,追踪数据流
  • 事故响应时快速定位组件交互和故障传播路径

💡 实战 Prompt 示例:

# 代码探索
Where is the authentication logic implemented in this repo?
Trace the request flow from the /login endpoint through middleware,
service layer, and database calls.

# 事故响应
Our payment processing is failing intermittently.
Map all the services that interact with the PaymentService module
and identify potential points of failure in the data flow.

🔗 课堂关联: 这直接体现了课堂"LLMs 的能力取决于你自身的水平"——工程师需要知道"问什么问题"才能让 Codex 高效探索代码库。同时,这也是 RAG(课堂技术 ⑥)的实际应用——Codex 检索代码库内容作为上下文。

2. 重构和迁移(Refactoring and Migrations)

  • 跨多文件/包的一致性修改
  • 更新 API、迁移依赖项、用新模式替换旧模式

💡 实战 Prompt 示例:

# 结构化的迁移指令(像 GitHub Issue 一样写 prompt)
Migrate all usages of the deprecated `getUserById()` to the new UserService pattern.

Files affected: src/controllers/*.ts, src/services/*.ts
Current pattern: const user = await getUserById(id)
New pattern: const user = await userService.findOne({ id })

Reference implementation: src/services/OrderService.ts (lines 15-30)
Ensure all existing tests still pass after migration.

🔗 课堂关联: "按照 [模块X] 的方式实现" 本质上就是课堂技术 ② K-Shot Prompting——用已有代码作为示例。

3. 性能优化(Performance Optimization)

  • 分析慢速或内存密集的代码路径
  • 识别低效循环、冗余操作、昂贵查询
  • 发现仍在使用的废弃或高风险模式

💡 实战 Prompt 示例:

Find repeated expensive operations in this request handler
and suggest caching opportunities.

Focus on:
1. Database queries that could be batched or cached
2. Repeated computations with identical inputs
3. N+1 query patterns
4. Any synchronous operations that could be parallelized

4. 提高测试覆盖率(Improving Test Coverage)

  • 帮助编写覆盖薄弱区域的测试
  • 识别边界条件(空输入、最大长度、异常但有效的状态)

💡 实战 Prompt 示例:

Write comprehensive unit tests for src/utils/parseConfig.ts.
Focus on boundary conditions:
- Empty input, null, undefined
- Malformed JSON strings
- Valid JSON but missing required fields
- Extremely large inputs (>1MB)
- Unicode and special characters in keys/values

Use our existing test patterns in tests/utils/ as reference.
Follow the describe/it/expect structure with clear test names.

🔗 课堂关联: "使用现有测试作为参考" = K-Shot Prompting;"Focus on boundary conditions" = 提供明确上下文。这个 prompt 同时使用了课堂的多种技术。

5. 提升开发速度(Increasing Development Velocity)

  • 快速搭建脚手架(文件夹、模块、API stub)
  • 处理发布前的小型但关键任务(bug 分类、配置文件、遥测 hook)
  • 将产品反馈转化为初始代码
  • 工程师反馈: "我一整天都在开会,但仍然合并了 4 个 PR,因为 Codex 在后台工作"

🔗 课堂关联: 这是 Human-Agent Engineering 的最佳诠释——工程师做高层决策(确定需求、审查 PR),Codex 做执行层工作(写代码、跑测试)。

6. 保持心流(Staying in Flow)

  • 捕获未完成工作,将笔记转化为原型
  • 将想法作为 Codex 任务发出,之后有空再回顾
  • 核心理念: 降低暂停和恢复工作的上下文切换成本

7. 探索和构思(Exploration and Ideation)

  • 寻找替代解决方案,验证设计决策
  • 探索不熟悉的模式,压力测试假设
  • 已知 bug 修复后,搜索代码库中可能存在的类似 bug

💡 实战 Prompt 示例:

# 架构探索
How would this work if the system were event-driven instead of request/response?
Show me a proof-of-concept refactor of the OrderService
using an event bus pattern. Include tradeoff analysis.

# 关联 bug 搜索
I just fixed a race condition in UserService.updateProfile()
where concurrent writes could overwrite each other.
Search the codebase for similar patterns where we read-modify-write
without proper locking or optimistic concurrency control.

🔗 课堂关联: 探索和构思体现了课堂"积极实验"理念——工程师不是只用 AI 做确定性任务,还用它来探索可能性和挑战假设。这也是 Reflexion(课堂技术 ⑦)的一种应用——让模型帮你"压力测试"设计方案。

OpenAI 的最佳实践

实践 说明 课堂技术对应
先用 Ask Mode 先请求实现计划,再执行代码 Reflexion(技术 ⑦)——先思考再行动
迭代改进开发环境 设置启动脚本、环境变量、网络访问 Tool Use(技术 ⑤)——给 AI 更好的工具集
像写 GitHub Issue 一样写 Prompt 包含文件路径、组件名、diff、文档 Best Practice #4/#5 结构化 + 明确指定
用任务队列作为 backlog 随时发出任务捕获灵感 Human-Agent Engineering 的工作流实践
维护 AGENTS.md 提供 Codex 无法从代码推断的信息 RAG(技术 ⑥)的一种形式
使用 Best-of-N 同时生成多个响应,选最好的 Self-Consistency(技术 ④)的工业应用

🔗 五篇阅读材料的核心交叉主题

1. LLM 的本质

所有材料一致认为:LLM 是统计模型,通过预测下一个 token 生成文本。它们不具备真正的理解能力,但在模式匹配和生成方面极其强大。

完整理解链: Karpathy(阅读 1)从训练原理解释 → 课堂幻灯片精华概括 → 其余阅读从使用角度验证。

2. Prompt = 新的编程方式

从 Karpathy 到 Anthropic 工程师到 Google Cloud,一致的观点是:Prompt 就是与 LLM 沟通的编程语言。清晰沟通是最核心的技能。

完整理解链: 课堂第二讲定义 7 种技术 → Google Cloud(阅读 2)提供入门框架 → promptingguide.ai(阅读 3)扩展到进阶技术 → Anthropic(阅读 4)补充实战哲学。

3. 迭代是关键

没有人一次就能写出完美的 prompt。所有材料都强调反复迭代、测试、改进的重要性。

完整理解链: 课堂"积极实验" → Anthropic(阅读 4)"发送数十甚至数百次调整" → OpenAI Codex(阅读 5)"迭代改进开发环境"。

4. 上下文工程(Context Engineering)= 核心竞争力

无论是 RAG、Few-Shot、还是 AGENTS.md,核心都是:给模型提供正确的上下文。好的上下文 = 好的输出。

完整理解链: 课堂核心理念 "LLMs 的能力取决于你自身的水平" → Karpathy(阅读 1)解释每个 token 计算预算固定 → 课堂技术 ②⑤⑥ 都是注入上下文的不同方式 → OpenAI AGENTS.md(阅读 5)是工业级上下文管理。

5. 幻觉是核心挑战

从 Karpathy 解释幻觉的根本原因(训练过程),到实际使用中的缓解策略(工具使用、RAG、自一致性),幻觉问题贯穿所有材料。

完整理解链: Karpathy(阅读 1)解释原因(标注者自信语气)→ 课堂列出局限性 → 课堂技术 ④⑤⑥ 提供缓解方案 → OpenAI Codex(阅读 5)的 Ask Mode 和 Best-of-N 是工业级应对策略。

6. 人机协作而非替代

OpenAI 的 Codex 使用案例完美诠释了课程的核心理念——Human-Agent Engineering。工程师不是被 AI 替代,而是通过 AI 工具实现了量级飞跃的生产力。

完整理解链: 课堂"你不会被 AI 取代,你会被懂 AI 的工程师取代" → Karpathy(阅读 1)"LLM 需要人类监督" → Anthropic(阅读 4)"系统思维" → OpenAI Codex(阅读 5)"一天开会还能合并 4 个 PR"。

Week 02 · The Anatomy of Coding Agents

Agent architecture and components · Tool use and function calling · Mon 9/29 / Fri 10/3

进入 Week 02 详情页

课程PPT笔记

CS146S 第二周笔记总结:The Anatomy of Coding Agents

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 9/29 Building a coding agent from scratch Agent 架构 + 实操构建
Fri 10/3 Building a custom MCP server MCP 协议 + 实操构建

第一讲:从零构建 Coding Agent(9/29)

1. Coding Agent 的核心架构

核心洞见:其实就是这么简单。

Coding Agent 的本质是一个循环:用户通过客户端(Cursor、Windsurf、Claude Code 等)与底层 LLM 交互,LLM 在循环中有时会发出 tool calls,客户端在 LLM 之外执行这些调用,然后将结果返回给 LLM。

用户输入 → LLM 推理 → [需要工具?] → 执行工具 → 返回结果 → LLM 继续推理 → 输出
                ↑                                              |
                └──────────────── 循环 ─────────────────────────┘

📚 延伸阅读: 第一周 Karpathy 视频中解释的 "Tool Use"(LLM 学会生成特殊 token 来触发工具调用)就是这个架构的底层原理。第一周课堂技术 ⑤(Tool Use)和 promptingguide.ai(阅读 3)的 ReAct 框架是同一个概念的不同抽象层。

2. 三种 Prompt 角色

角色 作用 示例
System Prompt 定义 LLM 的整体行为和指令 "你是一个高级 Python 开发者..."
User Prompt 用户的自定义请求 "修复这个 IndexError"
Assistant Prompt LLM 的响应 生成的代码或工具调用

📚 回顾第一周: 这三个角色在第一周第二讲已经介绍过。本周将它们放在 agent 循环的实际代码中使用。

3. 构建步骤

构建一个 coding agent 只需要以下步骤:

步骤 1:读取终端输入,持续追加到对话历史

conversation = []
while True:
    user_input = input("You: ")
    conversation.append({"role": "user", "content": user_input})

步骤 2:告诉 LLM 有哪些工具可用

LLM 会在适当的时机请求使用工具,你在 LLM 之外执行工具并返回响应。

tools = [
    {
        "name": "read_file",
        "description": "Read the contents of a file at the given path",
        "parameters": {"type": "object", "properties": {"path": {"type": "string"}}}
    },
    {
        "name": "list_dir",
        "description": "List files and directories at the given path",
        "parameters": {"type": "object", "properties": {"path": {"type": "string"}}}
    },
    {
        "name": "edit_file",
        "description": "Edit a file by replacing old content with new content",
        "parameters": {
            "type": "object",
            "properties": {
                "path": {"type": "string"},
                "old_content": {"type": "string"},
                "new_content": {"type": "string"}
            }
        }
    }
]

步骤 3:Agent 循环

while True:
    response = llm.chat(conversation, tools=tools)
    
    if response.has_tool_call:
        # LLM 请求调用工具
        tool_name = response.tool_call.name
        tool_args = response.tool_call.arguments
        
        # 在 LLM 外部执行工具
        result = execute_tool(tool_name, tool_args)
        
        # 将结果追加到对话,继续循环
        conversation.append({"role": "tool", "content": result})
    else:
        # LLM 给出最终回复
        print(response.content)
        break

📚 延伸阅读: 这个 while 循环就是 promptingguide.ai(第一周阅读 3)中 ReAct 框架的代码实现——Thought(LLM 推理)→ Action(工具调用)→ Observation(工具结果)→ 循环直到完成。

4. Claude Code 的"秘密武器"

课堂揭示了 Claude Code 在底层做的优化:

① 前置加载上下文 + 精准的微小 prompt

  • 不是给一个巨大的 prompt,而是多次用小而精准的 prompt 注入关键上下文

② 系统提醒无处不在

  • 在 system prompt、user prompt、tool calls、tool results 中都插入 <system-reminder> 标签
  • 目的:防止 LLM 在长对话中"漂移"(drift),忘记初始指令

💡 实战示例:

<!-- 在 tool result 中嵌入系统提醒 -->
<tool_result>
  File content: def calculate_total(items): ...
  <system-reminder>
  Remember: Always follow existing code patterns. 
  Do NOT introduce new dependencies without asking.
  </system-reminder>
</tool_result>

③ 命令前缀提取(Command Prefix Extraction)

  • 从用户输入中提取意图,减少歧义

④ 子 Agent 生成(Sub-agents)

  • 生成子 agent 来处理子任务
  • 避免单个 agent 上下文过载(context overloading)

📚 延伸阅读: 子 agent 的概念与第一周课堂 Best Practice #6 "任务分解" 和 promptingguide.ai 的 "Prompt Chaining" 直接对应——把复杂任务拆分给多个 agent,每个处理一个子任务。OpenAI Codex 文章(第一周阅读 5)中的 "Best-of-N" 也类似——并行生成多个方案。


第二讲:构建自定义 MCP 服务器(10/3)

1. 为什么需要 MCP?

核心问题: LLM 拥有庞大但静态的知识,只有重新训练才能更新。要构建完全自主的系统,需要可靠的方式向模型注入动态数据

需要动态数据的场景:今天的天气?谁是总统?比特币价格?Nike 最新广告的旁白是谁?

RAG 和 Tool Calling 是目前最好的答案。

📚 回顾第一周: 这正是第一周课堂技术 ⑥(RAG)和技术 ⑤(Tool Use)解决的问题。MCP 是这两个概念的工业级标准化实现

2. MCP 基础概念

Model Context Protocol(模型上下文协议):

一句话定义:让系统以跨集成通用的方式向 AI 模型提供上下文的开放协议。更直白地说——给 LLM 暴露工具的标准格式

历史背景: 在 2024 年 11 月 MCP 推出之前,每个 LLM 应用都需要为每个 API 写自定义的集成代码——就像上节课我们手动写的那个 agent,API 格式比较规范所以还行。但如果 API 文档差、格式不一致、认证复杂,那就是噩梦了。

3. 从 M×N 到 M+N 的飞跃

没有 MCP 的世界:

LLM App 1 ──┬── API 1    想象要为每个 API 写自定义连接器
LLM App 2 ──┼── API 2    M 个 LLM 应用 × N 个 API = M×N 个连接器
LLM App 3 ──┴── API 3    认证、错误处理、速率限制...全部重复实现

有 MCP 的世界:

LLM App 1 ─┐              ┌── MCP Server 1 (→ API 1)
LLM App 2 ─┤── MCP 协议 ──┤── MCP Server 2 (→ API 2)
LLM App 3 ─┘              └── MCP Server 3 (→ API 3)

M + N 个连接器,统一格式(JSON-RPC)

MCP 的核心优势:

  • 不需要为每个工具重新实现认证、错误处理、速率限制
  • 使用 JSON-RPC 强制统一输出格式
  • 从 Language Server Protocol(LSP)扩展而来,但支持主动的 agentic 工作流而不仅是被动的
  • 集成工具从 M × N → M + N 个连接器

4. MCP 架构详解

四个核心组件:

组件 角色 示例
Host 运行 AI 应用的宿主 Cursor, Claude Desktop
MCP Client 嵌入在 Host 中的库(每个 Server 一个有状态会话) SDK 客户端
MCP Server 工具前面的轻量级包装器 你自己写的 MCP 服务
Tool 可调用的函数 数据源、API 接口

完整交互流程:

1. MCP Client → MCP Server:  tools/list(你能做什么?)
2. MCP Server → MCP Client:  返回 JSON 描述每个工具(名称、摘要、JSON Schema)
3. Host 将工具 JSON 注入 LLM 的上下文
4. 用户提问 → LLM 生成结构化的 tool call
5. MCP Client → MCP Server:  tools/call(执行指定工具)
6. MCP Server 执行工具 → 返回结果
7. 对话恢复

💡 实战示例——MCP 交互流程:

用户:"帮我总结 Jack 发来的邮件"

1. [用户] → MCP Client:发送查询
2. [MCP Client] → MCP Server:tools/list(获取可用工具)
3. [MCP Server] → 返回:[{name: "search_emails", ...}, {name: "summarize", ...}]
4. [LLM] 决定调用 search_emails(from="Jack")
5. [MCP Client] → MCP Server:tools/call("search_emails", {from: "Jack"})
6. [MCP Server] → 执行 Email API 查询 → 返回邮件内容
7. [LLM] 基于返回的邮件内容生成摘要

传输层: MCP 提供 stdio(本地进程通信)和 SSE(Server-Sent Events,用于远程通信)两种传输方式。

5. MCP 的当前局限

课堂明确提出了三个关键限制:

① Agent 不擅长处理大量工具

  • Cursor 对工具数量有硬限制
  • 模型在工具过多时,tool calling 准确率显著下降

② API 会快速吃掉上下文窗口

  • 每个工具的描述和返回值都消耗 token
  • 大型 API 响应(如返回 100 条记录)可能直接撑爆上下文

③ 需要设计 AI-native 的 API,而非照搬传统 API

  • 传统 API 是为程序调用设计的
  • AI agent 需要的是更灵活、更精简的工具接口

📚 延伸阅读: "APIs don't make good MCP tools"(阅读 6)详细论证了为什么不能简单地把现有 API 转成 MCP 工具——工具太多会降低准确率、JSON 格式浪费 token、传统 API 没有利用 agent 的独特能力。第一周课堂提到的"上下文窗口限制"和"lost-in-the-middle 效应"在 MCP 场景下尤为严重。


🔗 两讲之间的联系

第一讲(构建 Agent)和第二讲(MCP)构成了完整的技术栈:

第一讲:Agent 的核心循环
  User → LLM → Tool Call → Execute → Result → LLM → Response
                   ↓
第二讲:MCP 标准化了这一层
  Tool Call → MCP Client → MCP Server → Tool Execution → Result

关键理解: MCP 没有改变 agent 的工作方式,它只是标准化了 tool call 和 tool execution 之间的通信协议。上节课手写的 read_filelist_diredit_file 工具,如果用 MCP 封装,就可以被任何 MCP 兼容的客户端使用。


📚 第二周推荐阅读

# 材料 与课堂的关系
1 MCP Introduction (Stytch) 第二讲 MCP 基础的完整技术展开,涵盖架构、OAuth 认证、代码示例
2 Sample MCP Server Implementations 第二讲"构建 MCP Server"的参考实现库
3 MCP Server Authentication (Cloudflare) MCP 安全认证的实践指南
4 MCP Server SDK 构建 MCP Server 的 TypeScript SDK
5 MCP Registry MCP 生态的中央注册系统,类比 npm registry
6 APIs don't make good MCP tools 第二讲局限性的深度反思——为什么不能简单转换 API

🛠️ 第二周作业:First Steps in the AI IDE

阅读材料笔记

CS146S 第二周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 对应课堂内容
1 MCP Introduction (Stytch) 长文 MCP 全面技术介绍 第二讲 MCP 基础的完整展开
2 Sample MCP Server Implementations GitHub 官方 MCP 服务器实现示例 第二讲实操的参考代码
3 MCP Server Authentication (Cloudflare) 文档 远程 MCP 服务器的 OAuth 认证 第二讲未详述的安全层
4 MCP Server SDK (TypeScript) GitHub 构建 MCP Server 的 SDK 第二讲实操的底层工具
5 MCP Registry 博客 MCP 服务器的中央注册表 MCP 生态系统的基础设施
6 APIs don't make good MCP tools 博客 为什么不能直接转换 API 第二讲局限性的深度反思

📖 阅读 1:MCP Introduction (Stytch)

来源: Stytch 工程博客,作者 Reed McGinley-Stempel

🔗 课堂关联: 这篇阅读是第二讲 MCP 内容的完整技术展开。课堂用 13 张幻灯片概括了 MCP 的核心概念,这篇文章提供了架构细节、代码示例、与其他方案的对比、以及 OAuth 认证——课堂没有时间覆盖的部分。

MCP 是什么?

MCP 是一个开放标准,连接 AI 模型与外部数据和服务,让 LLM 能以结构化、一致、安全的方式进行 API 调用。类比:USB-C 统一了各种设备的连接方式,MCP 统一了 AI 与外部工具的连接方式。

技术上,MCP 基于 JSON-RPC 2.0 协议,定义了 LLM 应用调用外部函数、获取数据、使用预定义 prompt 的标准"语言"。

Client-Server 架构

与课堂 Slide 9 的架构一致:

组件 角色 补充说明
Host AI 应用(聊天机器人、IDE 助手、Agent) 运行 MCP Client
MCP Client 嵌入在 Host 中 与每个 Server 维持有状态会话
MCP Server 外部集成的轻量包装 暴露工具、资源、prompt 模板

🔗 课堂关联: 课堂强调了 "Host 将工具 JSON 注入模型上下文" 这个关键步骤。这篇文章补充了具体的 JSON-RPC 请求格式。

五大核心优势

1. 快速工具集成(Rapid Tool Integration)

  • 如果某个 MCP Server 已经存在(如 Google Drive、SQL 数据库),任何 MCP 兼容应用可以直接连接使用
  • 类似一个"即插即用"的插件库

2. 自主 Agent 能力(Autonomous Agents)

  • Agent 不再局限于内置知识,可以主动检索信息、执行操作
  • 实现多步骤工作流:从 CRM 获取数据 → 发邮件 → 记录数据库

🔗 课堂关联: 这正是第一讲 Agent 循环的应用场景——MCP 让 Agent 的 tool call 变得标准化,从而支持更复杂的多步骤工作流。

3. 减少摩擦(Reduced Friction)

  • 一旦应用支持 MCP,就能通过单一机制连接任意数量的服务

4. 一致性和互操作性(Consistency & Interoperability)

  • 统一的 JSON 请求/响应格式
  • 即使切换 LLM 供应商,MCP 的工具接口保持不变

5. 双向上下文(Two-Way Context)

  • MCP Server 不仅暴露工具(Tools),还可以提供 Prompts(预定义 prompt 模板)和 Resources(数据上下文如文档)
  • 支持丰富的交互,不仅仅是一次性查询

MCP vs 其他方案对比

维度 MCP 自定义集成 ChatGPT Plugins LangChain
集成速度 ✅ 即插即用 ❌ 需要自定义代码 ⚠️ 专有平台 ⚠️ 需自定义代码
认证 ✅ OAuth 标准 ❌ 手动管理 API keys ⚠️ 插件特定 OAuth ❌ 各不相同
交互类型 ✅ 持续、上下文丰富 ❌ 临时性交互 ❌ 单次交互 ⚠️ 上下文有限
开放标准 ✅ 是 ❌ 否 ❌ 否 ⚠️ 框架依赖

🔗 课堂关联: 课堂的 Slide 4-8 用"从 M×N 到 M+N"来解释 MCP 的价值。这篇文章从更多维度进行了对比,特别是与 ChatGPT Plugins 和 LangChain 的比较,帮助理解 MCP 在生态中的定位。

完整交互流程(代码级)

// 1. 连接 MCP Server
const mcpClient = await connectToServer("localhost:3000");

// 2. 发现可用工具
const tools = await mcpClient.request(
  { method: 'tools/list' },
  ListToolsResultSchema
);
// 返回: [{name: "get_weather", description: "...", schema: {location: "string"}}]

// 3. LLM 选择工具(由 Host 应用的 LLM 决定)
// 用户问:"AAPL 现在多少钱?"
// LLM 决定调用 get_current_stock_price(company="AAPL")

// 4. 通过 MCP 执行工具
const result = await mcpClient.request({
  method: 'tools/call',
  params: { name: "get_current_stock_price", arguments: {company: "AAPL"} }
}, CallToolResultSchema);

// 5. 将结果返回给 LLM
// LLM: "AAPL 当前股价为 $173.22"

🔗 课堂关联: 这段代码就是课堂第一讲手写 Agent 循环的 MCP 版本——区别在于 tool 的发现、调用、响应都走 MCP 标准协议。

OAuth 认证(课堂未覆盖)

早期 MCP 没有内置认证机制——Server 必须运行在本地或可信环境中。这是一个重大限制:多用户场景和云端部署无法安全使用 MCP。

2025 年,MCP 采用了 OAuth 2.0 标准:

  • 动态客户端注册(DCR):Client 自动向 OAuth Server 注册,无需手动配置
  • 自动端点发现:利用 OAuth 标准化的元数据 URL 自动发现认证端点
  • 安全的令牌管理:根据用户权限和访问范围获取精确的 OAuth 令牌
  • 多用户支持:天然支持多个并发用户和服务

📖 阅读 2:Sample MCP Server Implementations

来源: github.com/modelcontextprotocol/servers

🔗 课堂关联: 这是第二讲"构建自定义 MCP Server"实操的参考实现库。课堂上从零开始写了 list_filesedit_file 工具,这个 repo 提供了大量生产级的 MCP Server 实现。

核心价值

这是 MCP 官方维护的 Server 实现集合,涵盖多种常见服务的集成,包括文件系统、数据库、API 服务等。开发者可以直接使用这些 Server 或作为构建自定义 Server 的模板。

学习路径建议

  1. 先看简单的 Server(如 filesystem)理解基本结构
  2. 再看复杂的 Server(如 GitHub、Slack)理解真实场景
  3. 用这些实现作为参考来完成第二周作业

📖 阅读 3:MCP Server Authentication (Cloudflare)

来源: Cloudflare 开发者文档

🔗 课堂关联: 课堂第二讲聚焦于 MCP 的核心概念和本地构建,没有深入认证。这篇文档补充了远程 MCP Server 的安全认证实践——这在生产环境中至关重要。

核心内容

Cloudflare 提供了构建和部署远程 MCP Server 的平台,核心解决的问题是:如何安全地让 AI Agent 通过互联网访问外部服务?

关键技术点:

  • 使用 OAuth 2.0 进行认证
  • Cloudflare Workers 作为 MCP Server 的运行环境
  • 支持多用户认证和权限管理

🔗 课堂关联: 阅读 1(Stytch)解释了 MCP OAuth 的原理,这篇文档提供了 Cloudflare 平台上的具体实现方式


📖 阅读 4:MCP Server SDK (TypeScript)

来源: github.com/modelcontextprotocol/typescript-sdk

🔗 课堂关联: 这是构建 MCP Server 的官方 TypeScript SDK,课堂实操可能使用了这个 SDK 或类似的 Python SDK。

核心价值

SDK 封装了 MCP 协议的底层细节(JSON-RPC 消息格式、传输层、会话管理),让开发者可以专注于工具逻辑:

import { Server } from "@modelcontextprotocol/sdk/server";

const server = new Server({
  name: "my-mcp-server",
  version: "1.0.0"
});

// 注册工具
server.tool("search_emails", 
  { from: { type: "string" }, query: { type: "string" } },
  async ({ from, query }) => {
    // 实际的邮件搜索逻辑
    const emails = await emailService.search(from, query);
    return { content: [{ type: "text", text: JSON.stringify(emails) }] };
  }
);

📖 阅读 5:MCP Registry

来源: MCP 官方博客,2025 年 9 月 8 日

🔗 课堂关联: 课堂讲了如何构建 MCP Server,但没有讨论生态系统层面的问题——如何发现和分发 MCP Server?MCP Registry 解决的就是这个问题。

MCP Registry 是什么?

一个开放的目录和 API,用于公开可用的 MCP Server 的发现和分发。类比:

  • npm registry 之于 Node.js 包
  • Docker Hub 之于容器镜像
  • MCP Registry 之于 MCP Server

核心特性

单一真实来源(Single Source of Truth):

  • 官方 URL:registry.modelcontextprotocol.io
  • 开源,包含 OpenAPI 规范
  • 任何人都可以构建兼容的子注册表

公共和私有子注册表:

  • 公共子注册表: 如各 MCP 客户端的"应用市场"(类比 VS Code Extension Marketplace)
  • 私有子注册表: 企业内部使用,满足隐私和安全要求

社区驱动的审核机制:

  • 社区成员可以举报违规 Server(垃圾、恶意代码、冒充合法服务)
  • 维护者可以将其加入黑名单

背景与意义

MCP Registry 始于 2025 年 2 月的草根项目,由 MCP 创建者 David Soria Parra 和 Justin Spahr-Summers 发起,联合了 PulseMCP、Goose、Block、GitHub、Anthropic 等多方力量。初始公告列出了来自至少 9 家公司的 16 位贡献者。

🔗 课堂关联: 课堂 Slide 8 提到 MCP 让工具集成从 M×N 变为 M+N。MCP Registry 进一步简化了这个过程——你甚至不需要知道有哪些 Server 存在,直接从 Registry 搜索即可。这也是第一周 Karpathy 讲的 "LLM 生态系统" 概念的基础设施层面体现。


📖 阅读 6:APIs don't make good MCP tools

作者: Reilly Wood

🔗 课堂关联: 这是本周最具批判性思维的阅读材料。课堂第二讲 Slide 12 列出了 MCP 的三个局限(工具过多、上下文消耗、需要 AI-native 设计),这篇文章从四个维度深入论证了为什么不能简单地把现有 API 转成 MCP 工具。

核心论点:Agent ≠ API 的典型消费者

很多人提出用 OpenAPI 元数据自动将现有 API 转换为 MCP 工具。作者认为这种方法可以工作,但效果不好。

四个原因

① Agent 不擅长处理大量工具

  • VS Code 硬限制 128 个工具,但很多模型在远低于这个数字时就开始出错
  • 每个工具的描述占用宝贵的上下文窗口空间
  • 传统 Web API 设计时不考虑这些约束——一个产品可能有几十个 API 端点
  • 为 MCP 从头设计的工具通常更灵活,一个工具可以做多个 API 的工作

🔗 课堂关联: 课堂提到 "Cursor 对工具数量有硬限制",这篇文章给出了具体数字和学术引用。

② API 响应快速消耗上下文窗口

  • 想象一个 API 一次返回 100 条记录,每条有 50 个字段——这会消耗大量 token
  • 即使查询只需要几个字段,所有字段都进入上下文
  • JSON 格式非常浪费 token

💡 关键示例——JSON vs CSV 的 token 效率:

// JSON: 浪费 token(重复的 key 名称)
[
  {"firstName": "Alice", "lastName": "Johnson", "age": 28},
  {"firstName": "Bob", "lastName": "Smith", "age": 35}
]

// CSV: 节省约 50% 的 token
firstName,lastName,age
Alice,Johnson,28
Bob,Smith,35

作者建议:CSV、TSV 或 YAML(嵌套数据)通常比 JSON 更适合 LLM 消费。

🔗 课堂关联: 第一周课堂提到"上下文窗口限制(~100-200K tokens)"和 "lost-in-the-middle 效应"。在 MCP 场景下,这个问题被放大——每次工具调用的返回值都占用上下文。

③ API 没有利用 Agent 的独特能力

API 返回结构化数据给程序消费——但 Agent 还能处理自由文本指令

MCP 工具可以做到传统 API 做不到的事:

  • ask_question 工具可以对文档执行 RAG 查询,返回纯文本
  • search_cities 工具可以返回结构化数据加上下一步建议
city_name,population,country
Tokyo,37194000,Japan
Delhi,32941000,India

建议:要获取更详细信息(天气、景点),请调用 get_city_details 并传入 city_name。

这种分层和工具链设计(tool chaining)在 MCP Server 中非常有效。

🔗 课堂关联: 这与 promptingguide.ai(第一周阅读 3)的 Prompt Chaining 概念一致——工具之间形成链条,上一步的输出引导下一步。

④ 如果 Agent 需要调用 API,它可以自己写代码调用

Claude Code 等 agent 已经非常擅长编写和执行调用 Web API 的脚本。有些人甚至认为 MCP 根本不需要——agent 直接写代码调用 API 就好了。

作者不完全同意,但认为应该"看向冰球将去的方向"——随着 agent 沙箱能力的提升,直接调用 API 可能变得越来越容易。

结论

Agent 与 API 的传统消费者有根本不同。自动将 API 转为 MCP 工具是可能的,但不太可能做得好。Agent 在使用专门为其设计的工具时表现最佳。


🔗 六篇阅读材料的核心交叉主题

1. MCP = Tool Use 的标准化

第一周学的是 Tool Use 的概念,第二周学的是 Tool Use 的工业标准。阅读 1(Stytch)提供了最全面的技术解释,课堂 slides 是精华概括。

完整理解链: 第一周技术 ⑤(Tool Use 概念)→ 第二周第一讲(手写 Agent 循环)→ 第二周第二讲(MCP 标准化)→ 阅读 1(完整技术细节)→ 阅读 2/4(SDK 和实现)

2. 生态系统正在快速成熟

从 SDK(阅读 4)到 Registry(阅读 5)到 Authentication(阅读 3),MCP 生态系统的每一层都在快速完善——这与课堂第一周强调的"工具会过时,但原理不变"形成对比:MCP 作为协议可能会持久,但具体工具和实现会不断演进。

完整理解链: 阅读 4(开发层:SDK)→ 阅读 2(示例层:参考实现)→ 阅读 3(安全层:OAuth)→ 阅读 5(生态层:Registry)

3. AI-Native 设计 vs 传统 API 设计

这是本周最重要的概念转变。阅读 6 的核心论点是:为 Agent 设计工具需要不同于传统 API 的思维方式。

完整理解链: 课堂局限性(Slide 12)→ 阅读 6 深入论证 → 关键启示:减少工具数量但增加灵活性、使用 token 效率更高的格式(CSV > JSON)、利用 agent 的文本理解能力

4. 从手动集成到标准化协议

本周的知识脉络是一个清晰的抽象层提升:

第一讲:手动写 tools(read_file, list_dir, edit_file)
         ↓ 标准化
第二讲:用 MCP 协议封装 tools
         ↓ 生态化
阅读材料:SDK + Registry + Auth 构成完整生态系统

🔗 课程脉络: 第一周学"LLM 是什么 + 如何 prompt",第二周学"Agent 是什么 + 如何标准化工具接口"。下一周(第 3 周)将进入"如何在 AI IDE 中实际使用这些 Agent"——从构建原理走向实际应用。

Week 03 · The AI IDE

Context management and code understanding · PRDs for agents · Mon 10/6 / Fri 10/10

进入 Week 03 详情页

课程PPT笔记

CS146S 第三周笔记总结:The AI IDE

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 10/6 From first prompt to optimal IDE setup AI IDE 基础到最佳实践(15 张 slides)
Fri 10/10 🎤 Silas Alberti (Cognition) IDE ❤️ Agents:同步 vs 异步工具(29 张 slides)

第一讲:从第一个 Prompt 到最优 IDE 配置(10/6)

1. 为什么关注 IDE?

IDE(集成开发环境)是软件开发的全能工作空间,包含编辑器、编译器、调试器等。大部分开发工作都在这里完成,因此是 AI 增强的天然入口

IDE 演化史中有一个核心张力:功能整合 vs 开发者自定义——不断在"统一平台"和"自由选择"之间摇摆。

2. IDE 简史

年份 里程碑 意义
1983 Turbo Pascal 第一个真正的 IDE——编辑器+编译器+链接器合一
1997 Visual Studio 高级调试能力,首次引入 IntelliSense(Tab Complete 的前身)
2001 IntelliJ IDEA 上下文代码导航、重构、代码补全(现代 AI 功能的概念祖先)
2015 VS Code 轻量编辑器+高度可扩展的插件生态。引入了 LSP(MCP 的概念灵感来源)
2023 Cursor 第一个广泛使用的 AI-native IDE——在 IDE 体验的各个环节深度集成 AI

📚 延伸阅读: 第二周讲 MCP 时提到它"从 LSP 扩展而来"。这里揭示了完整脉络:VS Code 的 LSP(2015)→ MCP(2024)——从帮助编辑器理解代码到帮助 LLM 理解工具。

3. AI IDE 的使用模式

基础模式(Bread-and-butter):

模式 复杂度 触发方式(Cursor) 场景
Inline 最简单 Tab 单行补全
Function 简单 Cmd-K 几行代码的问答/修改
Single-file 中等 Cmd-L 单文件级别的操作
Multi-file 复杂 Cmd-L + 多文件引用 跨文件重构

AI-Native 高级模式:

模式 说明
Background Agents 后台运行的 agent,异步完成任务
MCP 第二周学过的工具协议——在 IDE 中连接外部服务
Learn Memories IDE 记住你的偏好和代码风格
Bugbot (PR Review) AI 自动审查 Pull Request

4. AI IDE 的底层原理

Tab Complete(自动补全):

  1. 当前代码周围的小上下文窗口被加密
  2. 发送到服务器,运行 infilling LLM
  3. 建议返回并显示在编辑器中

Chat(聊天模式):

  1. 代码片段作为 embeddings 存储在服务器上的语义索引中(文件名被混淆 + 代码内容)
  2. 任何查询检索最相关的代码块,作为上下文送入 LLM
  3. IDE 定期重新索引代码块并同步 embeddings
  4. 使用 Merkle Trees 计算增量差异,实现高效更新

📚 延伸阅读: 语义索引的概念直接对应第一周课堂技术 ⑥(RAG)——IDE 的 Chat 模式本质上就是对你的代码库做 RAG。"How Long Contexts Fail"(阅读 2)解释了为什么不能简单把所有代码扔进上下文,必须用 RAG/索引来选择性地提供上下文。

💡 在 Cursor 中查看索引状态:

Settings > "Indexing & Docs" > "Ignore Files in .cursorignore" > "View included files"

5. Best Practices:Specs Doc(规格文档)

核心洞见: 简单改动不需要精心设计 prompt。但对于复杂任务,你会变成产品经理——需要精心编写 specs doc。

Specs Doc 的八个要素:

要素 说明 💡 示例
Goal 变更的目的是什么 "在用户 dashboard 添加实时通知功能"
Definitions LLM 需要知道的前置知识 "我们使用 WebSocket 进行实时通信,通知存储在 Redis 中"
Plan 高层实施分解 "1. 创建 WebSocket 连接 2. 实现通知 API 3. 更新前端组件"
Source files 相关的代码文件及原因 "src/api/notifications.ts — 已有的通知接口"
Test cases 如何测试 "发送通知后 dashboard 应在 2 秒内显示"
Edge cases 需要考虑的特殊情况 "用户离线时通知应排队,上线后批量推送"
Out-of-scope 什么应该被修改 "不要改变现有的邮件通知系统"
Extensions 后续可能的变更 "未来会添加通知分组和已读/未读状态"

📚 延伸阅读: "Specs Are the New Source Code"(阅读 1)深入论证了为什么 Spec 正在成为新的"源代码"。OpenAI Codex 文章(第一周阅读 5)也建议"像 GitHub Issue 一样结构化 prompt"。

6. Best Practices:优化代码库

核心原则: 优化你的代码库,让人类和 agent 都能理解正在发生什么。

LLM 的很多困惑来自于在混乱的代码库中尝试完成任务。混乱的代码库可能表现为:不同的数据库访问模式、不一致的变量命名、多个做同样事情的函数。

应该彻底文档化的内容: Repo 导航指引、文件结构、环境搭建、最佳实践和代码风格、访问模式、API 和契约。

提示:强烈推荐 monorepo 设计——所有代码在一个仓库中,减少 agent 需要跨仓库理解的复杂性。

7. Best Practices:Agent 配置文件

配置文件 适用工具 说明
CLAUDE.md Claude Code 自动拉入上下文:常用 bash 命令、核心文件、代码风格、测试指令
.cursorrules Cursor 项目级规则文件
AGENTS.md 通用(开放格式) 为 coding agent 设计的指令:构建步骤、测试命令、约定
llms.txt Web 通用 为 LLM 爬取网站时提供导航指引

AGENTS.md vs README.md:

  • README.md 写给人看:快速入门、项目描述、贡献指南
  • AGENTS.md 写给 agent 看:构建步骤、测试命令、约定

⚠️ 注意: Agent 不总是遵循这些指令——它们是指导性的(guidance),不是强制性的。


第二讲:🎤 Silas Alberti 客座讲座 — IDE ❤️ Agents(10/10)

Silas Alberti:Cognition 创始团队 + 研究负责人(Devin 的公司),前 Stanford PhD

1. AI 编程工具的三个时代

时代 代表 模式 效率提升
Code Completion GitHub Copilot 加速编码 ~10%
IDE Automation Cursor, Windsurf 单人任务完成 ~20%
AI Software Engineer Devin 并行扩展工作流 6-12×

关键演变: 从本地同步 → 云端异步,从 1-to-1 → 1-to-Many。

2. 同步 vs 异步

维度 同步(Sync) 异步(Async)
模式 单线程,human-in-the-loop 多线程,人类委派给 AI
注意力 集中在一个任务上 在多个任务间切换
Agent 工作时间 20 秒 - 1.5 分钟 10 分钟 - 数小时
位置 本地 云端
知识 隔离的 组织级别的

3. 半异步陷阱

"半异步"区间(约 1-5 分钟)是最糟糕的区间:太慢无法保持心流,太短无法切换到其他任务。

两种策略:向左推(让同步工具更快以保持心流)或向右推(投入更多时间换取更高智能)。

4. Devin 的工作流

阶段 角色 说明
Plan 工程师主导 用 DeepWiki/Ask Devin 提问,明确范围,Devin 写计划
Build Devin 主导(异步) 启动隔离工作空间,计划→执行→测试→迭代
Review 工程师回归 Devin 开 PR,包含测试和摘要。人类工作量 ≤ 原任务 15%

5. 核心观察与未来展望

管理异步 agent 可以解锁 10× 收益,但大多数人只使用同步 agent。 因为管理和委派本身就是一项难以掌握的技能。

未来最有价值的技能:

  • 委派和多线程管理
  • 代码阅读能力
  • 规划、范围界定、架构设计

📚 课程主线关联: 直接呼应课程核心理念"Human-Agent Engineering"——开发者角色从"写代码的人"变为"管理 agent 的人"。


🔗 两讲的统一主线

两讲共同论证:AI IDE 不只是一个更快的编辑器,它是一种新的工作方式

  • 第一讲(个人层面): Spec 驱动开发 + Agent 配置文件 + 代码库优化
  • 第二讲(团队层面): 同步/异步混合工作流 + 委派技能 + 10× 杠杆

从第 1 周到第 3 周的知识进阶:

第 1 周:LLM 原理 + Prompt 技术(基础认知)
    ↓
第 2 周:Agent 架构 + MCP 协议(构建工具)
    ↓
第 3 周:AI IDE + Spec 驱动开发 + 同步/异步工作流(实际使用)
阅读材料笔记

CS146S 第三周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 获取状态 对应课堂内容
1 Specs Are the New Source Code 长文 ✅ 完整获取 第一讲 Specs Doc 的理论基础
2 How Long Contexts Fail 长文 ✅ 完整获取 IDE 为什么需要 RAG 而非塞入所有代码
3 Devin: Coding Agents 101 文档 ⚠️ 概要 第二讲 Silas 演讲的产品文档
4 Getting AI to Work In Complex Codebases GitHub ⚠️ 概要 第一讲"优化代码库"的深度展开
5 How FAANG Vibe Codes Twitter ⚠️ 帖子 行业视角补充
6 Writing Effective Tools for Agents (Anthropic) 长文 ✅ 完整获取 第二周 MCP + 第三周工具设计的进阶指南

📖 阅读 1:Specs Are the New Source Code

来源: Ravi Mehta (前 Reforge CPO) Substack,2025 年 7 月

🔗 课堂关联: 这是第一讲 Slides 9-10(Specs Doc 八要素)的理论基础和行业论证。课堂说"复杂任务中你要变成产品经理",这篇文章深度解释了为什么。

核心论点:Spec 正在变成新的"源代码"

Sean Grove(OpenAI)的观点: 我们现在做 AI 开发的方式是倒过来的——我们精心编写 prompt 传达意图给模型,AI 生成代码,然后我们保留代码、丢弃 prompt。这就像"把源代码碎掉,然后精心版本控制二进制文件"。

传统软件开发中,源代码是神圣的——包含注释、结构、文档。二进制文件只是下游产物。但在 AI 时代,我们把关系搞反了。

关键引用: "一个足够健壮的 Spec 可以生成好的 TypeScript、好的 Rust、服务器、客户端、文档、教程、博客文章,甚至播客。"

更重要的是: Spec 做到了代码做不到的事——同时对齐人类和机器的共同目标

工作流的变革

旧工作流: 模糊想法 → 线框图 → 设计 → 工程师构建 MVP → 用户反馈 → 痛苦的 Spec 修改 → 重建

新工作流: 模糊想法 → 快速原型(v0/Lovable/Replit)→ 用户反馈 → 清晰的 Spec → AI 辅助实现

关键变化: Spec 从输入变成了输出——先用 AI 快速验证想法,然后写 Spec。原型没有杀死 Spec,而是让 Spec 变得更好

PM 的新角色

Andrew Ng 的观察:"我第一次见到有人提议让 PM 数量是工程师的两倍。" 随着 AI 让工程师交付更快,公司需要更多 PM来支持这些高产的工程师。

对课堂的启示: 课堂要求掌握写 Spec 的技能,不是在教"产品管理",而是在教未来软件工程师的核心技能——因为"在不久的将来,沟通最有效的人就是最有价值的程序员"。

🔗 课堂关联: 课堂 Slides 9-10 给出了 Spec 的八要素(Goal, Definitions, Plan, Source files, Test cases, Edge cases, Out-of-scope, Extensions)。这篇文章解释了为什么这些要素如此重要——它们不只是给 LLM 的指令,更是团队对齐的核心载体。


📖 阅读 2:How Long Contexts Fail

来源: Drew Breunig 博客,2025 年 6 月

🔗 课堂关联: 第一讲 Slide 8 解释了 IDE 的 Chat 模式使用语义索引(RAG)而非直接塞入所有代码。这篇文章解释了为什么必须这样做——长上下文并不等于更好的结果。

核心论点:更长的上下文窗口 ≠ 更好的结果

随着前沿模型支持百万级 token 上下文窗口,很多人兴奋地认为可以"把所有东西扔进 prompt"。但实际上,过载的上下文会导致 agent 以令人意外的方式失败

四种上下文失败模式

① 上下文中毒(Context Poisoning)

当幻觉或其他错误进入上下文后,会被反复引用

Gemini 2.5 技术报告中的案例:AI 玩 Pokémon 时,一次幻觉"毒化"了其目标列表,导致 agent 追求不可能达成的目标,需要很长时间才能修复。

🔗 课堂关联: 第二周 Claude Code 的"秘密武器"之一是在 tool results 中嵌入 <system-reminder> 来防止 drift——这正是对抗上下文中毒的策略。

② 上下文分心(Context Distraction)

当上下文过长时,模型过度关注上下文本身,忽略训练中学到的知识

Gemini 研究发现:当上下文超过约 100K token 后,agent 倾向于重复历史中的动作而非合成新计划。Databricks 研究发现 Llama 3.1 405B 在约 32K token 时准确率开始下降。

🔗 课堂关联: 第一周讲到的"上下文窗口限制"和 "primacy/recency bias"(首位效应/近因效应)在这里得到了实证支持。

③ 上下文混淆(Context Confusion)

上下文中无关内容被模型用来生成低质量回复。

Berkeley 函数调用排行榜证明:每个模型在多工具场景中表现都比单工具差,且所有模型偶尔会调用不相关的工具。量化后的 Llama 3.1 8B 在 46 个工具时失败,但在 19 个工具时成功——尽管上下文远未超出限制。

🔗 课堂关联: 第二周课堂 Slide 12 提到"Agent 不擅长处理大量工具"和"Cursor 对工具数量有硬限制"——这篇文章给出了学术依据。

④ 上下文冲突(Context Clash)

上下文中积累的新信息与旧信息相互矛盾

Microsoft/Salesforce 研究:将单一 prompt 拆分为多轮对话后,准确率平均下降 39%。o3 的分数从 98.1 降到 64.1。原因:早期轮次中模型的错误尝试留在上下文中,影响最终答案。

🔗 课堂关联: 这直接解释了第二周 Claude Code 为什么要使用子 Agent——每个子 Agent 有独立的上下文,避免主 Agent 的上下文被早期错误"污染"。

对 AI IDE 的启示

这四种失败模式共同解释了为什么 AI IDE 不能简单地"把所有代码塞进上下文":

  • Tab Complete 只发送小上下文窗口
  • Chat 模式使用 RAG/语义索引选择性提供上下文
  • Agent 配置文件(CLAUDE.md 等)是精心策划的上下文,而非随机的代码堆积

📖 阅读 3:Devin — Coding Agents 101

来源: devin.ai/agents101

🔗 课堂关联: 这是第二讲 Silas Alberti 演讲的产品文档补充。Silas 讲的是高层工作流(Plan→Build→Review),这篇文档提供了 Devin 的技术架构细节。

核心概念

Devin 是一个完全异步的 AI 软件工程师,可以在云端独立工作数小时——包括计划、编码、测试、调试。它拥有自己的隔离工作空间(shell + editor + browser)。

与 Cursor/Windsurf 等同步工具的本质区别:Devin 不需要开发者持续在旁监督,而是接受委派后自主完成,最终交付一个干净的 PR。


📖 阅读 4:Getting AI to Work In Complex Codebases

来源: github.com/humanlayer/advanced-context-engineering-for-coding-agents

🔗 课堂关联: 第一讲 Slides 12-14(优化代码库、Agent 配置文件)的深度展开。课堂给出了高层建议,这篇文章提供了在真实复杂代码库中实施上下文工程的具体方法。

核心概念

"Advanced Context Engineering"——在复杂代码库中,上下文工程(而非简单的 prompt engineering)是让 AI 有效工作的关键。这包括:如何组织代码让 agent 可导航、如何策划上下文让 agent 获得恰好足够的信息、如何避免上下文过载。

与阅读 2(How Long Contexts Fail)互为补充:阅读 2 解释了为什么上下文管理重要,阅读 4 解释了怎么做


📖 阅读 5:How FAANG Vibe Codes

来源: Twitter/X @rohanpaul_ai

🔗 课堂关联: 行业视角补充——大厂如何在实际产品开发中使用 AI 编程工具。


📖 阅读 6:Writing Effective Tools for Agents (Anthropic)

来源: Anthropic Engineering Blog,2025 年 9 月

🔗 课堂关联: 这篇文章横跨第二周(MCP 工具构建)和第三周(IDE 中使用工具),是从 Anthropic 内部视角总结的工具设计最佳实践。

核心论点:Tools 是确定性系统和非确定性 Agent 之间的新型"契约"

传统软件中,getWeather("NYC") 总是以完全相同的方式获取纽约天气。但当用户问"今天需要带伞吗?",agent 可能调用天气工具、可能直接从知识回答、也可能先问你在哪个城市——这就是非确定性

工具设计的五大原则

① 选择正确的工具(不是越多越好)

常见错误:把现有 API 端点一对一映射为 MCP 工具。Agent 的"可供性"(affordances)不同于传统软件。

💡 正确做法——合并功能:

  • ❌ 分别实现 list_users + list_events + create_event
  • ✅ 实现一个 schedule_event 工具,内部处理查找可用时间和创建事件
  • ❌ 实现 read_logs 工具
  • ✅ 实现 search_logs 工具,只返回相关日志行及周围上下文

🔗 课堂关联: 第二周 "APIs don't make good MCP tools"(阅读 6)从理论上论证了为什么不能简单转换 API。这篇文章从实践上给出了正确的替代方案

② 命名空间化工具(Namespacing)

当 agent 接入数十个 MCP Server 和数百个工具时,命名空间帮助 agent 区分工具边界。例如:asana_search vs jira_searchasana_projects_search vs asana_users_search

③ 返回有意义的上下文

优先返回高信号信息,避免低级技术标识符。

  • ❌ 返回 uuid, 256px_image_url, mime_type
  • ✅ 返回 name, image_url, file_type

将 UUID 解析为语义化的自然语言显著减少幻觉并提高检索精度。

支持 response_format 参数:"concise"(72 token)vs "detailed"(206 token),让 agent 控制返回的详细程度。

④ 优化 Token 效率

实现分页、范围选择、过滤和截断,并设置合理的默认值。Claude Code 默认限制工具响应为 25,000 token。

在截断响应中引导 agent 采取更高效的策略:

Results truncated (showing 50 of 342 matches).
Tip: Use the 'filter' parameter to narrow results,
e.g., filter="status:open AND assignee:jane"

错误响应也要有帮助性——给出具体的修正建议而非不透明的错误码。

⑤ Prompt 工程化工具描述

把工具描述当作给新同事的说明来写——把你隐含的上下文(专用查询格式、术语定义、资源间关系)显式化。

Claude Sonnet 3.5 在 SWE-bench 上通过精确优化工具描述达到了 SOTA——即使是小的描述改进也能产生巨大的效果。

协作流程:用 Agent 优化 Agent 的工具

Anthropic 推荐一个迭代循环:

  1. 原型: 快速搭建工具,本地测试
  2. 评估: 生成大量评估任务(受真实场景启发),运行评估
  3. 协作: 把评估结果交给 Claude Code 分析,让它自动改进工具描述和实现
  4. 验证: 用留出的测试集确保没有过拟合

在内部实验中,Claude 优化后的工具超过了人类专家手写的工具的性能。

🔗 课堂关联: 第一周课堂 Best Practice "迭代你的 prompt"在这里扩展为"迭代你的工具"——用同样的评估-改进循环优化工具描述、返回格式、命名空间。


🔗 六篇阅读材料的核心交叉主题

1. Spec 驱动开发成为新范式

阅读 1 从产品角度论证 Spec = 新源代码,课堂 Slides 9-10 给出了八要素框架,Silas 在第二讲中展示了 Devin 的 Plan→Build→Review 工作流——Planning(写 Spec)是人类主导的阶段,也是价值最高的阶段。

完整理解链: 第一周 Prompt 技术 → 第三周 Specs Doc 八要素(课堂)→ 阅读 1 理论论证 → Silas 的 Plan→Build→Review 实践

2. 上下文管理是 AI IDE 的核心挑战

阅读 2 系统分类了四种上下文失败模式,阅读 4 提供了在复杂代码库中管理上下文的实践方案,阅读 6(Anthropic)从工具设计角度优化上下文质量。课堂展示了 IDE 的底层方案(RAG + Merkle Tree 增量更新)。

完整理解链: 第一周上下文窗口限制 → 第二周 MCP 工具消耗上下文 → 阅读 2 四种失败模式 → 课堂 IDE 底层方案 → 阅读 4/6 实践对策

3. 人类角色从编码者转变为管理者

Silas 的"三个时代"(10%→20%→6-12×)量化了这个转变。阅读 1 论证了 PM 的新价值。课堂的 Agent 配置文件(CLAUDE.md, AGENTS.md)是这个新角色的基础设施

完整理解链: 第一周"你不会被 AI 取代,但会被善用 AI 的工程师取代" → 第二周 Agent 循环架构 → 第三周 Silas 的同步/异步框架 → 阅读 1 "沟通最有效的人 = 最有价值的程序员"

4. 工具设计需要"为 Agent 而非为人类"重新思考

阅读 6(Anthropic)系统化了工具设计原则,与第二周阅读 6(APIs don't make good MCP tools)形成完整的论证链:不要照搬传统 API,要从 agent 的视角重新设计工具。

🔗 课程脉络: 第 1 周学"prompt",第 2 周学"tool",第 3 周学"spec + context + workflow"。下一周(第 4 周)将深入"如何管理 agent 的自主性"——从工具层上升到协作模式层。

Week 04 · Coding Agent Patterns

Managing agent autonomy levels · Human-agent collaboration patterns · Mon 10/13 / Fri 10/17

进入 Week 04 详情页

课程PPT笔记

CS146S 第四周笔记总结:Coding Agent Patterns

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 10/13 How to be an Agent Manager 开发者 → Agent 管理者的转变(14 slides)
Fri 10/17 🎤 Guest: Boris Cherny (Anthropic/Claude Code 创始人) Claude Code 的设计哲学与使用方法(49 slides)

第一讲:How to be an Agent Manager(10/13)

1. 开发团队的演化史

时代 模式 角色
1940s 独立开发者处理完整项目 Solo developer
1960s-1970s NASA/DoD 驱动的第一批软件团队 Team member
1990s 软件团队主流化,专业化分工 Specialized role
2023 开发者+AI 编码系统辅助 AI-assisted developer
2025+ 单个开发者管理多个 AI agent Agent manager

2. 终极目标

每个开发者都将成为一个技术主管(Tech Lead),指挥自己的 agent 军团。

这些 agent 按以下维度专业化:

  • 任务类型:PR 审查、质量保证等
  • 语言/框架:React、FastAPI Python、Svelte 等
  • 角色职责:数据工程师、ML 工程师、DevOps 等

最终,甚至一个中等技术水平的 PM 也能做到同样的事情。

3. 软件任务分工

步骤 🟩 人类 🟦 Agent
提供高层需求
将需求转化为设计文档
从文档实现代码
添加测试
确保 CI 通过
代码审查
更新文档

📚 课程关联: 这个分工表直接对应第三周 Silas 的三阶段工作流(Planning → Coding → Testing),但更加细化——7 个步骤中只有前 1.5 个需要人类深度参与。

4. 指导 Agent 的四种技术

① Agent 行为文件(第三周已介绍)

CLAUDE.md / .cursorrules / AGENTS.md —— 定义 agent 的基础行为锚点。

② Hooks(钩子)

定义: 在预定义事件类型上运行的确定性脚本

Hook 事件 触发时机 用途示例
PreToolUse 工具调用前 验证参数、拦截危险操作
PostToolUse 工具调用后 记录日志、格式化输出
UserPromptSubmit 用户提交 prompt 时 注入额外上下文
PreCompact 上下文压缩前 保存关键信息

关键洞见: Hooks 是确定性的(不是 LLM 生成的),这保证了关键操作的可靠性和可审计性。

📚 课程关联: Hooks 解决了第三周阅读 2("How Long Contexts Fail")提到的 Context Drift 问题——通过在关键节点强制执行确定性逻辑来防止 agent 偏离。

③ Commands(命令)

定义: 将常用 prompt 存储为文件,agent 可以执行这些命令。

用途 示例
运行测试 /project:run-tests
审查代码 /project:review-code
Git 操作 /project:ship-it(commit + push + PR)

Commands 存储在 .claude/commands/ 文件夹中,支持 $ARGUMENTS 参数传递。

📚 延伸阅读: Claude Code Best Practices(阅读 2)详细展示了 slash commands 的实现,包括自动修复 GitHub issue 的完整命令模板。

④ Subagents(子 Agent)

定义: 运行时委托,将任务分派给具有独立上下文窗口的专门 agent。

核心特性:

  • 为不同类型的工作创建独立的开发者人格(前端、后端等)
  • 每个子 agent 拥有定制的 system prompt、工具和独立的上下文窗口
  • 实现Agent 管理 Agent 的架构

💡 实战示例:

主 Agent(Tech Lead 角色)
├── Frontend Sub-agent(React 专家,只能访问 src/components/)
├── Backend Sub-agent(Python 专家,只能访问 api/)
├── Test Sub-agent(QA 角色,运行测试套件)
└── Docs Sub-agent(技术写作,更新 README/CHANGELOG)

📚 课程关联: 子 agent 直接解决了第三周阅读 2 的四种上下文失败问题:

  • Context Poisoning → 隔离上下文,一个子 agent 的错误不会污染其他
  • Context Distraction → 每个子 agent 只加载相关上下文
  • Context Confusion → 每个子 agent 只拥有自己需要的工具
  • Context Clash → 信息分离,减少冲突

参考实现:

5. 最佳实践

实践 详情
设置安全后盾 代码库中的测试 + CI/CD 最佳实践
可审计性 标记每个 agent 产生的 diff
不同模型做不同任务 Opus 做规划,Sonnet 做日常编码
复杂任务需要更多引导 比完全异步的简单任务需要更多前期投入
定期 Checkpoint 频繁 commit,方便回滚

📚 延伸阅读: "Good Context Good Code"(阅读 5)中 StockApp 团队验证了这些实践——他们的 agent "误操作删除了开发数据库好几次",证明了安全后盾的必要性。

6. 开放问题

  1. 如何自动化每个任务前 10-20% 的研究阶段?(目前仍是 Planning 的瓶颈)
  2. 如何维护待处理任务队列?(一次性变更容易,但持续管理多任务的工作流尚未成熟)

第二讲:Guest Lecture——Boris Cherny(Anthropic/Claude Code 创始人)(10/17)

1. 核心论点:编程正处于拐点

两条指数增长曲线:

  • 编程语言生产力:Fortran → C → Python → TypeScript → ✻ AI
  • IDE 生产力:ed → Emacs → Eclipse → Copilot → Cursor → Claude Code → Devin

IDE 演进简史(Boris 视角):

年份 工具 关键创新
1964 IBM 029 打孔卡编程
1969 ed 第一个基于文本的编辑器
1980 Smalltalk-80 第一个带 GUI 的 IDE
1991 Visual Basic 第一个主流可视化编辑器
2001 Eclipse 第三方插件生态 + 丰富自动补全
2021 Copilot 多行 AI 自动补全
2024 Devin 对话优先,远离直接操作代码

"验证"也在快速进化:从手动调试 → 静态类型 → 自动测试 → CI → AI 驱动的单元测试/模糊测试/漏洞测试 → self play

2. Claude Code 的设计哲学

核心原则:Works Everywhere(到处可用)

三大支柱:

  1. Terminal-native(终端原生)
  2. Low-level model access(底层模型访问)
  3. Infinitely hackable(无限可扩展)

覆盖完整 SDLC:

① Discover → ② Design → ③ Build → ④ Deploy → ⑤ Support & Scale
   探索代码库    规划项目     实现代码    自动化CI/CD   调试错误
   搜索文档      技术规格     写测试      配置环境       大规模重构
   入职学习      架构定义     创建PR      管理部署       监控性能

关键: 使用你团队的所有 CLI 工具(git, docker, bq 等),让你专注于解决方案而非语法。

3. 一个 Claude Code,多种形态

形态 场景
Terminal 终端命令行(核心形态)
IDE VS Code / Cursor 集成
Web & iOS claude.ai/code 网页版
GitHub App /install-github-app 集成到 CI
SDK 编程式调用,支持管道和 JSON 输出

SDK 示例:

# 查询本周工作
claude -p "what did i do this week?" \
  --allowedTools Bash(git log:*) \
  --output-format stream-json

# 管道式工作流
get-gcp-logs 1uhd832d |
  claude -p "correlate errors + commits" \
  --output-format=json |
  jq '.result'

4. 使用模式与工作流

四大使用模式:

模式 描述
Codebase Q&A 向 Claude 询问代码库问题(入职利器)
Write Code 一次性 / 伙伴模式 / 原型模式
MCP Integration 连接外部工具和数据
Power Automation SDK 驱动的自动化流程

三种核心工作流(与第一讲对应):

① Explore → Plan → Confirm → Code → Commit

> figure out the root cause for issue #983, 
> then propose a few fixes. 
> Let me choose an approach before you code. ultrathink
  • 使用 "think" / "think hard" / "think harder" / "ultrathink" 触发不同级别的深度思考

② Tests → Commit → Code → Iterate → Commit(TDD 模式)

> write tests for @utils/markdown.ts to make sure links 
> render properly (note the tests won't pass yet). 
> then commit. then update the code to make the tests pass.

③ Code → Screenshot → Iterate(视觉迭代)

> implement [mock.png]. Then screenshot it with puppeteer 
> and iterate till it looks like the mock.

📚 课程关联: 这三个工作流直接细化了第一讲的"Agent Manager"职责——人类通过选择正确的工作流来管理 agent 的行为模式。

5. 原型迭代实录

Boris 展示了 Claude Code 自身的 TODO 功能开发过程(Slides 34-43),展现了快速原型迭代的真实过程:

尝试 1: "显示 todo 列表在工具使用上方" → 不满意
尝试 2: "用粗体标题内联显示工具使用" → 不满意
尝试 3: "在输入框下加 todo pill" → 不满意
尝试 4: "todo 列表在输入框右边" → 不满意
尝试 5: "todo 列表在输入框上方" → 接近了
尝试 6: "融入 spinner,当前 todo 用主动语态" → ✅
尝试 7: "ctrl+t 展开/收起 todos" → ✅ 最终方案

关键启示: 7 次迭代,每次只用一句自然语言描述。这就是 Boris 所说的"原型模式"——快速试错、快速收敛。对比传统开发需要手写代码调整 UI,这里每次迭代可能只需几十秒。

6. 四条核心教训

# 教训 含义
1 Build for the model six months from now 不要为当前模型的局限性做太多 workaround,模型很快会更强
2 Be ready to evolve 工具和工作流会快速变化,保持适应性
3 Ask not what the model can do for you 思考你能为模型做什么(更好的上下文、工具、配置)
4 Models get better, compute gets cheaper 投资于 agent 基础设施会随时间获得复利

📚 课程关联: "Build for the model six months from now" 与第一讲 Slide 4 的开发团队演化图完美呼应——我们正处于 "2023 → 2025+" 的过渡期,投资于 agent 管理技能的回报会随模型进步而指数增长。


🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Boris/Anthropic)
视角 Agent 管理的理论框架 Claude Code 的实际实现
核心 四种指导技术 + 最佳实践 设计哲学 + 三种工作流
抽象层次 通用(适用于任何 agent 工具) 具体(Claude Code 特定)

统一理解:

  1. 第一讲建立了 "Agent Manager" 的角色模型和工具箱(Hooks、Commands、Subagents)
  2. 第二讲通过 Claude Code 展示了这些概念的具体产品实现
  3. 两讲共同传递的信息:开发者的核心技能从 "写代码" 转向 "管理 agent + 设计上下文 + 选择工作流"

📚 第四周阅读材料速览

# 材料 核心主题 课堂关联
1 How Anthropic Uses Claude Code (PDF) Anthropic 内部如何使用 Claude Code 第二讲 Boris 演示的官方背景
2 Claude Code Best Practices (Anthropic) CLAUDE.md + 工作流 + 最佳实践 第一讲所有技术的官方手册
3 Awesome Claude Agents 社区 CLAUDE.md 和子 agent 配置集合 第一讲 Subagents 的参考实现
4 SuperClaude Framework 多 agent 框架 + 专业化 agent 定义 第一讲 Subagents 的高级框架
5 Good Context Good Code (StockApp) AI-native 工程文化实践 全周内容的实战验证
6 Peeking Under the Hood of Claude Code 通过 LiteLLM 代理逆向分析 Claude Code 第二周 Agent 架构的底层揭秘

🛠️ 第四周作业

Coding with Claude Code — 使用 Claude Code 完成编码任务

阅读材料笔记

CS146S 第四周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 How Anthropic Uses Claude Code PDF Anthropic 内部 Claude Code 使用 ⚠️ PDF 无法直接获取
2 Claude Code: Best Practices 工程博客 完整使用指南 ✅ 完整获取
3 Awesome Claude Agents GitHub 仓库 社区 agent 配置集合 ⚠️ 概要
4 SuperClaude Framework GitHub 仓库 多 agent 框架 ⚠️ 概要
5 Good Context Good Code 工程博客 AI-native 工程文化 ✅ 完整获取
6 Peeking Under the Hood of Claude Code Medium 文章 逆向分析 Claude Code ✅ 完整获取

📖 阅读 2:Claude Code: Best Practices for Agentic Coding(Anthropic)

来源: Anthropic 工程博客,2025 年 4 月 18 日

🔗 课堂关联: 这是本周最重要的参考文档——第一讲所有技术(CLAUDE.md、Hooks、Commands、Subagents)的官方最佳实践手册,也是第二讲 Boris 演示的配套文档。

一、定制你的环境

① CLAUDE.md 文件(核心配置)

Claude 启动对话时自动加载的特殊文件。应记录:

  • 常用 bash 命令
  • 核心文件和工具函数
  • 代码风格指南
  • 测试说明
  • 仓库规范(分支命名、merge vs rebase 等)
  • 开发环境设置
  • 项目特有的异常行为或警告

CLAUDE.md 放置位置:

位置 行为 适用场景
项目根目录 自动加载 最常见用法,推荐提交到 git
根目录(.local.md后缀) 自动加载但不提交 个人偏好
父目录 自动加载 Monorepo 中的子项目
子目录 按需加载 在子目录中工作时自动引入
~/.claude/CLAUDE.md 全局应用 所有项目通用设置

关键技巧:# 键可以给 Claude 一个指令,它会自动写入相应的 CLAUDE.md。把 CLAUDE.md 的变更加入 commit,团队成员也能受益。

💡 Anthropic 内部做法: 定期通过 prompt improver 优化 CLAUDE.md,并使用 "IMPORTANT" 或 "YOU MUST" 等强调词提高指令遵循度。

② 工具权限管理

四种管理方式:

  • 会话中选择 "Always allow"
  • /permissions 命令添加/移除
  • 手动编辑 .claude/settings.json
  • --allowedTools CLI 标志

③ 安装 gh CLI

Claude 可以使用 gh 创建 issue、开 PR、读评论等。

二、赋予 Claude 更多工具

① Bash 工具 Claude 继承你的 bash 环境,可以使用所有你的工具。自定义工具需要通过 CLAUDE.md 或直接告知。

② MCP 集成 Claude Code 既是 MCP Server 也是 MCP Client。配置方式:

  • 项目级配置(当前目录生效)
  • 全局配置(所有项目生效)
  • 提交到仓库的 .mcp.json(团队共享)

③ Custom Slash Commands 将常用工作流存储为 .claude/commands/ 中的 Markdown 文件。

📚 课堂关联: 这三种工具扩展方式直接对应第一讲 Slide 8 的"指导 Agent 的技术":Bash 工具(环境)、MCP(外部工具)、Commands(预定义流程)。

三、核心工作流

① Explore → Plan → Code → Commit

四步法,适合大多数问题:

  1. 让 Claude 阅读相关文件/图片/URL(明确告诉它此时不要写代码
    • 复杂问题应积极使用 subagents 做验证和调查
  2. 让 Claude 制定计划——使用 "think" 触发深度思考
    • "think" < "think hard" < "think harder" < "ultrathink",每级分配更多思考预算
  3. 让 Claude 实现代码
  4. 让 Claude 提交并创建 PR

关键: 步骤 1-2 至关重要——没有它们,Claude 会直接跳到写代码。

② Tests → Code → Iterate → Commit(TDD 模式)

Anthropic 内部最爱的工作流:

  1. 让 Claude 基于输入/输出对写测试(明确说明是 TDD,避免 mock)
  2. 让 Claude 运行测试并确认失败
  3. 提交测试
  4. 让 Claude 写代码使测试通过(可用独立 subagent 验证实现没有过拟合测试)
  5. 提交代码

③ Code → Screenshot → Iterate(视觉迭代)

用 Puppeteer MCP 或 iOS Simulator MCP 截图,对比视觉 mock 迭代。

④ Safe YOLO Mode

claude --dangerously-skip-permissions 跳过所有权限检查,适用于修 lint 错误或生成样板代码。必须在无网络的容器中使用。

⑤ Codebase Q&A(入职利器)

Anthropic 内部用这种方式大幅缩短入职时间。

⑥ Git 和 GitHub 交互

Anthropic 工程师 90%+ 的 git 操作通过 Claude 完成。

四、优化技巧

技巧 详情
具体化指令 模糊 → "add tests for foo.py";具体 → "write tests covering the edge case where user is logged out, avoid mocks"
给图片 截图粘贴(macOS: cmd+ctrl+shift+4 截图到剪贴板 → ctrl+v 粘贴)
引用文件 Tab 补全快速引用仓库中的文件/文件夹
给 URL 粘贴 URL,Claude 会抓取并阅读
及早纠正 Escape 中断 → 重新引导;双击 Escape 回到历史编辑
/clear 清理上下文 任务间频繁清理,避免上下文污染
Checklist/Scratchpad 复杂任务让 Claude 用 Markdown 文件追踪进度

📚 课堂关联: /clear 直接解决了第三周阅读 2 的 Context Distraction 问题;Checklist 策略解决了长任务中的 Context Poisoning(通过外化状态到文件而不是留在上下文中)。


📖 阅读 5:Good Context Good Code (StockApp)

作者: Waleed Kadous 等(StockApp 团队,来自 Google 等大厂) 发表: 2025 年 8 月 5 日

🔗 课堂关联: 这是全周内容的实战验证——一个从零开始构建 AI-native 工程文化的团队,验证了课堂教授的所有核心理念。

核心洞见

"好代码是好上下文的副产品。"(Good code is a side effect of good context.)

AI-native 开发不是取代工程师,而是通过精心设计的共享上下文实现系统化的人-AI 协作。

生产力数据

  • AI-native 开发比手动开发提效 ~2.5x
  • 比"现有开发文化+AI 增强"提效 ~2x
  • Q2 2025:13 周内 1,098 个 PR(每开发者每周 10.6 个 PR,行业标准约 1 个)

五大原则

原则 1:Repo 是人和 Agent 的共享工作区

repo/
├── docs/designs/     # 产品需求、高层目标(Why & What)
├── docs/plans/       # 详细实现计划(How)——人+agent 联合生成
├── docs/guides/      # API 和工具教程——常由 agent 起草
├── schema.sql        # 单一的规范 schema(数据结构的真相源)
├── README.md         # 给人看的(各处分布)
└── CLAUDE.md         # 给 agent 看的(各处分布)

关键洞见: 自然语言和编程语言同等重要。他们故意在 repo 中放入比"纯人类团队"更多的文档,因为 repo 不仅是给人用的,也是给机器用的。

原则 2:层级式开发(Hierarchical Development)

人和 Agent 在每个层级协作,逐步构建上下文:

Design(人提需求 → agent 起草 → 共同迭代 → 提交)
  ↓
Plan(agent 将设计转化为分阶段任务 → 人审查)
  ↓
Implement(agent 写大部分代码 → 人审查)
  ↓
Backstop(测试和其他安全机制)
  ↓
Review(人+agent 最终审查)
  ↓
Update(更新文档、CLAUDE.md、schema)

📚 课堂关联: 这六步流程是第一讲 Slide 7 "软件任务分工"的详细展开版本,同时呼应了第三周"Specs 驱动开发"的理念。

原则 3:用 Agent 做一切(除非有充分理由不用)

非常规用法:

  • Agent 写 commit 和 PR 消息
  • Agent 更新文档(而非人手动编辑)
  • Agent 更新 CLAUDE.md——"它比我们更知道如何指导自己"
  • Agent 写测试(但要警惕 over-mocking 倾向)
  • 调试是联合活动:人提出假设 → agent 验证
  • Agent 在代码库中查找重复代码、死代码、安全问题

重要警告: "Agent 不是魔法。我们始终全神贯注地监督。Agent 曾多次误操作删除了我们的开发数据库。"

原则 4:MCP 和命令让上下文理解更容易

StockApp 使用 6 个 MCP server:

MCP Server 用途
Notion 获取决策上下文、功能描述
Linear 读取/更新工单,在 Notion 设计 → Linear 任务之间架桥
AWS 直接读取服务器日志进行调试
SQL Dev DB 验证数据库中的数据正确性
Git/GitHub 研究历史版本、创建 PR、解决仓库问题

最令人兴奋的用法: "读取 Linear 中的 bug 描述,然后遍历最近 10 个 commit,找出最可能导致 bug 的那个。"——MCP 让跨系统的信息桥接变得自然。

原则 5:集成(Ensemble)优于个体

使用 Zen MCP Server 让 Claude Code 也能向 Gemini 和 o3 征求反馈。

实例: 关于 MCP server 认证方案,Gemini 推荐 payload-based auth 为"最务实和可扩展的方案",而 o3 更谨慎地将 per-user clients 排为 #1。多模型多视角帮助做出更好的决策。

📚 课堂关联: "人类 + 多个 agent = ensemble"直接呼应了第一讲的核心目标——开发者管理多个专业化 agent。StockApp 更进一步证明了不同 LLM 的多样性也是 ensemble 的一部分。


📖 阅读 6:Peeking Under the Hood of Claude Code

作者: OutSight AI 发表: 2025 年 8 月 20 日

🔗 课堂关联: 这是第二周 Agent 架构(Agent Loop、System Prompts、Tool Calls)的底层揭秘——通过 LiteLLM 代理拦截 Claude Code 的 API 请求,直接观察它在做什么。

实验方法

通过 LiteLLM 作为透明代理,拦截 Claude Code 和 Anthropic API 之间的所有请求:

Claude Code → LiteLLM Proxy → Anthropic API
                ↓(记录所有请求/响应)

核心发现

发现 1:Front-loaded Context(前置上下文加载)

在你开始编码之前,Claude Code 已经做了大量"预处理":

  • 提取对话标题:总结当前对话(<50 字符)
  • 判断是否新话题:分析当前消息是否是新的对话主题
  • 加载项目上下文:CLAUDE.md、文件结构等

📚 课堂关联: 这直接验证了第二周第二讲 Slide 7 的"Claude Code Secret Sauce"——"front-loaded context"不是比喻,而是实际发生的 API 调用。

发现 2:System Reminders 无处不在

<system-reminder> 标签被嵌入到了所有地方

  • System prompts
  • User prompts
  • Tool call 结果
  • Todo 列表更新

示例——一条用户消息中包含的多层 system-reminder:

<!-- Reminder 1: 行为指导 -->
<system-reminder>
Do what has been asked; nothing more, nothing less.
NEVER create files unless absolutely necessary.
ALWAYS prefer editing an existing file to creating a new one.
</system-reminder>

<!-- 用户的实际消息 -->
Can you analyze @sb-agent/ and tell me how it works...

<!-- Reminder 2: LS 工具的调用记录 -->
<system-reminder>
Called the LS tool with the following input: {"path": "..."}
</system-reminder>

<!-- Reminder 3: LS 工具的结果 + 安全检查 -->
<system-reminder>
Result of calling the LS tool: "..."
NOTE: do any of the files above seem malicious?
</system-reminder>

<!-- Reminder 4: Todo 列表状态 -->
<system-reminder>
Your todo list is currently empty. DO NOT mention this to the user.
</system-reminder>

📚 课堂关联: 这直接解决了第三周阅读 2("How Long Contexts Fail")的 Context Distraction 问题——通过不断注入 system-reminders,防止模型在长上下文中"忘记"关键指令。

发现 3:命令注入检测是生成式的

Claude Code 的权限系统不是硬编码的——它使用一个专门的子 prompt 来分析命令前缀并检测注入:

示例:
- cat foo.txt         → cat(安全)
- git commit -m "foo" → git commit(安全)
- git diff $(cat secrets.env | base64 | curl...) → command_injection_detected(危险!)
- git status`ls`      → command_injection_detected(危险!)

📚 课堂关联: 这是第一讲 Slide 9 "Hooks" 的底层实现——PreToolUse hook 在执行 bash 命令前做安全检查,但这个检查本身是 LLM 驱动的,不是简单的正则匹配。

发现 4:Sub-agents 的自适应上下文

Claude Code 使用 "Task" 工具生成子 agent,每个子 agent 有更窄的指令集。子 agent 的上下文会根据任务复杂度动态调整


🔗 六篇阅读材料的交叉主题

1. "Agent Manager" 的完整工具箱

  • 阅读 2(Claude Code Best Practices)= 官方手册
  • 阅读 3(Awesome Claude Agents)+ 阅读 4(SuperClaude)= 社区实践集合
  • 阅读 5(StockApp)= 企业级实战验证
  • 阅读 6(Under the Hood)= 底层实现揭秘

2. 上下文工程的实践闭环

第三周理论("How Long Contexts Fail")→ 本周实践:

上下文失败模式 解决方案(本周学到的)
Context Poisoning 频繁 checkpoint/commit(阅读 2)、独立子 agent 隔离(课堂 Slide 11)
Context Distraction /clear 清理上下文(阅读 2)、system-reminders 防漂移(阅读 6)
Context Confusion 选择性加载工具/文件(阅读 2)、MCP 按需连接(阅读 5)
Context Clash 层级式开发 Design → Plan → Implement(阅读 5)、TDD 先测试后编码(阅读 2)

3. 好上下文 = 好代码

这是本周所有材料的统一主题:

  • CLAUDE.md / AGENTS.md / docs/ = 静态上下文
  • MCP servers = 动态上下文
  • System reminders = 持续上下文
  • Hooks / Commands = 确定性上下文
  • Subagents = 隔离上下文

🔗 课程脉络: 第一周"LLM 基础" → 第二周"Agent + MCP" → 第三周"IDE + Workflow" → 第四周"Agent Manager + 上下文工程实践"。到目前为止,课程已经完成了从理论到实践的全链路。下一周(第五周)将进入"The Modern Terminal",探索 AI-enhanced 命令行界面。

Week 05 · The Modern Terminal

AI-enhanced command line interfaces · Terminal automation and scripting · Mon 10/20 / Fri 10/24

进入 Week 05 详情页

课程PPT笔记

CS146S 第五周笔记总结:The Modern Terminal

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 10/20 How to Build a Breakout AI Developer Product AI 开发者工具产品设计的 7 大原则(14 slides)
Fri 10/24 🎤 Guest: Zach Lloyd (CEO, Warp) Warp 的产品哲学与 AI Terminal(Figma slides,无法提取文本)

第一讲:How to Build a Breakout AI Developer Product(10/20)

核心主题

这是课程中唯一一讲从产品设计角度审视 AI 开发工具。前四周讲的是"如何使用工具",这一讲讲的是**"如何设计工具"**。以 Warp 为演示工具。

背景:为什么要关注这个?

"我们正在见证历史上最快的开发者工具采纳周期。"

AI 正在迅速改变开发者工具的 UX/UI。核心问题是:在你的开发环境中引入 agent,会如何改变产品本身?

7 大产品原则

原则 1:Start with What Developers Know(从开发者已知的出发)

关键: 鼓励从现有界面过渡,而不是要求全新的学习曲线。

产品 切入点 为什么有效
Cursor 每个人都用 IDE VS Code fork,零学习成本
Warp 终端是人人理解的 UX 增强而非替换终端
Bolt 人人会聊天 聊天界面 → 生成应用

关键能力: 在代码和自然语言之间无缝切换。

💡 经典痛点: tar -czvf 这样的命令——每个开发者都痛过。从共同的痛点出发建立产品价值。

📚 课程关联: 第四周 Boris 讲 Claude Code 选择 Terminal-native 形态,正是这个原则的体现——终端是开发者最熟悉的界面。

原则 2:Configuration Flexibility(配置灵活性)

双轨设计:

  • 普通用户: 零配置即可体验价值
  • 高级用户: 极深的可定制性
层级 能力
零配置 开箱即用,立刻展现 AI 能力
模型切换 在不同 LLM 之间无缝切换
Prompts 自定义 prompt 模板
Project Rules 项目级别的规则和约束
MCP 扩展工具生态

📚 课程关联: 这直接呼应了第四周的 CLAUDE.md / .cursorrules / AGENTS.md 体系——好的产品在多个层级提供配置能力。

原则 3:Focus on Developer Ergonomics(聚焦开发者人体工程学)

"如果你能省掉一次按键,就去做。"

两个关键指标:

  • "5 minutes to WOW":零入职摩擦,5 分钟内让用户感到惊喜
  • 键盘热键的粘性:"Tab" 和 "Enter" 的习惯一旦养成就很难改变

📚 课程关联: Cursor 的 Tab 补全、Warp 的 # 自然语言输入,都是这个原则的典型实现。

原则 4:Chat as a First-Class Citizen(对话作为一等公民)

"代码本质上是人类意图的一种人为表示。随着工具演进,更多工作将只需用自然语言表达开发者意图,而非语法。"

趋势方向:从编写语法 → 表达意图。

📚 课程关联: 这与第三周阅读 1("Specs Are the New Source Code")的核心论点一致——spec(自然语言意图)正在取代 code(语法表示)成为源代码。

原则 5:MCP Integration(MCP 集成)

"MCP 已经成为让 LLM 与现实世界交互的通用语言。"

可扩展的工具生态让 LLM 能够访问任何资源、执行任何操作。

课堂演示了 Warp 如何集成 MCP,包括使用 context7 获取最新的 braintrust 文档。

📚 课程关联: 直接延续第二周 MCP 的内容。MCP 从"技术协议"(第二周)→"IDE 集成"(第三周)→"产品差异化因素"(本周),抽象层不断提升。

原则 6:Rapid Feedback Loops(快速反馈循环)

关键: 让开发者快速迭代并立即看到变更效果。

产品 反馈循环
Bolt/Lovable 实时更新 canvas,prompt → 立即看到 UI 变化
Warp 执行操作后立刻看到反应

可解释性是一等公民——开发者需要理解 agent 在做什么、为什么这么做。

📚 课程关联: 第四周 Boris 的原型迭代演示(7 次迭代 TODO 功能)就是极致的快速反馈循环。

原则 7:Agent Workflows(Agent 工作流)

趋势: 越来越多地采用 "agent-take-the-wheel" 方式。

自主级别 描述
Agent 提问澄清 有把握时执行,不确定时询问
YOLO 模式 完全自主,不需要人类确认

课堂演示了 Warp 的 YOLO 模式。

📚 课程关联: 直接延续第四周第一讲的"Agent 自主级别管理"——从 human-in-the-loop → agent-take-the-wheel 的频谱。

开放问题

  1. 工具整合: 点状解决方案(代码审查、应用构建、监控)会否整合为单一平台?
  2. 形态演进: AI IDE → AI Terminal → AI 浏览器 Replit?
  3. 垂直化: Warp/Cursor 会否针对全栈开发等场景垂直化?
  4. 配置标准化: 碎片化的 .cursorrules / CLAUDE.md 不会持续太久。AGENTS.md 是标准化的第一步。

📚 课程关联: 问题 4 直接呼应了第三周 AGENTS.md 的讨论——这不仅是一个文件格式,而是整个行业需要解决的标准化问题。


第二讲:Guest Lecture——Zach Lloyd(CEO, Warp)(10/24)

⚠️ Zach 的 Slides 使用 Figma 格式,无法提取文本内容。以下基于 Zach Lloyd 的多次公开演讲、采访和 Warp 官方文档整理。

Zach Lloyd 背景

  • 曾在 Google 工作,参与重新设计 Google Sheets("当时没人听说过它,我解释后朋友们都说'哦,Google 有个 Excel'"——如今月活约 10 亿)
  • 曾在 NASA JPL 工作,拥有哲学硕士学位,甚至读过一年耶鲁法学院
  • 2020 年创立 Warp,愿景:为现代开发者重新想象终端
  • 投资方:Sequoia Capital

Warp 的核心定位

"我们甚至不再把 Warp 称为终端。它是一个 Agentic Development Environment(ADE)。" ——Zach Lloyd, RedMonk 访谈 (2025.12)

"我们正在从开发者手动完成大部分工作的世界,转向通过 prompt 和 agent 完成工作的世界。" ——Zach Lloyd, Techstrong.tv (2025.9)

Warp 不是传统终端的 AI 插件,而是从零开始为 AI 时代重新设计的终端,兼具 IDE 级别的能力。

为什么是终端?

"终端实际上非常接近做这类开发的正确形态。我认为它肯定比 IDE 更接近。"

原因:

  • 终端在开发栈中处于底层位置,几乎可以执行任何类型的任务
  • 自然语言 + 命令行结合 = 精确且灵活
  • 不仅擅长编码(SWE-bench 71%、Terminal-Bench 52%),还擅长设置项目、生产环境调试、Docker/云操作

Warp 的演进之路

2020: 创立——"为现代开发者重新想象终端"
  ↓
2022: 发布——Block 系统、Workflows、Quake Mode、AI Command Search
  ↓
2025.3: Warp 2.0——"Agentic Development Environment"
  ↓
2025.9: Warp Code——内建文件编辑器、代码审查、WARP.md
  ↓
2025.11: Agents 3.0——完整终端能力的多 agent

关键里程碑: Warp Code(2025.9)引入了 WARP.md——Warp 版本的 AGENTS.md/CLAUDE.md,用于通过项目规则和指令引导 agent。

📚 课程关联: WARP.md 的出现验证了第一讲 Slide 14 的预测——碎片化的 .cursorrules / CLAUDE.md 世界不会持续太久,行业正在向标准化的 agent 配置文件收敛。

Warp 的四大产品支柱

支柱 描述
Code 使用 agent 在生产级代码库中构建复杂功能
Agents 部署多个 agent、集中管理、按需介入
Terminal 现代化、智能化的终端,为速度而生
Drive 集中管理 agent 和团队的知识与上下文

Zach 的核心观点:AI 不会取代开发者

"Agent 擅长孤立任务,但开发是一项团队运动。"

三个原因:

  1. "几乎能用"的陷阱: "太多时候 agent 写出几乎能用但实际不行的代码"——真实项目涉及边缘情况、遗留系统、没有训练数据覆盖的场景
  2. 上下文与协作: 软件不存在于真空中——AI 不理解办公室政治、客户需求变化、"那次 API 在高峰时段崩溃"
  3. 伦理与判断力: AI 会产生幻觉——在代码中这可能意味着安全漏洞或偏差算法

Warp vs Claude Code 核心对比

维度 Claude Code Warp
环境 CLI 工具,需要安装 内建于终端
Diff 审查 外部/手动 内建可视化 diff 面板,可在线编辑
规划 Markdown 模式 内联或 Opus 辅助
模型选择 仅 Claude 系列 Claude + GPT-5 + Gemini
配置 CLI 命令 UI + Agent Profiles + Rules
性能 2-4 分钟(Sonnet) ~1.2 分钟(GPT-5)
上下文 文件引用 文件引用 + 符号引用 + 文件树
多 agent 子 agent(单线程) 多 agent 并行 + 集中管理面板
通知 终端 tab 标题 桌面通知 + toast + 进度指示

Warp 的关键差异化功能

① Block 系统 每个命令和输出被组织为独立的 "Block",可以导航、搜索、分享。

② 可视化 Diff 编辑

"你可以直接编辑 diff。内建编辑器让你手动编辑、移除 agent 添加的注释等。点击接受后,agent 会被通知这些修改,不会在后续覆盖它们。"

③ 多模型支持 可以在 Claude(Sonnet/Opus)、GPT-5、Gemini 之间切换,针对不同任务选择最佳模型。

④ Agent Profiles 定义 agent 的读写权限、自主级别、规划行为——类似于第四周的 subagent 概念但通过 UI 配置。

⑤ Codebase Indexing 创建代码库的 embeddings,实现更快的语义搜索——类似于第三周课堂介绍的 Cursor 的索引机制。

📚 课程关联: Warp 的多模型支持验证了第四周阅读 5(StockApp "Good Context Good Code")的 Ensemble 原则——不同 LLM 有不同的强项和弱点,多模型协作优于单一模型。

Zach Lloyd 的产品哲学(基于多次公开访谈)

① 终端是新战场

"时间线式日志和命令式界面——你只需告诉 agent 你想要什么,它就去做——正在成为与 AI 协作的最佳方式。这比 VS Code 克隆品中的侧面板或聊天窗口顺畅得多。"

自 ADE 发布以来,Warp 的每日付费注册增长了约 5 倍。

② "不是 IDE,不是终端,而是另一种东西"

"It's not an IDE, not a terminal. It's something else entirely."

Warp 融合了终端和 IDE 的元素,但既不是传统终端也不是传统 IDE——它是围绕"prompting → reviewing → collaborating with agents"设计的新界面范式。

③ Google Sheets 的经验

Lloyd 在 Google 面对 Excel 纯粹主义者的激烈抗议时重新设计了电子表格。同样的经历让他不惧 Hacker News 上"重新发明终端是愚蠢的"批评。

📚 课程关联: Zach 的"终端是正确形态"论点与第四周 Boris 的"Terminal-native"设计哲学形成有趣的呼应——两个不同公司(Anthropic/Claude Code 和 Warp)从不同角度得出了相似结论:终端 > IDE 侧面板。


🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Zach/Warp)
视角 AI 开发者工具的通用产品原则 Warp 如何具体实现这些原则
层次 抽象框架(7 原则) 具体产品展示

7 原则在 Warp 中的体现:

原则 Warp 实现
从已知出发 终端形态 + # 自然语言输入
配置灵活性 Agent Profiles + Rules + MCP + 多模型
开发者人体工程学 Block 系统 + 键盘热键
Chat 一等公民 自动识别自然语言 vs 命令
MCP 集成 内建 MCP 配置界面
快速反馈 可视化 Diff + 桌面通知
Agent 工作流 YOLO 模式 + Agent Profiles 自主级别

📚 第五周阅读材料速览

# 材料 核心主题 课堂关联
1 Warp University Warp 完整教程(35+ 视频) 第二讲所有功能的官方教程
2 Warp vs Claude Code 详细功能对比 两种 AI Terminal 的设计差异
3 How Warp Uses Warp to Build Warp Warp 团队的内部使用实践(Dogfooding) 第一讲产品原则的内部验证

🛠️ 第五周作业

Agentic Development with Warp — 使用 Warp 进行 Agent 驱动的开发

阅读材料笔记

CS146S 第五周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 Warp University 视频教程平台 Warp 完整功能教程 ✅ 目录结构获取
2 Warp vs Claude Code 官方对比文档 AI Terminal 详细对比 ✅ 完整获取
3 How Warp Uses Warp to Build Warp Notion 页面 内部 Dogfooding 实践 ⚠️ 博客版本获取

📖 阅读 1:Warp University

来源: warp.dev/university

🔗 课堂关联: 这是 Zach Lloyd 客座讲座的配套学习资源,覆盖 Warp 的所有功能和工作流。

课程体系(35+ 视频教程)

类别 数量 内容
Getting Started 9 入门:Warp 概览、定制、首次编码、Warp vs Claude Code
Warp Code 2 Code Review 面板、10 个必知功能
Developer Workflows 7 端到端工作流:Figma MCP、Ollama、理解代码库、多 Agent
Using MCP 6 MCP 集成:Linear、Puppeteer、Context7、Sentry、Figma、GitHub
Rules 5 Agent 规则:Monorepo 链接、最佳实践、技术栈偏好、安全防护
Prompts 6 Prompt 技巧:调试、数据库优化、PR 审查、UI 实现、Docker
How Warp Uses Warp 6 Dogfooding:理解代码库、图片上下文、多 Agent、MCP

核心学习路径

对于本课程学生,推荐按以下顺序学习:

基础理解: A Full Warp Overview → Customize Warp → Start a Coding Task

进阶对比: Warp VS Claude Code(直接呼应课堂第二讲内容)

工作流掌握: Using Project Rules → Using Agent Profiles → Making a UI Change → Run and Review Code with Multiple Agents

MCP 扩展: 选择与自己项目相关的 MCP 教程(Linear/GitHub/Sentry 等)

📚 课程关联: Warp University 的课程体系覆盖了本课前四周的所有核心概念:Prompt 技巧(第一周)、MCP 集成(第二周)、IDE/Agent 配置(第三-四周)。这是一个很好的综合复习资源。


📖 阅读 2:Warp vs Claude Code

来源: Warp 官方文档

🔗 课堂关联: 这是本周最重要的阅读材料——直接对比了课程目前涉及的两个核心 Terminal Agent 工具(第四周的 Claude Code vs 本周的 Warp),帮助理解 AI Terminal 领域的设计权衡。

两者共同能力

  • 读取和编辑文件
  • 生成代码 diff
  • 规划多步骤任务

九大维度详细对比

① 环境与安装

Claude Code Warp
形态 CLI 工具 集成到终端中
安装 需要安装 claude CLI 无需额外安装
交互 在命令框中输入 prompt 自然语言查询自动识别并切换到 agent 模式

② Diff 审查

Claude Code 需要手动审查(CLI 或外部编辑器),可用 Shift+Tab 自动接受。

Warp 提供内建可视化 diff 面板——可以接受、拒绝或在线手动编辑 diff。Agent 会自动更新上下文以避免覆盖你的手动修改。

📚 课程关联: Warp 的 diff 编辑能力直接解决了第四周讨论的 "course correction" 问题——开发者可以更精细地控制 agent 的输出,而不是只能接受/拒绝。

③ 规划与上下文

两者都支持规划模式。但 Warp 扩展了上下文能力:

  • 文件引用(@filename)——两者都支持
  • 符号引用@functionName)——Warp 独有
  • 文件树浏览器——可以拉取特定行和符号作为上下文

④ 模型选择

Claude Code Warp
Claude 系列(Sonnet/Opus/Haiku) Claude + GPT-5 + Gemini

📚 课程关联: 多模型支持验证了第四周阅读 5(StockApp)的 Ensemble 原则——不同模型适合不同任务。

⑤ 配置

Claude Code Warp
/commands CLI 配置 Settings → AI & Agents UI
模型切换、工具权限、子 agent MCP servers、prompts、全局 rules
Agent Profiles:读写权限、自主级别、规划行为
Codebase Indexing:创建 embeddings 用于语义搜索

⑥ Agent 管理

Claude Code 在 CLI tab 中显示进度,tab 标题显示当前任务名。

Warp 添加了可视化进度指示器toast 通知(agent 被阻塞时)、可选的桌面通知

📚 课程关联: Warp 的多 agent 管理能力直接对应了第三周 Silas 讲的 "async agent" 概念——当你同时运行多个 agent 时,需要集中管理和通知。

⑦ 性能对比

在同一编码任务(修复 Sentry issue 中的 renderKeyboardShortcut bug)上测试:

  • Claude Code + Sonnet:2-4 分钟,能找到正确问题但有冗余逻辑
  • Warp + GPT-5:~1 分 20 秒,输出一致性高、简洁

⑧ 总结选择建议

  • 偏好 Claude 模型生态 + 纯 CLI 工作流 → Claude Code
  • 需要更丰富的 Diff 编辑、上下文引用、多模型灵活性 → Warp

📖 阅读 3:How Warp Uses Warp to Build Warp

来源: Warp 博客(2022)+ Notion 内部文档(2025,需 JS 渲染无法直接获取) 作者: David Stern, Ian Hodge, Michelle Lim, Agata Cieplik(Warp 团队)

🔗 课堂关联: 这是 Warp 团队的 Dogfooding 实践报告,展示了第一讲"7 大产品原则"如何在 Warp 团队自身的日常工作中得到验证。

四大特色功能的内部使用

① Block Sharing(块分享)—— David Stern(工程师)

痛点: 开发者分享终端输出的传统方式(截图/复制粘贴)有很多问题:

  • 截图最多捕获一屏,接收者无法搜索、选择或复制文本
  • 复制粘贴丢失颜色,不同屏幕尺寸上文本换行错乱

解决方案: Block Sharing 创建 Web 永久链接,保留 ANSI 颜色、字体格式和文本换行(底层用 ANSI escape sequences + JSON 对象存储格式信息)。

实际用例:

  • 在 Slack #help 频道分享 cargo clippy 的 Rust lint 错误输出(56 行),同事直接通过链接查看完整输出并快速定位修复方案
  • 为新入职工程师演示步骤(例如用 grep 命令搜索代码库中的键盘快捷键映射)
  • Block 永久保存,直到用户主动取消分享

📚 课程关联: Block Sharing 体现了第一讲 原则 3(开发者人体工程学) ——解决了一个"每个开发者都经历过但习以为常"的痛点。

② Workflows(工作流)—— Ian Hodge(工程师)

定义: 可按名称或描述搜索的参数化命令集合,可以存储在仓库级别供团队共享。

Warp 内部团队共享的工作流:

  • Allowlist IP address for staging
  • Build image and start container for SSH testing
  • Bundle Warp
  • Cherrypick commit into a latest release branch(值班时最常用)
  • Create GH pull request to release a feature
  • Run unit test

关键价值: Cherrypick 命令非常长且几乎不可能记住,但在 On-call 值班期间是常用操作。Workflow 让它变成一键执行。同样,"Allowlist IP for staging" 是 Warp #help 频道中最常被问到的问题——团队创建了共享 Workflow 后问题消失了。

📚 课程关联: Workflows 直接对应第四周 Claude Code 的 Custom Slash Commands.claude/commands/)—— 都是将常用操作模板化。但 Warp 的 Workflow 通过 UI 展示参数说明和命令摘要,更直观;Claude Code 的 Commands 更灵活,支持 $ARGUMENTS 参数和 Markdown 格式的复杂 prompt。

③ Quake Mode(全局热键模式)—— Michelle Lim(增长负责人)

问题: 依赖 VS Code 但其内建终端缺少 Warp 的特色功能。

巧妙解决方案:

  1. 将 Warp 的全局热键配置为 CMD + J(与 VS Code 显示/隐藏终端的快捷键相同)
  2. Warp 的 OS 级快捷键自动覆盖 VS Code 的快捷键
  3. 将 Warp 固定在屏幕底部(宽度 100%、高度 30%),匹配 VS Code 的主题

效果: 肌肉记忆不变,但弹出的终端从 VS Code 内建终端变成了 Warp。额外好处是 Quake Mode 在 OS 级别工作,跨所有桌面可用。

📚 课程关联: 这体现了第一讲 原则 1(从已知出发)原则 3(人体工程学) —— 不要求用户改变习惯,而是"偷偷"替换底层实现。

④ AI Command Search —— Agata Cieplik(工程师)

功能: 将自然语言描述转换为 shell 命令(早期由 OpenAI Codex 驱动)。

实际用例: 调试 Warp 性能问题时,输入自然语言:

"Search for 'redraw' in this directory and extract the first and third column separated by space and then sort the output."

AI 生成命令:grep -i redraw * | cut -f 1,2 -d " " | sort

价值: 之前需要手动写 grep → 查看输出 → 调整 cut 参数 → 多次尝试。现在一次性生成完整管道命令。

📚 课程关联: AI Command Search 是第一讲 原则 4(Chat 一等公民) 的最早实现之一——从"记住 tar -czvf 语法"到"用自然语言描述意图"。也是 Mihail 课堂上专门提到的 tar -czvf 痛点的解决方案。


🔗 三篇阅读材料的交叉主题

1. AI Terminal 的两条路径

本周的核心张力是 Claude Code vs Warp 代表的两种设计哲学:

维度 Claude Code(第四周) Warp(本周)
哲学 极简主义:底层模型访问 + 无限可扩展 一体化:开发环境整合所有功能
优势 深度(单任务专注)、灵活(SDK/管道) 广度(多模型、UI、多 agent 管理)
用户画像 偏好终端、追求极致控制的开发者 偏好可视化 UI、多任务并行的开发者
配置方式 文件和 CLI 驱动 GUI + 文件混合

关键洞见: 两者不是替代关系,而是针对不同偏好和工作流的互补选择。第四周 StockApp 团队就同时使用了两者(Claude Code 在 Cursor 中运行)。

2. 从工具使用者到工具设计者

本周的独特价值在于视角转换

  • 第一周~第四周:如何使用 AI 工具
  • 第五周:如何设计 AI 工具(7 大产品原则)

这对于 Stanford CS 学生特别有价值——很多人未来会成为这些工具的设计者和构建者。

3. 第二周 MCP 概念的产品化

MCP 在课程中的演进轨迹:

第二周:MCP 是什么(协议规范)
    ↓
第三周:MCP 如何设计好工具(Anthropic 工程博客)
    ↓
第四周:MCP 如何在代码库中配置(CLAUDE.md + .mcp.json)
    ↓
第五周:MCP 作为产品差异化因素(7 大原则之一 + Warp 的 MCP 教程体系)

🔗 课程脉络: 第一周"LLM 基础" → 第二周"Agent + MCP" → 第三周"IDE + Specs" → 第四周"Agent Manager" → 第五周"产品设计 + Terminal"。课程前半程(Foundations + Tools)已经完成。下半程从第六周开始进入 "Quality"(测试与安全)→ "Delivery"(UI 构建、部署)→ "Future"。

Week 06 · AI Testing and Security

Secure vibe coding · History of vulnerability detection · Mon 10/27 / Fri 10/31

进入 Week 06 详情页

课程PPT笔记

CS146S 第六周笔记总结:AI Testing and Security

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 10/27 AI QA, SAST, DAST, and Beyond 漏洞检测技术 + AI 新攻击面 + AI 安全新能力(22 slides)
Fri 10/31 🎤 Guest: Isaac Evans (CEO, Semgrep) AI 安全工具的实际表现

第一讲:AI QA, SAST, DAST, and Beyond(10/27)

核心主题

"当 LLM 在写你大部分代码时,你需要大量的 guardrails 来防止错误。"

这是课程第一次从安全与质量保障角度审视 AI 开发。前五周讲的都是"如何用 AI 更快地写代码",这一讲讲的是**"如何确保 AI 写的代码不会出问题"**。

第一部分:既有威胁面(Existing Threat Landscape)

传统 Web 应用安全威胁——这些在 AI 时代不仅没有消失,反而因为 AI 生成代码可能引入更多这类漏洞:

  • SQL 注入(SQL Injection)
  • 跨站脚本(XSS)
  • 身份认证缺陷(Broken Authentication)
  • 不安全的直接对象引用(IDOR)
  • 安全配置错误(Security Misconfigurations)
  • 敏感数据暴露(Sensitive Data Exposure)

📚 课程关联: 这些是 OWASP Top 10 的核心内容(阅读 5),为后面讨论 AI 能否检测这些问题提供基础。

第二部分:三种漏洞检测技术

技术 类型 时机 覆盖范围
SAST 白盒(分析源代码/二进制) SDLC 早期,成本低 SQL 注入、命令注入、XSS
DAST 黑盒(模拟真实攻击者) SDLC 全程,误报更少 SQL 注入、认证缺陷、XSS
SCA 依赖分析(OSS 包深度分析) 构建/部署时 包管理器、IaC、镜像漏洞

SAST 技术细节:

  • 代码库扫描 + 模式匹配
  • 工具示例:Bandit(Python)、Semgrep(多语言)、ESLint + 扩展

DAST 技术细节:

  • 输入 fuzzing、会话令牌操作、配置/头部测试、暴力限速测试

SCA 技术细节:

  • 分析包元数据、传递性依赖解析、匹配漏洞数据库、二进制/制品扫描

三者互补: 代码 + 运行时 + 依赖 = 全面覆盖

📚 课程关联: SAST/DAST 的"Shift Left"理念(尽早发现问题)与第四周的 TDD 工作流形成呼应——都是在开发早期建立质量保障。

第三部分:AI 带来的新攻击面

① Prompt Injection(提示注入)

向 AI 系统注入隐藏或误导性指令,使其偏离预期行为。

课堂演示了从 AI agent(如 Amp Code)中提取系统 prompt 的实例。

② Tool Misuse(工具滥用)

通过欺骗性 prompt 操纵 agent 滥用其集成工具。

课堂引用了 Amp Code 的配置修改攻击案例(embracethered.com)。

③ Code Attacks(代码攻击)

利用 agent 的代码执行能力获取对执行环境的未授权访问。

④ Intent Breaking(意图破坏)

操纵 agent 的计划,将行为重定向到偏离原始意图。

⑤ Identity Spoofing(身份伪造)

利用被攻破的身份认证,伪装为合法 agent。

📚 课程关联: 这五种攻击向量直接对应阅读 4(Palo Alto Unit 42 报告)。特别值得注意的是,第四周讨论的 Claude Code Hooks 和权限系统(generative command injection detection)正是为了防御这些攻击。

第四部分:AI 带来的安全新能力

"Shift Left 安全比以往任何时候都更容易实现。"

  • LLM 可以引入工作流中发现安全问题
  • 自动化渗透测试成为可能

第五部分:局限性(关键!)

AI SAST 的假阳性率极高:

  • Claude Code / Codex 的假阳性率:50-100%(取决于漏洞类型)
  • 对比传统 SAST:也是 50%+
  • 所以 AI 并没有显著降低假阳性

非确定性分析问题:

  • 相同 prompt 运行多次 → 不同结果
  • 你怎么知道是否已捕获所有漏洞?

Context Rot(上下文腐烂):

  • 不是所有上下文都是平等的
  • 输入 token 越多,性能越不可靠

Compaction(压缩):

  • 为了适应上下文窗口而进行的摘要会导致信息丢失

📚 课程关联: Context Rot 直接对应第三周阅读 2("How Long Contexts Fail")的四种失败模式,以及本周阅读 6(Chroma 的研究报告)。这也是为什么第四周讲的 subagent(隔离上下文)和 system-reminders(持久化关键信息)如此重要。

开放问题

  1. 如何降低漏洞检测中的假阳性和幻觉?
  2. 如何验证 LLM 生成的补丁是安全的、不引入回归?
  3. LLM 能否解释为什么标记某个漏洞或提出某个修复?
  4. 衡量 LLM AppSec 表现的正确基准是什么?
  5. 如何在 CI/CD 中嵌入 LLM 而不淹没团队?
  6. 如果 AI 生成的补丁引入了漏洞,谁来负责?

第二讲:Guest Lecture——Isaac Evans(CEO, Semgrep)(10/31)

⚠️ Isaac 的演讲没有公开 Slides。以下基于阅读 3(Semgrep 博客)和搜索结果。

Isaac Evans / Semgrep 背景

  • Semgrep:领先的 SAST 工具,被 Gartner Magic Quadrant 认可
  • 核心产品:Semgrep Code(SAST)、Supply Chain(SCA)、Secrets(密钥检测)、Assistant(AI 分流和修复建议)
  • 推出 "Secure Vibe Coding" 解决方案——专门针对 AI 生成代码的安全问题

Semgrep 的 AI 安全评估(阅读 3 核心内容)

Semgrep 团队用 Claude Code 和 OpenAI Codex 扫描了 11 个大型 Python 开源 Web 应用,产生 400+ 安全发现:

指标 Claude Code (Sonnet 4) OpenAI Codex (o4-mini)
真阳性数 46 21
真阳性率 14% 18%
假阳性率 86% 82%
高严重性漏洞 ~20 ~20

按漏洞类别的表现:

类别 Claude Code TPR Codex TPR
IDOR(不安全直接对象引用) 22% (13/59) 0% (0/5)
SQL 注入 5% (2/38) 0% (0/5)
XSS 16% (12/74) 0% (0/28)
Path Traversal(路径遍历) 47% (8/17)

关键发现:

  • AI 理解上下文的能力强(尤其是 IDOR),但跨文件/跨函数的**污点追踪(taint tracking)**能力很弱
  • 非确定性是真正的困难: 同一应用、同一 prompt,三次运行分别产出 3、6、11 个发现
  • Anthropic 内建的 /security-review 命令效果一般("pretty mid")

📚 课程关联: 这些数据直接支持了第一讲 Slide 21 的观点——AI SAST 的假阳性率极高,非确定性是核心挑战。同时也呼应了 Context Rot 问题——输入 token 越多(更大的代码库),性能下降越明显。


🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Isaac/Semgrep)
视角 AI 安全的理论框架(攻击面 + 技术 + 局限性) AI 安全的实际表现(实验数据)
层次 SAST/DAST/SCA 三种技术全覆盖 深入 SAST 的 AI 增强效果
结论 "假阳性率极高" 用数据验证:86% 假阳性率

📚 第六周阅读材料速览

# 材料 核心主题
1 SAST vs DAST (Splunk) 三种安全测试方法对比 + RASP
2 Copilot RCE via Prompt Injection (CVE-2025-53773) 本周最惊人的阅读
3 Finding Vulns with Claude Code & Codex (Semgrep) AI SAST 的实际评估
4 Agentic AI Threats (Palo Alto Unit 42) Agent 五大攻击向量
5 OWASP Top Ten Web 应用十大安全风险
6 Context Rot (Chroma Research) 长上下文性能退化研究
7 O3 Finds CVE-2025-37899 LLM 发现 Linux 内核 0-day

🛠️ 第六周作业

Writing Secure AI Code — 编写安全的 AI 生成代码

阅读材料笔记

CS146S 第六周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 SAST vs DAST vs RASP (Splunk) 技术博客 安全测试方法全面对比 ✅ 完整获取
2 Copilot RCE via Prompt Injection (CVE-2025-53773) 安全研究 AI IDE 的远程代码执行漏洞 ✅ 完整获取
3 Finding Vulns with Claude Code & Codex (Semgrep) 实验报告 AI 漏洞发现的实际表现 ✅ 完整获取
4 Agentic AI Threats (Palo Alto Unit 42) 威胁报告 Agent 攻击面分类 ✅ 搜索获取
5 OWASP Top Ten 行业标准 Web 安全十大风险 📋 已知内容
6 Context Rot (Chroma Research) 技术报告 长上下文性能退化 ✅ 完整获取
7 O3 Finds CVE-2025-37899 (Sean Heelan) 漏洞研究 LLM 发现内核 0-day ✅ 搜索获取

📖 阅读 1:SAST vs DAST vs RASP (Splunk)

来源: Splunk Blog

🔗 课堂关联: 直接对应第一讲 Slides 7-9 的三种检测技术。

核心对比表

维度 SAST(静态) DAST(动态)
测试类型 白盒(有源代码访问权限) 黑盒(无需源代码)
SDLC 阶段 早期开发阶段 部署前或部署后
检测范围 SQL 注入、XSS、缓冲区溢出 服务器配置错误、DoS、运行时缺陷
修复成本 低(早期发现) 高(晚期发现)
误报 较高(深度分析导致) 较低(但可能漏检)
语言依赖 依赖编程语言和框架 与框架无关

SAST 方法

  • 模式匹配(Pattern Matching): 扫描不安全的编码模式
  • 数据流分析(Data Flow Analysis): 追踪不可信输入到敏感操作的路径(→ SQL 注入、缓冲区溢出)
  • 控制流分析(Control Flow Analysis): 分析循环和条件结构 → 竞态条件
  • 自定义规则(Custom Rules): 标记未净化的 SQL 输入、硬编码密钥等
  • 依赖扫描(Dependency Scanning): 第三方库漏洞
  • 机器学习模型: 高级工具用 ML 识别未知漏洞

RASP(运行时应用自我保护)

第三种选择: RASP 嵌入到应用运行时环境中,实时分析行为并主动阻止攻击。与 SAST(静态代码)和 DAST(模拟外部攻击)不同,RASP 在运行时操作并主动防御

最佳实践: 将 SAST + DAST + RASP 组合形成多层安全策略,并自动化集成到 CI/CD 管道中。

📚 课程关联: 这种"多层防御"思路与第四周 StockApp 的"Backstop"原则一致——不依赖单一工具,而是通过多层保障确保质量。


📖 阅读 2:Copilot Remote Code Execution via Prompt Injection (CVE-2025-53773)

来源: Embrace The Red (wunderwuzzi) CVE: CVE-2025-53773(已修复,2025.8 Patch Tuesday)

🔗 课堂关联: 这是本周最重要的阅读——展示了 AI IDE 中 prompt injection 如何导致完整系统接管。直接对应第一讲 Slides 11-18 的新攻击面。

发现:Agent 能修改自己的配置 = 远程代码执行

核心漏洞: GitHub Copilot 在工作区中可以无需用户批准地创建和写入文件。这些修改立即持久化到磁盘。

攻击链

1. Prompt injection 植入源代码文件(或网页/GitHub issue/工具调用响应)
   ↓
2. 注入指令让 Copilot 向 .vscode/settings.json 添加:
   "chat.tools.autoApprove": true
   ↓
3. GitHub Copilot 立即进入 YOLO 模式!
   (所有用户确认被禁用)
   ↓
4. 攻击者运行终端命令(甚至可以根据操作系统条件执行不同命令)
   ↓
5. 远程代码执行达成

关键细节

  • 适用于 Windows、macOS 和 Linux
  • Prompt injection 可以使用不可见指令(invisible text)——用户完全看不到
  • 可以将开发者机器加入僵尸网络(ZombAI)
  • 可以创建 AI 病毒:感染文件 → 开发者下载交互 → 传播到其他 Git 项目
  • 还可以修改 .vscode/tasks.json、添加恶意 MCP 服务器、覆盖其他 agent 配置文件

更深层的威胁

"多个 agent 使用时,还有覆盖其他 agent 配置文件(allow-list bash 命令、添加 MCP 服务器……)的威胁,因为它们通常也在项目文件夹中。"

📚 课程关联:

  • 直接解释了为什么第四周 Claude Code 使用 generative command injection detection(不是硬编码规则,而是用专门的 sub-prompt 分析命令是否包含注入)
  • 解释了为什么 Claude Code 的权限系统(PreToolUse hooks)如此重要
  • 也解释了第四周 Boris 强调的 "Works Everywhere" 设计中 "infinitely hackable" 为何需要配合严格的权限控制

📖 阅读 3:Finding Vulnerabilities with Claude Code and OpenAI Codex (Semgrep)

来源: Semgrep Blog(2025.9) 作者: Romain Gaucher, Vasilii Ermilov, Clint Gibler

🔗 课堂关联: 为第一讲的"局限性"(Slide 21)提供了详细的实验数据支撑。

实验设计

  • 工具: Claude Code(v1.0.32, Sonnet 4)和 OpenAI Codex(v0.2.0, o4-mini)
  • 目标: 11 个大型开源 Python Web 应用
  • 产出: 400+ 安全发现,由安全研究团队人工审核

核心发现

① AI 能找到真正的漏洞

Claude Code 发现 46 个真正的漏洞,包含约 20 个高严重性漏洞。AI 特别擅长 IDOR(不安全的直接对象引用),因为这类漏洞需要理解业务逻辑和上下文,而非纯粹的数据流追踪。

② 但噪音很大

86% 假阳性率意味着每 7 个报告中只有 1 个是真的。在传统注入类漏洞(SQL 注入、XSS、SSRF)上表现尤差。

③ 核心弱点:跨文件污点追踪

AI 擅长理解上下文,但在追踪"用户输入从 source 流向 sink 经过多个文件和函数"时表现很差。这恰恰是传统 SAST 工具(如 Semgrep)通过确定性数据流分析擅长的领域。

④ 非确定性是真正的困难

同一代码库、同一 prompt,三次运行的结果完全不同——这使得"我是否已发现所有漏洞?"这个问题无法回答。

Semgrep 的结论

AI + 传统 SAST 的组合 > 任何单一方法

Semgrep 的方向是将 AI(上下文理解 + 分流 + 修复建议)与确定性分析(规则匹配 + 数据流追踪)结合。

📚 课程关联: 这与课程一直强调的"多层保障"一致。第四周讲的 Tests + CI/CD backstop、第三周的 specs-driven development,都是不同层级的确定性保障,用来弥补 AI 的非确定性。


📖 阅读 4:Agentic AI Threats (Palo Alto Unit 42)

来源: Unit 42(2025.5)

🔗 课堂关联: 直接对应第一讲 Slides 11-18 的五种攻击向量分类。

Agent 五大攻击向量

攻击类型 描述 影响
Prompt Injection 隐藏或误导性指令使 AI 偏离预期行为 完全控制 agent 行为
Tool Misuse 通过欺骗性 prompt 滥用集成工具 工具被用于非预期目的
Intent Breaking 篡改 agent 的规划/推理过程 Agent 行为偏离原始目标
Identity Spoofing 利用被攻破的认证伪装为合法 agent 以假身份访问工具/数据
Code Attacks 利用代码执行能力获取未授权访问 执行环境完全失控

实际攻击案例

Code Interpreter 滥用: 攻击者通过 stock agent 的 code interpreter 工具访问 GCP 元数据服务(metadata service),窃取 VM 的 service account access token → 冒充 agent → 升级到攻击云基础设施。

关键缓解措施:

  • 强制沙箱隔离 + 网络限制 + 最小权限容器配置
  • 使用 DLP 解决方案 + 审计日志 + 密钥管理
  • 没有单一缓解措施是充分的 → 需要纵深防御

AI 加速的攻击速度

  • 2021 年数据泄露平均时间(MTTE):9 天
  • 2024 年 MTTE:2 天(20% 案例不到 1 小时)
  • Unit 42 模拟 AI 驱动的勒索攻击:25 分钟(100 倍加速)

📚 课程关联: 这些数据说明了为什么第四周 Claude Code 的权限系统(PreToolUse hooks、generative injection detection)不是"锦上添花"而是核心安全架构


📖 阅读 5:OWASP Top Ten

来源: OWASP

十大 Web 应用安全风险(2021 版):

  1. A01: Broken Access Control — 访问控制失效
  2. A02: Cryptographic Failures — 加密失败
  3. A03: Injection — 注入(SQL/XSS/命令注入)
  4. A04: Insecure Design — 不安全的设计
  5. A05: Security Misconfiguration — 安全配置错误
  6. A06: Vulnerable Components — 有漏洞的组件
  7. A07: Authentication Failures — 认证失败
  8. A08: Software Integrity Failures — 软件完整性失败
  9. A09: Logging & Monitoring Failures — 日志和监控不足
  10. A10: SSRF — 服务端请求伪造

📚 课堂关联: OWASP Top 10 是第一讲 Slide 5 "Existing Threat Landscape" 和 Semgrep 评估实验的基准分类体系。


📖 阅读 6:Context Rot (Chroma Research)

来源: Chroma Research(2025.7) 作者: Kelly Hong, Anton Troynikov, Jeff Huber (Chroma)

🔗 课堂关联: 直接对应第一讲 Slide 21 的"Context Rot"局限性讨论,也是第三周"How Long Contexts Fail"的延续和深化。

核心发现

模型不会均匀使用其上下文。输入长度增加时,性能变得越来越不可靠。

测试了 18 个 LLM(包括 GPT-4.1、Claude 4、Gemini 2.5、Qwen3),即使在简单任务上,性能也随输入长度显著退化。

实验设计

在经典 Needle-in-a-Haystack(NIAH)基础上扩展了四个受控实验:

① Needle-Question 相似度

  • 当 needle 和 question 的语义相似度降低时,性能随输入长度退化更快
  • 短输入时模型对所有相似度级别都表现良好 → 退化不是因为任务难度,而是因为输入长度

② 干扰项的影响

  • 干扰项对性能的非均匀影响随输入长度增长而放大
  • 不同模型家族对干扰项的反应模式不同

③ Needle-Haystack 相似度

  • Haystack 内容本身对性能有影响(之前被认为无关)

④ Haystack 结构

  • 打乱 haystack 中文本的逻辑顺序会影响模型性能
  • 说明模型对上下文的结构/流畅性有依赖

关键洞见

"现实应用通常涉及更大的复杂性,意味着输入长度的影响在实践中可能更加显著。"

NIAH 基准测试已经"基本解决"的说法是误导性的——它只测试了简单的词汇检索(lexical retrieval),而真实任务需要语义理解、消歧和跨上下文推理。

📚 课程关联:

  • 第三周"How Long Contexts Fail"提出了 4 种失败模式(Poisoning/Distraction/Confusion/Clash)
  • Context Rot 从实验角度验证了这些理论——性能退化是真实的、可量化的、跨模型的
  • 这直接解释了为什么第四周 Claude Code 使用 /clear(清空上下文)、subagent(隔离上下文)、system-reminders(在关键位置重新注入指令)等技术

📖 阅读 7:O3 Finds CVE-2025-37899 (Sean Heelan)

来源: Sean Heelan's Blog(2025.5)+ GitHub Repo

🔗 课堂关联: 展示了 AI 漏洞发现能力的最佳案例——LLM 首次公开发现 Linux 内核 0-day。

背景

Sean Heelan 在审计 Linux ksmbd(内核态 SMB3 协议实现)时,用 o3 API 作为基准测试工具。结果 o3 发现了一个他自己没发现的 0-day 漏洞

CVE-2025-37899 详情

类型: Use-after-free 位置: SMB2 LOGOFF 命令处理器 根因: 并发连接共享同一 session 时,一个线程释放 sess->user,另一个线程仍在访问它

关键: 理解这个漏洞需要推理并发连接如何共享对象——o3 成功做到了这一点。

实验数据

设置 代码量 100 次运行中发现次数
单个处理器代码 ~1k LoC 8/100 (CVE-2025-37778)
所有处理器代码 12k LoC (100k tokens) 1/100 (CVE-2025-37778)
所有处理器代码 ~12k LoC 发现 0-day CVE-2025-37899

模型对比: o3 在 100 次中发现 8 次 vs Claude Sonnet 3.7 发现 3 次 vs Claude 3.5 发现 0 次

成本: 100 次运行(~100k token 版本)约 $116

假阳性: 约 28/100 次报告了不存在的漏洞(但 TP:FP ≈ 1:4.5,可接受)

关键洞见

"随着 o3 的出现,LLM 在代码推理能力上实现了质的飞跃。如果你从事漏洞研究,应该开始密切关注。"

同时也揭示了"双刃剑"效应:如果防御者能用 AI 发现漏洞,攻击者也能。

📚 课程关联: 这与第一讲的"What has changed — Good"(AI 增强 SAST/DAST)和"What has changed — Bad"(新攻击面)形成完美呼应——同一个技术既是防御工具也是攻击工具。


🔗 七篇阅读材料的交叉主题

主题 1:AI 安全的"双刃剑"

防御面 攻击面
o3 发现 Linux 内核 0-day(阅读 7) Copilot RCE 通过 prompt injection(阅读 2)
Semgrep 发现 46 个真漏洞(阅读 3) Unit 42 模拟 25 分钟勒索攻击(阅读 4)
AI 增强 SAST 的 IDOR 检测(阅读 3) AI 生成高度个性化钓鱼邮件(阅读 4)

主题 2:确定性 vs 非确定性

确定性保障 非确定性能力
SAST 规则匹配(Semgrep) AI 理解业务上下文发现 IDOR
类型系统 + 编译器检查 AI 推理并发条件发现 UAF
CI/CD 自动化测试 AI 生成修复补丁

最佳策略: 两者结合——用确定性方法覆盖已知模式,用 AI 发现需要推理的新漏洞。

主题 3:Context 持续是核心挑战

第三周:How Long Contexts Fail(4 种失败模式)
    ↓
第四周:Claude Code 的 system-reminders + subagents(工程解决方案)
    ↓
第六周:Context Rot(实验验证) + 非确定性 SAST(安全后果)

🔗 课程脉络: 第一周 LLM 基础 → 第二周 Agent + MCP → 第三周 IDE + Specs → 第四周 Agent Manager → 第五周 产品设计 + Terminal → 第六周 安全与测试。课程从"如何用 AI 开发"转向"如何确保 AI 开发的质量与安全"——从 Building 阶段进入 Quality Assurance 阶段。

Week 07 · Modern Software Support

What AI code systems can we trust · Debugging and diagnostics · Mon 11/3 / Fri 11/7

进入 Week 07 详情页

课程PPT笔记

CS146S 第七周笔记总结:Modern Software Support

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 11/3 AI Code Review 代码审查的价值 + AI 如何改变审查 + 局限性(25 slides)
Fri 11/7 🎤 Guest: Tomas Reimers (CPO, Graphite) AI 代码审查工具的实践

第一讲:AI Code Review(11/3)

核心定位

"软件代码审查是你能做的最高杠杆活动之一,既能让自己成为更好的工程师,又能提升团队整体代码质量。"

这一讲从传统代码审查的价值出发,过渡到 AI 如何增强这一流程,最后讨论 AI 审查的局限性。

第一部分:为什么代码审查如此重要

统计数据(来源:Coding Horror / Code Complete):

  • 代码审查的错误检测率:55-60%
  • 对比:单元测试 25%、功能测试 35%、集成测试 45%
  • 引入审查前后:程序错误率从 4.5/100 行 降至 0.82/100 行(减少 80%+)
  • AT&T 研究:引入审查后生产力提升 14%,缺陷减少 90%

📚 课程关联: 这些数据与第六周的 SAST/DAST 形成互补——SAST 检测代码模式漏洞,而代码审查检测逻辑和设计问题。两者组合是多层质量保障的核心。

第二部分:代码审查应该捕获什么

五大审查维度:

维度 示例
逻辑和正确性 业务逻辑错误、边界条件
可读性和可维护性 命名、结构清晰度
性能 不必要的循环、内存使用
安全 用户输入处理、认证、文件操作
最佳实践 代码库惯用法、数据库访问模式

第三部分:什么是好的代码审查

反面:

"This won't work"

正面:

"I see your new method matches the existing style in this file, taking [X] parameters. Having that many parameters hurts readability and implies the function is doing too much. What do you think about refactoring this method and the existing ones in a later pull request to reduce how many parameters they take?"

好的审查标准:

  • 提供具体细节
  • 引用具体代码或问题
  • 建议解决方案
  • 引用证据或解释

代码审查的五大价值(来源:Blake Smith):

  1. 帮助团队成员随系统变化更新心智模型
  2. 确保变更正确解决问题
  3. 开启设计优劣的讨论
  4. 在 Bug 到达生产环境前捕获
  5. 保持代码风格和组织的一致性

第四部分:AI 代码审查工具

当前工具生态:

  • Graphite(本周客座嘉宾)— AI 驱动的 PR 审查平台
  • Greptile — AI 代码审查
  • CodeRabbit — AI PR 审查
  • Claude Code / Codex — 通用 AI 编程助手

第五部分:AI 改变了什么

改变 详细说明
效率 自动化减少审查时间,更早捕获问题
一致性 AI 在所有审查中应用相同标准
知识共享 开发者通过 AI 建议学习最佳实践
降低认知负荷 AI 处理常规检查,人类专注复杂逻辑
持续改进 AI 系统随数据积累而改进
整体理解 现代 AI 工具提供上下文分析和模式识别

第六部分:局限性(关键!)

"代码审查在 AI 编码时代比以往任何时候都更重要。你拥有被合并和发布的代码,不能怪 AI。"

局限性 说明
更多配置/设置 需要明确告诉 AI 不要审查什么
假阳性 必须训练系统 → 持续学习
无法捕获惯用法 还不能理解代码库特有的最佳实践
无法处理复杂业务逻辑 架构决策仍需要人类
安全变更需格外谨慎 用户输入、认证、文件操作、网络请求
经常遗漏边界情况 边界条件检测不可靠

📚 课程关联:

  • "假阳性"问题直接延续第六周的核心发现(Semgrep 实验 86% 假阳性率)
  • "安全变更需格外谨慎"呼应第六周 Copilot RCE 漏洞——AI 审查工具本身也可能忽略安全问题
  • "你拥有被合并的代码"与第四周 Claude Code 的 Human-in-the-Loop 设计一致——AI 是助手,不是决策者

第二讲:Guest Lecture——Tomas Reimers(CPO, Graphite)(11/7)

Graphite 背景

  • 定位: AI 代码审查平台,专注于 GitHub PR 工作流增强
  • 核心产品: Graphite Agent(AI 审查器)、Stacked PRs(分层 PR)、Merge Queue
  • 重要动态: Graphite 正在加入 Cursor,共同重塑软件开发的未来
  • AI 审查引擎内部称为 Diamond

Graphite Agent 核心能力

  • 上下文感知审查: 理解整个代码仓库的上下文,而非孤立分析代码变更
  • RAG 机制: 利用过去的 PR 历史进行检索增强生成,学习项目编码模式
  • 即时反馈: 每个 PR 自动获得 AI 审查,无需等待人类审查者
  • 自定义规则: 团队可用自然语言定义编码标准,AI 自动执行

Graphite 的质量评估体系

基于用户真实行为的三个核心指标:

指标 含义
Acceptance Rate 开发者看到评论后提交了建议的修改 → 反馈准确且有价值
Upvote Rate 开发者明确标记评论为有价值(即使未立即实施)
Downvote Rate 开发者标记评论为低质量 → 识别问题反馈模式

Stacked PRs 理念

将大型变更拆分为更小、有序的 PR 序列 → 加速审查、保持团队流动。这与 Blake Smith 的"手术刀开发"(scalpel-driven development)理念一致——"宁愿用手术刀做许多小而精确的切口,也不要用砍刀一刀切"。

AI 代码审查工具准确率

Graphite 指南提到:AI 代码审查工具在常见问题(语法错误、风格违规、基本安全漏洞)上准确率为 70-90%,但准确率因问题复杂性和具体工具而异。

📚 课程关联:

  • Graphite 加入 Cursor = 第三周(AI IDE)+ 第七周(AI Code Review)的融合——审查能力直接嵌入 IDE
  • Stacked PRs 与第四周 Claude Code 的 subagent(隔离任务)思路一致——小的、可管理的变更单元
  • Acceptance/Upvote/Downvote 指标体系是第六周"如何评估 AI 安全工具"问题的回答

🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Tomas/Graphite)
视角 代码审查的原则和价值 代码审查的工具和实践
层次 五大审查维度 + 好审查标准 AI 审查的具体实现(RAG + 自定义规则)
局限性 假阳性、无法捕获惯用法 用 acceptance/downvote 指标持续改进
核心观点 "代码审查比以往更重要" "AI 增强审查,不替代人类判断"

📚 第七周阅读材料速览

# 材料 核心主题
1 Code Reviews: Just Do It (Coding Horror) 代码审查的量化价值
2 How to Review Code Effectively (GitHub Staff Engineer) 7000+ PR 审查经验总结
3 AI-Assisted Assessment of Coding Practices (Google, arXiv) AutoCommenter 系统
4 AI Code Review Implementation Best Practices (Graphite) AI 审查工具实施指南
5 Code Review Essentials for Software Teams (Blake Smith) 心智模型对齐 + 手术刀开发
6 Lessons from millions of AI code reviews (Graphite YouTube) Graphite 大规模 AI 审查实践

🛠️ 第七周作业

Code Review Reps — 代码审查练习

阅读材料笔记

CS146S 第七周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 Code Reviews: Just Do It (Coding Horror) 经典博客 代码审查的量化价值 ✅ 完整获取
2 How to Review Code Effectively (GitHub) 工程实践 Staff Engineer 的审查哲学 ✅ 搜索获取
3 AI-Assisted Assessment (Google, arXiv) 学术论文 AutoCommenter 工业级部署 ✅ 搜索获取
4 AI Code Review Best Practices (Graphite) 技术指南 AI 审查工具实施方法 ✅ 搜索获取
5 Code Review Essentials (Blake Smith) 工程博客 心智模型对齐 + PR 策略 ✅ 搜索获取
6 Lessons from millions of AI code reviews (YouTube) 视频 Graphite 大规模实践 📺 视频资源

📖 阅读 1:Code Reviews: Just Do It (Jeff Atwood / Coding Horror, 2006)

来源: Coding Horror

🔗 课堂关联: 第一讲 Slide 6 直接引用了此文的统计数据。

核心论点

"Peer code reviews are the single biggest thing you can do to improve your code."

Jeff Atwood 引用 McConnell 的《Code Complete》数据:

  • 软件测试本身效果有限——单元测试平均检测率仅 25%,功能测试 35%,集成测试 45%
  • 设计和代码审查的平均有效率:55-60%

关键案例

案例 结果
维护组织引入审查 单行修改错误率从 55% → 2%
11 个程序对照 无审查 4.5 errors/100 lines → 有审查 0.82 errors/100 lines
Aetna 保险 通过审查发现 82% 错误,开发资源减少 20%
IBM Orbit 项目(50万行) 11 级审查,提前交付,错误仅为预期的约 1%
AT&T 200+ 人组织 生产力提升 14%,缺陷减少 90%
JPL(喷气推进实验室) 每次审查节省约 $25,000

📚 课程关联: 这篇 2006 年的文章今天读来依然重要——因为 AI 时代代码审查不是要被取代,而是要被增强。第一讲 Slide 24 的核心观点"代码审查比以往更重要"正是建立在这些数据基础上。


📖 阅读 2:How to Review Code Effectively (Sarah Vessels, GitHub Staff Engineer)

来源: GitHub Blog(2024)

作者背景

Sarah Vessels,GitHub Staff Engineer,8 年审查了 7,000+ PR

核心哲学

"当同事有 PR 等待审查时,我更愿意放下自己正在做的分支去审查他们的代码——毕竟他们的 PR 已经通过了 CI,比我进行中的工作更接近可发布状态。"

关键实践

① 自我审查优先(Self-Review)

  • 在请别人审查前,先自己审查一遍
  • 在非明显的变更上内联留言
  • 自我审查也能帮助判断 PR 是否太大、需要拆分

② PR 作为对话的开始

  • 一个 PR 是作者说:"我认为这改善了我们现有的东西"
  • 审查者的工作:通过提问、质疑假设、作为第二双眼睛来改进代码

③ 即使已合并也欢迎审查

  • 如果 PR 在别人审查前就合并了,仍然欢迎审查
  • 如果出了问题,PR 上的评论留下了面包屑式的调查线索

📚 课程关联: "自我审查"在 AI 时代尤为关键——当 AI 生成代码时,开发者的第一道防线就是自己的审查能力。这与第一讲 Slide 24 "你拥有合并和发布的代码"形成完美呼应。


📖 阅读 3:AI-Assisted Assessment of Coding Practices in Modern Code Review (Google)

来源: arXiv 2405.13565(2024, AIware '24 会议) 作者: Manushree Vijayvergiya 等 13 人(Google)

AutoCommenter 系统

Google 开发的 LLM 驱动的自动代码审查系统,自动学习和执行编码最佳实践。

覆盖语言: C++、Java、Python、Go

核心问题

代码审查中,一些最佳实践可以自动验证(如格式规则),但另一些需要人类判断:

  • 可自动化: 格式规则、lint 规则
  • 部分可自动化: 命名约定(有例外情况,如遗留代码中的合理偏离)
  • 无法用精确规则捕获: 代码注释的清晰度和具体性 → 依赖人类判断和集体知识

AutoCommenter 的定位

端到端的"学习并执行编码最佳实践"系统是可行的,并对开发者工作流产生积极影响

在 Google 的大规模工业环境中评估后证实可行性。

📚 课程关联:

  • 验证了第一讲 Slide 20 的六大改变(效率、一致性、知识共享等)在工业级规模下成立
  • AutoCommenter 处理"可自动化"和"部分可自动化"的规则,而复杂业务逻辑和架构决策仍留给人类——与 Slide 24 的局限性完全一致
  • Google 的规模(数千工程师、数百万行代码)为 AI 代码审查的可扩展性提供了有力证据

📖 阅读 4:AI Code Review Implementation Best Practices (Graphite)

来源: Graphite

AI 代码审查的六大收益

  1. 效率 — 自动化减少审查时间
  2. 一致性 — 所有审查统一标准
  3. 知识共享 — 通过 AI 建议学习
  4. 降低认知负荷 — AI 处理常规检查
  5. 持续改进 — 系统随时间改进
  6. 全面理解 — 上下文分析和模式识别

这六大收益与第一讲 Slide 20 完全对应——Mihail 直接将 Graphite 的框架用作教学内容。

工具选型考量

工具 特点
Graphite Agent 即时反馈 + 上下文代码分析 + PR 自动化
GitHub Copilot 编码时实时建议
SonarQube + AI 传统静态分析 + AI
DeepCode 专注安全漏洞

实施最佳实践

① 持续改进循环

  • 追踪哪些 AI 建议被接受 vs 被拒绝
  • 定期审查假阳性和假阴性
  • 根据发现更新审查配置
  • 跨团队共享洞见

② 安全优先

  • 验证 AI 建议不引入新漏洞
  • 对处理以下内容的 AI 生成代码格外谨慎:用户输入、认证、文件操作、网络请求

③ 准确率

  • 常见问题(语法、风格、基本安全):70-90%
  • 复杂问题:准确率显著下降

📚 课程关联: "安全优先"原则直接连接第六周——CVE-2025-53773(Copilot RCE)就是 AI 引入安全漏洞的真实案例。70-90% 准确率与第六周 Semgrep 评估的 14-18% 真阳性率形成有趣对比——代码审查(格式/风格/简单逻辑)比安全漏洞发现(跨文件污点追踪)容易得多。


📖 阅读 5:Code Review Essentials for Software Teams (Blake Smith, 2015)

来源: Blake Smith

🔗 课堂关联: 第一讲 Slide 17 直接引用了此文。

核心观点:心智模型对齐

"代码审查最重要的功能是保持团队的集体心智模型良好对齐。"

当 Bob 提交会计子系统的 PR 时,Amy 在审查过程中更新了她对该系统的心智模型。一个月后 Amy 需要修改这个子系统时,她的心智模型已经是最新的——花更少时间阅读代码,更多时间思考高层抽象和设计。

代码审查的层级价值

  1. 方向对齐 — 保持每个团队成员朝正确方向前进(最重要)
  2. 正确性验证 — 确保变更正确解决问题
  3. 设计讨论 — 开启优劣势讨论
  4. Bug 预防 — 在到达生产环境前捕获
  5. 风格一致 — 保持代码风格和组织一致

手术刀开发法(Scalpel-Driven Development)

"宁愿用手术刀做许多小而精确的切口,也不要用砍刀一刀切。砍刀留给删除大块死代码的时候。"

实操建议:

  • 提交前问自己:"这是正确的工作优先级吗?"和"团队已经同意这个变更方向了吗?"
  • 考虑如何将工作拆分为小块并测试每一块
  • 写好组织良好的 PR 描述——不要让队友做多余的心智劳动

好 vs 差的 PR 描述

差:

Title: Fix uninitialized memory bug Description: This is the bug Bob and I talked about earlier. I had trouble with the compiler but managed to make this work.

好: 解释为什么做了这些变更、如何做的、以及审查者需要知道的任何仅从代码本身看不出来的信息。

📚 课程关联:

  • "手术刀开发"与 Graphite 的 Stacked PRs 理念完美对齐——小的、有序的变更序列
  • "心智模型对齐"与第四周 CLAUDE.md/AGENTS.md 的理念相通——都是为了让协作者(无论是人还是 AI)理解项目上下文

📖 阅读 6:Lessons from Millions of AI Code Reviews (Graphite YouTube)

来源: YouTube(视频资源)

🔗 课堂关联: 第一讲 Slide 22 直接引用了此视频。

基于 Graphite 从百万级 AI 代码审查中获得的经验教训,在课堂上进行了现场演示(Slide 23: "Let's See AI Code Review in Action")。


🔗 六篇阅读材料的交叉主题

主题 1:代码审查是团队能力,不仅仅是质量检查

Coding Horror (2006): "Peer code review is the single biggest thing"
    ↓
Blake Smith (2015): "最重要的是心智模型对齐"
    ↓
Sarah Vessels (2024): "PR 是对话的开始"
    ↓
Mihail (2025): "代码审查比以往任何时候都更重要"

从 2006 到 2025,核心观点一脉相承:代码审查的价值不仅在于捕获 bug,更在于团队学习、知识传递和心智模型同步。AI 时代放大了这一点——当 AI 生成大量代码时,人类审查者的理解和判断能力比以往更关键。

主题 2:AI 审查的"甜蜜区"

擅长(70-90% 准确率) 不擅长
语法错误 代码库特有惯用法
风格违规 复杂业务逻辑
基本安全漏洞 架构决策
一致性检查 边界情况
常见模式匹配 跨文件深层安全问题

结论: AI 处理"常规检查"(routine checks),人类专注"复杂判断"(complex logic)——分工而非替代

主题 3:从个人实践到工业规模

Blake Smith: 团队级最佳实践(手术刀开发、好的 PR 描述)
    ↓
Sarah Vessels: 个人级哲学(7000+ PR、自我审查优先)
    ↓
Google AutoCommenter: 公司级自动化(C++/Java/Python/Go, 数千工程师)
    ↓
Graphite: 产品级 AI 审查(百万级 PR、RAG + 自定义规则)

🔗 课程脉络: 第一周 LLM 基础 → 第二周 Agent + MCP → 第三周 IDE + Specs → 第四周 Agent Manager → 第五周 产品设计 + Terminal → 第六周 安全与测试 → 第七周 代码审查

课程从"构建"(W1-5)→ "防护"(W6)→ "审查"(W7)的三段式进程。第七周是质量保障链的最后一环——在代码合并前的最后一道人类防线。

关键连接:

  • 第三周 Cursor 的 AI IDE → 第七周 Graphite 加入 Cursor = AI 编写 + AI 审查的闭环
  • 第四周 CLAUDE.md 定义项目规则 → 第七周 Graphite 自定义规则 = 同一理念的不同实现
  • 第六周 SAST 检测安全漏洞 → 第七周 AI 审查检测逻辑/设计问题 = 多层质量保障体系

Week 08 · Automated UI and App Building

Design and frontend for everyone · Rapid UI/UX prototyping and iteration · Mon 11/10 / Fri 11/14

进入 Week 08 详情页

课程PPT笔记

CS146S 第八周笔记总结:Automated UI and App Building

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 11/10 End-to-End Apps with a Single Prompt Web 开发演化 → Vibe Coding → App Builder 架构 → 局限性(17 slides)
Fri 11/14 🎤 Guest: Gaspar Garcia (Head of AI Research & Tech Lead v0, Vercel) v0 引擎内部 → Agent 架构 → Stream Manipulation → 微调(29 slides)

本周特点: 没有阅读材料,重点是实操演示和工具体验。


第一讲:End-to-End Apps with a Single Prompt(11/10)

开场定位

Slide 3: "This is not the 'vibe coding' class — Because I'm a software development purist" Slide 4: "…except today"

Mihail 一直强调专业软件开发,但今天是例外——因为 AI app builder 已经成为不可忽视的现实。

第一部分:Web 开发的演化史

为什么这个话题重要? 现代 SaaS 开发以 Web 应用为中心已经超过 20 年(Salesforce 1999 年常被视为第一个 SaaS 平台)。

传统技术栈演化:

技术栈 组成 描述
LAMP Linux + Apache + MySQL + PHP 经典开源 Web 栈,用于动态网站
MERN MongoDB + Express.js + React + Node.js 全 JavaScript 栈,用于现代 SPA
MEVN MongoDB + Express.js + Vue.js + Node.js 类似 MERN,用 Vue 替代 React
JAM JavaScript + APIs + Markup 静态站点 + 现代 Web 应用(Gatsby, Next.js, Nuxt.js + Headless CMS)
Serverless React/Vue/Svelte + Lambda/Cloud Functions + DynamoDB/Firebase 云原生、按需运行、无需管理服务器

传统三层架构: client-side → server-side → database(Slide 7, MERN 为例)

第二部分:第一次尝试——Visual Low-code/No-code

  • Wix — 拖拽式网站构建
  • Squarespace — 设计师友好的模板
  • Webflow — 可视化 Web 开发

这些是"Take #1",降低了门槛但仍有显著局限。

第三部分:The New AI World

Slide 11: 新一代 AI 工具

工具 定位
Lovable 全栈 AI app builder
Replit 云端 AI 开发环境
Vercel v0 AI 前端/全栈 builder
Base44 一体化 AI app builder
Cursor/Claude Code/etc AI IDE / Agent

第四部分:What Has Changed

Slide 12 三大变革:

  1. Prompt your way to a fully fledged app — 用自然语言直接生成完整应用
  2. Engineers are becoming more cross-functional — 工程师开始跨越设计和产品管理的边界
  3. Anyone can build an app now — 比第一代 no-code 平台(Webflow, Wix, Squarespace)更用户友好

第五部分:现场演示——Let's Make An App Right Now

Slide 13: Bolt 演示——"Make salsa partner finder"

演示流程:

  1. 用 Bolt 生成一个带前端和后端的 salsa 舞伴查找应用
  2. 初始生成后进行迭代修改:
    • 更新色彩方案(#EF8354, #660000, #EFCA08)
    • 图标
    • 字体排版

第六部分:App Builder 架构

Slide 14: WebContainer

核心架构:WebContainer 运行任意生成的代码。

WebContainer 是什么? 由 StackBlitz 开发的浏览器内 Node.js 运行时——不需要任何本地安装,代码在浏览器沙箱中运行。

第七部分:App Builder System Prompt

Slide 15: Bolt 的系统提示词

关键设计原则:

  • 明确要求只使用成熟、知名的技术/框架 — 避免幻觉出不存在的库
  • 使用 boltartifact / boltaction 标签来指定 WebContainer 中的操作(文件创建、文件运行等)
  • 参考链接:Bolt Agent System Prompt(GitHub Gist + PromptHub)

📚 课程关联: 这与第四周的 CLAUDE.md 和第二周的 System Prompt 设计完全一致——通过精心设计的系统提示来控制 AI 行为。App Builder 的 system prompt 本质上就是一个高度专用化的 agent 指令。

第八部分:Limitations(关键!)

Slide 16: 五大局限性

局限性 详细说明
一切正常时很棒,但一旦出错我们就回到原点 AI 生成的代码出 bug 时,调试难度不减
Prompts are just suggestions 不是每个用户都理解——prompt 只是建议,不是精确命令
安全一直是个问题 直接引用了 Lovable 漏洞(CVE-2025-48757)
如何防止所有这些应用看起来都一样? 同质化设计问题
这些应用现实中能做到多复杂? 复杂度天花板问题

📚 课程关联:

  • "一旦出错回到原点" 呼应第三周 Cursor 的 "Sync Agent" 局限——AI 无法替代工程师的调试能力
  • "安全问题" 直接连接第六周——Lovable 的 CVE-2025-48757(RLS 配置错误导致 170+ 应用数据泄露)是 AI 安全双刃剑的又一案例
  • "Prompts are just suggestions" 呼应第一周 Prompt Engineering 的核心教训

第二讲:Guest Lecture——Gaspar Garcia(Head of AI Research, Vercel)(11/14)

嘉宾背景

Gaspar Garcia:

  • Head of AI Research, Vercel
  • Tech Lead, v0
  • 职责:Data Pipelines, Training + Finetuning, Agent Development, Web Infrastructure
  • Stanford Class 2016(BS Computer Science Theory, MS Computer Science AI)

第一部分:v0 的定位

Slide 4: "Free for students → https://v0.app/students" Slide 6: "Most likely its not"(暗示你的第一个想法大概率不对) Slide 7: "Fail fast, fail often — Accelerate the learning moments of product development"

v0 的核心价值不是"一次做对",而是加速试错循环——快速失败、快速学习。

第二部分:From Idea to Production in Minutes

Slide 8: 四步流程

Natural Language Input → AI Processing → Live Preview → One-Click Deploy
描述 UI 愿景         → 模型生成代码    → 即时预览     → 一键部署

第三部分:The Developer Landscape is Shifting

Slide 10-11:

v0 的快速采用反映了前端开发方式的根本性变化——不仅是速度,更是技术能力的民主化。

打破团队壁垒(Breaking Down Silos)——四种角色都能使用:

角色 v0 的价值
Product Managers 快速验证概念,无需等待工程周期。把 PRD 变成交互原型
Designers 桥接设计工具和生产代码。即时看到设计实现,完整响应式
Engineers 专注复杂逻辑,让 AI 处理样板代码。加速功能交付
Founders 无需大型工程团队即可构建和发布 MVP

📚 课程关联: 这与第五周 Warp 的理念完全一致——Zach Lloyd 说"Terminal 不应该只给 10x engineer",Gaspar 说"App building 不应该只给工程师"。工具民主化是 W5-W8 的共同主题。

第四部分:Inside v0's Engine(核心技术内容!)

Slide 13: v0 引擎的五步流程

步骤 名称 详细说明
1 Intent Understanding NLP 从对话输入中提取结构化需求——识别组件、布局、交互、数据流
2 Context Assembly 收集相关信息:设计系统 token、现有组件、API schema、可访问性要求
3 Code Generation LLM 生成生产级 React 组件——含 TypeScript 类型、响应式设计、最佳实践
4 Validation & Testing 自动检查:可访问性合规、响应式行为、代码质量
5 Human-in-the-Loop 工程师审查、改进、提供反馈来训练模型

📚 课程关联:

  • 步骤 2 "Context Assembly" = 第四周的 Context Engineering
  • 步骤 5 "Human-in-the-Loop" = 第四周 Claude Code 的 permission system + 第七周 code review
  • 整个流程 = 第二周 Agent 架构(感知 → 推理 → 行动)的具体实现

第五部分:Agents are Workflows

Slide 14: "Agents are Workflows" Slide 16: "But they're still probabilistic systems" Slide 17: "Give them Frameworks"

关键洞见:

  • Agent 本质上是工作流——不是魔法,而是精心设计的步骤序列
  • 但它们仍然是概率系统——输出不确定
  • 解决方案:给它们框架来约束行为

引用了 Vercel AI SDK:https://ai-sdk.dev/docs/agents/overview

📚 课程关联: "Agents are Workflows" 是第二周内容的精炼总结。"But they're still probabilistic systems" 是第六周非确定性 SAST 问题在更广泛层面的表述。

第六部分:Corrections and Fine-Tuning(深度技术!)

Slide 20: Key Limitations

两个核心限制:

  1. 模型知识很快过时 — 对于变化快的话题(如 Next.js 16 的最新 API)
  2. 前沿模型实验室不会为你定制流水线 — OpenAI/Anthropic 不会专门为 "生成正确的 Next.js 16 代码" 创建训练管道

Stream Manipulation(Slide 21-23)

"Sometimes, just adjusting the prompt isn't enough."

解决方案:Stream Manipulation

Vercel 创建了一个子系统,可以在 LLM 输出流到达用户之前监听和捕获它。

这意味着:

  • LLM 生成的代码可以被实时修正
  • 不需要改变模型本身
  • 类似于编译器的中间层——在 AI 输出和用户之间插入一个"修正层"

📚 课程关联: 这是极其重要的工程洞见——当 prompt engineering 不够时,你需要在模型输出层做工程。这与第四周 Claude Code 的 "generative command injection detection"(不是硬编码规则,而是分析命令的子 prompt)是同一类思路——在 AI 输出的管道中插入额外的处理层。

Training + Fine-Tuning(Slide 24-25)

v0 使用 composite model family(复合模型族)——不是依赖单一模型,而是针对不同任务微调了专门的模型。

参考:https://vercel.com/blog/v0-composite-model-family

📚 课程关联: 第四周 Claude Code 的 subagent(不同 agent 处理不同任务),在 v0 这里是不同模型处理不同任务——同样的"分而治之"思路。

第七部分:The Broader AI Tooling Landscape

Slide 26: "A Cambrian Explosion of AI Dev Tools"

v0 存在于专业化 AI 开发工具的生态系统中:

层级 工具类型 示例
1 Code Assistants Vercel Agent, GitHub Copilot, Cursor
2 Frontend Builders 可视化开发平台
3 Testing & QA 自动化测试生成、视觉回归
4 DevOps Automation AI 驱动的部署、监控、事件响应

关键差异化因素:处理整个功能的端到端工作流,而不仅仅是自动补全建议。

第八部分:Real-World Impact

Slide 27: 三种采用模式

模式 说明
Startup Velocity 早期公司在天而非月内发布 MVP(全新产品/功能 + 现有功能修改)
Enterprise Modernization 大型组织用 v0 做原型,在投入工程资源前获得利益相关者对齐,减少开发浪费
Agency Efficiency 设计机构在客户会议数小时内交付交互原型——每个 sprint 5x 更多概念

🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Gaspar/Vercel)
视角 整个 AI app builder 生态概览 v0 引擎内部技术深潜
演示 Bolt 现场演示(salsa partner finder) v0 技术架构(5 步流程 + Stream Manipulation)
历史 LAMP → MERN → JAM → Serverless → AI 前端开发的根本性转变
局限性 "出错回到原点"、安全、同质化 模型知识过时、概率系统、需要 Framework
解决方案 System Prompt 设计(Bolt) Stream Manipulation + Composite Model Family

🔒 安全焦点:Lovable CVE-2025-48757

第一讲 Slide 16 直接引用了 Lovable 的安全漏洞,这是第八周与第六周安全主题的关键桥梁。

CVE-2025-48757 核心:

  • 漏洞类型: Supabase RLS(行级安全)配置缺失/错误
  • 影响: 1,645 个项目中 303 个端点跨 170 个应用存在漏洞(约 10.3%)
  • 后果: 未认证攻击者可读写数据库——用户数据、API 密钥、财务记录全部暴露
  • 发现时间线: 2025.3.20 发现 → 2025.4.14 Palantir 工程师独立发现并公开 → 2025.4.24 Lovable 2.0 发布"安全扫描"(不够用)→ 2025.5.29 CVE 正式发布

根因分析:

  • Lovable 的架构是客户端驱动的,安全责任被推给了应用构建者
  • 但使用 Lovable 的很多人恰恰是没有安全知识的非开发者
  • Lovable 的"安全扫描器"只检查 RLS 策略是否存在,而不检查是否正确——提供虚假的安全感

📚 课程关联:

  • 第六周 Copilot RCE(CVE-2025-53773): AI IDE 的安全漏洞——AI 修改自身配置实现 RCE
  • 第八周 Lovable CVE-2025-48757: AI app builder 的安全漏洞——AI 生成不安全的默认配置
  • 共同主题: AI 工具降低开发门槛的同时,也降低了安全门槛。当"Anyone can build an app"时,安全不能依赖用户自己配置——必须 secure by default
  • 这也验证了第七周的核心观点:"Code review is more important now than ever — You own the code that is merged and shipped, no blaming of the AI"

📚 第 1-8 周课程脉络

W1: LLM + Prompt Engineering(基础能力)
 ↓
W2: Agent + MCP Protocol(自主能力)
 ↓
W3: AI IDE + Specs-Driven(开发环境)
 ↓
W4: Agent Manager + Context Engineering(管理架构)
 ↓
W5: Product Design + Terminal ADE(产品思维)
 ↓
W6: Security + Testing(防护体系)
 ↓
W7: Code Review(质量保障)
 ↓
W8: Automated UI + App Building(极致应用)

第八周的独特位置: 这是课程中最"激进"的一讲——从"AI 辅助开发"跳跃到"AI 替代开发"。但 Mihail 开场就说"this is not the vibe coding class",并在 Slide 16 用五大局限性拉回现实。

核心张力:

  • W1-W7 构建的全部知识(prompt engineering、agent 架构、security、code review)——在 AI app builder 面前,这些还重要吗?
  • 答案是Yes:Lovable 漏洞证明安全仍然重要(W6)、"出错回到原点"证明工程能力仍然重要(W3-W4)、同质化设计证明产品思维仍然重要(W5)
  • Gaspar 的技术深潜(Stream Manipulation、Composite Model Family)证明:即使是构建"让非开发者也能开发"的工具,背后仍然需要极深的工程能力

🛠️ 第八周作业

Multi-stack Web App Builds — 多技术栈 Web 应用构建

阅读材料笔记

本周暂无阅读材料笔记。

Week 09 · Agents Post-Deployment

Monitoring and observability for AI systems · Automated incident response · Mon 11/17 / Fri 11/21

进入 Week 09 详情页

课程PPT笔记

CS146S 第九周笔记总结:Agents Post-Deployment

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 11/17 AI DevOps — Incident Response SRE 基础→四大黄金信号→事故响应 Playbook→AI SRE 特征→局限性(19 slides)
Fri 11/21 🎤 Guest: Mayank Agarwal & Milind Ganjoo (Resolve AI) AI Agents for Production Systems

嘉宾背景:

  • Mayank Agarwal: Resolve AI CTO,OpenTelemetry 共同创建者,DeepMind Staff MLE
  • Milind Ganjoo: Resolve AI Member of Technical Staff

第一讲:AI DevOps — Incident Response(Mon 11/17,19 slides)

开场定位(Slides 3-4)

Slide 3: "AI DevOps"

为什么这个话题重要(Slide 4 "Why"):

  • 编码仅占工程时间的 30%
  • 更难的 70% 是在生产环境中运行代码——复杂性、工具孤岛、知识差距、相互依赖在这里碰撞
  • 管理生产通常需要由 SRE 进行繁琐的软件分诊

📚 课程关联: "编码只占 30%"直接呼应 Resolve AI 博客的核心论点——"Software engineering has embraced code generation, but the real bottleneck is production." W1-W8 关注如何用 AI 写代码,W9 关注代码写完之后怎么办。


第一部分:The Old World — 传统 SRE(Slide 6)

SRE 的传统职责:

  • 运营监控(on-call、故障排查、基础设施管理和安全)
  • 事故解决需要从多个不同来源和团队拼凑信息
  • 维护经常过时的 Runbook
  • 向云原生架构(容器化 + Kubernetes)迁移引入了更多数据、依赖和跨系统复杂性
  • SRE 经常因 on-call 轮班而倦怠

关键数据: 停机和服务降级每年给 Global 2000 造成约 $400 billion 损失。

📚 课程关联: Resolve AI 创始人 Spiros 的亲身经历——"当我领导 Splunk 的 Observability 业务时,90% 的 SRE 团队在六个月内因 on-call 职责的倦怠而辞职。"


第二部分:Principles of Infrastructure and DevOps(Slide 7)

监控的四大黄金信号(Four Golden Signals)

信号 含义 监控要点
Latency(延迟) 请求服务时间 分别追踪成功和失败请求;缓慢的错误尤其需要关注
Traffic(流量) 系统需求(requests/sec) 流媒体用会话数,数据库用事务数
Errors(错误) 失败请求率 显式(HTTP 500s)、隐式(200 OK 但内容错误)、基于策略的(超过响应时间承诺)
Saturation(饱和度) 系统"满"的程度 追踪 CPU、内存、I/O;系统在 100% 前就开始变慢,需定义安全阈值

追踪的关键指标(Slide 11)

指标 说明
MTTR(Mean Time To Repair) 从事故发生到修复的平均时间
拉入事故的工程师数量 衡量事故的影响范围和协调成本
客户报告的 SLA 注:Mihail 指出这并非显式追踪的

第三部分:现场互动——凌晨 3:12 的告警(Slides 8-9,核心!)

场景: 凌晨 3:12,你收到 PagerDuty 的 ping,发现数据库查询出现 500 错误激增。怎么办?

Mihail 先让同学们讨论("Ask for thoughts from the audience"),再展示完整 Playbook:

事故响应 Playbook(8 步)

Step 1: Acknowledge & Assess(确认和评估)

  • 在 PagerDuty 中确认
  • 确认严重性:检查应用和数据库仪表盘
  • 识别影响:部分中断 or 完全中断

Step 2: Check the Golden Signals — DB First(检查黄金信号)

  • Connections:是否达到上限?卡住?突然下降?
  • Latency:P95 是否飙升?慢查询?
  • Errors:超时?拒绝连接?中止的事务?
  • Saturation:CPU、IOPS、锁、内存、复制延迟

Step 3: Look for What Changed(查找变更)

  • 最近的部署?数据库迁移?配置/功能标志变更?自动扩展事件?
  • → 如果与变更相关,立即回滚/恢复

Step 4: Localize the Failure(定位故障)

  • 所有查询还是特定查询?读 vs 写?
  • 主库 vs 副本?单个分片还是全部?
  • 应用端(连接池/超时)vs 数据库端(负载/锁)?

Step 5: Apply Fast Mitigations(快速缓解)

  • 连接问题:重启应用 Pod,降低并发
  • 数据库饱和:禁用重量级 Job,限流,将读请求路由到副本
  • 坏/慢查询:禁用功能/端点,启用缓存/降级模式
  • 副本延迟:将读请求路由到主库,重启副本
  • 不健康节点:只重启副本;主库问题需要升级处理

Step 6: Stabilize & Monitor(稳定和监控)

  • 观察 500 率、数据库延迟和流量恢复正常
  • 确保没有重试风暴或级联故障
  • 验证应用健康检查恢复

Step 7: Communicate(沟通)

  • 简报更新:问题 → 行动 → 当前状态
  • 活跃事故期间每 10-15 分钟更新一次

Step 8: Close Out(收尾)

  • 记录时间线,确定根因驱动因素
  • 记录后续行动:查询修复、索引优化、扩展、重试调优、容量评审

📚 课程关联: 这个 8 步 Playbook 本质上是一个手动的 Agent 工作流——感知(Step 1-2)→ 推理(Step 3-4)→ 行动(Step 5-6)→ 沟通(Step 7-8)。第二周讲的 Agent 架构(Perception → Reasoning → Action)在这里有了最具体的人工版对照。AI SRE 的目标就是自动化这 8 步。


第四部分:The New AI World(Slides 12-15)

新一代 AI 运维工具(Slide 12)

工具 定位
Resolve AI 本周客座嘉宾——AI Production Engineer
DataDog Bits AI Agent 集成在 Datadog 可观测性平台中的 AI Agent
Splunk Observability Assistant Splunk 的 AI 运维助手

AI SRE 的四大特征(Slide 13,核心!)

特征 详细说明
Dynamic Knowledge Graph 动态映射整个生产环境的知识图谱
Agentic System 跨可观测性堆栈和云的 Agent 系统
Real-time Narratives 生成实时叙述——正在发生什么、可能的根因(附证据)、规范性修复步骤
Explainability & Auditability 重点强调预测/推理的可解释性和可审计性

📚 课程关联: "Explainability & Auditability"是本课程首次明确提出的要求——在编码领域(W1-W8)我们关注 AI 是否生成了正确的代码;在运维领域(W9),由于事关生产安全,我们还必须理解 AI 为什么做出这个判断。这与第六周安全课的精神一致——信任必须可验证。

What Has Changed(Slides 15-16)

Slide 15(关键转变):

  • AI 承诺扩展组织和服务级知识
  • 信息不再被局限于"唯一知道未记录依赖关系、脆弱遗留服务和只在高风险事故期间才浮现的问题"的少数工程师

Slide 16(AI 代码审查的延续——呼应 W7):

  • 自动化减少审查时间,更早发现问题
  • 开发者通过 AI 建议学习最佳实践
  • AI 在所有代码审查中应用相同标准
  • AI 处理常规检查,让人类专注复杂逻辑
  • AI 系统随着更多数据持续改进
  • 现代 AI 代码审查工具提供更深入的上下文分析和模式识别

第五部分:AI SRE in Action(Slide 17)

Slide 17: "Let's See AI SRE in Action"

Mihail 现场演示 AI SRE 工具,指出四个关键能力:

  • Observability + Working theories(工作假设)
  • Span information(跨度信息)
  • Heavily evidence-based(大量证据支撑)
  • Chat for more dynamic querying of information(聊天式动态查询)

第六部分:Limitations(Slide 18,核心!)

局限性 说明
事故复杂性 能解决的事故复杂度有限
现代生产堆栈的异质性 不同公司的技术栈差异巨大
代码修复能力 能检测根因,但实际修复代码的能力有限——所有供应商都从 RCA(根因分析)开始
Good RCA requires good monitoring gardening 好的根因分析需要良好的监控"园艺"——数据质量是基础
安全可能成为新攻击向量 AI SRE 本身可能引入新的安全风险

📚 课程关联:

  • "安全可能成为新攻击向量"= 第六周 Copilot RCE(CVE-2025-53773)在运维领域的翻版——AI 工具在解决问题的同时可能引入新风险
  • "Good RCA requires good monitoring gardening"= 经典的 GIGO(Garbage In, Garbage Out),与第四周 Context Engineering 的核心洞见一致——AI 的输出质量取决于输入的上下文质量
  • "代码修复能力有限"= 当前 AI SRE 的核心瓶颈——从"发现问题"到"修复问题"还有巨大鸿沟

第二讲:Guest — Resolve AI: AI Agents for Production Systems(Fri 11/21)

演讲者: Mayank Agarwal (CTO) & Milind Ganjoo (Technical Staff) 演示文件: [RESOLVE AI] Stanford CS146S AI Agents for Production Systems.pdf

以下内容综合 Resolve AI 演讲和全部四篇配套阅读材料


第一部分:Resolve AI 公司背景

创始团队:

  • Spiros Xanthos(CEO): OpenTelemetry 共同创建者,前 Splunk Observability 业务 SVP/GM,创建了 Log Insight(被 VMware 收购)和 Omnition(被 Splunk 收购)
  • Mayank Agarwal(CTO): 与 Spiros 20 年前在 UIUC 研究生院相识,自 2012 年起合作,DeepMind Staff MLE

融资: $35M Seed 轮,Greylock 领投,天使投资人包括来自 AWS、Google、GitHub、Replit、OpenAI、Snowflake、Stanford 的技术先驱(Jeff Dean、Reid Hoffman、Fei-Fei Li 等)

客户: Coinbase、Zscaler、Toast、DoorDash、Blueground 等

核心指标: MTTR 减少 70%+,on-call 生产力提升 75%,每位工程师每周节省 20 小时


第二部分:核心问题 — 生产环境的瓶颈

关键论点: "Software engineering has embraced code generation, but the real bottleneck is production."

Spiros 的亲身经历(from Splunk):

  • 90% 的 SRE 团队在六个月内因 on-call 倦怠辞职
  • 大多数客户升级是因为可靠性问题
  • 有时生产环境被冻结数月以避免宕机——创新完全停滞

核心矛盾: AI 编码助手在加速功能开发,但这也会让运维复杂性更糟——代码写得越快,部署到生产的变更越多,出问题的机会也越多。

"We can't go faster until we solve these operational bottlenecks."


第三部分:AI Production Engineer 产品架构

3.1 Knowledge Graph(知识图谱)

从集成 Resolve AI 的那一刻起,它开始全面映射你的环境:

  • 构建一个动态知识图谱——覆盖整个系统和工具
  • 实时更新: 新部署、系统事件、配置变更、代码变更时持续更新
  • 使 Agent 能够快速遍历所有依赖关系、Pod 和部署

3.2 告警触发时的工作流

告警触发
  → AI 像值班工程师一样立即开始调查
  → 自主创建和执行即时 runbook(just-in-time)
  → 审查:metrics, dashboards, code changes, deployments, logs
  → 不到一分钟 → 根因理论 + 修复建议

3.3 集成生态

类别 工具
Observability Datadog, Splunk, New Relic, Grafana
Infrastructure & Cloud AWS, GCP, Azure, Kubernetes
Code & CI/CD GitHub, GitLab, Jenkins
Communication & Incident Management Slack, PagerDuty, Jira

使用 APIs、Webhooks 和 MCP(Model Context Protocol) 连接和编排这些系统。

📚 课程关联: 第二周学的 MCP 协议在这里以生产级应用出现——Resolve AI 用 MCP 连接可观测性工具,正如 Claude Code 用 MCP 连接开发工具。


第四部分:"Vibe Debugging"(氛围调试)

Resolve AI 提出的新概念: 用 AI Agent 调查任何软件问题的过程——从理解代码到排查日常生产事故。

与传统调试的核心区别:

维度 传统调试 Vibe Debugging
假设生成 一次一个,顺序追踪 并行探索所有相关假设
数据收集 手动从多个系统收集 Agent 自动跨系统收集
证据验证 工程师手动交叉验证 Agent 自主交叉验证
主动性 等待工程师指令 主动驱动对话,提供建议、高亮关联、发现你没想到的洞见

真实案例:svc-entity-graph 内存问题

工程师说:"Investigate the memory issue in svc-entity-graph." AI Agent 的行为:

  1. 自我定位: 识别正确的资源(svc-entity-graph 作为 prod 中的 kube_deployment),设定调查时间范围
  2. 并行调查——同时查询完全不同的系统:
    • 查询 Git 仓库找到时间窗口内的 1 个最近提交
    • 搜索 Grafana,从数百个仪表盘中找到正确的那个,分析 13 个不同图表,定位出与内存问题最相关的 2 个
    • 拉取上游服务(svc-entity-graph-ingest)的网络流量遥测数据
    • 交叉验证 Kubernetes API 的 Pod 配置以排除基础设施错误
  3. 确认理论: 通过 CI/CD 管道中同一变更的回滚来确认整个理论,并将其与系统的恢复时间对齐

真实案例:svc-analysis 部署失败

  1. AI 分析遥测数据(logs),综合结果,定位 node-canvas 错误为根因
  2. 当问"how to fix"→ 分析上下文,建议安装系统依赖
  3. 当问"where"→ 分析代码库,指向精确文件(.github/src/base/node-prod/Dockerfile)和行号

📚 课程关联:

  • "Vibe Debugging" 与 W8 "Vibe Coding"(Karpathy)形成平行对照:自然语言→代码 vs 自然语言→调查结论
  • 并行假设探索 = 第四周 Claude Code subagent 的生产环境版本——Claude Code 用多个 subagent 并行处理编码子任务,Resolve AI 用多个 Agent 并行调查不同假设

第五部分:AI-Assisted vs AI-Native Engineering

维度 AI-Assisted AI-Native
界面 工程师仍然直接操作系统和工具,用 AI 加速个别步骤 工程师主要通过 AI来编排工作
工作流 工程师→工具→AI 辅助→结果 工程师→自然语言请求→AI 系统→响应/行动
事件响应 你仍在生成假设、决定哪些证据重要、手动关联信号 AI Agent 自动分类调查优先级、并行生成竞争假设、迭代优化理论
示例 "你能分析这些日志吗?" "解决这个 checkout 失败"

"AI-Native Engineering is where engineers primarily interface with AI to orchestrate their work."


第六部分:为什么需要 Multi-Agent Systems

核心论点: 单一 LLM 或单一 Agent 在复杂生产环境中会失败

原因:

  • 生产环境涉及多个异构系统(observability, infra, code, CI/CD, communication)
  • 不同类型的问题需要不同的专业知识
  • 需要同时从多个角度并行调查

Resolve AI 的多 Agent 架构:

  • 一个 Agent 专注系统日志
  • 另一个 Agent 关注应用指标
  • 第三个 Agent 审查代码变更
  • 第四个 Agent 检查基础设施配置
  • 它们协作得出综合结论

📚 课程关联: Multi-Agent 模式贯穿整个课程:

场景 Multi-Agent 实现
W4 Claude Code Main agent + subagents(不同编码任务)
W7 Graphite AI reviewer(不同检查维度)
W8 v0 Composite model family(不同生成任务)
W9 Resolve AI 多个 investigation agents(日志/指标/代码/K8s)

第七部分:Agentic AI On-call 的五大收益

# 收益 详细说明
1 即时调查 告警触发时立即行动——动态生成实时 runbook,不到一分钟定位根因。24/7 不需要睡觉
2 持续学习 从每次事故学习,动态更新知识。关键人员离开时知识不会丢失——保留并进化机构知识
3 一致性 消除人类工程师对类似问题采取不同方法的变异性——遵循一致工作流,同时适应每个事故的独特上下文
4 多 Agent 协作 不同 Agent 专注不同领域,并行工作——既处理常规问题,也适应新颖问题
5 从被动到主动 从"救火"转向"战略创新"——AI 处理常规任务,工程师专注架构改进

"Agentic AI isn't just the next step in automation—it's a paradigm shift in incident management."


🔗 两讲融合:交叉分析

主题 1:手动 Playbook → AI 自动化的映射

Mihail 的 8 步 Playbook 与 Resolve AI 的自动化形成精确对应:

Mihail 的手动步骤 Resolve AI 的自动化
Step 1: Acknowledge & Assess Agent 自动接收告警,自我定位
Step 2: Check Golden Signals 自动查询 metrics, dashboards(Grafana 搜索)
Step 3: Look for What Changed 自动查询 Git 仓库、CI/CD 管道
Step 4: Localize the Failure 并行调查多个假设,交叉验证
Step 5: Apply Fast Mitigations 建议修复步骤(自动执行能力 "just around the corner")
Step 6: Stabilize & Monitor 持续监控恢复
Step 7: Communicate 在 Slack 中生成实时叙述和更新
Step 8: Close Out 自动生成 Post-mortem

关键观察: Mihail 的手动 Playbook 用了 8 步、可能需要数小时。Resolve AI 将同样的流程压缩到不到一分钟。但 Slide 18 的局限性提醒我们:复杂事故仍然需要人类判断。

主题 2:可观测性是一切的基础

Google SRE Book → 定义 SRE 原则和 Error Budget
         ↓
Last9 (Traces & Spans) → 提供可观测性的技术基础
         ↓
Mihail 的 Four Golden Signals → 定义监控什么
         ↓
Resolve AI → 在此基础上构建 AI Agent

关键洞见(Slide 18): "Good root cause analysis requires good monitoring gardening." 没有良好的可观测性,AI 运维就是空中楼阁。

主题 3:Vibe Coding(W8)→ Vibe Debugging(W9)

Vibe Coding(W8) Vibe Debugging(W9)
自然语言 → 代码 自然语言 → 调查结论
Andrej Karpathy 提出 Resolve AI 提出
工具:v0, Bolt, Lovable 工具:Resolve AI
风险:安全漏洞(CVE-2025-48757) 风险:误判根因、安全攻击向量(Slide 18)
"Anyone can build an app" "Anyone can debug production"

主题 4:知识保留——组织的核心挑战

传统方式 AI 方式
专家离职 → 知识丢失 Knowledge Graph 持续积累
Runbook 很快过时(Slide 6) Agent 从每次事故动态学习
信息孤岛——只有少数人知道(Slide 15) AI 扩展组织和服务级知识

Slide 15 的核心洞见:"AI promises to scale out organizational and service level knowledge — Information is not siloed to the only engineers who know the undocumented dependencies, brittle legacy services, and quirks that only surface during high-stakes incidents."

主题 5:安全——贯穿课程的隐忧

周次 安全问题
W6 Copilot RCE (CVE-2025-53773)——AI 编码工具的安全漏洞
W8 Lovable CVE-2025-48757——AI 构建工具的安全漏洞
W9 Slide 18 "Security could be a new attack vector"——AI 运维工具的安全隐忧

每当 AI 获得更多系统权限(从编写代码→构建应用→运维生产),安全风险也在同步升级。AI SRE 拥有对整个生产环境的访问权限——这既是其强大之处,也是潜在的最大风险。


📖 阅读材料总览

# 标题 来源 核心要点
1 Introduction to Site Reliability Engineering Google SRE Book SRE 定义、Error Budget 框架、无指责 Postmortem
2 Observability Basics You Should Know Last9 Traces & Spans、M.E.L.T. 三支柱、OpenTelemetry
3 Kubernetes Troubleshooting with AI Resolve AI AI Agent 自动排查 K8s 的四大能力
4 Your New Autonomous Teammate Resolve AI Knowledge Graph + 即时 Runbook + Vibe Debugging
5 Multi Agent Systems for AI-native Engineering Resolve AI AI-Assisted vs AI-Native、多 Agent 架构
6 Benefits of Agentic AI in On-call Resolve AI 即时调查、持续学习、一致性、协作、主动转型

阅读材料 1:Google SRE Book — Introduction

SRE 定义: "当你让软件工程师来设计运维功能时,就会产生 SRE。"

Error Budget 框架: 将开发速度 vs 系统稳定性的冲突量化——99.99% 可用性 = 允许每季度 13 分钟宕机。预算用完→停止发布;预算有余→加速发布。

Postmortem 文化: 无指责→目标是暴露缺陷并用工程手段修复。没有触发 Page 的 Postmortem 更有价值——指向监控盲区。

阅读材料 2:Last9 — Traces & Spans

Traces = 请求在分布式系统中的完整旅程。Spans = 构建块(每个代表一个工作单元)。

采样策略: Head-based(请求开始时决定)、Tail-based(完成后决定,更适合捕获错误)、Priority(重要操作总是追踪)。

M.E.L.T.: Metrics(系统趋势)+ Events + Logs(调试)+ Traces(请求路径)。OpenTelemetry = 标准框架。

阅读材料 3-6:Resolve AI 四篇博客

K8s 排查: Always-On Expertise → Correlate Across Cluster → Automated Investigations → Provide Resolutions

Product Deep Dive: Knowledge Graph(实时映射)+ 即时 Runbook(<1 分钟)+ 集成生态(Datadog/Grafana/AWS/GitHub/Slack)

Multi-Agent Systems: AI-Assisted(加速步骤)vs AI-Native(AI 成为主界面)。单一 Agent 不够,需要多 Agent 协作。

On-call 五大收益: 即时调查、持续学习、一致性、多 Agent 协作、从被动到主动。


📚 第 1-9 周课程脉络

W1: LLM + Prompt Engineering(基础能力)
 ↓
W2: Agent + MCP Protocol(自主能力)
 ↓
W3: AI IDE + Specs-Driven(开发环境)
 ↓
W4: Agent Manager + Context Engineering(管理架构)
 ↓
W5: Product Design + Terminal ADE(产品思维)
 ↓
W6: Security + Testing(防护体系)
 ↓
W7: Code Review(质量保障——合并前的最后检查点)
 ↓
W8: Automated UI + App Building(极致应用——AI 替代开发)
 ↓
W9: Agents Post-Deployment(部署后——AI 运维、监控、事件响应)

第九周完成了 AI 软件开发的完整生命周期:

阶段 周次 内容
Build W1-W5 从想法到代码(LLM→Agent→IDE→管理→产品设计)
Verify W6-W7 测试和审查(安全→代码审查)
Deploy W8 生成和部署应用(自动化 UI)
Operate W9 监控和维护生产系统(AI DevOps)

下一周(W10):展望未来——Software Development in 10 Years + a16z Martin Casado 客座讲座。


⚡ 第九周核心金句

Mihail: "Coding represents just 30 percent of engineering time. The harder 70 percent is running that code in production."

Mihail Slide 18: "Good root cause analysis requires good monitoring gardening."

Mihail Slide 18: "Security could be a new attack vector."

Resolve AI: "Software engineering has embraced code generation, but the real bottleneck is production."

Resolve AI: "AI-Native Engineering is where engineers primarily interface with AI to orchestrate their work."

Resolve AI: "Agentic AI isn't just the next step in automation—it's a paradigm shift in incident management."

Spiros (Resolve AI CEO): "We can't go faster until we solve these operational bottlenecks."

Spiros: "Agents will perform all the engineering tasks like coding and debugging systems. Humans will operate at a higher level of abstraction overseeing the AI."

阅读材料笔记

CS146S 第九周阅读材料笔记:Agents Post-Deployment

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📖 阅读材料总览

# 标题 来源 核心主题
1 Introduction to Site Reliability Engineering Google SRE Book, Ch.1 SRE 基础理论:定义、原则、Error Budget
2 Observability Basics You Should Know Last9 Blog Traces & Spans:分布式追踪基础
3 Kubernetes Troubleshooting with AI Resolve AI Blog AI Agent 自动排查 K8s 问题
4 Your New Autonomous Teammate (Product Deep Dive) Resolve AI Blog AI Production Engineer 产品架构
5 Role of Multi Agent Systems in Making Software Engineers AI-native Resolve AI Blog 多 Agent 系统 + AI-native 工程
6 Benefits of Agentic AI in On-call Engineering Resolve AI Blog Agentic AI 改造 On-call 的五大收益

阅读材料 1:Introduction to Site Reliability Engineering

来源: Google SRE Book, Chapter 1(Ben Treynor Sloss,Google SRE 创始人)

核心内容

SRE 的定义: "当你让软件工程师来设计运维功能时,就会产生 SRE。" Ben Treynor Sloss 是 Google 负责技术运营的高级副总裁,也是 SRE 一词的创造者。

SRE 团队构成:

  • 50-60% 是标准 Google 软件工程师
  • 40-50% 是接近 Google SWE 标准(85-99% 的技能),但额外拥有 UNIX 系统内核和网络(L1-L3)专业知识
  • 两个轨道的工程师在实际表现上没有实际差异——多元背景反而产生更高质量的系统

核心原则:Error Budget(错误预算)

SRE 的关键创新是将开发速度 vs 系统稳定性的隐性冲突变成一个可量化的框架:

  • 产品开发团队想要快速发布新功能
  • 运维团队想要系统永远不出问题
  • SRE 的解决方案:设定一个错误预算(比如 99.99% 可用性 = 允许每季度 13 分钟宕机)
  • 如果错误预算用完了→停止发布新功能,直到下一个周期
  • 如果错误预算还有余量→可以加速发布

Postmortem 文化:

  • 所有重大事故都应写 Postmortem,无论是否触发了 Page
  • 没有触发 Page 的 Postmortem 更有价值——因为它们指向监控盲区
  • Google 实行无指责文化——目标是暴露缺陷并用工程手段修复,而非追究个人责任

📚 课程关联: SRE 的"无指责 Postmortem"与第七周 code review 的核心理念一致——Blake Smith 说 code review 最重要的功能是"保持团队心智模型对齐",Postmortem 最重要的功能是"暴露系统缺陷"。两者都是团队学习机制,而非惩罚机制。


阅读材料 2:Traces & Spans: Observability Basics You Should Know

来源: Last9 Blog

核心概念

Traces(追踪): 捕获一个请求在分布式系统中从头到尾的完整旅程。

Spans(跨度): Traces 的构建块。每个 Span 代表旅程中的一个工作单元——如数据库查询、API 调用、函数执行。

Trace
├── Span (API Gateway)
│   ├── Span (Auth Service)
│   └── Span (User Service)
│       └── Span (Database Query)
└── Span (Response Formatting)

Span 包含的数据:

  • 时间戳(开始和结束)
  • Status(成功、错误等)
  • Attributes(自定义键值对,如 user_id, cart_size)
  • 父子关系(嵌套结构)

采样策略(Sampling)——追踪所有请求会产生海量数据:

  • Head-based sampling: 在请求开始时决定是否采样
  • Tail-based sampling: 在请求完成后决定(更适合捕获错误)
  • Priority sampling: 总是追踪重要操作,对常规操作采样

可观测性三大支柱(M.E.L.T.):

  • Metrics: 系统级趋势(请求率、错误率、平均延迟)——"每分钟有多少 checkout 请求失败?"
  • Logs: 详细的文本记录——用于调试
  • Traces: 个别请求的完整路径——"这个请求经过了哪些服务,每步花了多长时间?"

OpenTelemetry 已成为实现 traces 和 spans 的标准框架——开源、厂商中立、跨语言。

最佳实践:

  • 有意义的 span 命名(如 service_name/operation
  • 正确的粒度(为重要操作创建 span,而非每个函数)
  • 正确的 context propagation(确保追踪上下文在所有通信通道中流转)
  • 有用的 attributes(添加有助于排查的属性,如 user_id, feature_flag)

常见错误:

  • Over-instrumentation:创建太多 span 导致性能问题
  • Missing context:未能跨服务传播上下文
  • Inconsistent naming:不同的命名标准导致追踪难以解读

📚 课程关联: 可观测性是第六周安全/测试的"运行时"对应——第六周关注"代码中有什么漏洞"(SAST/DAST),第九周关注"运行中发生了什么"(Traces/Metrics/Logs)。


阅读材料 3:Kubernetes Troubleshooting with AI

来源: Resolve AI Blog

核心问题

Kubernetes 虽然自动化了很多运维,但其动态和临时性的本质带来新挑战:

  1. Noisy Alerts That Cry Wolf: K8s 控制平面不断调整工作负载以匹配期望状态,期间产生大量虚假告警
  2. Noisy Neighbors: 相邻 Pod 资源竞争
  3. Misbehaving Add-ons: 插件行为异常
  4. Resource Starvation: 资源匮乏
  5. Subtle Memory Leaks: 细微的内存泄漏——"潜伏在表面之下"

Resolve AI 的 K8s 排查方式

传统排查: 凌晨 2 点收到告警 → kubectl → 发现问题"神秘自愈" → 但根因仍在

AI 排查(Agentic AI):

  1. Always-On Expertise: AI 不需要睡觉——告警触发时立即进入集群,在你打开电脑之前就提供可操作的洞见
  2. Correlates Issues Across Cluster: 利用知识图谱检查 Pod、Node、Namespace 之间的类似异常
  3. Runs Automated Investigations: 自动测试假设("是 OOM 错误吗?" "Pod 失败是因为启动命令配置错误吗?")——自动执行 runbook
  4. Provides Resolutions: 如果找到解决方案就建议执行,否则列出明确的下一步

📚 课程关联: "Correlates Issues Across Cluster" = 第二周的 Agent 跨工具协调能力。传统工程师需要在多个仪表盘之间手动关联信号,AI Agent 可以自动完成这个过程——这正是 Agent 架构的核心价值。


阅读材料 4:Your New Autonomous Teammate(Product Deep Dive)

来源: Resolve AI Blog

AI Production Engineer 产品架构

Knowledge Graph(知识图谱):

  • 从集成 Resolve AI 的那一刻起,它开始全面映射你的环境
  • 构建一个动态知识图谱——覆盖整个系统和工具
  • 实时更新:新部署、系统事件、配置变更、代码变更时持续更新
  • 使 Resolve AI 能够快速遍历所有依赖关系、Pod 和部署

告警触发时的工作流:

  1. 像值班工程师一样立即开始调查
  2. 自主创建和执行即时 runbook
  3. 审查:metrics、dashboards、code changes、deployments、logs
  4. 不到一分钟就已定位根因理论并建议修复步骤

"Vibe Debugging"(氛围调试):

  • Resolve AI 提出的新概念
  • 工程师用自然语言描述问题 → AI Agent 自动执行整个调查循环
  • AI 不是一次追踪一个假设,而是并行探索所有相关假设
  • 同时从多个系统收集证据:Git 仓库、Grafana 仪表盘、K8s API、CI/CD 管道

真实案例: 调查 svc-entity-graph 服务的内存问题

  • Agent 自动查询 Git 仓库找到时间窗口内的 1 个最近提交
  • 同时搜索 Grafana,从数百个仪表盘中找到正确的那个,分析 13 个不同图表,定位出与内存问题最相关的 2 个
  • 同时从上游服务拉取网络流量遥测数据
  • 交叉验证 K8s API 的 Pod 配置以排除基础设施错误
  • 最后通过 CI/CD 管道中同一变更的回滚来确认整个理论

公司背景:

  • $35M Seed 轮,Greylock 领投
  • 创始人 Spiros 共同创建了 OpenTelemetry(可观测性标准)
  • 客户:Coinbase, Zscaler, Toast 等
  • 客户反馈:MTTR 减少 70%+,on-call 生产力提升 75%,每位工程师每周节省 20 小时

📚 课程关联:

  • "Vibe Debugging" 与第八周 "Vibe Coding" 形成平行对照——Karpathy 提出 Vibe Coding(用自然语言描述代码),Resolve AI 提出 Vibe Debugging(用自然语言描述问题)
  • Knowledge Graph = 第四周 Context Engineering 的生产环境版本——CLAUDE.md 给 Agent 提供项目上下文,Knowledge Graph 给 Agent 提供整个生产系统的上下文

阅读材料 5:Role of Multi Agent Systems in Making Software Engineers AI-native

来源: Resolve AI Blog(基于 Stanford 研究生 AI 课程的演讲)

AI-Assisted vs AI-Native

维度 AI-Assisted AI-Native
界面 工程师仍然直接操作系统和工具,用 AI 加速个别步骤 工程师主要通过 AI 来编排工作
工作流 工程师→工具→AI 辅助→结果 工程师→自然语言请求→AI 系统→响应/行动
事件响应 你仍在生成假设、决定哪些证据重要、手动关联信号 AI Agent 自动分类调查优先级、并行生成竞争假设、迭代基于跨系统证据优化理论
示例 "你能分析这些日志吗?" "解决这个 checkout 失败"

为什么单一 Agent 不够?

复杂的生产环境需要多 Agent 系统

  • 单一 LLM 或单一 Agent 在复杂生产环境中失败
  • 需要不同 Agent 专注不同领域:一个检查系统日志,另一个关注应用指标,第三个审查代码变更
  • 多 Agent 协作能够处理常规和新颖问题

从 AI-Assisted 到 AI-Native 的转变:

  • AI-Assisted:工程师用 AI 加速编码(Copilot, Cursor)
  • AI-Native:AI 成为工程师操作生产系统的主要界面
  • 目标:工程师在更高抽象层次运作,监督运行生产系统的 AI

📚 课程关联:

  • "AI-Assisted vs AI-Native" 完美对应课程从第一周到第九周的演进:W1-W3 是 AI-Assisted(LLM 辅助编码),W4-W8 越来越接近 AI-Native(Agent 管理整个开发流程)
  • "Multi Agent Systems" = 第四周 Claude Code 的 subagent 架构在生产环境的扩展——Claude Code 用多个 subagent 处理不同编码任务,Resolve AI 用多个 Agent 处理不同运维任务
  • 第二周的 MCP 协议在这里再次出现:Resolve AI 使用 MCP 来连接和编排不同系统

阅读材料 6:Top 5 Benefits of Agentic AI in On-call Engineering

来源: Resolve AI Blog

五大收益

# 收益 详细说明
1 即时调查 告警触发时,Agentic AI 立即行动——动态生成和执行实时 runbook,分析 metrics/dashboards/code changes/deployments/logs,不到一分钟定位根因。不会累、不需要睡觉、24/7 精确工作
2 持续学习 每次事故后动态更新知识——不像静态 runbook 很快过时。关键人员离开时,其专业知识不会丢失——Agentic AI 保留并进化机构知识
3 一致性 人类工程师对类似问题采取不同方法→不一致的结果。Agentic AI 遵循一致的工作流,同时适应每个事故的独特上下文
4 多 Agent 协作 一个 Agent 专注系统日志,另一个关注应用指标——并行工作。既能处理常规问题,也能适应新颖问题
5 从被动到主动 从"救火"转向"战略创新"——Agentic AI 处理常规任务,工程师专注架构改进

关键转变

"Agentic AI isn't just the next step in automation—it's a paradigm shift in incident management."

传统自动化:预定义脚本 → 触发条件 → 执行固定步骤 Agentic AI:理解上下文 → 生成假设 → 并行调查 → 自主决策 → 持续学习

📚 课程关联:

  • "持续学习"对应第七周 Graphite 的 acceptance rate/upvote rate——两者都是通过反馈循环持续改进
  • "从被动到主动"呼应第五周产品设计原则——工具应该让人专注高价值工作(设计/架构),而非低价值重复性工作(排查/调试)

🔗 六篇阅读材料的交叉主题

主题 1:可观测性是 AI 运维的基础

Google SRE Book(阅读材料 1)定义了运维的基本原则 → Last9(阅读材料 2)提供了可观测性的技术基础(Traces/Spans/Metrics) → Resolve AI(阅读材料 3-6)在此基础上构建 AI Agent。

关键洞见:没有良好的可观测性,AI 运维就是空中楼阁。 AI Agent 的"智能"完全依赖于它能获取的数据质量。

主题 2:从手动 → 自动化 → Agentic

手动运维(传统 SRE)
  → 收到告警 → 打开仪表盘 → 手动检查日志 → 生成假设 → 逐一验证
  
自动化(Runbook/脚本)
  → 收到告警 → 执行预定义脚本 → 如果匹配已知模式则修复
  
Agentic AI(Resolve AI)
  → 收到告警 → AI 自动理解上下文 → 并行生成多个假设 → 跨系统收集证据 → 自主判断 → 建议或执行修复

这个演进链条与课程从 W1 到 W9 的脉络完全一致:

  • W1-W3:手动编码 → AI 辅助编码
  • W4-W8:AI 辅助 → AI 驱动
  • W9:AI 驱动 → AI 自主(在生产运维领域)

主题 3:知识保留 vs 知识流失

传统方式 AI 方式
专家离职 → 知识丢失 Knowledge Graph 持续积累
Runbook 很快过时 Agent 从每次事故学习
文档总是不完整 AI 自动构建系统全景

这与第七周 Blake Smith 的"心智模型对齐"深度相关——code review 让团队的心智模型保持同步,Knowledge Graph 让整个组织的运维知识保持同步。

主题 4:Vibe Coding → Vibe Debugging(课程新对称性)

Vibe Coding(W8) Vibe Debugging(W9)
自然语言 → 代码 自然语言 → 调查结论
Andrej Karpathy 提出 Resolve AI 提出
工具:v0, Bolt, Lovable 工具:Resolve AI
风险:安全漏洞(CVE-2025-48757) 风险:误判根因、自动执行错误修复
"Anyone can build an app" "Anyone can debug production"

主题 5:Multi-Agent 无处不在

场景 Multi-Agent 实现
W4 Claude Code Main agent + subagents(不同编码任务)
W7 Graphite AI reviewer(不同检查维度)
W8 v0 Composite model family(不同生成任务)
W9 Resolve AI 多个 investigation agents(日志/指标/代码/K8s)

共同架构模式: 将复杂任务分解为专业化子任务,每个子任务由专门的 Agent/Model 处理。


📚 第 1-9 周课程脉络

W1: LLM + Prompt Engineering(基础能力)
 ↓
W2: Agent + MCP Protocol(自主能力)
 ↓
W3: AI IDE + Specs-Driven(开发环境)
 ↓
W4: Agent Manager + Context Engineering(管理架构)
 ↓
W5: Product Design + Terminal ADE(产品思维)
 ↓
W6: Security + Testing(防护体系)
 ↓
W7: Code Review(质量保障——合并前的最后检查点)
 ↓
W8: Automated UI + App Building(极致应用——从"AI 辅助开发"到"AI 替代开发")
 ↓
W9: Agents Post-Deployment(部署后——AI 运维、监控、事件响应)

第九周完成了 AI 软件开发的完整生命周期:

  • W1-W5:Build(从想法到代码)
  • W6-W7:Verify(测试和审查)
  • W8:Deploy(生成和部署应用)
  • W9:Operate(监控和维护生产系统)

下一周(W10)将是展望未来——软件开发的下一个十年。


⚠️ 注意

本周 Slides 尚未获取(Monday 11/17 Mihail 讲座 + Friday 11/21 Resolve AI 嘉宾讲座)。获取 Slides 后将补充完整的讲座笔记。

Week 10 · What's Next for AI Software Engineering

Future of software development roles · Emerging AI coding paradigms · Mon 12/1 / Fri 12/5

进入 Week 10 详情页

课程PPT笔记

CS146S 第十周笔记总结:What's Next for AI Software Engineering

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 12/1 Software Development in 10 Years Mihail 讲座——AI 软件开发的未来展望
Fri 12/5 🎤 Guest: Martin Casado, General Partner, a16z 投资人视角的 AI 软件工程未来

本周无阅读材料,无公开 Slides


嘉宾背景:Martin Casado

Martin Casado 是 Andreessen Horowitz (a16z) 的 General Partner,领导该公司 $12.5 亿的基础设施投资实践。

维度 详情
学术背景 Stanford CS PhD — 开创了 Software-Defined Networking (SDN)
创业经历 联合创建 Nicira Networks → 2012 年被 VMware 以 $12.6 亿收购
VMware 时期 Fellow, SVP & GM of Networking and Security,将业务扩展到 $6 亿年营收
投资组合 Cursor(董事会成员), World Labs, Ideogram, Braintrust, Convex, Fivetran, Kong 等
安全背景 曾是 Lawrence Livermore 国家实验室的计算机安全专家
行业影响 a16z AI 和基础设施领域的主要发言人,Marc Andreessen 的核心合作者

为什么这位嘉宾是课程的完美收尾:

  • Stanford CS PhD → 学术视角
  • Nicira 创始人 → 创业者视角
  • VMware SVP → 大公司视角
  • a16z GP → 投资人视角
  • Cursor 董事会 → 直接连接到第三周 AI IDE 主题

第一讲:Software Development in 10 Years(Mon 12/1)

注:本讲无公开 Slides。以下基于课程主题、讲师视角和课程脉络进行综合分析。

课程大纲主题

  1. Future of software development roles(软件开发角色的未来)
  2. Emerging AI coding paradigms(新兴 AI 编码范式)
  3. Industry trends and predictions(行业趋势和预测)

基于 W1-W9 课程脉络的回顾与展望

十周课程描绘的完整画面

W1: LLM + Prompt Engineering         → AI 作为"工具"
W2: Agent + MCP Protocol              → AI 作为"助手"
W3: AI IDE (Cursor)                   → AI 作为"搭档"
W4: Agent Manager + Context Eng.      → AI 作为"团队成员"
W5: Product Design + Terminal ADE     → AI 改变"谁能参与"
W6: Security + Testing                → AI 引入新风险
W7: Code Review                       → AI 保障质量
W8: Automated UI (v0, Bolt, Lovable)  → AI 作为"替代者"?
W9: Post-Deployment (Resolve AI)      → AI 管理"全生命周期"
W10: What's Next                      → AI 改变整个行业?

角色演变的五个阶段(课程暗含的框架)

阶段 人类角色 AI 角色 对应课程周次
1. AI-Ignorant 独立完成所有工作 不存在 (pre-course)
2. AI-Assisted 主导者,AI 加速个别步骤 高级自动补全 W1-W3
3. AI-Augmented 架构师 + 审查者 执行者(写代码、写测试) W4-W7
4. AI-Driven 产品定义者 + 质量把关者 全栈构建者 W8
5. AI-Native 监督者 + 决策者 自主运作者 W9 (Resolve AI 的愿景)

📚 关键问题: 第五阶段会不会到来?什么时候到来?这正是 W10 要讨论的。


第二讲:Guest — Martin Casado, a16z(Fri 12/5)

以下基于 Casado 在 2025 年多次公开演讲、播客和文章中的核心观点,结合 CS146S 课程主题进行综合。

Casado 的核心观点体系

观点 1:"This feels like 1996"——我们仍处于极早期

Casado 认为我们处于 AI 周期的极早期阶段——类比互联网的 1996 年,而非 2000 年泡沫期。

核心论据:

  • AI 影响的市场规模是前所未有的——AI 编码本身就可能是一个数万亿美元的市场
  • 每一波技术浪潮(云计算、移动、SaaS)都花了 10-15 年才完全展开
  • AI 的基础设施层(compute, storage, networking)正在增加第四支柱——AI 本身

📚 课程关联: 这解释了为什么 CS146S 存在——如果我们在 1996 年,那么现在学习"现代软件开发者"的新范式就相当于 1996 年学习 Web 开发。

观点 2:AI 编码工具没有显著加速产品发布——但解决了两个问题

Casado 的意外判断:

"Every company I work with uses Cursor. Has that increased the velocity of the products coming out? I don't think that much."

AI 编码工具实际解决的两个问题:

  1. 代码质量: "More robust, maintainable code bases with less bugs"——更健壮、更可维护、更少 Bug 的代码
  2. 工程师士气: "It's almost like it's brought coding back. These old systems programmers, vibe coding at night just because it's become pleasant again."——让编程重新变得愉快

📚 课程关联: 这是对 W8 "Vibe Coding" 最深层的诠释——Vibe Coding 的核心价值不是"更快",而是"更愉快"。这与 W5 Warp 的"terminal for the modern developer"理念一致——工具应该让工作变得enjoyable。

观点 3:市场碎片化——专业化胜过通用化

Casado 观察到 AI 工具市场正在碎片化——每个垂直领域都在产生专业化赢家:

领域 赢家
AI 编码(专业开发者) Cursor
AI 编码(非技术用户) Bolt, Lovable
图像生成 MidJourney
文本转语音 11 Labs
视频生成 多个竞争者

关键区分: Cursor 就像"junior developer assisting senior engineers"(辅助高级工程师的初级开发者),而 Bolt/Lovable 服务的是"less technical users"(技术程度更低的用户)。

📚 课程关联: 完美映射 W3(Cursor = 专业开发者工具)vs W8(v0/Bolt/Lovable = 非技术用户工具)的区分。Casado 作为 Cursor 的董事会成员,亲身验证了这一市场定位。

观点 4:对 Agents "关闭控制循环"持怀疑态度

"I don't see a lot of evidence that we can close the control loop on these things."

Casado 对 Agent 自主性的担忧:

  • "Close the control loop" = 让 Agent 自行启动任务、自主执行、自我评估、自我修正
  • 目前的 Agent 在这个循环中仍然不够可靠
  • AI 在预测过去方面很好,但在预测未来方面不行——不应被用于战略决策

📚 课程关联: 这与课程中反复出现的主题形成张力:

  • W2 Agent 架构看起来很强大
  • W4 Agent 管理可以给 Agent 框架约束
  • W8 Mihail 说"once things break we're back to square 1"
  • W9 Resolve AI 的 Slide 18:"Complexity of incidents that can be resolved"——仍有局限
  • Casado 作为投资人给出了更审慎的判断:Agent 很有潜力,但"关闭控制循环"尚需时日

观点 5:AI 是基础设施的"第四支柱"

传统基础设施三大支柱: Compute(计算)+ Storage(存储)+ Networking(网络)

Casado 的论点: AI 正在成为第四支柱——不是替代前三者,而是在其上叠加

"Infrastructure doesn't go away — it layers."

这意味着:

  • AI 不会"取代"软件——它会成为软件的新基础层
  • 就像云计算没有取代服务器,只是改变了我们使用服务器的方式
  • 我们需要从"空白纸"开始思考如何编程这些系统

📚 课程关联: 这为 W2 的 MCP 协议提供了更宏大的框架——MCP 不仅是 Agent 的工具协议,更可能是 AI 基础设施层的标准化接口,正如 HTTP 是网络层的标准化接口。

观点 6:AI 正在颠覆 SaaS 定价模式

传统 SaaS 时代: 价值按用户数衡量(per-seat pricing)

AI 时代: 价值按输出量衡量——从"有多少人使用系统"转向"系统代你完成了多少工作"

"In the AI era, value shifts to the work the software performs on your behalf."

📚 课程关联: 这与 W8 的 v0("One-Click Deploy")和 W9 的 Resolve AI("不到一分钟定位根因")的价值主张一致——产品的价值不在于你花多少时间使用它,而在于它替你完成了多少工作。

观点 7:"Software is being disrupted"

"Software was always the disruptor. One of the most exciting things about the AI wave is software is being disrupted — we're being disrupted."

Casado 认为这是他一生中见过的最大变化:

  • 之前每一波技术浪潮(互联网、移动、云)都是软件颠覆其他行业
  • 这一次,AI 在颠覆软件本身
  • 这就是为什么 Cursor 收购了 Graphite(W7 的 AI code review 工具)——整个软件开发工具链都在重组

Casado 观点与课程 W1-W9 的全景对照

Casado 观点 对应课程内容 张力/一致性
"Like 1996" — 极早期 W10 是"展望未来"主题 ✅ 一致:课程存在的原因——未来巨大
AI 没显著加速产品发布 W3 Cursor, W4 Claude Code ⚡ 张力:工具很强但产品速度没变?
代码质量 + 士气提升 W7 AI code review, W5 产品设计 ✅ 一致:AI 的价值不只是"快"
Cursor vs Bolt/Lovable 分层 W3 vs W8 ✅ 一致:专业工具 vs 民主化工具
Agent 控制循环未关闭 W2 Agent, W9 Resolve AI ⚡ 张力:学术/创业界更乐观
AI 是第四基础设施支柱 W2 MCP Protocol ✅ 一致:需要新的标准化层
SaaS 定价被颠覆 W8 v0 一键部署, W9 AI SRE ✅ 一致:输出 > 使用时间
Software is being disrupted 整个课程 ✅ 一致:CS146S 的存在意义

🔗 课程完整回顾:W1-W10 的十周脉络

完整课程地图

     ┌─────────────────────────────────────────────────────────┐
     │                CS146S: The Modern Software Developer      │
     │                Stanford University · Fall 2025            │
     ├─────────────────────────────────────────────────────────┤
     │                                                           │
     │  ┌── BUILD ──────────────────────────────────┐           │
     │  │ W1: LLM + Prompt Engineering (基础)        │           │
     │  │ W2: Agent + MCP Protocol (自主)            │           │
     │  │ W3: AI IDE + Specs-Driven (环境)           │           │
     │  │ W4: Agent Manager + Context Eng. (管理)    │           │
     │  │ W5: Product Design + Terminal ADE (产品)   │           │
     │  └────────────────────────────────────────────┘           │
     │                                                           │
     │  ┌── VERIFY ─────────────────────────────────┐           │
     │  │ W6: Security + Testing (安全)              │           │
     │  │ W7: Code Review (质量)                     │           │
     │  └────────────────────────────────────────────┘           │
     │                                                           │
     │  ┌── DEPLOY ─────────────────────────────────┐           │
     │  │ W8: Automated UI + App Building (部署)     │           │
     │  └────────────────────────────────────────────┘           │
     │                                                           │
     │  ┌── OPERATE ────────────────────────────────┐           │
     │  │ W9: Agents Post-Deployment (运维)          │           │
     │  └────────────────────────────────────────────┘           │
     │                                                           │
     │  ┌── FUTURE ─────────────────────────────────┐           │
     │  │ W10: What's Next (未来)                    │           │
     │  └────────────────────────────────────────────┘           │
     │                                                           │
     └─────────────────────────────────────────────────────────┘

十周课程的核心张力

整个课程围绕一个核心张力展开:

AI 正在让软件开发变得更容易、更民主化——但同时也在引入新的复杂性、安全风险和不确定性。

乐观面(AI 的潜力) 课程证据 审慎面(AI 的局限) 课程证据
任何人都能写代码 W1 Prompt Eng, W8 Vibe Coding AI 生成的代码有安全漏洞 W6 Copilot RCE, W8 Lovable CVE
Agent 可以自主完成复杂任务 W2 Agent, W4 Claude Code Agent 控制循环未关闭 W10 Casado 观点
AI IDE 让开发效率飙升 W3 Cursor 产品发布速度没显著提升 W10 Casado 观点
非技术人员可以构建应用 W8 v0, Bolt, Lovable "Once things break we're back to square 1" W8 Mihail Slide 16
AI 可以管理生产环境 W9 Resolve AI 复杂事故仍需人类判断 W9 Slide 18 Limitations

贯穿课程的六大反复出现的主题

主题 1:Context 是一切(Context is Everything)

  • W1: Prompt 工程的核心是提供正确的上下文
  • W4: CLAUDE.md / AGENTS.md = 给 Agent 提供项目上下文
  • W8: Bolt 系统提示词 = 约束生成行为的上下文
  • W9: Knowledge Graph = 给 AI SRE 提供生产环境的上下文
  • W10: Casado 说"good monitoring gardening"= 上下文质量

主题 2:Multi-Agent 架构无处不在

  • W4: Claude Code main agent + subagents
  • W7: Graphite AI reviewer(多维度检查)
  • W8: v0 composite model family(多模型协作)
  • W9: Resolve AI 多 Agent 并行调查

主题 3:民主化 vs 专业化的永恒张力

  • W5: Warp "terminal for everyone" vs 需要 10x 工程才能构建
  • W8: "Anyone can build an app" vs Lovable CVE 证明安全需要专业知识
  • W10: Cursor(专业开发者)vs Bolt/Lovable(非技术用户)

主题 4:安全是被低估的隐忧

  • W6: Copilot RCE(CVE-2025-53773)
  • W8: Lovable RLS 漏洞(CVE-2025-48757)+ 账户接管
  • W9: "Security could be a new attack vector"
  • 每当 AI 获得更多系统权限,安全风险同步升级

主题 5:从 AI-Assisted 到 AI-Native 的演进

  • W1-W3: AI 作为助手
  • W4-W7: AI 作为团队成员
  • W8-W9: AI 作为自主执行者
  • W10: 这个演进会走多远?(Casado 持审慎态度)

主题 6:人类工程师的不可替代性

  • W7: "AI 检测率 55-60%"——还有一半错误需要人类发现
  • W8: "Once things break"——需要人类修复
  • W9: "Complexity of incidents"——复杂事故需要人类判断
  • W10: Casado "agent 控制循环未关闭"——人类监督仍然必要

课程嘉宾阵容回顾

周次 嘉宾 公司/角色 核心贡献
W5 Zach Lloyd Warp CEO 产品设计哲学 + Terminal as ADE
W7 Blake Smith Graphite 心智模型对齐 + AI code review
W8 Gaspar Garcia Vercel v0 Tech Lead Stream Manipulation + Composite Models
W9 Mayank Agarwal + Milind Ganjoo Resolve AI CTO + Staff Knowledge Graph + Vibe Debugging + Multi-Agent
W10 Martin Casado a16z General Partner 投资人视角 + 行业宏观趋势

嘉宾设计逻辑:

  • W5: 开发工具创始人(产品思维)
  • W7-W8: 技术负责人(工程深度)
  • W9: CTO + 研究员(技术 + 学术)
  • W10: 顶级投资人(行业全景)

从创始人 → 工程师 → CTO → 投资人,视角从微观走向宏观


⚡ 第十周核心金句

Martin Casado: "This feels like 1996."

Casado: "Every company I work with uses Cursor. Has that increased the velocity of the products coming out? I don't think that much."

Casado: "It's almost like it's brought coding back. These old systems programmers, vibe coding at night just because it's become pleasant again."

Casado: "I don't see a lot of evidence that we can close the control loop on these things."

Casado: "Infrastructure doesn't go away — it layers."

Casado: "Software was always the disruptor. One of the most exciting things about the AI wave is software is being disrupted — we're being disrupted."

Casado: "In the AI era, value shifts to the work the software performs on your behalf."


📚 CS146S 全课程总结

一句话总结每周

一句话
W1 AI 的基础是"如何正确地说话"——Prompt 工程和工具使用
W2 Agent 不只是 LLM——它是感知、推理、行动的自主系统
W3 IDE 不再只是编辑器——Cursor 证明 AI 可以理解整个代码库
W4 管理 AI 就像管理人——需要 Context Engineering 和明确的约束
W5 好的开发工具应该让不可能变成可能——而非只是让可能变得更快
W6 AI 在解决安全问题的同时引入了新的安全问题——两面性
W7 Code review 的核心不是找 Bug——而是保持团队心智模型一致
W8 "任何人都能构建应用"——但安全、复杂性、同质化仍是真实的限制
W9 编码只占 30%,运维才是真正的瓶颈——AI SRE 正在改变这一点
W10 我们仍在 1996——AI 正在颠覆软件本身,但控制循环尚未关闭

课程的终极问题

十年后,"软件工程师"这个角色还存在吗?

课程给出的答案: 存在,但会发生根本性变化。

不会消失的能力 会被 AI 替代的工作
系统架构设计 样板代码编写
安全意识和判断 常规 Bug 修复
产品定义和用户理解 标准化测试生成
AI 协调和监督 简单应用构建
复杂事故的根因判断 常规事故分诊
"品味"(Casado: "If you have strong taste") 初稿生成

最终洞见: 未来的软件工程师不是"写代码的人"——而是定义问题、设计系统、监督 AI、确保质量的人。这正是 CS146S 的副标题——"The Modern Software Developer"——真正的含义。

阅读材料笔记

本周暂无阅读材料笔记。