这份合集是吴恩达 DeepLearning.AI「Agentic AI」系列课程的精华笔记,帮你快速掌握 Agent 开发的核心逻辑。

学习建议:

  • 重思维,轻代码: 这套课公认必学,核心价值在于传授“工程落地”的设计模式与迭代方向,这比单纯学写代码更重要。
  • 先扫盲,再精读: 建议先了解我之前写的《Agent = LLM + 四大组件:一个公式讲清楚 AI Agent》,不必死磕基础,直接上手学构建方法。
  • 搭配食用: 边看视频边对照本合集,吸收效率翻倍。

注:文中引用块内容为笔者个人学习观点,仅供参考;其余均为原课程干货梳理。

[Module 2] 反思设计模式

2.1 用反思提升任务输出

这节课讲的是怎么让AI像人写作文一样,先写初稿,然后自己回头看,挑毛病再改,反复几轮就能写出更好的东西。我个人观点这一节的核心就是这种"生成-检查-改进"的循环不是什么高深技术,但确实管用,最有效的还是结合外部真实反馈的那种。

将这一过程比作人类写作:我们写完初稿后,会回头阅读、发现问题(如模糊不清、拼写错误、遗漏署名),然后进行修改,最终得到一份更完善的文稿。

核心类比:人类反思 → AI 反思。这不仅是模仿,更是赋予 AI 一种自我优化的能力。

案例1:以写邮件为例

在这里插入图片描述

人类反思流程:从初稿到定稿

以 Ng 自己写给 Tommy 的邮件为例:

  1. 初稿:问题1——模糊性,“next month” 不够具体;问题2——拼写错误,“fre” 应为 “free”;问题3——不完整,邮件没有署名
  2. 反思与改进:改进点——明确了日期范围,修正了拼写错误,并添加了署名

AI反思流程:硬编码的"提示-反思"工作流

  1. 第一阶段:生成初稿,向 LLM 发送一个初始提示,LLM 根据提示生成第一个版本的输出
  2. 第二阶段:反思与改进,将第一版输出作为新的输入,再次发送给 LLM(可以是同一个模型,也可以是另一个专门用于推理的模型),这次的提示语会不同,要求其反思并写出改进版

关键点:这个流程是"硬编码"的,即工程师预先设计好整个步骤,而不是让模型自主决定何时反思。这是一种可靠且易于实现的工程化方法。

案例2:代码编写

在这里插入图片描述

基础版:模型自省

  1. 提示 LLM 编写一段代码(code V1)
  2. 将 code V1 再次输入给 LLM,提示其"检查代码中的错误并写出改进版"
  3. 结果:得到修复了潜在 bug 的 code V2

进阶版:利用"思考模型"去检查

不同的 LLM 有不同的专长。可以使用一个擅长快速生成的模型来写初稿,再用一个"思考模型"、更擅长逻辑推理和错误排查的模型来进行反思和改进。这种组合能发挥各自的优势,达到"1+1>2"的效果。

终极形态:结合外部反馈的反思

反思最强大的形式是结合外部反馈。仅仅让模型"内省"是有限的,而引入来自模型之外的新信息,则能带来质的飞跃。

以上面的代码为例做结合外部反馈的反思:

  1. 生成初稿:LLM 生成 code V1
  2. 执行代码:在安全的沙盒环境中运行 code V1
  3. 获取外部反馈:系统捕获代码的实际输出和任何错误信息,例如 SyntaxError: unterminated string literal
  4. 反思与改进:将 code V1、Output 和 Errors 一起作为输入,交给 LLM 进行反思,要求其根据这些具体的、客观的反馈来重写代码
  5. 获得终稿:LLM 基于真实的执行结果,修正错误,生成功能正确的 code V2

图片

总结:

  1. 反思不是魔法,而是工程实践:它不能保证模型每次都100%正确,但能带来"适度的性能提升",是性价比极高的优化手段
  2. 外部反馈是关键:反思的力量在于能否获取并利用外部信息。如果能运行代码、查询数据库或调用 API,将这些结果作为反馈输入,就能让模型进行更深层次的反思,从而产出更优的结果
  3. 设计哲学:当你有机会获取额外信息时,请务必将其融入反思流程。这是提升系统鲁棒性和输出质量的核心策略

