In the evolution of programming languages, prompting is the next phase in the progression.
//Prompts(提示词)是与 LLM 沟通的"通用语言"(lingua franca),也是有效"编程"它们的方式。
- 编程范式的转变:从"写代码告诉计算机怎么做"变成"用自然语言描述你想要什么"
- Prompt 即程序:在 LLM 时代,精心设计的提示词就是一种新形式的"编程"
- 更低的门槛:不需要编程背景也能让 AI 完成复杂任务
- 更高的灵活性:通过修改提示词就能快速调整模型行为
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 多次回答同一个问题,然后选择出现最多的答案
具体步骤:
- 多次采样:对同一问题生成多个回答(通常配合 Chain-of-Thought)
- 多样化推理:每次采样可能走不同的推理路径
- 汇总投票:统计所有答案,选择出现频率最高的
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."
当你在 Cursor、Windsurf 等 AI 编程工具中使用 @ 引用文件时,背后就是 RAG:
你输入:@app.js 这个文件有什么 bug?
实际发生:
- 系统检索 app.js 文件内容
- 将内容注入到 prompt 中
- 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 的高级技巧