智能体核心能力之反思(reflection)
**反思**
对于固定场景,提前设计好执行流程就可以了。但是有些场景动态变化,而且可能性很多,无法为所有可能性制定对应的方案。
这时,必须根据实时反馈动态调整下一步的行动。反思在这种动态场景中起着重要作用,系统根据反馈(比如行动的结果和外部数据)重新评估下一步行动。
比如在教学场景中,智能体根据测试结果,分析学生哪些知识点已经掌握,哪些知识点还需要巩固,而从动态调整后续教学计划。
比如,在编程场景中:
1. 让大模型生成代码。
2. 让大模型从可读性、可复用性、简洁、可扩展性等角度提出改进意见。还可以让大模型生成、运行测试用例(需要用到工具)。
3. 让大模型根据改进意见和运行结果,优化代码。
4. 重复第二和第三步,直到生成满意的代码。
5. 第二步和第三步可以使用不同的智能体。因为智能体有自己擅长的领域。
再比如,在RAG智能体中,如果检索到的结果和问题不相关,或者不够完整,就重新分解查询、再次检索。
除了动态调整行动,反思能力还能提升大模型的输出性能。主要有下面3种方案,自优化算法、reflexion框架和CRITIC框架。自优化算法只依赖大模型本身提供反馈和优化,reflexion框架增加了记忆功能,CRITIC框架则依赖外部工具提供反馈。
**自优化算法(SELF-REFINE)**
大模型在处理复杂需求时往往表现不好。比如,任务包含多个维度的目标,或者任务的目标难以界定。想要提升大模型的输出质量,可以使用特定领域的数据训练模型,但是成本很高。是否存在一种不需要额外训练模型,就可以提升输出效果的方法呢?当然,这就是自优化(SELF-REFINE)算法。
简单来说,该算法分成3个步骤:
1. 大模型根据提示词输出回答。
2. 大模型自己基于回答和反馈提示词,输出反馈。
3. 大模型再根据优化提示词、回答和反馈,输出优化后的回答。
4. 重复第2和第3步,直到达到指定的迭代次数,或者大模型判断不用再继续优化回答。
这和我们平时解决问题的过程很像。我做了一份向领导汇报的ppt(回答),发现有些地方表述不清晰(反馈),于是增加了具体数字(优化),然后继续检查、修改(重复反馈和优化),直到临近任务节点或者我认为ppt已经很完美了(结束循环)。
自优化算法效果怎么样?研究人员测试了它在7个任务(涵盖自然语言、代码生成等领域)上的表现,绝对性能比直接使用GPT-3.5和GPT4提升了5%-40%
当然,想要实现这样的性能提升,需要大模型具有足够的小样本学习能力和指令遵循能力。对于Vicuna-13B等开源小模型,性能反而衰减20%-35%。
**reflexion框架**
reflexion框架包括执行器(actor)、评估器(evaluator)、自反思模型(self-reflection)和记忆(memory)4个部分。
执行器的作用是根据提示词生成回答。
评估器评估回答得质量。它以生成的轨迹(短期记忆)为输入,计算反映上下文中性能的奖励分数。
自反思模型根据评估结果生成(稀疏奖励信号,比如二元成功状态)转化为自然语言反馈,并且结合短期记忆和长期记忆,生成优化建议。
记忆分成短期记忆和长期记忆。轨迹历史是短期记忆,自反思模型的输出是长期记忆。
reflexion框架工作流程:
1. 执行器和环境互动产生轨迹(trajectory)。
2. 评估器根据轨迹输出分数。
3. 自反思模型根据评估生成反馈,并且存储在记忆中。
4. 重复1-3步,直到评估器评估通过。
**CRITIC框架**
CRITIC(self-correcting with tool-interactive critiquing),通过与工具交互的方式实现自我纠正。
CRITIC框架的特点在于引入了外部反馈。它通过与搜索引擎、代码解释器等外部工具交互,实现交叉验证,从而改进性能。
CRITIC框架运行步骤:
1. 大模型生成回答。
2. 与外部工具交互,针对回答生成评论。
3. 基于回答和评论,纠正回答。
4. 根据收到的评论纠正输出。
5. 重复2-4步,直到满足特定的停止条件。
参考:
[Agentic Design Patterns Part 2: Reflection](
www.deeplearning.ai)
[Self-Refine: Iterative Refinement with Self-Feedback | 自优化:带有自我反馈的迭代改进](
arxiv.org),Madaan et al. (2023) ;[自优化算法的网页](
selfrefine.info);[self-refine-GitHub](
github.com)
[Reflexion: Language Agents with Verbal Reinforcement Learning | 反思:基于语言强化学习的语言智能体](
arxiv.org),Shinn et al. (2023);[reflexion框架-GitHub](
github.com)
[CRITIC: Large Language Models Can Self-Correct with Tool-Interactive Critiquing | 评论:大型语言模型可以通过工具交互式评论进行自我纠正](
arxiv.org),Gou et al. (2024);[CRITIC-GitHub](
github.com)