2.2 为何不只用迭代

这节课回答了一个很实际的问题:直接让AI一次性干活和让它先干再检查再改,到底差在哪儿?我个人观点这一节的核心就是数据不会骗人,反思在所有任务上都能带来提升,哪怕是最强模型加了反思也更强,而且编写提示词时要用明确动词,别含糊地说"改进"。

核心观点:反思不是为了增加复杂度,而是为了在质量上获得"质的飞跃"。

什么是"直接生成"?

在这里插入图片描述

“直接生成"是 AI 最基础、最直观的工作方式,也常被称为"零样本提示”(Zero-shot Prompting)。

特点:简单、快速、一步到位。它不提供任何中间反馈或修正的机会。

术语解释:"零样本提示"中的"零样本"指的是在提示中没有提供任何输入-输出示例。

  • 零样本:写一个关于黑洞的文章(无示例)
  • 单样本:写一个关于黑洞的文章 + 示例1
  • 少样本:写一个关于黑洞的文章 + 多个示例

反思在性能上全面碾压直接生成

图片

论文《Self-refine: Iterative refinement with self-feedback》的关键图表展示了7种不同任务在零样本提示与反思模式下的性能对比,包括情感反转、对话响应、代码优化、数学推理等。

在所有7个任务、所有4个被测试的模型(GPT-3.5, ChatGPT, GPT-4, Claude)中,加入反思步骤后,性能无一例外地高于对应的直接生成!

结论:反思模式在各种任务上都能稳定地提升性能。即使是最强大的 GPT-4,在加入反思后,其表现也能得到进一步增强。这说明反思是一个普适且有效的优化策略。

反思模式更适用的任务场景

在这里插入图片描述

反思模式在以下类型的复杂任务中尤其有效:

示例问题反思提示
生成HTML表格格式错误,如缺少 </tr> 标签“验证HTML代码。”
泡一杯完美的茶步骤缺失或顺序错误“检查说明的连贯性和完整性。”
生成域名名称可能有负面含义或难以发音“域名是否有负面含义?是否难发音?”

如何编写高效的反思提示语

在这里插入图片描述

编写反思提示的两大黄金法则:

  1. 明确指示反思动作:不要含糊地说"请改进",而要说"请审查"、“请检查”、“请验证”
  2. 具体指定检查标准:不要只说"让它更好",而要列出具体的评判标准

提升写 prompt 的一个方法,就是多阅读他人的提示词。

2.3 图表生成工作流

这节课用一个咖啡销量图表的例子,展示了多模态AI如何"看"懂图表,然后自己挑毛病改代码。我个人观点这一节的核心就是多模态模型能真正"看见"生成的图表,给出视觉层面的专业反馈,这个比单靠文本描述要强得多。

在这里插入图片描述

通过一个咖啡销售数据的实战案例,生动展示了 AI 如何像人类专家一样"审视"和"改进"自己的工作成果。

直接生成

  1. 向 LLM 发送提示:“Create a plot comparing Q1 coffee sales in 2024 and 2025 using coffee_sales.csv.”
  2. LLM 生成第一版 Python 代码(V1 code),用于读取CSV文件并绘制图表
  3. 执行与结果:运行 V1 代码,生成了一张名为 plot.png 的图表
  4. 问题显现:这是一张堆叠柱状图(Stacked Bar Plot)。虽然它完成了数据展示的基本功能,但存在两大缺陷:
    • ◦ 堆叠柱状图对于比较不同年份同一饮品的销量不够直观
    • ◦ 图表整体观感不佳,缺乏专业性

引入反思——多模态模型的视觉推理

图片

将生成的图像作为输入,交由一个多模态语言模型(Multi-modal LLM)进行反思。

  1. 输入准备:将 V1 版本的代码和它生成的图表一同打包,作为新的输入
  2. 反思指令:提示多模态 LLM 扮演"专家数据分析师"的角色,对图表进行批判性评估
  3. 视觉推理:多模态模型能够"真正地看"这张图,分析其可读性、清晰度和完整性,并提出具体的改进建议
  4. 生成新代码:根据反思反馈,模型更新代码,生成第二版(V2 code)
  5. 最终成果:运行 V2 代码,生成了 plot_v2.png

