课程目录

第 1 课 · 现代软件开发者(斯坦福 CS146S)

How LLMs Are Made and Power Prompting

本篇听书与视频

7 分钟 · 双主持人讲解

B 站第三方搬运视频(UP 主:世界课程精选站,中文配音),原课程为斯坦福 CS146S Fall 2025 · 在 B 站打开

大模型怎么来的,以及六种提示词技法

CS146S 开课第一周就先表明态度:这不是一门“氛围编程”(vibe coding)课。讲师 Mihail Eric 认为,只靠按 Tab 接受 AI 生成的代码,目前还写不出可靠的生产级软件。他想教的是“人机协同工程”:人负责系统思维、业务理解和架构判断,智能体负责大量执行。第一周打两个基础,一是看懂大模型是怎么训练出来的,二是学会把提示词写准确。

学习目标

  • 说清大模型“预测下一个 token”的基本机制,以及上下文长度为什么这么关键。
  • 分清预训练、监督微调、偏好对齐三个训练阶段,各自教会模型什么。
  • 掌握零样本、K 样本、思维链、自洽性、工具调用、RAG、Reflexion 七种写法的适用场景。
  • 理解系统提示词、用户提示词、助手回复三者是怎么叠在一起的。

核心概念

大模型是自回归的下一个 token 预测器。 输入先按固定词表切成 token,再映射成上千维的向量,经过几十层自注意力 Transformer,最后输出“下一个 token 是什么”的概率分布。课上特别强调:模型每一步都以前面全部内容为条件,所以上下文给什么、给多少,直接决定了输出质量。

三个训练阶段。 预训练用 Common Crawl、维基百科、公开 GitHub 仓库等海量语料,让模型学会语言和代码的规律。监督微调用几万到几十万条精选的“指令—回答”对,教模型听懂指令。偏好对齐收集人类对多个回答的偏好排序,再训练奖励模型,让输出更有用、更正确、更易读。推理模型在此之上又加了思维链轨迹训练和强化学习,学会评估自己的推理、发现走错时回退。

在编程场景里的长处和短板。 长处是代码补全、代码理解和修复。短板有四个:一是幻觉,比如编造不存在或已过时的 API,在公开代码少的语言上更明显;二是上下文窗口虽然有十几万 token,但存在“首尾偏好”和“中间遗忘”,不是每个位置都同样有效;三是延迟,一次请求要几秒到几分钟,需要提前安排好自己的工作;四是成本,好模型的输出 token 依然不便宜,不过价格大约每年降一个数量级。

提示词就是新的编程语言。 课上把提示词的演变类比成搜索引擎查询的演变:从布尔表达式变成了自然语言。它一半是艺术,一半有经验证据支撑。下面几种技法在课上都配了“改写前 / 改写后”的对照例子:

  • 零样本:直接下指令,不给任何示例。适合常见的通用任务。
  • K 样本(上下文学习):给 1、3、5 个示例,让模型照着格式和风格来。适合模型没见过的内部 API 和团队命名规范。示例给太多反而会把模型限制死。
  • 思维链(CoT):让模型先写推理再给答案。可以在提示词里放带推理过程的示例,也可以直接说“一步一步想”。适合多步逻辑,比如算法和数学题。
  • 自洽性:同一个问题采样多次,取出现最多的答案,相当于给推理路径做集成,能降低偶然错误。
  • 工具调用:告诉模型有哪些外部命令可以用,比如单元测试和集成测试的运行命令,让它自己去验证结果。这是减少幻觉、让模型能自主行动的关键一步。
  • RAG(检索增强生成):把相关代码片段和文档地址塞进上下文,不用重新训练模型就能获得最新知识,还顺带有了出处可查。在 IDE 里用 @ 引用文件,本质上就是 RAG。
  • Reflexion(自我反思):执行后把环境反馈(比如失败的测试)加回上下文,要求模型自我批评并重试。这是自主编码智能体最主要的工作方式。

三种消息角色。 系统提示词通常用户看不到,规定模型的身份、规则和风格。用户提示词是你的具体要求。助手消息是模型的输出。课上专门展示了一个前沿模型的系统提示词,说明 Claude Code、Cursor 这类工具在你看不到的地方加了大量提示词。

实践步骤

第一周的作业叫“提示词练习场”,要在本地跑开源模型,用不同技法把测试脚本跑通:

  1. 按仓库 README 准备 Python 3.12 环境,用 Poetry 安装依赖。
  2. 安装 Ollama,拉取作业指定的两个本地模型(mistral-nemo:12b 和 llama3.1:8b)。
  3. 依次打开 k_shot_prompting.py、chain_of_thought.py、tool_calling.py、self_consistency_prompting.py、rag.py、reflexion.py,先读文件顶部的任务说明。
  4. 只改标了 TODO 的提示词部分,不要动模型参数,反复调整直到测试脚本通过。
  5. 保存每种技法最终的提示词和输出,留作对照。

常见误区

  • 把“说清楚”当成可选项。 课上给了一个检验方法:把提示词交给一个毫无背景的人,如果他看不懂,模型多半也会犯糊涂。
  • 示例越多越好。 K 样本适合格式和风格对齐。用在知名库和通用任务上,或者示例塞得太多,反而会限制模型。
  • 只靠模型的记忆。 涉及版本敏感的 API 时,应该用 RAG 把文档喂给模型,而不是指望它记得准。
  • 一次就下结论。 采样温度不为零时,单次输出不能代表模型的真实水平,自洽性就是为这个问题设计的。

动手练习

挑一个你所在项目里真实的小需求,比如“按团队命名规范写一个遍历列表的函数”,分别写一版零样本提示词和一版带两个仓库内示例的 K 样本提示词,比较两次输出与团队规范的差距。然后给同一个需求加上“可以运行的测试命令”这一工具描述,观察模型是否会主动要求运行测试。

要点回顾

第一周有两个结论:大模型的输出质量取决于你给它的上下文,提示词是你能直接控制的那部分上下文。工具调用、RAG 和 Reflexion 这三种技法,正是后面各周编码智能体的地基。讲师给全课定的基调是:模型的水平取决于用它的人,好上下文才有好代码;如果你自己都看不懂代码库,模型也看不懂。

参考来源