应用篇| 深入浅出LLM应用之RAG

在这里插入图片描述

相信很多人都使用过LLM大模型,但是现有大模型或多或少都有以下问题:

LLM幻觉问题:从《【小白入门篇1】GPT到底是怎样练成?》我们知道虽然大模型现在能力很强,但是本质就是在做文字接龙,而且每次接龙都具有随机性, 导致模型有时候回答, 很容易出现“幻觉”。Meta AI 的研究人员引入了一种叫做检索增强生成(Retrieval Augmented Generation,RAG)的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起 , 作为解决大模型幻觉的一种利器。

数据保鲜度:除此之外, 现在大模型使用离线数据训练出来,对于新的知识0感知, 导致模型直接回答数据过时、不准等问题。

数据安全性:最后也是最重要的是,数据作为很多企业的重要资产,是不能直接上传到互联网上的大模型, 这样会导致不可预测的后果,既要保证安全,又要借助AI能力,那么最好的方式就是把数据全部放在本地,企业数据的业务计算全部在本地完成。而在线的大模型仅仅完成一个归纳的功能,甚至,LLM都可以完全本地化部署。

出于以上三种主要原因, 使得LLM+RAG有用武之地。

01初识RAG架构

RAG基本思路是将背景知识文档预先向量化,存储至向量数据库中,当用户进行提问时,将用户的提问同样向量化后, 通过向量检索算法(比如向量乘积)之后, 得到top-K的文档, 将获取的top-k文档和用户提问都作为大模型输入, 大模型根据输入最终生成回答.这样 RAG 更加适应事实会随时间变化的情况,因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。

image.png

可以将RAG的架构拆分成以下部分:

  • (1)数据提取: 我们现实生活的场景中大部分是word、pdf、pptx等各种各样的文档数据, 需要各种数据Loader,将数据抽取出来, 分别进行数据清洗

  • (2) 数据分块: 现在所有大模型都有token长度的限制, 包括数据库也有长度限制, 而我们文档数据长度大部分都超过这些限制, 所以我们必须对文档数据进行分块

  • (3) 向量化: 将文本、图像、音频和视频等转化为向量矩阵的过程,也就是变成计算机可以理解的格式,embedding模型的好坏会直接影响到后面检索的质量, 相比传统的关键词匹配更具有理解性,对近义词检索更友好.

  • (4)检索环节: 现在一般检索技术采用的是向量相似度计算, 这个跟第三步我们将文档数据向量化之后存储到向量数据库中。检索效果有时候不佳,此时采用一些重排技术。

  • (5)生成:检索结果排序后丢给LLM进行归纳,根据 LLM 的推理能力,返回给用户。

02 现有RAG成熟产品

RAG有各种开源的RAG工具,成品的RAG像Langchain-chatchat、ragflow、qanything等。不同开源的RAG架构有细微的差别,大体框架如第一章节所介绍的。

名称

地址

说明

Langchain-chatchat

https://github.com/chatchat-space/Langchain-Chatchat/tree/master

当前Star 29K

ragflow

https://github.com/infiniflow/ragflow/tree/main

当前Star 9.3k

Qanything

https://github.com/netease-youdao/QAnything/tree/master

当前Star  10.2k

.......

........

......

当然RAG远不止上面三个框架, 之前在《【大模型应用篇4】普通人构建智能体的工具》介绍中的大部分智能体也内置了RAG的功能,从当前star来看chatchat具有拔得头筹优势, 但是Qanything有网易大厂做背书。那有没有其他方式进行评判, 答案是有的,请继续往下看。

除此之外, 如果以上成熟rag产品还不能满足你的需求, 可以使用基于一些Langchain等工具进行自定义开发。这种方式会更加灵活。比如langchain官网有基于langchain开发rag的简单例子https://python.langchain.com/v0.1/docs/use_cases/question_answering/quickstart/。

03 RAG评估

如此之多RAG工具,到底该怎么选?有什么更加量化指标能够评判rag的优劣。大部分RAG评估框架基于答案的相关性、上下文精确度、上下文相关性等上。主要RAG评估框架有以下几种:

名称

地址

说明

Ragas

https://github.com/explodinggradients/ragas 

Ragas是一个用于评估RAG应用的框架,包括忠诚度(Faithfulness)、答案相关度(Answer Relevance)、上下文精确度(Context Precision)、上下文相关度(Context Relevancy)、上下文召回(Context Recall), 其中从上下文相关性和上下文召回来衡量检索的质量,忠诚度和答案相关度来衡量LLM生成的质量。

