Reflection 深度技术解析:从 Self-Critique 到 Agentic Reflection 的完整架构

Reflection 深度技术解析:从 Self-Critique 到 Agentic Reflection 的完整架构

Reflection(反思)是 AI Agent 从“执行任务”走向“自我检查、自我修正、自我改进”的关键机制。

如果说:

  • ReAct 解决的是:Agent 如何“思考 → 行动 → 观察”
  • Memory 解决的是:Agent 如何“记住过去”
  • RAG 解决的是:Agent 如何“获取外部知识”
  • Tool / MCP 解决的是:Agent 如何“与外部世界交互”
  • Reflection 解决的则是:

“我刚才做得对吗?哪里有问题?应该如何改进?”

Reflection 的真正价值并不是让 LLM “再想一遍”,而是建立一个 Evaluation → Critique → Revision → Verification 的闭环。


1. 什么是 Reflection?

最简单的 Reflection:

Task
Generate
Critique
Revise
Final Answer

例如用户要求:

写一个 Java 的线程安全缓存。

Agent 第一次生成:

class Cache {
    private Map<String, Object> cache = new HashMap<>();

    public void put(String key, Object value) {
        cache.put(key, value);
    }
}

Reflection 发现:

问题:
HashMap 不是线程安全的。

然后:

Revision

修改为:

private final ConcurrentHashMap<String, Object> cache
        = new ConcurrentHashMap<>();

这就是最基本的:

Generate
Critique
Revision

但是生产级 Reflection 要复杂得多。


2. Reflection 与普通 LLM 调用的区别

普通 LLM:

User
LLM
Answer

Reflection:

User
LLM
Draft
Evaluator
Critique
LLM
Revision
Verification
Answer

所以:

Reflection 的本质是给 Agent 增加一个 Feedback Loop

从软件工程角度看,它非常类似:

Compile
Test
Failure
Fix
Retest

这也是为什么 Reflection 非常适合软件开发 Agent。


3. Reflection 最核心的思想:Feedback Loop

可以把 Reflection 抽象成:

                    ┌─────────────┐
                    │    Task     │
                    └──────┬──────┘
                    ┌─────────────┐
                    │  Generate   │
                    └──────┬──────┘
                    ┌─────────────┐
                    │   Evaluate  │
                    └──────┬──────┘
                    ┌─────────────┐
                    │   Critique  │
                    └──────┬──────┘
                    ┌─────────────┐
                    │   Revise    │
                    └──────┬──────┘
                    ┌─────────────┐
                    │  Verify     │
                    └──────┬──────┘
                    ┌──────┴──────┐
                    │             │
                   Pass          Fail
                    │             │
                    ↓             │
                  Final ←─────────┘

注意:

Reflection 并不是无限循环。

真正的工程系统必须有:

maxIterations
timeout
qualityThreshold
budget
terminationCondition

否则可能出现:

Reflect
Revise
Reflect
Revise
...

最终:

Token Explosion

4. Reflection 为什么重要?

LLM 有一个非常明显的问题:

生成能力很强,但天然不保证生成结果正确。

例如:

数学计算
代码
SQL
系统设计
事实判断
复杂推理

第一次生成可能存在错误。

传统程序:

Input
Deterministic Algorithm
Output

LLM:

Input
Probabilistic Generation
Output

因此需要:

Generation
+
Evaluation

Reflection 就是连接二者的重要机制。


5. Reflection 与 Self-Consistency 的区别

这两个概念容易混淆。

Self-Consistency

多个答案:

LLM
├── Answer A
├── Answer B
├── Answer C
└── Answer D

然后:

Voting

得到:

Most Consistent Answer

重点:

多个独立推理路径。


Reflection

则是:

Answer
Critique
Improve

重点:

基于反馈修改当前答案。

因此:

Self-Consistency
=
Generate Multiple Candidates

Reflection
=
Generate → Evaluate → Improve

二者可以组合。


6. Reflection 与 ReAct 的区别

ReAct:

Reason
Act
Observe
Reason
Act

核心是:

如何完成任务。

Reflection:

Generate
Evaluate
Critique
Improve

核心是:

如何提高任务质量。

