逐步实践复现 SELF-RAG

SELF-RAG 简介

SELF-RAG(Self-Reflective Retrieval-Augmented Generation)是一种检索增强生成(RAG)的框架,它通过自我反思学习检索、生成和批判,以提高大型语言模型(LLM)的质量和真实性。

SELF-RAG的工作流程主要包括以下几个步骤:

  1. 按需检索(Retrieval as Needed):首先,SELF-RAG使用特殊的LLM对问题进行首次结果生成,这个LLM在生成过程中会输出一些特殊的Token,称为Reflection Token。如果生成的结果表明需要检索,则进入检索阶段;如果不需要检索,则直接返回结果。

  2. 检索与生成(Retrieval and Generation):如果需要检索,SELF-RAG会检索出相关文档,并将每个文档与问题一起输入到LLM中,获取每个文档的生成结果。这一过程可能涉及到并发执行以提高效率。

  3. 评估与选择(Evaluation and Selection):对每个文档的生成结果进行评估,使用Reflection Token来计算每个文档的得分,并选择得分最高的结果作为最终输出。

SELF-RAG与普通RAG的主要区别在于:

  • SELF-RAG可以根据生成的结果判断是否需要检索,而普通RAG每次查询都需要检索。
  • SELF-RAG只用单个文档作为上下文生成结果,而普通RAG将所有检索到的文档作为上下文。
  • SELF-RAG对生成结果有评估和挑选的过程,普通RAG则没有。
  • SELF-RAG使用的是经过特殊训练的LLM,而普通RAG使用的是通用LLM 1。

SELF-RAG通过使用Reflection Token来实现更智能的检索和生成控制,提高了生成文本的准确性和质量。此外,SELF-RAG的训练过程包括训练一个评估模型来生成Reflection Token,然后使用这些Token更新训练语料库,最后训练最终的生成模型来预测输出内容和Reflection Token。

在实际应用中,SELF-RAG可以构建完整的应用,实现从模型测试到构建Self-RAG应用的流程,包括模型的微调方法和应用的优化思考。此外,SELF-RAG框架还包括了对生成内容的评估参数logprobs的使用,这是一个重要的参数,用于计算每个生成的token的概率对数,从而评估生成结果的质量。

总结

SELF-RAG的工作流程如下所述:首先,我们输入一个问题,系统会先进行判断,是否需要进行信息检索。在这个例子中,系统检索到了3个相关文本。接着,大模型会针对这3个文本,并行地生成3个不同的子回答。随后,大模型将进行进一步判断,生成3个评估结果:一是检索到的文本是否与问题相关,二是生成的答案是否基于检索文本(即是否凭空捏造),三是生成的答案是否有助于回答问题。根据这三个评估结果,我们对检索文本和子回答进行排序,将那些相关性强、内容真实且有助于回答问题的部分置于前列。例如,将相关性高且内容可靠的检索文档排在首位。接下来,我们将这些新的子回答和文档片段再次进行检索,如此循环往复,直至最终生成一个最佳回答。

LangGraph 简介

LangGraph是LangChain平台最近推出的一项关键功能,它代表了LangChain向多代理框架发展的重要步伐。那么,如何实现上文提到的类似代理的功能呢?我们不必手动编写繁琐的判断函数,因为LangGraph为我们提供了一个高效的解决方案。

LangGraph建立在LangChain之上,它使得开发者能够更加轻松地构建强大的代理系统。以下是关于LangGraph的官方资源:

  • 官方博客:LangGraph on LangChain Blog
  • 使用文档:LangGraph Documentation

LangGraph的核心是以图形化的方式运行,它包含三个主要元素:StateGraph、Node和Edge。

  • StateGraph:这是图形的状态,它用于存储代理运行时的信息。在SELF-RAG中,StateGraph负责保存运行过程中产生的各种数据,如召回的文档、问题、子答案等,这些数据通常以字典的形式进行存储。
  • Node:代表图形中的节点,它们是代理执行过程中的关键步骤。例如,召回文档和根据文档生成答案都是独立的节点。
  • Edge:连接各个节点的边,它们代表了代理的工作流程方向。Edge通常负责执行文本分类的任务,例如决定是否进行检索。如果需要检索,流程就会转向检索节点;如果不需要,则直接由大模型生成答案。