TruLens

https://github.com/truera/trulens

TruLens 提供了一套用于开发和监控神经网络的工具,包括大型语言模型。这包括使用 TruLens-Eval 评估基于 LLMs 和 LLM 的应用程序的工具以及使用 TruLens-Explain 进行深度学习可解释性的工具。TruLens-Eval 和 TruLens-Explain 位于单独的软件包中,可以独立使用, 同时可以和Langchain无缝集成。一个RAG 三元组评估模式 — 分别是对问题的检索内容相关性、答案的基于性(即大语言模型的答案在多大程度上得到了提供的上下文的支持)和答案对问题的相关性。

uptrain

https://github.com/uptrain-ai/uptrain

用于评估和改进生成式人工智能应用的开源统一平台。提供了20多项预配置检查(涵盖语言、代码、嵌入用例)评分,对失败案例进行根本原因分析,并就如何解决这些问题提出见解。比如prompt注入、越狱检测、整通对话的用户满意度等

LangSmith

https://smith.langchain.com/

LangSmith是一个用于调试、测试和监控LLM应用程序的统一平台。会记录大模型发起的所有请求,除了输入输出,还能看到具体的所有细节,包括:

  1. 请求的大模型、模型名、模型参数

  2. 请求的时间、消耗的 token 数量

  3. 请求中的所有上下文消息,包括系统消息

Langfuse

https://github.com/langfuse/langfuse

Langfuse作为LangSmith的平替,可以帮助开发者和运维团队更好地理解和优化他们的LLM应用。通过提供实时的和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。实现LLM可观测的功能。

.......

.......

.......

有了量化评估工具,我们结合具体指标优化RAG的效果。不再停留拍脑袋的优化环节,帮助大家选择合适的RAG产品、RAG中的LLM模型、向量化模型等选型。

04 总结

虽然RAG能够快速解决LLM幻觉、新鲜度、以及数据安全性问题,但是RAG也有它的局限性,比如

(1) 向量数据库是一个尚未成熟的技术,缺乏处理大量数据规模的通用方案,因此数据量较大时,速度和性能存在挑战。

(2)在推理时需要对用户输入进行预处理和向量化等操作,增加了推理的时间和计算成本。

(3)外部知识库的更新和同步,需要投入大量的人力、物力和时间。

(4) 需要额外的检索组件,增加了架构的复杂度和维护成本。

(5)并不是精确问题,有些领域需要检索出来精确的数据,知识检索阶段依赖相似度检索技术,并不是精确检索,因此有可能出现检索到的文档与问题不太相关。同时每次检索出来给LLM,每次返回给用户并不是一样,会导致用户查询体验问题。

(6)关于查全问题,有些领域需要知识查询要求尽量全 ,RAG本质还是一种信息检索系统,无法做到全部查全。

总体来说RAG作为LLM前景广阔工业化应用,还是值得大家在私域上面进行部署和使用。随着相关RAG研究发展, 会使得RAG大有可为。

a1q7lEaSQh5nVoqyDeiaUUdoZ0ib71twL6CLICmOMJ25UuTFwl6ydwOXFbl8uiaYMAQ/640?wx_fmt=gif)

推荐阅读:

实用篇| 破解huggingface大法

研究篇| 一款深入浅出的微调框架

【小白入门篇6】常识|怎么计算模型需要的资源

【大模型应用篇3】LLM时代下的智能体

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

追求零缺陷?找六西格玛培训公司,轻松搞定!

在瞬息万变的商业环境中,企业面临着巨大的挑战和激烈的竞争。为了保持领先地位,企业必须不断寻求优化流程、提高效率、提升质量,并降低成本和风险。在这样的背景下,六西格玛培训公司应运而生,成为企业追求卓越、实现持…

LearnOpenGL - Android OpenGL ES 3.0 绘制纹理

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口LearnOpenGL 笔记 - 入门 04 你好,三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

ATA-4051C高压功率放大器在压电电机中的作用是什么

压电电机是一种特殊的电机,其工作原理基于压电效应,这是一种将电能转化为机械振动的现象。压电电机通常用于精密定位、振动控制和声波生成等应用。为了驱动和控制压电电机,需要高压功率放大器。下面将介绍高压功率放大器在压电电机中的作用&a…

外贸SEO工具有哪些推荐?

