LLM agentic模式之reflection:SELF-REFINE、Reflexion、CRITIC

SELF-REFINE

SELF-REFINE出自2023年3月的论文《Self-Refine: Iterative Refinement with Self-Feedback》,考虑到LLM第一次生成结果可能不是最好的输出,提出一种包括反馈(feedback)和改善(refinement)两个步骤的迭代方法来改进LLM的初始输出。

基本思路

对于输入,SELF-REFINE让LLM生成一个初始输出,接着让同一个LLM对这个输出提供反馈(Feedback),再让LLM根据反馈来改善其输出(Refine),不断迭代进行Feedback和Refine步骤,直到满足停止条件,停止条件为指定的时间步或者从反馈中提取的停止标记(如停止分数)。流程示意如下图:

在这里插入图片描述

SELF-REFINE算法示意如下图,所用的prompts都是任务相关的few-shot prompt,根据不同类型的任务指定不同的prompt。

在这里插入图片描述

反馈会包含输出的不同方面,比如对于代码优化任务,反馈包括效率、可读性、代码整体质量等,prompt模型提供actionable且specific的反馈,actionable是指反馈包括一个可以提升输出效果的action,比如下面代码优化例子中的action:“use the formula”;specific是指反馈要包括输出中具体要改进的地方,比如下面代码优化例子中的反馈提到了"for loop"效率不高。

在这里插入图片描述

实验结论

实验模型是GPT 3.5 和GPT 4,有以下分析结果:

  • SELF-REFINE在不同大小模型下都有提升效果,在GPT 4上提升效果更明显,作者认为SELF-REFINE可以使得更强的模型如GPT-4解锁其潜能。
  • 反馈质量对于SELF-REFINE的影响较大,根据反馈进行Refine也能有效提升输出质量。
  • 模型输出质量随着迭代次数增加而提升,同时存在边际效应递减。
  • 在Vicuna-13B上的实验结果表明它很难进行Refine步骤。

Reflexion

Reflexion出自2023年3月的论文《Reflexion: Language Agents with Verbal Reinforcement Learning》,使用语言反馈来增强LLM agent,让LLM可以从之前的错误中学习。

下图是Reflexion agent通过试错和自我反思(self-reflection)解决决策、编程、推理任务的示例。

在这里插入图片描述

基本思路

Reflexion的框架和算法示意如下图所示,包括三个模型:Actor模型记作 M a M_a Ma,用来生成文本和动作;Evaluator模型记作 M e M_e Me,用来对 M a M_a Ma的输出打分;Self-Reflection模型记作 M s r M_{sr} Msr用来生成文字增强反馈以帮助Actor进行自我提升。

在这里插入图片描述

  • Actor:LLM经prompt根据观测状态生成文本和动作,就像传统基于策略的RL算法一样,在时刻t,从当前策略 π θ \pi_{\theta} πθ采样动作或者输出,并从环境得到一个observation o t o_t ot。作者们使用了不同Actor模型,包括CoT和ReAct,且设计了一个记忆组件mem用来提供额外上下文给agent。
  • Evaluator:评估Actor生成输出的质量,给定任务上下文和Actor的输出轨迹计算出一个奖励分数。对于推理任务,奖励函数基于绝对匹配(exact match)打分,确保生成输出与期望方案尽可能地对齐;对于决策任务,使用预定义的启发式函数,这些函数满足特定的评估准则。此外对于决策任务和编程任务,还尝试使用一个LLM的不同实例作为Evaluator来生成奖励。
  • Self-reflection:生成文本自我反思来为Actor未来的尝试提供反馈。它对给定的奖励信号如成功状态(成功/失败)、当前轨迹、存储记忆mem,生成细致且具体的反馈,这个反馈也会被存储到agent的记忆模块mem中。 比如对于一个多步决策任务,当agent收到一个失败信号,它能推测出动作 a i a_i ai导致了不正确的动作 a i + 1 a_{i+1} ai+1 a i + 2 a_{i+2} ai+2;且可推断它应该执行动作 a i ′ a_i^{'} ai并且得到 a i + 1 ′ a_{i+1}^{'} ai+1 a i + 2 ′ a_{i+2}^{'} ai+2;这样在接下来的尝试中,agent就可以利用其过去的经验在t时刻选择动作 a i ′ a_i^{'} ai
  • Memory:Reflexion包括短期记忆和长期记忆,短期记忆是历史轨迹,Self-Reflection模型的输出则是长期记忆。

Reflection的算法流程如上图右侧所示,也是一个迭代优化过程。Actor与环境交互后生成轨迹 τ 0 \tau_0 τ0,Evaluator生成分数 r 0 r_0 r0,由 r t = M e ( τ 0 ) r_t=M_e(\tau_0) rt=Me(τ0)计算得到, r t r_t rt是第t次尝试的标量分数并随着任务表现提升而增加。Self-Reflection模型分析 { τ 0 , r 0 } \{\tau_0, r_0 \} {τ0,r0}后生成总结 s r 0 sr_0 sr0并存储在记忆模块mem s r t sr_t srt是第t次尝试的自然语言经验反馈。Actor、Evaluator、Self-Reflection模型一起协同迭代直到Evaluator认为轨迹 τ t \tau_t τt是正确的。 试验时,记忆模块mem的大小由最大存储经验个数 Ω \Omega Ω来决定,通常被设置为1-3。