因此两者可以组合:

             User
          ReAct Agent
        Reason → Act
           Observe
          Draft Answer
          Reflection
      ┌────────┴────────┐
      ↓                 ↓
    Pass                Fail
      ↓                 ↓
   Final              Revise
                     ReAct

这就是:

Reflective ReAct Agent。


7. Reflection 的四个核心阶段

一个完整 Reflection Loop 可以定义为:

1. Generation
2. Evaluation
3. Critique
4. Revision

即:

G → E → C → R

生产系统通常进一步增加:

Verification

形成:

G → E → C → R → V

8. Generation:第一次生成

首先完成任务:

Task
LLM
Draft

例如:

Task:
设计秒杀系统。

Draft:
Redis 扣库存
MQ
DB

此时不要急着认为答案正确。


9. Evaluation:评价

Evaluator 判断:

Draft 是否满足要求?

可以采用:

LLM Judge

也可以:

Rule Engine

甚至:

Unit Test
Integration Test
Static Analysis

例如代码 Agent:

Draft
Compile
Unit Test
Result

这通常比单纯让 LLM 判断更可靠。


10. Critique:批判

Critique 不应该简单问:

“这个答案怎么样?”

更好的方式是:

请从以下维度检查:

1. Correctness
2. Completeness
3. Consistency
4. Security
5. Performance
6. Maintainability

然后:

{
  "score": 7.5,
  "issues": [
    {
      "severity": "HIGH",
      "category": "CONCURRENCY",
      "description": "库存扣减存在并发超卖风险"
    },
    {
      "severity": "MEDIUM",
      "category": "CONSISTENCY",
      "description": "没有说明 Redis 与数据库之间的一致性策略"
    }
  ]
}

这样 Reflection 才能真正进入工程化阶段。


11. Revision:修改

Revision 不应该:

重新生成一遍。

而应该:

Original Draft
+
Critique
+
Constraints
Revised Draft

例如:

Original:
Redis 扣库存。

Critique:
没有说明原子性。

Revision:
使用 Lua Script 保证库存判断与扣减操作的原子性。

这样可以:

局部修复

而不是:

全部推倒重来。

12. Verification:验证

这是生产级 Reflection 和 Demo 最大的区别。

不能:

LLM:
我检查了一遍,应该没问题。

就认为完成。

应该:

Revision
Independent Verification

例如代码:

Compile
Unit Test
Integration Test

SQL:

EXPLAIN
Execution
Result Validation

API:

HTTP Request
Response
Schema Validation

因此:

Reflection 负责“思考如何改进”,Verification 负责“证明改进是否有效”。


13. Reflection 的真正价值:Externalized Evaluation

LLM 最大的问题之一:

Generator
=
Evaluator

如果让同一个 LLM:

写答案
自己检查

它可能存在:

Self-Bias

因此更好的架构是:

Generator
Independent Evaluator
Feedback
Generator

甚至:

Generator Model
Evaluator Model

使用不同模型。


14. Generator / Critic Architecture

经典架构:

             Task
        ┌──────────────┐
        │  Generator   │
        └──────┬───────┘
             Draft
        ┌──────────────┐
        │    Critic    │
        └──────┬───────┘
           Feedback
        ┌──────────────┐
        │  Generator   │
        └──────────────┘

这其实就是:

Generator-Critic Loop

15. Critic 不一定是 LLM

这是一个非常重要的工程思想。

很多 Agent 系统:

LLM
LLM
LLM
LLM

成本非常高。

实际上 Critic 可以是:

LLM
Rule Engine
Compiler
Unit Test
Static Analyzer
SQL Engine
Schema Validator
Policy Engine

例如:

代码生成 Agent

可以:

LLM Generator
Compiler
JUnit
SonarQube
LLM Critic

这样可靠性远高于:

LLM → LLM

16. Reflection 的三种实现模式

可以把 Reflection 分成三个等级。

Level 1:Self-Reflection

LLM
Answer
LLM
Critique
LLM
Revision

简单。

成本低。

但容易存在:

Self-Bias

Level 2:Generator-Critic

Generator
Critic
Generator

职责分离。

效果更好。


