斯坦福大学 CS146S 课程笔记(1)

从 K-shot Prompting 到 RAG,全面解析 LLM 时代的编程范式与 Prompt Engineering 核心技术。

课程抛出的核心问题是:下一代软件工程师如何利用 AI 进展实现 10 倍生产力提升?

答案的起点是 Prompting。在编程语言的演进中,Prompt 是下一个阶段——与 LLM 沟通的"通用语言",也是有效"编程"它们的方式。

软件开发正在从"0-1 代码创作"演变成"规划 → AI 生成 → 修改 → 重复"的迭代工作流。


K-shot Prompting

让 LLM 通过少量示例学习任务。又叫 In-context Learning。

K 代表示例的数量。经验研究表明 1、3、5 个示例通常效果最佳。示例不在于多,而在于精准和有代表性。

最适合不需要太多推理步骤的任务。


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

让 LLM 展示解决问题的推理步骤,而不是直接给答案。

两种实现方式:

Multi-shot CoT:提供几个带有完整推理过程的示例,让模型学会"推理的模式"。

Zero-shot CoT:不需要示例,只需要加一句魔法咒语——"Let's think step-by-step"

这句简单的话能显著提升 LLM 在复杂任务上的表现。通过强迫模型展示中间步骤,减少了"跳跃式思维"导致的错误。

特别适合需要多步逻辑推理的任务,比如数学和编程。


Self-consistency Prompting(自一致性提示)

让 LLM 多次回答同一个问题,然后选择出现最多的答案。

步骤:

  1. 对同一问题生成多个回答(通常配合 CoT)
  2. 每次采样可能走不同的推理路径
  3. 统计所有答案,选频率最高的

单次回答可能"走歪",但如果多条推理路径都指向同一个答案,那个答案更可能是正确的。

这实际上是自己和自己做集成学习——同一模型的多个推理路径投票。

使用建议:高风险决策时使用,结合 temperature > 0 获得多样化推理路径,采样次数 5-10 次即可看到效果。


Tool Use(工具使用)

让 LLM 能够"求助"外部系统,而不是凭空回答所有问题。

LLM 不再是孤岛,可以:

工具让 LLM 说"我不确定,让我查一下",而不是胡说八道。

从工具使用开始,AI 就变成了 Agent。我用的 Antigravity 就是个例子——能读写文件、执行命令、浏览网页。这就是 Tool Use 让 AI 从"聊天机器人"变成"AI 编程助手"的关键。


RAG(检索增强生成)

先检索相关信息,再让 LLM 基于检索结果生成回答。

传统 LLM:用户问题 → LLM(仅凭训练数据)→ 回答

RAG 方式:用户问题 → 检索知识库 → 找到相关文档 → LLM(问题 + 文档)→ 回答

四大优势:

注入上下文数据:让 LLM 使用它没训练过的数据——公司内部文档、个人笔记、专业领域资料、实时更新的信息。

保持最新:更新文档即可,不需要重新训练模型。

可解释性和引用:可追溯 + 可验证 = 更可信。

减少幻觉:基于真实检索的文档回答,不用"凭记忆"编造答案。

当你在 Cursor、Windsurf 里用 @ 引用文件时,背后就是 RAG。

RAG 和其他技术的对比:Fine-tuning 改变模型行为/风格(成本高),RAG 注入新知识(成本低),Tool Use 执行动作/获取实时信息(成本中)。


Reflexion(反思机制)

让 LLM 自我反思并迭代改进输出。就像让学生"检查答案"——做完再审视一遍,发现错误及时改正。

关键机制:

反思自己的输出:LLM 不仅给答案,还要审视自己的回答、评估是否正确、识别潜在问题。

环境反馈循环LLM 行动 → 环境反馈 → 反馈注入上下文 → LLM 再次思考。比如代码执行后报错,错误信息反馈给 LLM,LLM 修复代码。

反思提示后缀:在任务完成后添加指令——"Now critique your answer. Was it correct? If not, explain why and try again."

Reflexion 是现代 AI Agent 的核心能力。没有它,AI 只能一次性给答案;有了它,AI 能持续改进直到任务完成。


System Prompt(系统提示)

发送给 LLM 的"第一条消息",定义 AI 的身份和行为准则。

两个特征:用户通常看不到;定义人设、规则和风格。

元素作用示例
PersonaAI 是谁"你是一位资深软件工程师"
Rules能做/不能做什么"不回答政治敏感话题"
Style如何表达"用简洁专业的语言回答"

System Prompt 是构建任何 AI 应用的第一步,定义了 AI 是谁、怎么说话、能做什么。


其他实践技巧

结构化格式

用 XML 标签组织信息,信息边界清晰,LLM 能准确解析。常用标签:<code>, <error>, <log>, <context>, <instruction>, <example>

清晰提示测试法

把 prompt 给一个不了解背景的人看。他们能理解吗?能的话 LLM 大概也能,不能的话 LLM 也会困惑。

角色提示法

积极使用角色设定来增强效果:

❌ "回答编程问题"

✅ "你是一位拥有 20 年经验的 Google 资深软件工程师,
专精于分布式系统和性能优化。你的回答应该:
- 考虑边界情况
- 关注可扩展性
- 提供代码示例"

明确表达

不要让 LLM 猜测需求。直接说清楚语言、技术栈、库、约束。越明确 = 越少歧义 = 越好的结果。

分解任务

将大任务拆成小步骤。"帮我做一个完整的电商网站"不如拆成:设计数据库 schema、实现用户认证 API、实现商品 CRUD API、实现购物车功能……

LLM 处理大任务容易迷失,分解后每步目标清晰,逐步验证,问题易隔离,上下文可控。


与 Vibe Coding 的联系

这些原则是高效 Vibe Coding 的核心。课程后续会深入讲解任务分解技术——这是 AI Agent 的核心能力、复杂项目成功的关键、Prompt Engineering 的高级技巧。