CRITIC

CRITIC是Self-Correcting with Tool-Interactive Critiquing的简称,出自2023年5月的论文《CRITIC: Large Language Models Can Self-Correct with Tool-Interactive Critiquing》,它使用外部工具来核实和改正LLM的输出。

基本思路

CRITIC的示意图如下图所示,给定输入,LLM先生成初始输出,再通过text-to-text API与外部工具交互来核实输出,核实结果与初始输出一起作为LLM的反馈让其改正其输出,这个"Verify → Correct → Verify"的循环不断迭代直到满足终止条件。

在这里插入图片描述

CRITIC方法的算法描述如下图:

在这里插入图片描述

  • CRITIC方法利用LLM的COT推理涌现能力和few-shot in-context learning能力。
  • 为了让LLM能够使用工具,将不同的外部工具如搜索引擎、代码编译器、各种API变成text-to-text函数,用in-context learning的方式让LLM利用工具。(虽然可以让LLM自动选择使用哪种工具,在论文实验中是不同的任务使用不同的工具来校验生成结果,比如问答会使用搜索引擎)
  • 输入x,模型记为M, prompt为 ℘ \wp ,LLM生成的初始输出为 y 0 ^ ∼ P M ( ⋅ ∣ ℘ ⊕ x ) \hat{y_0} \sim \mathbb{P}_{\mathcal{M}} (\cdot |\wp \oplus \ x) y0^PM( x) ⊕ \oplus 为表示连接),LLM使用外部工具来评估 y ^ i \hat{y}_i y^i并生成critiques c i ∼ P M ( ⋅ ∣ ℘ ⊕ x ⊕ y i ^ , T ) c_i \sim \mathbb{P}_{\mathcal{M}} (\cdot |\wp \oplus \ x \oplus \hat{y_i}, \mathcal{T}) ciPM( xyi^,T) T \mathcal{T} T是指工具集合)。critiques可识别错误、提供可执行建议或者提供可信的原则等。
  • LLM根据输入x、之前的输出、和critiques c i c_i ci生成改进的输出 y ^ i + 1 ∼ P M ( ⋅ ∣ ℘ ⊕ x ⊕ y i ^ ⊕ c i ) \hat{y}_{i+1} \sim \mathbb{P}_{\mathcal{M}} (\cdot |\wp \oplus \ x \oplus \hat{y_i} \oplus c_i) y^i+1PM( xyi^ci)​ 。
  • "vevify-then-correct"的过程不断迭代直到满足停止标准,停止标准如满足了校验条件、收到环境反馈、达到最大迭代次数等。

参考资料

  1. Self-Refine: website 、github 、arxiv

  2. Reflexion: arxiv, github

  3. CRITIC: arxiv, github, 使用工具github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Orange Pi 5与Linux系统编程】-POSIX消息队列

Linux系统中的POSIX消息队列编程 文章目录 Linux系统中的POSIX消息队列编程1、POSIX 消息队列2、Linux 中的 POSIX 消息队列命名3、POSIX 消息队列调用3.1 mq_open, mq_close3.2 mq_timed_send、mq_send、mq_timed_receive、mq_receive3.3 mq_notify3.4 mq_unlink3.5 mq_getatt…

【Java】已解决java.lang.FileNotFoundException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.FileNotFoundException异常 在Java编程中,java.lang.FileNotFoundException是一个常见的异常,它通常表示程序试图打开一个不存在的文件、文…

打包体积分析和优化

webpack分析工具&#xff1a;webpack-bundle-analyzer 1. 通过<script src"./vue.js"></script>方式引入vue、vuex、vue-router等包&#xff08;CDN&#xff09; // webpack.config.js if(process.env.NODE_ENVproduction) {module.exports {devtool:…

python之mysql数据库的操作

对数据库的操作 &#xff1a; 1 数据库的登录和登出&#xff1a; 登录 终端执行&#xff1a;mysql -uroot -p&#xff1b; 再输入密码&#xff1b; 登出 quit 或exit 2 显示当前的时间&#xff1a; select now() 3 查看所有的数据库&#xff1a; show databases&#…

使用Let‘s Encrypt 申请通配符证书

为什么不使用阿里云/腾讯云等公有云厂商提供的免费证书? 上篇介绍了从阿里云上面申请免费证书,有效期一年 为网站配置https证书 公有云提供的证书不支持通配符&#xff0c;只支持某个确定的解析。 不管是二级域名还是三级域名&#xff0c;只要是具体的确定的地址&#xff0c;都…

spring 、springboot 运行的原理、理解、分析

Spring 和 Spring Boot 是非常流行的 Java 框架&#xff0c;它们的运行原理和设计哲学帮助开发者构建现代化的企业级应用。在这里&#xff0c;我们将深入探讨它们的运行原理、设计理念及其背后的机制。 Spring 框架 1. 核心概念和组件 IoC&#xff08;Inversion of Control&…