Level 3:Tool-Augmented Reflection

Generator
Critic
Tools
 ├── Compiler
 ├── Test
 ├── Search
 ├── SQL
 └── API
Verification
Revision

这是最适合生产环境的方式。


17. Reflection + Tools

例如:

帮我修复这个 Java Bug。

Agent:

Read Code
Reason
Generate Patch
Compile
Test

如果:

Test Failed

则:

Reflection
Analyze Failure
Modify Patch
Compile
Test

直到:

Tests Passed

这个过程实际上非常接近:

Autonomous Software Engineer

18. Reflection + ReAct

把 ReAct 和 Reflection 合起来:

┌──────────────────────────────────────┐
│              Agent                   │
│                                      │
│  ┌───────────┐                       │
│  │   ReAct   │                       │
│  └─────┬─────┘                       │
│        │                             │
│        ▼                             │
│     Reason                           │
│        │                             │
│        ▼                             │
│      Tool                            │
│        │                             │
│        ▼                             │
│    Observation                       │
│        │                             │
│        ▼                             │
│      Draft                           │
│        │                             │
│        ▼                             │
│  ┌───────────┐                       │
│  │ Reflection│                       │
│  └─────┬─────┘                       │
│        │                             │
│        ▼                             │
│     Critique                         │
│        │                             │
│        ▼                             │
│     Revision                         │
│        │                             │
│        └────────→ ReAct               │
└──────────────────────────────────────┘

ReAct 负责:

Task Execution

Reflection 负责:

Task Quality

19. Reflection + Memory

Reflection 还可以把反馈保存下来。

例如:

Task
Generate
Critique
Failure

系统发现:

以前经常因为没有考虑数据库事务导致失败。

可以写入:

Memory

例如:

When designing distributed transactions,
always explicitly consider transaction boundaries,
failure recovery and idempotency.

以后 Agent 再遇到类似问题:

Retrieve Memory
Reason

于是:

Reflection

不仅修复当前任务:

还可以改善未来任务。


20. Reflection 的 Learning Loop

因此可以形成:

Task
Execute
Reflect
Failure Analysis
Memory
Future Task
Better Execution

这就是:

Reflection + Memory = Experience Learning

注意:

这并不意味着模型参数真的发生了变化。

更多情况下是:

External Memory

发生了变化。


21. Reflection 与 Fine-Tuning 的区别

Reflection:

Runtime Learning

Fine-tuning:

Model Parameter Learning

Reflection:

Task A
Feedback
Improve Task A

Fine-tuning:

Many Examples
Training
Model Update
Future Tasks

所以:

Reflection
=
Inference-time Improvement

Fine-tuning
=
Training-time Improvement

22. Reflection 的一个关键问题:谁来评价?

这是 Reflection 最深层的问题。

假设:

Generator = GPT-like LLM
Critic = Same LLM

那么:

如果 Generator 犯了一个模型本身不知道的错误

Critic 可能:

无法发现。

所以 Reflection 的质量取决于:

Evaluator Capability

这意味着:

Reflection 本身不是可靠性的保证。

必须引入:

Ground Truth
External Tools
Deterministic Validators
Human Feedback

23. Reflection 的 Evaluation Hierarchy

可以按照可靠性排序:

Human Feedback
External Ground Truth
Deterministic Test
Specialized Evaluator
LLM Judge
Self-Critique

例如代码:

Self-Critique

不如:

Compile + Unit Test

数学:

LLM Judge

不如:

Symbolic Calculator

API:

LLM 判断 JSON 是否正确

不如:

JSON Schema Validator

所以:

能用确定性验证器,就不要只使用 LLM Reflection。


24. Reflection 的停止条件

必须设计:

class ReflectionPolicy {

    int maxIterations;

    double minScore;

    Duration timeout;

    int maxTokens;

    boolean requireVerification;
}

例如:

maxIterations = 3
minScore = 0.9
timeout = 30 seconds

循环:

Iteration 1
Score = 0.62

Iteration 2
Score = 0.81

Iteration 3
Score = 0.93

STOP

25. Reflection 的边际收益

Reflection 并不是:

Iterations ↑
Quality ↑

