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. 开放问题
- 如何自动化每个任务前 10-20% 的研究阶段?(目前仍是 Planning 的瓶颈)
- 如何维护待处理任务队列?(一次性变更容易,但持续管理多任务的工作流尚未成熟)
第二讲: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(到处可用)
三大支柱:
- Terminal-native(终端原生)
- Low-level model access(底层模型访问)
- 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 特定) |
统一理解:
- 第一讲建立了 "Agent Manager" 的角色模型和工具箱(Hooks、Commands、Subagents)
- 第二讲通过 Claude Code 展示了这些概念的具体产品实现
- 两讲共同传递的信息:开发者的核心技能从 "写代码" 转向 "管理 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 完成编码任务