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

2026年1月9日 04:35:39

In the evolution of programming languages, prompting is the next phase in the progression.

//Prompts(提示词)是与 LLM 沟通的"通用语言"(lingua franca),也是有效"编程"它们的方式。

  1. 编程范式的转变:从"写代码告诉计算机怎么做"变成"用自然语言描述你想要什么"
  2. Prompt 即程序:在 LLM 时代,精心设计的提示词就是一种新形式的"编程"
  3. 更低的门槛:不需要编程背景也能让 AI 完成复杂任务
  4. 更高的灵活性:通过修改提示词就能快速调整模型行为

Question: how should the next generation of software engineers leverage these advances to 10x their productivity and prepare for their careers?

We'll show that software development has evolved from 0-1 code creation to an iterative workflow of plan, generate with AI, modify, and repeat. Students will master both the theory behind traditional software engineering challenges and the cutting-edge AI-powered tools solving them today.

//作为一个主要用LLM写程序的人,需要掌握的传统软件工程理论有哪些?


  • Prompting is both an art and a science
  • Black-box nature of LLMs means there’s some magic to LLM-whispering effectively
  • …but there are established techniques that have empirically improved LLM performance

K-shot Prompting

一种让 LLM 通过少量示例来学习任务的提示技术。

什么是 K-shot Prompting?

让 LLM 完成任务,但在提示中提供一些示例来展示"怎么做"

  • 又称为 In-context Learning(上下文学习)
  • 模型不需要重新训练,只需在 prompt 中看几个例子就能"学会"

K = 示例的数量

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

幻灯片强调 K-shot 最适合:

不需要太多推理步骤的任务

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

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

两种实现方式

Multi-shot CoT(多样本思维链)

  • 提供几个带有完整推理过程的示例
  • 让模型学会"推理的模式"

Zero-shot CoT(零样本思维链)

  • 无需示例,只需添加一句魔法咒语:

"Let's think step-by-step"(让我们一步步思考)

这句简单的话能显著提升 LLM 在复杂任务上的表现

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

通过强迫模型展示中间步骤,减少了"跳跃式思维"导致的错误。

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

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

具体步骤:

  1. 多次采样:对同一问题生成多个回答(通常配合 Chain-of-Thought)
  2. 多样化推理:每次采样可能走不同的推理路径
  3. 汇总投票:统计所有答案,选择出现频率最高的

1️⃣ 减少幻觉和错误答案

"Reduces hallucinations/incorrect answers"

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

2️⃣ 模型集成思想

"A form of model ensembling by sampling diverse reasoning paths"

这实际上是自己和自己做集成学习

  • 传统集成:多个不同模型投票
  • Self-consistency:同一模型的多个推理路径投票

与其他技术的关系

K-shot Prompting

      ↓ 添加推理步骤

Chain-of-Thought (CoT)

      ↓ 多次采样 + 投票

Self-consistency Prompting  ← 我们在这里!

Self-consistency 通常建立在 CoT 的基础上,先让模型"一步步思考",再通过多次采样找最稳定的答案。

使用建议

  • 高风险决策时使用(如医疗、金融场景)
  • 结合 temperature > 0 以获得多样化的推理路径
  • 采样次数通常 5-10 次即可看到效果
  • 注意成本-准确率的平衡

核心原则:当一个答案不够可靠时,多问几遍! 🎲

Tool Use(工具使用)

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

LLM 不再是"孤岛",而是可以:

  • 🔍 调用搜索引擎查最新信息
  • 🧮 调用计算器做精确计算
  • 📊 调用数据库查询真实数据
  • 🌐 调用 API 执行实际操作

减少幻觉(Reducing Hallucinations)

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

赋予自主能力(Enabling Autonomy)

工具使用让 LLM 从"问答机器"升级为"能做事的 Agent"

//从工具使用开始,AI就变成了Agent。Antigravity只是多了一个操控浏览器,能力就放大很多很多。

常见工具类型

类型 示例 作用
信息检索 搜索、RAG 获取最新/专业知识
计算工具 计算器、代码执行 精确计算
数据工具 数据库、文件系统 访问真实数据
动作工具 API 调用、邮件 执行实际操作
浏览器 网页交互 自动化任务

现实中的应用

你正在使用的就是 Tool Use!

我(Antigravity)可以:

  • 📂 读写文件 (view_file, write_to_file)
  • 💻 执行命令 (run_command)
  • 🌐 浏览网页 (browser_subagent)
  • 🔍 搜索代码 (grep_search)

这就是 Tool Use 让 AI 从"聊天机器人"变成"AI 编程助手"的魔法

Tool Use 是 AI Agent 的核心能力,也是 LLM 走向实用的关键一步

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

这张幻灯片介绍了 RAG,一种通过检索外部知识库来增强 LLM 回答质量的技术。


核心思想

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

//最早的时候,在Chatwise中,先用Deepseek搜索信息,再让Claude基于搜索信息推理生成。

传统 LLM:

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

RAG 方式:

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