无限增长。

通常:

Quality
  │               ________
  │             /
  │           /
  │        /
  │     /
  │____/
  └──────────────────── Iterations

第一轮 Reflection:

提升很大

第二轮:

仍有提升

第三轮:

提升变小

继续:

成本增加
收益很低

因此:

Reflection 应该有预算,而不是无限追求完美。


26. Reflection 的成本模型

一次普通调用:

Cost = C_generation

Reflection:

Cost
=
C_generation
+
C_evaluation
+
C_revision
+
C_verification

如果:

3 iterations

可能变成:

3~6 次 LLM Calls

所以必须考虑:

Latency
Token Cost
Model Cost
Tool Cost

27. Adaptive Reflection

不是所有任务都需要 Reflection。

例如:

“你好”

不需要。

“把 Java List 转成 Set”

通常不需要。

但:

“设计一个金融交易系统”

值得 Reflection。

因此可以:

Task Complexity
Reflection Policy

例如:

Low Complexity
→ No Reflection

Medium
→ One Critique

High
→ Full Reflection Loop

这叫:

Adaptive Reflection。


28. Risk-Based Reflection

甚至可以根据风险:

Risk
├── Low
├── Medium
└── High

例如:

代码格式化
→ Low

生产数据库 SQL
→ High

金融交易
→ Very High

策略:

Low
→ LLM Self Check

Medium
→ Critic

High
→ Critic + Tool Verification

Very High
→ Human-in-the-loop

这是非常实用的企业 Agent 架构。


29. Reflection Prompt Engineering

一个差的 Prompt:

检查一下你的答案。

一个好的 Reflection Prompt:

You are a strict technical reviewer.

Review the proposed solution against:

1. Functional correctness
2. Concurrency safety
3. Error handling
4. Security
5. Performance
6. Maintainability

For each issue:
- identify the problem
- explain why it matters
- assign severity
- provide a concrete correction

Do not rewrite the solution yet.

然后 Revision:

You are the implementation agent.

Given:
- Original solution
- Review feedback
- Original requirements

Revise the solution.

Preserve correct parts.
Fix only identified issues.
Do not introduce unrelated changes.

这样比:

“请重新回答”

可靠得多。


30. Structured Reflection

生产系统最好不要让 Critic 输出自然语言。

推荐:

{
  "status": "NEEDS_REVISION",
  "score": 0.78,
  "issues": [
    {
      "severity": "HIGH",
      "category": "CORRECTNESS",
      "description": "...",
      "recommendation": "..."
    }
  ]
}

这样程序可以直接判断:

if (evaluation.score() < threshold) {
    revise();
}

而不是:

if (text.contains("not good")) {
    ...
}

31. Reflection State Machine

可以把 Agent 实现成状态机:

GENERATE
EVALUATE
┌──────────────┐
│ Score >= 0.9 │
└──────┬───────┘
      YES
   VERIFY
    SUCCESS

NO
CRITIQUE
REVISE
GENERATE

对应 Java:

enum AgentState {
    GENERATE,
    EVALUATE,
    CRITIQUE,
    REVISE,
    VERIFY,
    SUCCESS,
    FAILED
}

这比把所有逻辑写在一个:

while(true)

里更加可维护。


32. Reflection Agent 的 Java 设计

可以定义:

public interface Generator {

    Draft generate(Task task, Context context);
}

Evaluator:

public interface Evaluator {

    Evaluation evaluate(
        Task task,
        Draft draft
    );
}

Critic:

public interface Critic {

    Feedback critique(
        Task task,
        Draft draft,
        Evaluation evaluation
    );
}

Revision:

public interface Reviser {

    Draft revise(
        Draft draft,
        Feedback feedback
    );
}

Verification:

public interface Verifier {

    VerificationResult verify(
        Draft draft
    );
}

最终:

class ReflectionAgent {

    private Generator generator;
    private Evaluator evaluator;
    private Critic critic;
    private Reviser reviser;
    private Verifier verifier;
}

33. Reflection Loop 示例

伪代码:

Draft draft = generator.generate(task, context);