代码随想录训练营Day31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、分发饼干二、摆动序列三、最大子树组合 前言 今天是跟着代码随想录刷题的第31天&#xff0c;主要学习了分发饼干&#xff0c;摆动序列和最大子树组合这三个…

号外!号外!全网第一手Android P刘海屏适配大揭秘,唯一Kotlin算法

如下图所示&#xff1a; 4.2.适配刘海屏 在刘海屏调试打开之后&#xff0c;浏览应用的所有页面&#xff0c;测试所有遮挡问题&#xff0c;或者是下移导致的问题&#xff0c;对有问题的页面进行布局适配。适配方案如下&#xff1a; Google 提供的适配方案&#xff0c;可以设置…

使用VisualBox+Vagrant搭建Centos虚拟机环境

1.下载并安装VisualBox&#xff1b; 2.下载并安装Vagrant; 3.打开cmd窗口&#xff0c;执行命令vagrant init centos/7&#xff0c;初始化centos环境&#xff0c;该步骤受网络带宽影响&#xff0c;可能挂级30分钟到1个小时&#xff1b; 4.启动虚拟机&#xff1a;vagrant up&…

数据库理论大题与编译原理大题(笔记)

目录 数据库&#xff08;求最小函数依赖&#xff09; 数据库&#xff08;求属性集的闭包和候选码&#xff09; 编译原理&#xff08;NFA ——> DFA&#xff09; 编译原理&#xff08;识别文法的活前缀 DFA 和 LR(0) 分析表&#xff09; 哈哈&#xff01;这是本人作者才…

WordPress强大多功能主题模板The7 v9.16.0

模板介绍 The7可以与WPBakery Page Builder&#xff08;原Visual Composer&#xff09;和Ultimate Addons的完全无缝集成。它也与大多数流行的插件完全兼容&#xff0c;例如WooCommerce&#xff0c;WPML&#xff0c;Yoast SEO&#xff0c;All in One WP Migration&#xff0c;…

工具方法 - 教育儿童的一些基本原则

全面而有效的教育需要综合多方面的因素和方法。以下是一些关键的教育原则&#xff1a; 1. 爱与关怀&#xff1a;让孩子感受到无条件的爱和关怀&#xff0c;建立安全感和信任感。这是教育的基础。 2. 榜样作用&#xff1a;父母和教师要以身作则&#xff0c;通过自己的行为和态度…

Windows系统下安装RabbitMQ详细步骤

声明&#xff1a;原文参考链接出自&#xff1a; 如何在Windows系统下安装RabbitMQ_rabbitmq windows安装-CSDN博客 https://zhuanlan.zhihu.com/p/693160757 一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的…

无需破解,打开就是旗舰版!

在当今快节奏的工作环境里&#xff0c;有效的视觉沟通变得至关重要。流程图、思维导图、组织结构图等图表能够帮助我们以清晰、直观的方式传达复杂信息。而Wondershare Edraw Max正是这样一款强大的绘图工具&#xff0c;它能够帮助用户轻松创建各种专业图表。 软件链接&#x…

基于springboot websocket和okhttp实现消息中转

1、业务介绍 消息源服务的消息不能直接推给用户侧&#xff0c;用户与中间服务建立websocket连接&#xff0c;中间服务再与源服务建立websocket连接&#xff0c;源服务的消息推给中间服务&#xff0c;中间服务再将消息推送给用户。流程如下图&#xff1a; 此例中我们定义中间服…

Java中如何优化数据库查询性能?

Java中如何优化数据库查询性能&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Java中如何优化数据库查询性能&#xff0c;这是…

ArcgisEngine 释放内存案例

一、案例事由 写了一个循环代码&#xff0c;里面有一句获取相交后的图形 IGeometry tempFeature topoOPer.Intersect(psoureGeo, esriGeometryDimension.esriGeometry2Dimension); 当程序运行到2700左右的时候&#xff0c;就不断报错&#xff0c;显示是内存错误&#xff0c;…

解析PDF文件中的图片为文本

解析PDF文件中的图片为文本 1 介绍 解析PDF文件中的图片&#xff0c;由两种思路&#xff0c;一种是自己读取PDF文件中的图片&#xff0c;然后用OCR解析&#xff0c;例如&#xff1a;使用PyMuPDF读取pdf文件&#xff0c;再用PaddleOCR或者Tesseract-OCR识别文字。另一种使用第…

信息学奥赛初赛天天练-32-CSP-J2022基础题-中缀表达式、后缀表达式、哈夫曼编码、连通图、邻居矩阵、完全二叉树、数组存储

PDF文档公众号回复关键字:20240623 2022 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 6.对表达式a(b-c)*d的前缀表达式为( ),其中 、- 、 * 是运算符。 A. * a - bcd B. a * - …

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render()&#xff1b;类组件 this.setState()&#xff1b;函数组件 useState useEffect&#xff1b; 我们希望实现一套统一的更新机制&#xff0c;他的特点是&#xff1a; 兼容上述触发更新的方式方便后续…