第 2 课
← 返回系列列表

反射模式(Reflection)

Agentic AI — AI 智能体设计模式

智能体自我反思与修正,让 AI 从错误中学习。

反射模式(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 控制反思成本

八、总结与最佳实践

反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:

反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。

七、实用技巧:提升反思效果的方法

7.1 结构化反思提示

好的反思提示词应该结构化、分维度。不要只说“检查你的代码”,而要明确告诉模型检查哪些维度:

请从以下维度检查:
1. 正确性:边界条件、异常输入
2. 性能:时间、空间复杂度
3. 安全:注入、XSS 等漏洞
4. 可维护性:命名、注释、代码结构

7.2 反思与外部验证结合

不要把反思完全交给 LLM 自己。结合外部验证工具效果更好:
- 代码:运行单元测试、静态分析工具
- 数据:与已知数据源交叉验证
- 格式:用 schema 验证器检查

7.3 控制反思成本

八、总结与最佳实践

反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:

反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。

七、实用技巧:提升反思效果的方法

7.1 结构化反思提示

好的反思提示词应该结构化、分维度。不要只说“检查你的代码”,而要明确告诉模型检查哪些维度:

请从以下维度检查:
1. 正确性:边界条件、异常输入
2. 性能:时间、空间复杂度
3. 安全:注入、XSS 等漏洞
4. 可维护性:命名、注释、代码结构

7.2 反思与外部验证结合

不要把反思完全交给 LLM 自己。结合外部验证工具效果更好:
- 代码:运行单元测试、静态分析工具
- 数据:与已知数据源交叉验证
- 格式:用 schema 验证器检查

7.3 控制反思成本

八、总结与最佳实践

反思模式教会我们一个核心理念:AI 的输出不是一次性的,通过迭代可以大幅提升质量。在实践中:

反思模式是所有 Agentic 设计模式的基石。掌握了反思,你就掌握了让 AI 自我进化的核心能力。

延伸阅读

← 智能体设计模式概论 工具使用模式(Tool Use) →