"我们作为一个专业的Google SEO团队,比较推荐一下几个适合外贸SEO的工具。Ahrefs 是一个非常强大的工具,可以帮助你深入分析竞争对手的表现,找到有潜力的关键词,还可以监控你的网站链接状况。另外,SEMrush 也很不…

ubuntu访问windows共享文件夹

方法: Ubuntu访问Windows共享文件夹的方法-CSDN博客 基于交换机的PC端网络通信_服务器交换机pc端-CSDN博客 补充说明: 在这里面输入: smb://192.168.0.30/WindowsShareToLinux

NGINX_二十 nginx 监控

二十 nginx 监控 1 nginx的基础监控 进程监控端口监控 注意: 这两个是必须要加在zabbix监控,加触发器有问题及时告警。 web 服务器 nginx 以其高性能与抗并发能力越来越多的被用户使用 作为一款服务器产品,其运行状态是运维密切关注的&a…

解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存

解决IntelliJ IDEA中卡顿问题,可以尝试以下几个常见且有效的步骤: 1 增加IDEA的JVM内存分配: 位于IDEA安装目录的bin文件夹下,找到对应的操作系统配置文件(idea64.exe.vmoptions(Windows)或id…

数学建模理论学习:线性规划模型

三要素:目标函数、约束条件(s.t.)、决策变量(x) 目标函数:z ax1 bx2 cx3 ... 其中c为一个序列,从左到右依次从x1到xn的系数 解决下面的线性规划问题: % 目标函数系数&#xf…

信息打点web篇----web后端源码专项收集

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 专栏描述:因为第一遍过信息收集的时候,没怎么把收集做回事 导致后来在实战中,遭遇资产获取少,可渗透点少的痛苦,如今决定 从头来过,全面全方位…

AI创作在论文写作中扮演什么角色?

近年来,随着科技的快速发展,AI已经逐渐渗透到了生活中的方方面面,其中也包含着学术领域。 作为学生党,你是否还在为期末论文,大学生实践报告而发愁? 有了这些AI写作神器,大学生们再也不用在期…

实验一:Ubuntu系统中的USB设备绑定实验

实验一:Ubuntu系统中的USB设备绑定实验 一、实验目的二、实验原理三、实验环境四、实验步骤任务 1:绑定不同USB设备任务 2:绑定多个相同设ID的串口设备 五、注意事项六、拓展练习 一、实验目的 学习Ubuntu中USB设备命名方法;掌握…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息:无向图,邻接表。无向图中,边(vi,vj)要在vi的链表中记录一次,再以(vj,vi)的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

Ubuntu安装qemu-guest-agent

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu-24.04-live-server-amd64启用ssh Ubuntu乌班图安装VIM文本编辑器工具 文章目录 系列文章目录前言一、安装二、启用服务三、效果总结 前言 QEMU Guest Agent(简称QEMU GA或QGA)在虚拟…

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战 目录 文章目录 [toc] 一、实验背景1. 嵌入式软件开发的基本流程2. Arm 虚拟硬件镜像产品简介 二、实验目标三、实验步骤简介四、实验前准备1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例1.1 百度智能云账号准…

Ubuntu 安装 CloudCompare

步骤: sudo apt install flatpakflatpak install flathub org.cloudcompare.CloudCompare此时会有报错: error: No remote refs found similar to ‘flathub’执行 flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.fla…

[深度学习]--分类问题的排查错误的流程

原因复现: 原生的.pt 好使, 转化后的 CoreML不好使, 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…

STM32多种开发环境及生成hex及bin文件介绍

一.STM32开发环境 KEIL系列 (1)KEIL公司目前有四款独立的嵌入式软件开发工具,即MDK、KEIL C51、KEIL C166、KEIL C251,它们都是KEIL公司品牌下的产品,都基于uVision集成开发环境,其中MDK是RealView系列中…

初阶 《数组》 3. 数组越界

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。 C语言本身…

在Mac上恢复丢失或未保存的Word文档的5种有效方法

“救命!我想在Mac上恢复丢失的Word文档。就在 1 小时前,我错误地删除了它们,并清空了垃圾桶。这些Word文档对我来说非常重要。我不知道如何恢复它们,谁能帮我?提前致谢! 没有什么比忘记保存 Word 文档或在…

openEuler搭建hadoop 伪分布式集群

openEuler搭建hadoop 伪分布式集群 Mode 伪分布式 hadoop101hadoop102hadoop103192.168.10.101192.168.10.102192.168.10.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 升级软…