通过这种方式,LangGraph为代理的构建和运行提供了一个清晰且易于管理的框架。

复现 SELF-RAG

构建Agent工作流程图如下所示:

图片

  1. 问题输入与文档检索:首先,用户输入一个问题,召回文档集,此检索过程是固定的。

  2. 文档相关性评估:接着,我们评估这些召回的文档是否与问题相关。将相关的文档保留,不相关的文档则被排除。这个过程实际上是对文档进行了一次筛选和排序。

    f"""你是一个评分员,正在评估检索到的文档与用户问题的相关性, \n以下是检索到的文档: \n {context} \n这是用户的问题: {question} \n    如果文档包含与用户问题相关的关键词或语义意义,将其评分为相关. \n只输出一个二分类的评分 'yes' 或者 'no' 用来表示文档是否与问题相关."""
  3. 文档存在性判断:然后,我们检查是否有相关文档。如果没有相关文档,系统将进行问题转写;如果有相关文档,则基于这些文档生成答案。

  4. 答案支持性判断:在这一步,我们需要判断生成的答案是否得到了召回文档的支持,即检查大模型是否忠实于文档内容,没有胡编乱造。如果答案得到支持,则继续下一步;如果答案不支持,则需要重新生成回答。

    f"""你是一个评分员,在评估一个答案是否基于现有的事实依据. \n以下是事实依据:\n ------- \n{documents}\n ------- \n以下是回答: {generation}只输出一个二分类的评分 'yes' 或者 'no' 用来表示答案是否基于事实的支持."""
  5. 最终评分准备:在这个节点,我们只进行图状态的变更,不需要调用大模型进行任何操作。

  6. 答案有用性判断:最后,我们评估生成的答案是否有助于解决问题。如果答案有用,代理任务结束;如果答案无用,则进行问题转写,并重新开始整个过程。

    f"""你是一个评分助手用于判断回答是否解决了问题. \n以下是回答:\n ------- \n{generation}\n ------- \nH以下是问题: {question}给出一个二分类评分 'yes' 或者 'no' 提示答案是否对解决问题有用."""

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

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

相关文章

通用业务指标管理系统设计

设计一个通用业务指标管理系统,旨在帮助企业全面监控和管理关键业绩指标(KPIs),以驱动决策制定和业务优化。以下是一个综合性的设计方案,涵盖核心功能模块、技术架构、以及用户体验设计要点: 1. 核心功能模块 目标设定与分解 战…

「C++系列」一篇文章说透【存储类】

文章目录 一、C 存储类1. 类的定义2. 对象的创建3. 对象在内存中的布局4. 对象的存储位置 二、auto 存储类1. auto的基本用法2. auto与存储类的关系1) 自动存储类(最常见的)2) 静态存储类3) 动态存储类(通过new) 三、register 存储…

C标准库读写文件

函数介绍 库变量 变量描述size_t无符号整数类型,是sizeof关键字的结果,表示对象大小FILE文件流类型,适合存储文件流信息的对象类型 库宏 宏描述NULL空指针常量EOF表示已经到达文件结束的负整数stderr、stdin、stdout指向FILE类型的指针&a…

【数智化案例展】吉林省消防救援总队——基于大语言模型的119智慧助手

‍ 嘉诚信息案例 本项目案例由嘉诚信息投递并参与数据猿与上海大数据联盟联合推出的《2024中国数智化转型升级创新服务企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着信息时代的迅猛发展,消防人员正面临前所未有的知识爆炸挑战。为了高…

day30--56. 合并区间+ 738.单调递增的数字

一、56. 合并区间 题目链接:https://leetcode.cn/problems/merge-intervals/ 文章讲解:https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html 视频讲解:https://www.bilibili.com/video/BV1wx4y157nD 1.1 初见思路 …

数据库第四次练习

数据准备 创建两张表:部门(dept)和员工(emp),并插入数据,代码如下 create table dept( dept_id int primary key auto_increment comment 部门编号, dept_name char(20) comment 部门名称 ); in…

SAP PS学习笔记02 - 网络,活动,PS文本,PS文书(凭证),里程碑

