AI Agent自我反思机制:Reflexion框架原理与工程实践
这次我们来看一篇对 AI Agent 领域至关重要的经典论文:《Reflexion: Language Agents with Verbal Reinforcement Learning》。这篇论文由 Noah Shinn、Beck Labash 和 Ashwin Gopinath 在 2023 年发表,它提出的“反思”(Reflexion)机制,为解决大语言模型(LLM)在复杂任务中反复犯同样错误的问题,提供了一个简洁而强大的框架。对于正在学习或开发 AI Agent 的工程师和研究者来说,理解 Reflexion 是构建更可靠、更智能的自主系统的关键一步。
本文不是简单的论文翻译或概述,而是从工程实践和代码实现的角度进行精读。我们会拆解 Reflexion 的核心思想、架构设计,并重点探讨如何将其思想落地到实际的 Agent 开发中。你将了解到 Reflexion 如何通过“行动-评估-反思-规划”的循环,让 Agent 具备从失败中学习的能力,而不仅仅是依赖提示工程或更多的上下文示例。
如果你关心如何提升自己 Agent 的任务成功率、降低幻觉率,或者想深入理解强化学习与语言模型结合的前沿思路,那么这篇文章值得你仔细阅读并动手实践。接下来,我们将从论文解决的问题入手,逐步剖析其方法论、实验设计,并最终给出基于其思想的简易实现方案和开发建议。
1. 核心能力速览:Reflexion 框架是什么?
在深入细节之前,我们先通过一个表格快速把握 Reflexion 框架的核心特征和定位,这有助于你判断它是否是你当前需要的技术方案。
| 能力项 | 说明 |
|---|---|
| 核心创新 | 为语言智能体引入了“ 自我反思 ”(Self-Reflection)机制,通过生成自然语言的反思文本,指导后续的任务规划与执行,实现持续学习。 |
| 解决问题 | 解决大语言模型在序列决策任务中 反复犯相同错误 的问题,特别是在编程、交互式问答等需要多步推理的场景下。 |
| 技术本质 | 一种 基于语言的强化学习 方法。将历史轨迹(行动、观察、奖励)和任务描述作为输入,生成总结失败原因、提出改进策略的“反思”文本。 |
| 硬件门槛 | 无特定要求 。Reflexion 是一个算法框架,其运行依赖底层的大语言模型(如 GPT-3/4, Claude, Llama 等)。因此,硬件需求由所选用的 LLM 决定(云端 API 或本地部署)。 |
| 启动方式 | 非独立软件,需 集成到 Agent 运行循环中 。通常以代码库或设计模式的形式,在 Agent 的主循环逻辑里添加“反思”步骤。 |
| 核心接口 | 反思生成器 (Reflection Generator) : 一个提示模板,输入为任务描述、历史轨迹、当前错误,输出为反思文本。 经验存储器 (Memory) : 存储成功的轨迹和反思文本,供未来任务参考。 |
| 批量任务 | 天然支持 。框架设计用于处理多个独立任务实例,每个实例都可以进行多轮尝试,并通过反思积累经验。 |
| 实际效果 | 在论文实验中,在 HotPotQA (知识问答)和 AlfWorld (文本游戏)等基准上,显著提升了任务成功率,尤其是 在初始尝试失败后,通过反思能大幅提高重试的成功率 。 |
| 适合场景 | 1. 编程与代码调试 :Agent 编写代码失败后,分析错误信息并修正。 2. 复杂决策与规划 :在游戏或模拟环境中,从失败尝试中学习策略。 3. 事实核查与推理 :在问答任务中,纠正错误的前提或推理链。 |
简单来说,Reflexion 不是一个可以直接“双击运行”的工具,而是一套让现有 AI Agent 变得更聪明的“内功心法”。它不增加模型的参数量,而是通过优化决策过程来提升性能。
2. 适用场景与使用边界
2.1 谁适合使用 Reflexion 思想?
- AI Agent 开发者 :如果你正在构建需要执行多步骤任务(如自动编程、数据分析、游戏通关)的智能体,集成 Reflexion 机制可以有效提升其鲁棒性和最终输出质量。
- 大模型应用工程师 :在构建基于 LLM 的复杂应用(如自动客服、研究报告生成)时,可以用 Reflexion 来设计一个“质检与修正”环节,确保输出结果的可靠性。
- 学术研究人员 :研究强化学习、序列决策、语言模型自我改进等方向,Reflexion 提供了一个清晰且可复现的研究基线。
2.2 它能解决什么问题?
- 错误重复 :Agent 第一次尝试任务 A 失败了,第二次、第三次尝试任务 A 时,依然可能以完全相同或类似的方式失败。Reflexion 旨在打破这个循环。
- 经验无法复用 :Agent 在任务 A 上获得了宝贵经验(无论是成功还是失败),但在遇到相似的任务 B 时,无法有效利用这些经验。Reflexion 通过存储和检索反思文本来实现经验迁移。
- 缺乏战略调整 :当遇到障碍时,Agent 只会进行战术微调(如修改一个参数),而不会进行战略层面的重新规划(如更换整体方法)。反思过程鼓励 Agent 从更高维度思考问题。
2.3 不适合什么场景?
- 简单单轮任务 :对于简单的分类、翻译、摘要等单轮输入输出任务,引入复杂的反思循环可能得不偿失,增加延迟和成本。
- 实时性要求极高的场景 :反思需要调用 LLM 进行分析,会增加单次决策的耗时。对于毫秒级响应的场景(如高频交易),可能不适用。
- 奖励信号模糊的任务 :Reflexion 依赖一个清晰的“评估器”来判断行动的成功与否。如果任务本身没有明确的成功标准(例如,创作一首“好”的诗),反思机制将难以生效。
2.4 合规与伦理边界
- 责任归属 :由具备反思能力的 Agent 自动生成的内容(如代码、报告、决策建议),其最终责任主体必须明确为人。开发者需要对 Agent 的输出进行监督和审核。
- 数据隐私 :反思文本可能包含任务执行过程中的敏感信息(如错误的代码片段、失败的业务逻辑)。需确保经验存储和传输过程的安全。
- 偏见放大 :如果底层 LLM 存在偏见,反思过程可能会固化甚至放大这些偏见。需要在设计反思提示词时加入公平性约束。
- 滥用风险 :强大的自我改进能力可能被用于自动化攻击、生成恶意内容等。必须建立使用边界和监控机制。
3. 环境准备与前置条件
由于 Reflexion 是一个框架而非独立软件,其“环境”主要指开发环境和所依赖的大语言模型服务。
3.1 核心依赖:大语言模型 (LLM)
这是 Reflexion 框架的“发动机”。你可以选择:
- 云端 API :OpenAI GPT 系列、Anthropic Claude、Google Gemini 等。 优点 :无需本地硬件,性能强大稳定。 缺点 :产生持续费用,数据需出境(需合规评估)。
- 本地部署模型 :Llama 3、Qwen、DeepSeek 等开源模型。 优点 :数据可控,无网络延迟,长期成本可能更低。 缺点 :需要较强的 GPU 资源(通常需要 8GB 以上显存),推理速度可能较慢。
模型能力要求 :需要模型具备较强的 推理、总结和规划能力 。代码能力强的模型(如 GPT-4, Claude 3 Opus, DeepSeek-Coder)对于编程任务尤其有效。
3.2 编程环境
- Python 3.8+ :主要开发语言。
- 包管理 :
pip或conda。 - 关键库 :
openai/anthropic/ 其他模型的 SDK:用于调用 LLM API。langchain/llama-index:可选,用于构建 Agent 基础框架,但 Reflexion 核心思想不依赖特定框架。sqlite3/chromadb:可选,用于实现经验存储与检索。
3.3 硬件考量(如果使用本地模型)
- GPU :推荐 NVIDIA GPU,显存大小取决于所选模型。7B 参数模型通常需要 8-16GB 显存进行推理。
- CPU/RAM :如果仅用 CPU 推理,需要足够的内存(通常为模型大小的 2 倍以上)并接受较慢的速度。
- 磁盘空间 :用于存放模型文件(单个 7B 模型约 15GB)。
4. Reflexion 架构详解与“安装部署”
这里所谓的“安装部署”,是指理解并将其核心循环集成到你的 Agent 系统中。我们将其拆解为几个可复用的模块。
4.1 核心循环流程
Reflexion 的完整工作流程如下图所示(此处用文字描述):
1. 初始化:给定任务描述,初始化空的经验存储。
2. 规划:Agent 根据任务和已有经验,制定行动计划。
3. 执行与观察:执行行动,获取环境反馈(如代码执行错误、游戏状态变化)。
4. 评估:判断当前轮次是否成功。如果成功,存储轨迹并结束。
5. 反思(如果失败):
a. 将任务描述、历史轨迹(当前及之前失败的)、环境反馈(错误信息)输入“反思生成器”。
b. “反思生成器”(一个 LLM)输出一段自然语言文本,分析失败根源,提出具体改进建议。
c. 将生成的反思文本存储到经验中。
6. 跳转回第 2 步(规划),利用新的经验(包含反思)重新规划,进行下一次尝试,直到成功或达到最大尝试次数。
4.2 模块一:反思生成器(Prompt 模板)
这是 Reflexion 的灵魂。你需要设计一个高质量的提示词(Prompt)来引导 LLM 进行有效反思。
一个基础的反思提示词模板如下:
reflection_prompt_template = """
你是一个善于从错误中学习的智能体。以下是你的任务和一次失败的尝试。
任务描述:
{task_description}
历史尝试记录(最近的尝试在最下面):
{history_trajectory}
上一次尝试的具体错误或失败反馈:
{failure_feedback}
请基于以上信息,进行深刻的反思。你的反思需要包含以下部分:
1. 根本原因分析:导致失败的核心问题是什么?(例如:误解了指令、代码逻辑错误、使用了错误的方法、忽略了某个约束条件)
2. 具体错误点:在上一次尝试的哪个具体步骤或语句上出了问题?
3. 修正策略:针对上述原因和错误点,提出非常具体、可操作的改进方案。方案应该指导下一步行动。
请输出你的反思:
"""
你需要根据具体任务领域(编程、游戏、QA)对这个模板进行微调,使其更专业。
4.3 模块二:经验存储器
经验存储器需要记录两种信息:
- 成功轨迹 :任务描述 + 最终成功的完整行动序列。
- 反思文本 :任务描述 + 导致反思的错误轨迹 + 生成的反思文本。
一个简单的实现可以使用 Python 字典或列表在内存中存储。对于更复杂的、需要跨任务检索的场景,可以使用向量数据库(如 ChromaDB)来存储和检索相似任务的经验。
内存存储的简单示例:
class SimpleMemory:
def __init__(self):
self.success_memory = [] # 存储成功轨迹
self.reflection_memory = [] # 存储反思文本
def add_success(self, task_desc, successful_trajectory):
self.success_memory.append({
"task": task_desc,
"solution": successful_trajectory
})
def add_reflection(self, task_desc, failed_trajectory, reflection_text):
self.reflection_memory.append({
"task": task_desc,
"failure": failed_trajectory,
"reflection": reflection_text
})
def get_relevant_memories(self, current_task_desc, top_k=3):
# 简单的关键词匹配或向量检索,返回最相关的成功经验和反思
# 此处为简化示例,仅返回最近添加的几条
relevant = []
relevant.extend(self.success_memory[-top_k:])
relevant.extend(self.reflection_memory[-top_k:])
return relevant
4.4 模块三:评估器
评估器用于判断一次尝试是否成功。这可能是:
- 一个规则系统 :例如,检查代码是否编译通过、单元测试是否通过、游戏是否到达目标状态。
- 另一个 LLM :让 LLM 根据成功标准来判断。这种方式更灵活但成本更高且可能不稳定。
- 人工审核 :在关键任务中作为最终裁决。
5. 功能测试与效果验证:以编程任务为例
让我们用一个具体的例子来演示如何将 Reflexion 应用于一个编程 Agent,并验证其效果。
5.1 测试任务定义
任务 :编写一个 Python 函数 find_second_largest(nums) ,接收一个整数列表 nums ,返回其中第二大的数字。如果列表元素少于2个,返回 None 。列表中可能包含重复数字。
初始失败尝试 :假设我们的 Agent 第一次写出了如下错误代码:
def find_second_largest(nums):
if len(nums) < 2:
return None
sorted_nums = sorted(nums)
return sorted_nums[-2]
这段代码在处理 nums = [3, 3, 2, 1] 时会错误地返回 3 (重复的最大值),而不是 2 。
5.2 模拟 Reflexion 流程
步骤 1: 执行与评估 Agent 执行上述函数,并用测试用例 [3,3,2,1] 进行评估。评估器(一个简单的单元测试)返回失败,并给出反馈: “测试失败。输入 [3,3,2,1] 时期望得到 2,实际得到 3。”
步骤 2: 生成反思 我们将任务描述、错误代码和失败反馈填入反思提示词模板,调用 LLM(例如 GPT-4)生成反思。
预期的反思文本可能如下:
根本原因分析:函数错误地将“第二大”理解为“排序后的倒数第二个元素”,而忽略了列表中可能存在重复的最大值。当最大值重复出现时,排序后的倒数第二个元素仍然是最大值,而非真正的“第二大的不同值”。
具体错误点:`return sorted_nums[-2]` 这一行逻辑有误。
修正策略:需要先对列表进行去重处理,或者在不改变原列表顺序的情况下,找到最大和次大的不同值。方案一:使用集合去重后再排序。方案二:遍历列表,维护最大和次大两个变量,并在遍历时跳过与最大值相等的元素。
步骤 3: 存储反思并重新规划 将这段反思存入经验存储器。在下一轮规划时,Agent 的提示词中会加入这条反思,例如:
任务:编写函数 find_second_largest(nums)。
相关经验:上一次尝试因未处理重复最大值而失败。反思指出需要去重或使用双变量遍历法。
请重新规划代码。
步骤 4: 再次执行 Agent 可能会生成修正后的代码:
def find_second_largest(nums):
if len(nums) < 2:
return None
unique_nums = list(set(nums)) # 去重
if len(unique_nums) < 2:
return None # 去重后可能只剩一个元素
unique_nums.sort()
return unique_nums[-2]
这次代码通过了测试用例 [3,3,2,1] ,也通过了 [1,1] (返回 None )等边界用例。
5.3 效果验证指标
- 成功率提升 :对比使用 Reflexion 前后,Agent 在一批编程任务上首次尝试成功率和最终成功率(允许重试)的变化。预期最终成功率应有显著提升。
- 尝试次数减少 :对于最终成功的任务,平均需要多少次尝试?Reflexion 应能减少盲目重试的次数。
- 反思质量 :人工评估生成的反思文本是否准确指出了问题根源并给出了可行建议。这是机制是否有效的关键。
6. 接口 API 与批量任务设计
虽然 Reflexion 本身不是服务,但我们可以将其核心功能封装成内部 API,便于在系统中调用和管理批量任务。
6.1 核心 API 设计
假设我们构建一个 ReflexionAgent 类,它提供以下主要方法:
class ReflexionAgent:
def __init__(self, llm_client, memory, evaluator):
self.llm = llm_client
self.memory = memory
self.evaluator = evaluator
self.max_attempts = 5
def run_task(self, task_description, environment_executor):
"""执行单个任务的主循环"""
attempts = []
for attempt_num in range(self.max_attempts):
# 1. 规划:结合任务和记忆生成计划或直接行动(如代码)
plan_prompt = self._build_plan_prompt(task_description, attempts)
action = self.llm.generate(plan_prompt)
# 2. 执行与观察
observation, raw_feedback = environment_executor.execute(action)
attempts.append({'action': action, 'observation': observation})
# 3. 评估
is_success, detailed_feedback = self.evaluator.evaluate(task_description, action, observation)
if is_success:
self.memory.add_success(task_description, attempts)
return True, attempts, "Success"
else:
# 4. 反思(如果未达最大尝试次数且非最后一次)
if attempt_num < self.max_attempts - 1:
reflection = self._generate_reflection(task_description, attempts, detailed_feedback)
self.memory.add_reflection(task_description, attempts, reflection)
# 否则,最终失败
else:
return False, attempts, detailed_feedback
return False, attempts, "Max attempts reached"
def _generate_reflection(self, task_desc, history, feedback):
"""调用反思生成器"""
reflection_prompt = reflection_prompt_template.format(
task_description=task_desc,
history_trajectory=self._format_history(history),
failure_feedback=feedback
)
return self.llm.generate(reflection_prompt)
# ... 其他辅助方法 ...
6.2 批量任务处理
对于批量任务(例如一个包含100个编程问题的数据集),可以这样组织:
def process_batch(task_list, agent, executor):
results = []
for task_id, task_desc in enumerate(task_list):
print(f"Processing task {task_id}: {task_desc[:50]}...")
success, trajectory, final_message = agent.run_task(task_desc, executor)
results.append({
'task_id': task_id,
'task_desc': task_desc,
'success': success,
'attempts': len(trajectory),
'final_message': final_message
})
# 可选:将每个任务的结果实时保存到文件,防止中断丢失
save_intermediate_results(results)
return results
关键点 :
- 记忆共享 :可以让所有任务共享一个全局记忆池,这样任务 B 可以借鉴任务 A 的反思经验,实现跨任务学习。
- 资源隔离 :每个任务运行在独立的环境(如 Docker 容器、子进程)中,防止代码执行相互干扰。
- 队列与重试 :对于大规模批量任务,需要引入任务队列和容错机制,处理 API 限流、网络超时等问题。
7. 资源占用与性能观察
Reflexion 框架的性能开销主要来自额外的 LLM 调用(用于反思)和经验检索。
7.1 主要开销分析
-
Token 消耗 :
- 规划/行动生成 :每次尝试都需要调用一次 LLM。
- 反思生成 : 每次失败 都需要额外调用一次 LLM,且反思提示词通常较长(包含完整历史),因此 Token 消耗可能比单次行动生成更多。
- 总消耗 :
总Token ≈ 尝试次数 × (行动生成Token) + 失败次数 × (反思生成Token)。使用 Reflexion 可能会增加 50%-200% 的 Token 成本,但换来的是成功率的提升。
-
时间延迟 :
- 单次迭代时间 = 行动生成时间 + 环境执行时间 + 评估时间 + (如果失败)反思生成时间。
- 反思步骤会显著增加单轮迭代的耗时。在需要快速交互的场景中,需要权衡。
-
内存/存储开销 :
- 经验存储器占用空间很小,主要是文本存储。即使存储数万条轨迹和反思,也通常只在 MB 级别。
- 如果使用向量数据库进行相似性检索,则会增加一定的内存和计算开销。
7.2 优化建议
- 反思触发条件 :不要每次失败都反思。可以设置规则,例如:连续两次失败模式相似时再触发深度反思;或者对于简单错误(如语法错误)直接由规则修正。
- 反思摘要 :存储的反思文本可以不是原始的长篇大论,而是由 LLM 提炼出的 关键教训 (Key Takeaway),缩短提示词长度。
- 记忆检索优化 :不要每次规划都检索全部记忆。仅当当前任务与记忆中的任务在向量空间上足够相似时,才注入相关记忆,减少上下文长度。
- 并行评估 :如果评估器是规则系统(如单元测试),其执行速度很快。如果评估器是另一个 LLM,则成本会加倍,需谨慎设计。
8. 常见问题与排查方法
在实现和运行 Reflexion 框架时,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Agent 陷入无限反思循环 | 反思生成器未能提出有效改进策略;评估器标准过于严苛或模糊。 | 检查最近几轮生成的反思文本,看是否空洞重复(如“再试一次”)。检查评估器的成功判断逻辑。 | 1. 优化反思提示词,要求提供 具体、可操作 的建议。 2. 在评估器中加入 渐进式奖励 ,对部分成功给予肯定,避免“非黑即白”的成功判断。 |
| 反思内容质量差,无法指导改进 | 底层 LLM 推理能力不足;提示词设计不佳;历史轨迹信息过多或过少。 | 人工审核生成的反思,看是否切中要害。尝试使用更强大的 LLM(如 GPT-4)。简化历史轨迹的格式。 | 1. 升级 LLM。 2. 重构提示词,提供更清晰的反思结构指引(如必须包含“错误代码行”)。 3. 对历史轨迹进行 摘要 ,只保留关键决策点和结果。 |
| 经验记忆无效,甚至带来干扰 | 记忆检索机制不准确,注入了不相关或过时的经验。 | 打印出每次规划时检索到的记忆内容,判断其与当前任务的相关性。 | 1. 改进记忆检索的相似度算法(如使用更好的文本嵌入模型)。 2. 为记忆添加 元数据 (如任务类型、难度、所用工具),实现更精准的过滤。 |
| 任务成功率没有提升 | Reflexion 机制未正确集成;最大尝试次数设置过少;任务本身超出 Agent 能力范围。 | 分步调试:确认反思步骤是否执行、反思文本是否被加入到后续规划的上下文中。 | 1. 设置日志,完整记录每一轮的行动、观察、评估结果和反思文本。 2. 增加最大尝试次数。 3. 从更简单、定义明确的任务开始测试框架本身。 |
| 运行速度极慢,成本高昂 | 每次尝试都调用昂贵的大模型(如 GPT-4)进行规划和反思。 | 统计单任务的平均 Token 消耗和 API 调用次数。 | 1. 采用 模型级联 策略:用小型/廉价模型进行规划,仅用大型/昂贵模型进行反思。 2. 设置尝试次数和反思触发的上限。 3. 对常见错误模式建立规则库,优先用规则修正,避免调用 LLM 反思。 |
| 跨任务经验迁移导致错误 | 任务 A 的成功经验被错误地应用到表面相似但本质不同的任务 B 上。 | 分析导致任务 B 失败的行动,检查是否受到了任务 A 记忆的误导。 | 在记忆检索时,除了语义相似度,加入 任务约束条件的匹配度检查 。对于关键任务,可以手动审核注入的记忆。 |
9. 最佳实践与使用建议
基于论文思想和工程实践,以下建议能帮助你更好地应用 Reflexion:
- 从小任务开始验证 :不要一开始就用于最复杂的任务。选择一个定义清晰、有明确成功标准的中等难度任务(如 LeetCode 简单题、特定格式的数据提取)来验证整个 Reflexion 循环是否工作正常。
- 设计强大的评估器 :Reflexion 的效果严重依赖评估器提供的准确反馈。尽可能使用 自动化、确定性 的评估器(如单元测试、规则检查)。如果必须用 LLM 评估,请设计详细的评估标准并设置多个评估样本。
- 结构化反思输出 :强制要求反思文本以特定格式(如 JSON)输出,包含“根本原因”、“错误位置”、“修正步骤”等字段。这便于后续程序化地利用这些信息。
- 实施记忆管理 :记忆不是越多越好。建立记忆的 淘汰与更新机制 :例如,只保留最近 N 条成功经验;对于反思记忆,如果其指导的策略后续被证明成功,则将其转化为成功经验,否则在一定时间后淘汰。
- 安全与监控 :对于生产环境,必须记录 Agent 的所有行动、反思和最终输出,以便审计和追溯。特别是当 Agent 能够执行写文件、调用外部 API 等操作时,需有严格的权限控制和沙箱环境。
- 结合其他技术 :Reflexion 可以与 ReAct (推理+行动)、 Chain-of-Thought (思维链)、 Tool Calling (函数调用)等技术结合,形成更强大的 Agent。反思可以发生在 CoT 的每一步之后,也可以作为 ReAct 循环中“Think”步骤的增强。
- 人类在环 :在关键决策点引入人类审核。例如,Agent 生成的反思可以被展示给人类专家确认;或者,在多次尝试失败后,自动触发人工干预。
10. 总结与下一步
Reflexion 论文的价值在于,它用相对简单的方法(自然语言反思)解决了 AI Agent 学习中的一个核心难题:如何避免重复犯错。它不改变模型参数,而是通过优化决策过程来提升性能,这种思路对资源有限的开发者和研究者非常友好。
最值得尝试的点 :如果你已经有一个能执行多步任务的 Agent,但其成功率在某个瓶颈上无法突破,那么集成 Reflexion 机制可能是性价比最高的改进方案。首先在失败案例中手动模拟反思过程,看看 LLM 能否生成有价值的改进建议。如果可以,那么将其自动化很可能带来显著提升。
最先应该验证的功能 :实现一个最小可用的反思循环。选择一个经典任务(如编程题),手动提供一次失败轨迹,测试你的反思提示词能否引导 LLM 产出高质量的反思。这是整个框架能否生效的基石。
最容易踩的坑 :
- 提示词设计不当 :反思提示词过于笼统,导致 LLM 输出“加油,再试一次”之类的废话。
- 评估器失灵 :评估器无法准确判断成功与否,导致该反思时不反思,或不该反思时乱反思。
- 记忆爆炸 :无限制地存储所有经验,导致检索效率低下,并注入噪声。
后续扩展方向 :
- 分层反思 :不仅对最终失败进行反思,也对中间步骤的“不满意”结果进行局部反思。
- 多智能体辩论 :引入多个“评审员”智能体对失败轨迹进行辩论,综合各方观点生成更全面的反思。
- 将反思编译为可执行规则 :对于反复出现的同类错误,尝试将反思文本总结成一条可编程的规则或约束,直接应用于未来的规划阶段,减少对 LLM 的依赖。
理解并实践 Reflexion,是迈向构建具备持续学习能力的 AI Agent 的重要一步。建议你结合本文提供的代码片段和思路,从一个小实验开始,亲自体验这种“自我反省”的力量。
更多推荐

所有评论(0)