四大核心优势

1️⃣ 注入上下文数据(Infuse with Contextual Data)

让 LLM 能够使用它没有训练过的数据

  • 公司内部文档
  • 个人笔记
  • 专业领域资料
  • 实时更新的信息

2️⃣ 保持最新(Without Retraining)

Faster iteration(更快的迭代)—— 更新文档即可,无需重新训练模型

3️⃣ 免费获得可解释性和引用(Interpretability & Citations)

可追溯 + 可验证 = 更可信

4️⃣ 减少幻觉(Reduces Hallucinations)

  • LLM 基于真实检索的文档回答
  • 不再需要"凭记忆"编造答案
  • 有据可查,错误可追踪

现实中的应用

幻灯片底部提到了一个重要例子:

"When you @context in Cursor/Windsurf/etc this is utilizing RAG."

当你在 CursorWindsurf 等 AI 编程工具中使用 @ 引用文件时,背后就是 RAG:

你输入:@app.js 这个文件有什么 bug?

实际发生:

  1. 系统检索 app.js 文件内容
  2. 将内容注入到 prompt 中
  3. LLM 基于实际代码内容回答

RAG vs 其他技术对比

技术 解决的问题 成本
Fine-tuning 改变模型行为/风格
RAG 注入新知识/事实
Tool Use 执行动作/获取实时信息

**RAG = 给 LLM 配一个私人图书管理员 **

不需要让 LLM "记住"所有知识,只需要在需要时"查阅"相关资料即可

Reflexion(反思机制)

这张幻灯片介绍了 Reflexion,一种让 LLM 自我反思并迭代改进输出的技术。


核心思想

让 LLM 回顾自己的输出,判断是否正确,并在必要时修正

这就像让学生"检查答案"——做完题后再审视一遍,发现错误及时改正。

关键机制

1️⃣ 反思自己的输出(Reflect on Output)

LLM 不仅要给出答案,还要:

  • 审视自己的回答
  • 评估是否正确
  • 识别潜在问题

2️⃣ 环境反馈循环(Environment Feedback Loop)

"Verbal feedback from environment signals are reincorporated into the LLM by augmenting the context"

LLM 行动 → 环境反馈 → 反馈注入上下文 → LLM 再次思考

例如:

  • 代码执行后报错 → 错误信息反馈给 LLM → LLM 修复代码
  • 测试失败 → 失败原因反馈 → LLM 调整方案

3️⃣ 反思提示后缀(Prompt Suffix)

在 LLM 完成任务后,添加反思指令:

"Now critique your answer. Was it correct? If not, explain why and try again."

(现在评判你的答案。它正确吗?如果不正确,解释原因并重试。)

4️⃣ 多轮提示(Multi-turn Prompting)

现实应用

幻灯片底部强调了两个重要观点:

自主编程 Agent 的核心

"Workhorse of autonomous coding agents"

现代 AI 编程助手(如 Cursor、Copilot)大量使用 Reflexion

现代编程 IDE 的 Agentic 行为基础

"Reflexion is how we get fully agentic behaviors in modern coding IDEs"

没有 Reflexion,AI 只能"一次性"给答案; 有了 Reflexion,AI 能够持续改进直到任务完成

与其他技术对比

技术 核心机制 何时改进
Self-consistency 多次采样投票 生成时
Reflexion 反思+迭代修正 生成后
CoT 展示推理过程 生成中

传统 LLM: 问题 → 答案(一次性)

Reflexion: 问题 → 答案 → 反思 → 改进 → 更好的答案(不断循环迭代)

Reflexion = 让 AI 学会"三思而后行" + "知错就改" 🔄

这就是为什么现代 AI Agent 能够自主完成复杂任务——它们会不断反思和改进,直到把事情做对

System Prompt(系统提示)


什么是 System Prompt?

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

两个关键特征:

1️⃣ 用户通常看不到(Usually Not Seen by End User)

System Prompt 是"幕后指令",用户只看到自己的输入和 AI 的回复。

2️⃣ 定义人设、规则和风格(Persona, Rules, Style)
元素 作用 示例
Persona(人设) AI 是谁 "你是一位资深软件工程师"
Rules(规则) AI 能做/不能做什么 "不回答政治敏感话题"
Style(风格) 如何表达 "用简洁专业的语言回答"

System Prompt 的作用

没有 System Prompt:

    用户:写一段代码

    AI:(可能回复任何风格)

有 System Prompt:

    [System: 你是专业的Python开发者,代码要有注释,使用类型提示]

    用户:写一段代码

    AI:(按照设定的专业风格回复)

现实中的应用

ChatGPT 的 System Prompt 结构:

  • 定义能力边界
  • 设置回复格式
  • 声明知识截止日期
  • 规定安全准则

Claude 的 System Prompt:

  • 强调 helpful、harmless、honest
  • 定义拒绝场景
  • 设置对话风格

你正在使用的 Antigravity(我):