上一章讲了PS 的概要,以及创建Project,创建WBS。 SAP PS学习笔记01 - PS概述,创建Project和WBS-CSDN博客 本章继续讲PS的后续内容。包括下面的概念和基本操作,以及一些Customize: - 网络(Network&#xf…

力扣-回溯法

何为回溯法? 在搜索到某一节点的时候,如果我们发现目前的节点(及其子节点)并不是需求目标时,我们回退到原来的节点继续搜索,并且把在目前节点修改的状态还原。 记住两个小诀窍,一是按引用传状态…

欣奇随机美图源码

欣赏养眼美图让人心情愉悦 新增正能量进站引导首页 上传文件解压即可用有手就行 美图输出接口自判断版 http://mt.xqia.net/api.php http://mt.xqia.net/api.php?typejson 源码下载:https://download.csdn.net/download/m0_66047725/89520368 更多资源下载&…

20240711每日消息队列-------------MQ消息的积压的折磨

目标 解决MQ消息的积压 背景 菜馆系统----------- 系统读取消息,处理业务逻辑,持久化订单和菜品数据,然后将其显示在菜品管理客户端上。 最初我们的用户基数很小,上线后的一段时间内,MQ消息通信还算顺利。 随着用户…

R包:‘ggcharts好看线图包‘

介绍 ggcharts提供了一个高级{ggplot2}接口,用于创建通用图表。它的目标既简单又雄心勃勃:让您更快地从数据可视化的想法到实际的绘图。所以如何?通过处理大量的数据预处理,为您模糊{ggplot2}细节和绘图样式。生成的图是ggplot对象,可以使用…

蓝桥 7.11 dp

2.砝码称重 - 蓝桥云课 (lanqiao.cn) 思路 动态规划的核心思想是将问题分解成更小的子问题,并存储子问题的解,以避免重复计算 数组 dp[i][j] 表示使用前 i 个砝码可以称出的重量为 j 的数量 更新过程如下: 1.初始化:dp[0][0] …

python:sympy 求解一元五次方程式

pip install sympy 或者 本人用的 anaconda 3 自带 sympy 在北大数学训练营,韦东奕 用卡丹公式 巧妙 求解一元五次方程式: \latex $x^510*x^320*x-4 0$ from sympy import *x symbols(x) expr x**5 10*x**3 20*x -4# 用卡丹公式 尝试化简 a sym…

【IOS】React Native之HelloWorld

RN搭建开发环境 rvm 安装3.2.2 brew install node18 brew install watchman# 使用nrm工具切换淘宝源 npx nrm use taobao# 如果之后需要切换回官方源可使用 npx nrm use npmnpm install -g yarnbrew install cocoapodsnpm uninstall -g react-native-cli react-native-communi…

<数据集>表情识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2504张 标注数量(xml文件个数):2504 标注数量(txt文件个数):2504 标注类别数:7 标注类别名称:[Neutral, Happy, Angry, Fear, Sad, surprised, Disguist] 序号类别名…

开始Linux之路(暑假提升)

人生得一知己足矣,斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

Transformer——多头注意力机制(Pytorch)

1. 原理图 2. 代码 import torch import torch.nn as nnclass Multi_Head_Self_Attention(nn.Module):def __init__(self, embed_size, heads):super(Multi_Head_Self_Attention, self).__init__()self.embed_size embed_sizeself.heads headsself.head_dim embed_size //…

【VSCode】设置背景图片

1.下载background插件:拓展程序→background→install安装→设置: 2.点击在 settings.json 中编辑: 3.将settings.json文件中所有代码注释,添加以下代码: {// 是否开启背景图显示"background.enabled": t…

【Linux杂货铺】1.环境变量

1.环境变量基本概念 环境变量( environment variables )一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:我们在编写 C / C +代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪…

什么是Web3D?国内有哪些公司可以做?

Web3D 是一种基于网页的三维立体虚拟现实技术。利用计算机图形学、图像处理、人机交互等技术,将现实世界中的物体、场景或概念以三维立体的方式呈现在网页里。Web3D 技术可以让用户在任何时间、任何地点,通过互联网与虚拟世界进行互动,获得身…