反射模式(Reflection)
课程简介
智能体自我反思与修正,让 AI 从错误中学习。
🎬 本课程视频:Agentic AI — AI 智能体设计模式
反射模式(Reflection):让 AI 学会自我改进
一、为什么需要反思模式?
大语言模型的一个显著特点是一次生成、不可修改。无论模型多强大,它在生成第一次输出时就可能犯错误——可能是事实性错误、逻辑漏洞、或者遗漏了重要信息。这就是为什么反思模式如此重要。
Andrew Ng 在课程中分享了一个实验:在代码生成任务中,让模型自我反思后再改进,代码的测试通过率从 65% 提升到了 95% 以上。这个 30% 的提升不需要任何微调,不需要更多训练数据,只需要改变调用模型的方式。
反思模式的核心思想非常简洁但极其强大:让 LLM 审视自己的输出,并基于反思结果进行改进。它模拟了人类「先写初稿→检查→修改→再检查」的迭代工作方式,把 AI 从一次性输出工具变成了持续优化的引擎。
二、双轮对话框架的详细实现
2.1 基本架构
反思模式最简单的实现方式就是「双轮对话框架」。让我们用一个实际的例子来说明。
第一轮(生成轮):系统提示词加上用户问题,让 LLM 生成初始回答。
System: 你是一位 Python 编程专家。
User: 请写一个函数,输入一个整数列表,返回排序后的结果。
Assistant: [生成初始代码]
第二轮(反思轮):将第一轮的输出与反思提示词一起送回 LLM。
System: 你是一位 Python 编程专家。请仔细检查你刚才生成的代码,找出所有可能的问题。
User: [第一轮的代码]
Assistant: [检查结果和改进后的代码]
这里的反思提示词「请仔细检查你刚才生成的代码,找出所有可能的问题」是关键。提示词的质量直接影响反思效果。
2.2 反思提示词设计
反思提示词需要告诉模型具体检查什么方向。好的反思提示词应该明确检查维度:
对于代码生成任务:
请检查以下方面:
1. 边界条件:输入为空、单个元素、大量数据时是否正常工作?
2. 性能问题:时间复杂度和空间复杂度是否最优?
3. 代码安全性:是否存在注入风险或内存泄漏?
4. 错误处理:异常输入时是否有适当的错误提示?
5. 可读性:变量命名是否清晰?是否有必要的注释?
对于内容写作任务:
请检查以下方面:
1. 事实准确性:所有数据和引用是否可验证?
2. 逻辑连贯性:论点之间的逻辑链是否完整?
3. 完整性:是否有重要的方面被遗漏?
4. 偏见检测:是否存在不恰当的偏向性表述?
5. 格式合规性:是否符合要求的格式规范?
2.3 三种反思模式的具体实现
根据不同的使用场景,反思模式有三种实现方式。
1. 简单反思(Single-Pass Reflection)
这是最基础的实现方式:生成一次、反思一次、输出结果。适用于对响应时间有要求的场景。
初始生成 → 反思检查 → 输出改进结果
这个方法只需要一次额外的 LLM 调用,Token 成本翻倍但质量提升显著。
2. 上下文增强反思(Context-Augmented Reflection)
在反思轮中,除了初始输出外,还提供额外的上下文信息——比如代码执行的结果、报错信息、用户反馈等。
初始生成 → 执行/验证 → 将执行结果注入反思提示词 → 反思改进 → 输出
例如,在代码生成场景中,第一轮生成的代码如果有编译错误,我们可以把错误信息注入到反思轮的提示词中:
System: 你生成的代码执行时出现了以下错误:[错误消息]
请基于这个错误修改你的代码。
这种方式让反思更有针对性,效果通常优于简单反思。
3. 多轮迭代反思(Multi-Step Iterative Reflection)
对于要求极高输出质量的场景,可以使用多轮迭代。
初始生成 → 反思 → 改进 → 再反思 → 再改进 → ... → 满足质量阈值 → 输出
关键是要设置停止条件:可以是固定轮数(如最多 3 轮)、质量评分达到阈值、或相邻两次输出无显著变化。
三、代码实例:实现一个反思 Agent
下面我们用 Python 实现一个简单的反思 Agent:
import openai
def reflection_agent(prompt, reflection_prompt, max_iterations=3):
'''
一个简单的反思 Agent 实现。
Args:
prompt: 用户输入的原始问题
reflection_prompt: 反思阶段的提示词
max_iterations: 最大迭代次数
Returns:
最终的改进结果
'''
# 第一轮:初始生成
messages = [
{"role": "system", "content": "你是一位 AI 助手。"},
{"role": "user", "content": prompt}
]
response = openai.chat.completions.create(
model="gpt-4",
messages=messages
)
current_output = response.choices[0].message.content
for i in range(max_iterations):
# 反思轮:检查当前输出
reflection_messages = [
{"role": "system", "content": "你是一位 AI 助手。"},
{"role": "user", "content": prompt},
{"role": "assistant", "content": current_output},
{"role": "user", "content": reflection_prompt}
]
response = openai.chat.completions.create(
model="gpt-4",
messages=reflection_messages
)
reflection_result = response.choices[0].message.content
# 检查反思结果中是否包含「不需要修改」的信号
if "不需要修改" in reflection_result or "没有问题" in reflection_result:
break
# 基于反思结果进行改进
improve_messages = [
{"role": "system", "content": "你是一位 AI 助手。"},
{"role": "user", "content": prompt},
{"role": "assistant", "content": current_output},
{"role": "user", "content": f"请基于以下反馈修改你的回答:
{reflection_result}"}
]
response = openai.chat.completions.create(
model="gpt-4",
messages=improve_messages
)
current_output = response.choices[0].message.content
return current_output
# 使用示例
prompt = "用 Python 写一个二分查找函数"
reflection_prompt = "请检查代码中是否存在边界条件错误、性能问题或逻辑漏洞。"
result = reflection_agent(prompt, reflection_prompt)
print(result)
四、反思模式的最佳实践
4.1 何时使用反思模式
反思模式并非万能。以下场景适合使用反思模式:
- 高质量代码生成:对代码正确性要求高的场景
- 内容审核与润色:需要高质量输出的写作任务
- 数学和逻辑推理:精确性要求高的任务
- 翻译和本地化:需要多轮打磨的翻译任务
以下场景不建议使用反思模式:
- 简单的事实查询:如「今天的日期是什么」
- 实时交互场景:对延迟要求极高的应用
- 创意发散任务:第一次输出可能已经是最好版本
4.2 避免过度反思
「过度反思」是反思模式最常见的陷阱。有些简单问题,第一次就回答正确了,不需要再反思。过度反思不仅浪费 Token,还可能画蛇添足——把原本正确的输出改错。
建议的策略是分层触发:先用简单提示直接生成结果,如果模型对结果的置信度低(可以在提示词中要求模型附上置信度评分),或者结果被下游验证系统发现问题,再启动反思流程。
4.3 反思结果验证
反思本身也可能出错——模型可能误判正确的代码为有错误。建议对反思结果进行二次验证:将反思前后的版本用自动化测试或规则引擎进行对比评估,选择得分更高的版本作为最终输出。
五、总结
反思模式是 Agentic AI 中最基础、应用最广泛的设计模式。它通过「生成→反思→改进」的迭代循环,让模型自我修正和持续优化,在代码生成、内容写作、数学推理等场景中都能显著提升输出质量。掌握反思模式的三种实现方式(简单反思、上下文增强反思、多轮迭代反思),并在实践中灵活运用分层触发策略,是高效使用反思模式的关键。
七、实用技巧:提升反思效果的方法
7.1 结构化反思提示
好的反思提示词应该结构化、分维度。不要只说“检查你的代码”,而要明确告诉模型检查哪些维度:
请从以下维度检查:
1. 正确性:边界条件、异常输入
2. 性能:时间、空间复杂度
3. 安全:注入、XSS 等漏洞
4. 可维护性:命名、注释、代码结构
7.2 反思与外部验证结合
不要把反思完全交给 LLM 自己。结合外部验证工具效果更好:
- 代码:运行单元测试、静态分析工具
- 数据:与已知数据源交叉验证
- 格式:用 schema 验证器检查
7.3 控制反思成本
- 设置最大迭代次数(通常 2-3 轮足够)
- 使用更小的模型做反思轮(如用 GPT-4o-mini 检查 GPT-4o 的输出)
- 缓存检查结果,避免重复反思
- 根据任务复杂度动态调整反思轮数
八、总结与最佳实践
反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:
- 总是使用反思模式进行代码生成:这是收益最明显的场景
- 设置合理的停止条件:固定轮数或质量阈值
- 反思提示词越具体效果越好:告诉模型检查什么
- 结合外部工具验证:反思 + 测试效果加倍
反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。
七、实用技巧:提升反思效果的方法
7.1 结构化反思提示
好的反思提示词应该结构化、分维度。不要只说“检查你的代码”,而要明确告诉模型检查哪些维度:
请从以下维度检查:
1. 正确性:边界条件、异常输入
2. 性能:时间、空间复杂度
3. 安全:注入、XSS 等漏洞
4. 可维护性:命名、注释、代码结构
7.2 反思与外部验证结合
不要把反思完全交给 LLM 自己。结合外部验证工具效果更好:
- 代码:运行单元测试、静态分析工具
- 数据:与已知数据源交叉验证
- 格式:用 schema 验证器检查
7.3 控制反思成本
- 设置最大迭代次数(通常 2-3 轮足够)
- 使用更小的模型做反思轮(如用 GPT-4o-mini 检查 GPT-4o 的输出)
- 缓存检查结果,避免重复反思
- 根据任务复杂度动态调整反思轮数
八、总结与最佳实践
反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:
- 总是使用反思模式进行代码生成:这是收益最明显的场景
- 设置合理的停止条件:固定轮数或质量阈值
- 反思提示词越具体效果越好:告诉模型检查什么
- 结合外部工具验证:反思 + 测试效果加倍
反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。
七、实用技巧:提升反思效果的方法
7.1 结构化反思提示
好的反思提示词应该结构化、分维度。不要只说“检查你的代码”,而要明确告诉模型检查哪些维度:
请从以下维度检查:
1. 正确性:边界条件、异常输入
2. 性能:时间、空间复杂度
3. 安全:注入、XSS 等漏洞
4. 可维护性:命名、注释、代码结构
7.2 反思与外部验证结合
不要把反思完全交给 LLM 自己。结合外部验证工具效果更好:
- 代码:运行单元测试、静态分析工具
- 数据:与已知数据源交叉验证
- 格式:用 schema 验证器检查
7.3 控制反思成本
- 设置最大迭代次数(通常 2-3 轮足够)
- 使用更小的模型做反思轮(如用 GPT-4o-mini 检查 GPT-4o 的输出)
- 缓存检查结果,避免重复反思
- 根据任务复杂度动态调整反思轮数
八、总结与最佳实践
反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:
- 总是使用反思模式进行代码生成:这是收益最明显的场景
- 设置合理的停止条件:固定轮数或质量阈值
- 反思提示词越具体效果越好:告诉模型检查什么
- 结合外部工具验证:反思 + 测试效果加倍
反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。
延伸阅读
- 📺 B 站播放列表:Agentic AI — AI 智能体设计模式
- 📚 更多学习资源,请访问 deeplearning.ai 官网