我的 System Prompt 定义了:

  • 我是 Google DeepMind 开发的 AI 编程助手
  • 我可以使用各种工具(文件操作、命令执行等)
  • 我的回复风格(markdown 格式、专业但友好)
  • Web 开发的美学标准

Prompt 类型对比

类型 谁写的 谁能看到 作用
System Prompt 开发者 开发者 定义 AI 行为基准
User Prompt 用户 用户 + 开发者 用户的实际需求
Few-shot Examples 开发者/用户 视情况 教会特定任务

关键记忆点

System Prompt = AI 的"人格说明书" + "行为守则"

它决定了:

  • AI 是谁(身份)
  • AI 怎么说话(风格)
  • AI 能做什么/不能做什么(规则)

这是构建任何 AI 应用的第一步,也是最重要的一步


其它实践技巧

结构化格式(Structured Formatting)

原则:使用结构化格式来组织 Prompt

"Prompts should be formatted with structure"

幻灯片展示了一个使用 XML 标签 来组织信息的示例:

Here are the logs:

<log>

LOG MESSAGE

<log>

and the stack trace:

<error>

STACK TRACE

<error>

为什么要结构化?

❌ 无结构 ✅ 有结构
信息混杂一起 信息边界清晰
LLM 可能混淆 LLM 准确解析
难以指定处理规则 可针对标签设规则

常用的结构化标签:

  • <code>, <error>, <log> — 技术内容
  • <context>, <background> — 背景信息
  • <instruction>, <task> — 任务说明
  • <example>, <output> — 示例和期望输出

Prompt Improvement(提示词优化工具)

幻灯片推荐了 Anthropic 的官方工具:

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/prompt-improver

这是一个自动优化 Prompt 的工具

  • 输入你的原始 prompt
  • AI 帮你改写成更有效的版本
  • 学习专业的 prompt 写法

2️⃣ Clear Prompting(清晰提示测试法)

"Give prompt to someone with minimal context and if they're confused, an LLM will be too"

核心思想:人类测试法

你的 Prompt

    ↓

找一个不了解背景的人阅读

    ↓

他们能理解吗?

    ↓

   能 → LLM 大概也能理解

   不能 → LLM 也会困惑!

Role Prompting(角色提示法)

"Use role prompting aggressively to make system prompts more powerful"

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

❌ 普通指令:

"回答编程问题"



✅ 角色提示:

"你是一位拥有 20 年经验的 Google 资深软件工程师,

专精于分布式系统和性能优化。你的回答应该:

- 考虑边界情况

- 关注可扩展性

- 提供代码示例

- 解释权衡取舍"

角色提示的力量

效果 解释
专业深度 模型会调用"该角色应有"的知识
一致风格 回答保持角色特征
隐含规则 角色自带行为预期

实用角色模板

你是 [角色名称],一位 [专业背景/年限]。

你的专长包括:

- [技能1]

- [技能2]

- [技能3]

你的回答风格:

- [风格特点]

你会避免:

- [限制事项]

Be Explicit(明确表达你想要什么)

"Be explicit about what you want (languages, tech stacks, libraries, constraints)"

不要让 LLM 猜测你的需求,直接说清楚:

维度 ❌ 模糊的 ✅ 明确的
语言 "写个脚本" "用 Python 3.11 写个脚本"
技术栈 "做个网站" "用 React + TypeScript + Vite 做个网站"
"画个图表" "用 Matplotlib 画个折线图"
约束 "写个函数" "写个函数,不使用外部库,时间复杂度 O(n)"

越明确 = 越少歧义 = 越好的结果


Decompose Tasks(分解任务)

"Decompose tasks"

将大任务拆分成小步骤,逐个完成:

❌ 一个巨大的任务:

"帮我做一个完整的电商网站"

✅ 分解后的任务:

1. "设计数据库 schema(用户、商品、订单)"

2. "实现用户认证 API"

3. "实现商品 CRUD API"

4. "实现购物车功能"

5. "实现订单流程"

6. "设计前端页面结构"
...

为什么要分解?

大任务的问题 分解后的优势
LLM 容易"迷失" 每步目标清晰
难以验证正确性 逐步验证
出错难以定位 问题易隔离
上下文爆炸 上下文可控

任务分解的技巧

大任务

  │

  ├─── 阶段 1:规划

  │       └── "分析需求,列出所有功能点"

  │

  ├─── 阶段 2:设计

  │       └── "设计架构和数据模型"

  │

  ├─── 阶段 3:实现

  │       ├── 子任务 A → 验证 ✓

  │       ├── 子任务 B → 验证 ✓

  │       └── 子任务 C → 验证 ✓

  │

  └─── 阶段 4:整合

          └── "集成所有模块并测试"

与 Vibe Coding 实践的联系

这两条原则正是高效 Vibe Coding 的核心

"We'll talk a lot more about task decomposition in the next lessons."

课程后续会深入讲解任务分解技术,因为这是:

  • AI Agent 的核心能力(规划和执行)
  • 复杂项目成功的关键
  • Prompt Engineering 的高级技巧