本文作者:meng shao(@shao__meng)。版权归作者所有,未经授权禁止转载。


斯坦福大学 CS146S: The Modern Software Developer

@mihail_eric 教授主讲的为期 10 周的公开课程第一周课程资料和代码都已公开,假期学起来!

Eric 教授认为:软件开发的主体正在从"人写代码"转向"人定义意图、Agent 执行、人与 Agent 共同评估和迭代"。他这门课程,要教的就是这套新工作流所需的全部能力栈:如何给 Agent 提供上下文和工具、如何把产品需求翻译成可执行的规格、如何设计人机协同的迭代闭环。

Week 1:Coding Agent 内部机制

第一周的任务是拆掉 LLM 黑盒:在动手用这些概念之前,先让你理解 coding agent 不是魔法产品,是一个你能在 200 行代码内亲手复现的工程结构!

Article image

LLM 到底是什么,以及不是什么

这一讲的核心不是讲 transformer,是建立正确的心智模型:LLM 是一个无状态的文本到文本函数:输入一段文本,输出“下一段最可能的文本”,没有记忆、没有目标、更没有行动能力。

由此得出本周最重要的推论:agent 的一切“能动性”都来自模型外部的循环。 模型自己只会“说下一句话”;当这句话恰好是一次工具调用,而外部系统真的去执行它、再把结果喂回给模型时,才产生了“行动”。所以 agent = LLM + 工具 + 循环,三者缺一不可。

Agent Loop:引擎盖下的循环

messages = [system_prompt, user_task]
while True:
    response = llm(messages, tools)
    if response 包含工具调用:
        results = 执行这些工具调用
        messages.append(response, results)   # 结果作为新的输入喂回
    else:
        break   # 模型不再调用工具,即认为任务完成

三个值得注意的设计事实:

· 停止条件由模型自己决定。 循环退出不是外部逻辑判断“做完了”,是模型某轮不再发出工具调用。这意味着任务能否收尾,本质是提示词工程问题。

· 上下文窗口就是 agent 的全部工作记忆。 每轮循环只追加、不遗忘(除非主动压缩),工具返回的结果就是它的“感官输入”。后面几周讲的上下文管理、压缩,都是在给这个内存约束做工程。

· 核心循环极简,复杂度在别处。 这正是“200 行构建 Claude Code”这个练习成立的原因。

核心工具集:read / write / edit / bash

为什么几乎所有主流 agent 都收敛到这四个工具?因为它们最小且完备:

· read(配合 grep/glob):探索代码库,获取信息

· edit:对现有文件做精确的局部修改

· write:创建新文件

· bash:万能逃逸阀,跑测试、git 操作、装依赖、构建,任何能命令行化的能力都能由此获得

一次典型任务在这个工具集上的流动轨迹是:接到需求 → grep/ls 定位相关文件 → read 建立理解 → 形成修改假设 → edit 落盘 → bash 跑测试 → 读报错 → 再修改 → 直到通过。这条“观察→行动→观察”的交替轨迹就是经典的 ReAct 模式,agent 的推理过程,外化为一条可审计的工具调用序列。这也是为什么 coding agent 的行为可以回放、可以评估。

生产级 agent 的系统提示词

周四是本周的深水区:拆解定义 SOTA 编码智能体的系统提示词(Claude Code、Cursor、Devin 等公开或被披露的版本)。核心观点是:系统提示词不是一段性格描写,是一份写给模型的操作手册。 生产级提示词普遍呈现清晰的结构分层:

  1. 身份与环境锚定:你是谁、工作目录、操作系统、日期、git 状态。把模型“放进”这台机器里。
  2. 工具使用规则:何时用哪个工具,以及强制前置条件(典型如“Edit 之前必须先 Read 该文件”)。
  3. 工作流规范:先探索再修改、小步进行、用测试验证而非假设成立。
  4. 安全边界:不主动 push、不删数据、破坏性命令需确认。
  5. 输出与沟通风格:对用户如何汇报。

这里有一个容易被忽视的观察:工具的 description 本身就是提示词的一部分,而且在 Claude Code 这类产品中往往比系统提示词正文更长、打磨更细。每个工具描述都在教模型“何时该用我、怎么用我、什么情况下别用我”。

这些提示词的共同写作特征:祈使句、极度具体、大量“防呆条款”,模型过去犯过的每类错误,都沉淀成一条明确的禁令或要求。提示词工程在这里的本质,是把工程约束翻译成模型能稳定遵守的语言。

“200 行 Claude Code” 的用意

周二课程用 200 行实现一个 Claude Code 的骨架,目的是 demystify:一个能用的 agent = 核心循环 + 四个工具 + 一份认真的提示词。而真实产品多出来的几万行是什么?是工程加固:上下文压缩、权限系统、diff 的可靠应用、错误恢复、子 agent、缓存优化。骨架与产品的差距,全部是可解释、可学习的工程问题,没有魔法。

这也为后续几周铺路:先看到“裸机”,再逐层加装 MCP、Skills、规格驱动开发,每一周都是在这台裸机上多理解一个部件。

Week 1 总结

Week 1 想让你带走的 心智模型是三句话:LLM 是无状态的文本函数;agent 是围绕它的工具执行循环;系统提示词和工具描述是这个循环的操作系统。 学完之后,你应该既写得出一个 mini coding agent,也读得懂任何生产级 agent 的提示词结构。

Week 1 课件:

https://docs.google.com/presentation/d/1uztIhjHAG6O_9QOD1N_3wdhwhABml1fANXEN2dGwdbg/edit?usp=drive_link

200 行代码:

https://drive.google.com/file/d/1DxKa_autBOu9s8DvItodgUAwH_pBg7aR/view