for (int i = 0; i < maxIterations; i++) {

    Evaluation evaluation =
        evaluator.evaluate(task, draft);

    if (evaluation.isGoodEnough()) {

        VerificationResult result =
            verifier.verify(draft);

        if (result.isValid()) {
            return draft;
        }
    }

    Feedback feedback =
        critic.critique(
            task,
            draft,
            evaluation
        );

    draft =
        reviser.revise(
            draft,
            feedback
        );
}

throw new ReflectionFailedException();

这就是最基本的:

Generate
→ Evaluate
→ Critique
→ Revise
→ Verify

34. Reflection + Spring Boot

在 Spring Boot 中可以进一步拆成:

reflection-agent
├── controller
├── application
│   └── ReflectionOrchestrator
├── domain
│   ├── Task
│   ├── Draft
│   ├── Evaluation
│   └── Feedback
├── llm
│   ├── GeneratorClient
│   ├── CriticClient
│   └── ReviserClient
├── verification
│   ├── CodeVerifier
│   ├── SchemaVerifier
│   └── RuleVerifier
└── memory

这与传统 Java:

Controller
Service
Repository

的架构思想完全可以结合。


35. Reflection + OpenTelemetry

如果做生产级 Agent,Reflection 的每一步都应该可观测。

例如 Trace:

Agent Request
├── Memory Retrieval
├── LLM Generate
├── LLM Critique
├── Tool Verification
├── LLM Revision
└── Final Response

Span:

agent.generate
agent.evaluate
agent.critique
agent.revise
agent.verify

Metrics:

reflection_iterations
reflection_success_rate
reflection_failure_rate
reflection_latency
reflection_token_usage
reflection_cost

这对于 Debug 非常重要。


36. Reflection Failure Analysis

假设 Agent 最终回答错误。

传统系统:

Request
LLM
Wrong Answer

很难 Debug。

Reflection Agent:

Request
Generate
Critique
Revision
Verification
Wrong Answer

可以定位:

Generator Error
Critic Error
Revision Error
Verification Error

因此 Reflection 同时提升:

Reliability
+
Observability

37. 一个代码 Agent 的完整案例

用户:

实现一个线程安全的 LRU Cache。

Agent:

Step 1
Generate Java Code

得到:

class LRUCache {
    private final Map<Integer, Integer> cache =
        new LinkedHashMap<>();
}

Reflection:

Critic:
存在并发访问问题。

Revision:

synchronized

然后:

Compile
Unit Test
Concurrency Test

发现:

Race Condition

再次 Reflection:

Review
Replace implementation
ConcurrentHashMap + custom eviction

再次测试:

PASS

最终:

Answer

这已经不是简单的:

LLM Code Generation

而是:

Autonomous Coding Loop。


38. Reflection 在软件工程中的巨大潜力

未来 Coding Agent 很可能采用:

Requirement
Plan
Generate Code
Compile
Test
Reflect
Fix
Test
Security Scan
Performance Test
Review
Pull Request

这里 Reflection 是整个:

Software Engineering Loop

的核心。


39. Reflection + Multi-Agent

更进一步,可以使用多个 Agent:

                Task
          ┌───────┴────────┐
          ▼                ▼
      Developer          Architect
          │                │
          └───────┬────────┘
               Critic
          ┌───────┴────────┐
          ▼                ▼
       Security          Tester
          │                │
          └───────┬────────┘
               Judge
               Final

不同 Agent 负责:

Developer
Architecture
Security
Performance
Testing

这种架构本质上是:

Multi-Agent Reflection。


40. Debate 与 Reflection

再进一步:

Agent A
Proposal

Agent B
Counter Argument

Agent A
Revision

Judge
Final

这已经从:

Reflection

进入:

Debate

两者区别:

Reflection
=
自己/另一个 Agent 批评自己

Debate
=
多个 Agent 互相挑战

41. Reflection + Memory + ReAct + RAG

