反思:智能的分水岭

人类之所以智能,不只是因为我们能做事,更因为我们能反思——做错了会分析原因,做对了会总结经验。AI Agent同样需要反思能力,才能从"执行器"进化为"学习者"。

反思的四个层次

层次一:结果验证

最基本的反思——检查输出是否正确:

任务: "计算 17 × 23"
Agent输出: "391"
反思: "让我验证一下: 17 × 23 = 17 × 20 + 17 × 3 = 340 + 51 = 391 ✓"
结果: 验证通过

层次二:过程审查

检查推理过程是否合理:

任务: "分析销售下降原因"
Agent推理:
  1. 查看销售额数据
  2. 对比去年同期
  3. 发现下降20%
  4. 结论: 经济环境不好

反思:
  "步骤4的因果推理是否充分?
   是否考虑了其他可能原因?
   - 竞争对手动态?
   - 产品质量问题?
   - 营销策略变化?
   我应该补充调查这些因素。"

层次三:策略评估

评估整体策略是否最优:

任务: "开发一个Web应用"
Agent选择: 从零开发前端+后端

反思:
  "回看整个过程,从零开发花了5天。
   如果使用现成的框架(如Next.js),可能2天完成。
   下次类似任务应该先评估有无现成框架。"

层次四:经验抽象

从具体经历中提取通用经验:

经历: 用户连续3次纠正Agent的回答方式
抽象: "当用户多次纠正同一类问题时,说明我的默认行为模式在该场景下不合适。应该记录这类偏好。"

反思机制设计

Reflexion框架

经典的Agent反思框架:

循环:
  1. Act: Agent执行操作
  2. Observe: 观察结果
  3. Evaluate: 评估是否成功
  4. Reflect: 如果失败,分析原因
  5. Plan: 基于反思调整策略
  6. 重复直到成功或达上限

自我评估模块

def self_evaluate(task, result, criteria):
    prompt = f"""
    任务: {task}
    我的输出: {result}
    评估标准: {criteria}
    
    请评估:
    1. 是否完成了任务?(1-5分)
    2. 质量如何?(1-5分)
    3. 有什么不足?
    4. 改进建议?
    """
    return llm.generate(prompt)

经验库

class ExperienceStore:
    def __init__(self):
        self.experiences = []
    
    def add(self, task, approach, outcome, reflection):
        self.experiences.append({
            "task_pattern": extract_pattern(task),
            "approach": approach,
            "outcome": outcome,  # success/failure
            "reflection": reflection,
            "embedding": embed(task + reflection),
            "timestamp": datetime.now()
        })
    
    def retrieve_relevant(self, new_task):
        """检索与新任务相关的过往经验"""
        task_vec = embed(new_task)
        similar = vector_search(task_vec, self.experiences, top_k=3)
        return similar

实现方案

短期反思(会话内)

在任务执行过程中实时反思:

class ReflectiveAgent:
    async def run(self, task):
        max_attempts = 3
        attempts = []
        
        for i in range(max_attempts):
            # 执行
            result = await self.execute(task, previous_reflections=attempts)
            
            # 评估
            evaluation = await self.evaluate(task, result)
            
            if evaluation.success:
                return result
            
            # 反思
            reflection = await self.reflect(task, result, evaluation)
            attempts.append(reflection)
            
            # 记录经验
            self.experience_store.add(task, result, evaluation, reflection)
        
        return None  # 超过最大尝试次数

反思Prompt示例:

之前的尝试失败了。

任务: {task}
我的做法: {approach}
结果: {result}
失败原因: {evaluation}

请反思:
1. 哪一步出了问题?
2. 为什么会犯这个错误?
3. 下次应该怎么做?
4. 有什么通用经验可以提取?

反思: {reflection}

长期反思(跨会话)

跨会话的经验积累和策略改进:

class CrossSessionReflection:
    def __init__(self, experience_db):
        self.db = experience_db
    
    def get_relevant_experiences(self, new_task):
        """从历史经验中检索相关教训"""
        experiences = self.db.search(new_task, top_k=5)
        
        # 生成经验摘要
        summary = llm.generate(f"""
        基于以下过往经验,为当前任务提供建议:
        
        当前任务: {new_task}
        
        过往经验:
        {format_experiences(experiences)}
        
        建议:
        - 哪些方法可能有效?
        - 哪些错误需要避免?
        - 有什么注意事项?
        """)
        return summary

群体反思

多Agent共享经验:

Agent A 的经验 → 共享经验库
Agent B 的经验 → 共享经验库
Agent C ← 读取A和B的经验,避免重复错误

实现:

class SharedExperiencePool:
    def __init__(self):
        self.experiences = []  # 所有Agent共享
        self.patterns = {}      # 任务模式索引
    
    def contribute(self, agent_id, experience):
        """Agent贡献经验"""
        experience["agent_id"] = agent_id
        self.experiences.append(experience)
        self.update_patterns(experience)
    
    def query(self, task_description):
        """查询相关经验"""
        return self.search_patterns(task_description)

反思的挑战

过度反思

问题: Agent对每个小错误都做深入反思 → 效率极低

解决:
  - 简单错误:快速修复,不需深入反思
  - 复杂错误:启动完整反思流程
  - 用分类器决定反思深度

反思的准确性

Agent的反思本身可能有误:
  - 归因错误(把结果归错原因)
  - 过度归因(把偶发错误当系统性问题)
  - 忽略根本原因

解决:
  - 多次反思取共识
  - 用外部验证校验反思结论
  - 人工审核高影响反思

经验泛化

问题: 在任务A上获得的经验不能简单迁移到任务B

解决:
  - 抽象经验而非记忆具体操作
  - 标注经验的适用条件
  - 迁移时评估相似度

实践案例

编程Agent的反思

# 测试失败后的反思
def reflect_on_test_failure(code, test_error):
    reflection = llm.generate(f"""
    代码: {code}
    测试错误: {test_error}
    
    反思:
    1. 错误的根本原因是什么?
    2. 是理解需求有误?还是实现有bug?
    3. 修复方案是什么?
    4. 如何避免类似错误?
    """)
    
    # 记录经验
    experience = {
        "error_type": classify_error(test_error),
        "root_cause": reflection.root_cause,
        "fix_strategy": reflection.fix_strategy,
        "prevention": reflection.prevention
    }
    return experience

客服Agent的反思

用户反馈: "你给的答案完全不对!"
反思:
  - 原因: 检索到错误的知识库文档
  - 根因: 知识库中有过期信息
  - 修复: 标记该文档为过期
  - 预防: 在回答前检查文档时效性

总结

反思机制是Agent从"执行"到"学习"的关键。没有反思能力的Agent永远在做同样的事情——犯同样的错。有了反思,Agent能从错误中学习,逐步改进策略,积累经验。这是真正的"智能"——不是一次做对,而是知道为什么做错了,下次能做更好。反思机制的成熟,是Agent走向真正自主的必经之路。