使用不同的模型进行分工协作

在这里插入图片描述

  • LLM(初始生成):负责根据用户提示生成第一版代码
  • LLM 2(反思阶段):负责接收第一版代码、生成的图表以及对话历史,扮演"专家分析师"的角色,提供建设性反馈并指导代码改进

反思提示语示例:您是一位专业的数据分析师,能够为可视化提供建设性反馈。步骤1:评估所附图表的可读性、清晰度和完整性。步骤2:编写新代码来实现您的改进。

总结

反思机制并非万能,其效果因应用场景而异。在某些任务上提升显著,在另一些任务上则可能微乎其微。

因此,了解反思机制对你特定应用的影响至关重要。它能为你提供优化方向,无论是调整初始生成提示,还是优化反思提示,都能帮助你获得更好的性能。

2.4 评估反思的影响

这节课教你怎么用数据说话,别光凭感觉说反思有没有用,要用测试集和评估指标来衡量。我个人观点这一节的核心就是客观任务用"真实答案"数据集,主观任务用"评分量表",让LLM打分而不是直接比较,这样结果才可靠。

客观评估——数据查询任务

图片

反思工作流

问题:“哪种颜色的产品总销量最高?”

基础流程:

  1. LLM 根据问题生成 SQL 查询语句(V1)
  2. 执行 V1 查询,获取结果
  3. LLM 根据结果回答问题

反思增强流程:

  1. LLM 生成初始 SQL 查询(V1)
  2. 新增反思步骤:另一个 LLM 对 V1 查询进行审视,并生成改进版的 SQL 查询(V2)
  3. 执行 V2 查询,获取结果
  4. LLM 根据结果回答问题

构建评估数据集

为了评估反思的效果,需要创建一个包含"提示词"和"真实答案"的数据集。

PROMPTS (提示词)GROUND TRUTH ANSWER (真实答案)
2025年5月售出了多少商品?1201
库存中最贵的商品是什么?Airflow sneaker
我的店铺中有多少款式?14

通过运行两个版本的工作流并比较结果,可以得出客观的性能指标。

PROMPTS (提示词) / 问题GROUND TRUTH ANSWER (真实答案)NO REFLECTION (无反思)WITH REFLECTION (有反思)
2025年5月售出了多少商品?
Number of items sold in May 2025?12019801201
库存中最贵的商品是什么?
Most expensive item?Airflow sneakerAirflow sneakerAirflow sneaker
我的店铺中有多少款式?
How many styles carried?141414

结论:反思显著提升了数据库查询的质量和最终答案的准确率。虽然增加了计算开销,但其带来的性能提升是"有意义的",值得保留。

迭代优化:调整提示词

一旦建立了评估机制,开发者就可以快速迭代:

  • 修改"反思提示词",例如要求模型让查询"更快"或"更清晰"
  • 或者修改"初始生成提示词"
  • 每次修改后重新运行评估,测量正确率的变化,从而选择最适合应用的提示词

主观评估——可视化图表任务

图片

任务:根据 coffee_sales.csv 数据生成 Q1 咖啡销售对比图。 问题:如何判断"反思后"的图表比"反思前"的图表更好? 难点:评估标准是主观的(如美观度、清晰度),而非黑白分明的客观标准。

直接让LLM做裁判的弊端

直观的想法是让 LLM 直接比较两张图并给出"哪个更好"。 已知问题:

  1. 答案不可靠:LLM 的评判结果往往不稳定
  2. 位置偏见:许多模型倾向于选择第一个输入的选项(A),无论其质量如何

图片

使用评分表(Rubric)

更好的方法是为 LLM 提供一套结构化的评分标准(Rubric),让它对每个维度进行打分,而不是直接比较。

示例评分量表:

  1. 是否有清晰的标题?
  2. 坐标轴是否有标签?
  3. 图表类型是否合适?
  4. 坐标轴的数值范围是否恰当?

同样,可以构建一个包含多个用户查询的数据集,对"有反思"和"无反思"生成的图表分别打分。

图片

评估反思的核心方法论