如果把前面几个主题全部组合:

                         User
                    ┌─────────────┐
                    │    Agent    │
                    └──────┬──────┘
        ┌──────────────────┼──────────────────┐
        │                  │                  │
        ▼                  ▼                  ▼
      Memory              RAG              Context
        │                  │                  │
        └──────────────────┼──────────────────┘
                         ReAct
                     Reason → Act
                        Observe
                         Draft
                     Reflection
              ┌────────────┴────────────┐
              ▼                         ▼
           Critique                 Verification
              │                         │
              └────────────┬────────────┘
                         Revise
                         Final
                         Memory

这就是一个比较完整的:

Reflective Agent Architecture


42. Reflection 的核心设计原则

原则 1:Reflection 不是重新生成

错误:

Answer
Generate Again

正确:

Answer
Feedback
Targeted Revision

原则 2:Evaluation 必须独立

尽量避免:

Generator = Evaluator

最好:

Generator
Evaluator

原则 3:能使用工具验证,就不要只靠 LLM

例如:

代码 → Compiler/Test
数学 → Calculator
SQL → Database
API → Real Request
JSON → Schema Validator

原则 4:Reflection 必须有预算

Max Iterations
Max Tokens
Timeout
Cost Budget

原则 5:Reflection 应该是风险驱动的

Low Risk
→ No Reflection

High Risk
→ Deep Reflection

43. Reflection 的最终抽象

如果把 Reflection 用一个数学形式表达:

D₀ = Generate(Task)

第一次生成:

D₀

评价:

E₀ = Evaluate(D₀)

产生反馈:

F₀ = Critique(D₀, E₀)

修改:

D₁ = Revise(D₀, F₀)

然后:

D₂ = Revise(D₁, F₁)

最终:

D* = argmax Quality(D)

因此 Reflection 可以理解为:

在推理阶段进行迭代式质量优化。


44. Reflection 真正解决的问题

LLM 原始能力:

Generate

Reflection:

Generate
+
Evaluate
+
Correct

ReAct:

Reason
+
Act
+
Observe

Memory:

Remember
+
Retrieve

RAG:

Retrieve
+
Ground

Tool Calling:

Act
+
Observe

最终:

                     Agent
        ┌──────────────┼──────────────┐
        │              │              │
      Reason         Memory          Tools
        │              │              │
      ReAct           RAG            MCP
        │              │              │
        └──────────────┼──────────────┘
                   Reflection
               Evaluate → Improve
                 Reliable Agent

45. 最值得记住的一句话

如果面试官问:

Reflection 到底是什么?

可以回答:

Reflection 是 Agent 在完成一个阶段性任务后,通过 Evaluator 或 Critic 对当前结果进行系统性评价,识别错误、缺陷和改进方向,然后根据反馈进行 Revision,并通过 Verification 验证修改结果,从而形成 Generate → Evaluate → Critique → Revise → Verify 的闭环。它本质上是一种 inference-time feedback optimization mechanism,而不是简单地让 LLM 再生成一次答案。

如果再进一步:

高质量的 Reflection 不应该完全依赖 LLM 自我评价,而应该结合确定性验证器、工具调用、外部 Ground Truth、Memory 和 Human-in-the-loop,最终形成可观测、可控、有预算的 Agent Quality Loop。

这才是 Reflection 真正的工程价值。


46. 最终形成 AI Agent 四大核心能力

到这里,可以把我们前面讨论的几个主题串起来:

             ┌──────────────────────┐
             │      AI Agent        │
             └──────────┬───────────┘
        ┌───────────────┼────────────────┐
        │               │                │
        ▼               ▼                ▼
     Reason           Remember          Act
        │               │                │
      ReAct           Memory            Tools
        │               │                │
        └───────────────┼────────────────┘
                   Reflection
                 Evaluate / Improve
                  Better Agent

可以把它浓缩成:

ReAct
→ 我怎么做?

Memory
→ 我记得什么?

RAG
→ 外部世界知道什么?

Tools / MCP
→ 我能做什么?

Reflection
→ 我做得对不对?

而真正高级的 Agent:

Remember
Reason
Act
Observe
Reflect
Improve
Remember

形成完整的:

Agent Cognitive Loop

这也是从普通 LLM Application Developer 进一步走向 AI Agent Engineer / AI Platform Engineer 时,非常值得掌握的一条核心技术主线。

Vincent zhai
Vincent zhai
Full-Stack Engineer