**客观评估:**构建带"真实答案"的数据集,用代码自动计算正确率。简单、易管理、结果客观。适用于有明确答案的任务(如数据库查询)。

**主观评估:**使用 LLM 作为裁判,但需提供详细的评分量表(Rubric)。需要更多调优,但能处理复杂的主观标准(如图表美观度)。

总结

  • 反思的价值:它是一种强大的工具,能显著提升输出质量,但需付出一定的性能代价
  • 评估是关键:不能凭感觉决定是否保留反思步骤,必须通过客观或结构化的主观评估来衡量其收益
  • 客观任务:用"真实答案"数据集 + 代码自动化评估
  • 主观任务:用"评分量表"引导 LLM 进行结构化打分,避免直接比较
  • 迭代优化:建立评估体系后,可以快速尝试不同的提示词,找到最优解
  • 未来方向:结合外部信息,是进一步提升反思效果的下一个前沿

2.5 使用外部反馈

这节课讲的是单纯的自我反思总有上限,真正的突破是引入外部信息,让模型跳出自己的知识库。我个人观点这一节的核心就是外部反馈打破了模型的信息孤岛,它能获得实时数据、精确事实、字数统计这些模型自己做不到的东西,这才是质的飞跃。

提示词工程的收益递减规律

在这里插入图片描述

  • 横轴:投入在提示词工程上的时间
  • 纵轴:系统性能
  • 红色曲线(无反思):初期,通过调整提示词,性能会快速提升。但很快,性能增长会放缓并趋于平缓,进入"平台期"。此时,即使再花费大量时间微调提示词,也很难获得显著的性能提升
  • 蓝色曲线(有反思):在某个时间点加入反思机制后,性能曲线会再次上扬,达到一个比"无反思"更高的平台。这表明,反思能为系统带来一次"性能跃迁",突破原有的瓶颈
  • 黄色曲线(有反思 + 外部反馈):在引入反思的基础上,如果能接入外部反馈,性能将再次跃升,达到一个远超前两者的更高平台。外部反馈为系统注入了"新信息",使其不再局限于模型自身的知识库和推理能力

外部反馈的案例

图片

1、避免提及竞争对手

模型有时会在文案中不必要地提及竞争对手的名字(如"Our company’s shoes are better than RivalCo")。

  • 外部反馈工具:编写一个代码工具,使用正则表达式对模型的输出进行模式匹配,自动检测是否包含竞争对手名称
  • 反思流程:
      1. 模型生成初稿
      1. 工具扫描文本,发现"RivalCo"
      1. 将"检测到竞争对手名称"的反馈信息传回给模型
      1. 模型基于此反馈,重新撰写一份不提及竞争对手的新版本

2、事实核查

模型生成的历史内容可能存在不准确之处(如"The Taj Mahal was built in 1648")。

  • 外部反馈工具:调用网络搜索 API,查询关于泰姬陵建造时间的权威资料
  • 反思流程:
      1. 模型生成初稿
      1. 工具发起网络搜索,返回结果:“泰姬陵于1631年下令建造,1648年完工”
      1. 将搜索结果作为额外输入,提供给反思模型
      1. 模型基于更精确的历史事实,重写文本,使其更准确

3、遵守字数限制

模型生成的博客文章或摘要常常超出预设的字数上限。

  • 外部反馈工具:开发一个简单的字数统计工具
  • 反思流程:
    1. 模型生成初稿

    2. 工具统计字数,发现"超过字数限制"

    3. 将"当前字数"和"字数限制"等信息作为反馈,传回给模型

    4. 模型基于此反馈,压缩或精简内容,重新生成符合字数要求的版本

      图片

总结:外部反馈的核心价值

  • 打破信息孤岛:外部反馈让模型能够接触到其训练数据之外的新鲜、实时、客观的信息
  • 解决模型固有缺陷:对于模型不擅长的任务(如精确计数、事实核查),外部工具可以完美弥补
  • 实现闭环优化:形成"生成 -> 执行/检查 -> 获取反馈 -> 反思改进"的自动化闭环,大幅提升工作效率和输出质量
  • 学习系统化地让模型调用外部工具,是构建强大智能体应用的关键

更多推荐