当前位置: 首页 > news >正文

解锁 RAG 技术:从原理、论文研读走向实战应用RAG

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来的日子里不定期地为大家呈上这些领域的知识宝藏与实用经验分享🎁。每一个点赞👍,都如同春日里的一缕阳光,给予我满满的动力与温暖,让我们在学习成长的道路上相伴而行,共同进步✨。期待你的关注与点赞哟🤗!

引言

在人工智能领域,检索增强生成(RAG)技术正逐渐成为提升模型性能和应用范围的关键技术之一。它巧妙地结合了信息检索和自然语言生成,为解决大型语言模型的诸多局限性提供了一种创新思路23。

RAG 的基本原理

RAG 主要由检索器和生成器两个核心组件构成。当接收到用户查询时,检索器首先对查询进行处理,将其转换为适合检索的形式,然后在外部知识库或数据库中搜索与查询相关的信息。生成器则将检索到的信息与用户原始查询相结合,作为输入生成既准确又符合上下文的响应23。

RAG 的优势

  • 减少幻觉问题:通过检索真实可靠的信息源,减少了模型生成虚假信息的风险23。
  • 提供实时信息:可以连接实时数据,确保生成的内容基于最新、最权威的数据3。
  • 提高准确性和相关性:能生成更准确、更符合上下文的响应,降低错误信息出现的可能性23。
  • 可追溯性:生成的答案可以追溯到具体的信息源,提高了答案的可信度2。

RAG 的技术改进与创新

  • 检索器增强:包括递归检索、块优化技术、微调检索器、混合检索和重新排序技术等,旨在提高检索结果的准确性和丰富度1。
  • 生成器改进:研究人员正在探索如何更好地将检索到的信息融入生成过程,如通过改进注意力机制、设计更有效的融合策略等,以提高生成器对检索信息的利用效率。
  • 多模态融合:将图像、音频等多模态数据与文本信息相结合,使 RAG 能够处理更复杂的多模态任务,如多模态问答、图像字幕生成等13。

相关论文介绍

  • 《Retrieval-Augmented Generation for AI-Generated Content: A Survey》:全面回顾了将 RAG 技术集成到 AI 生成内容场景中的现有工作,对各种检索器和生成器的增强方法进行了提炼和分类,并总结了 RAG 的其他增强方法,还介绍了 RAG 的基准、讨论了当前 RAG 系统的局限性并提出了未来研究的潜在方向,论文地址。
  • 《Dynamic Retrieval-Augmented Generation》:提出了一种新颖的动态检索增强生成方法,基于实体增强生成,将检索到的实体的压缩嵌入注入到生成模型中,该方法在代码生成任务中取得了较好的效果,论文地址。
  • 《RAG vs Fine-tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture》:深入探讨了开发者如何借助 RAG 以及微调将私有数据及特定行业数据融合至大型语言模型之中,详细阐述了应用于主流 LLM 的方法及效果评估等,论文地址。
  • 《Fine Tuning vs. Retrieval Augmented Generation for Less Popular Knowledge》:分析了关系抽取与图构建以及微调两种方法对于增强大型语言模型处理低频实体问题的能力,研究结果表明 RAG 在性能上更胜一筹,论文地址。
  • 《Improving language models by retrieving from trillions of tokens》:提出了一种创新的 RAG Transformer,通过条件性地处理从庞大语料库中检索出的文本段落来增强自回归语言模型的性能,为借助显式记忆规模性提升 LLM 能力开辟了新路径,论文地址。
  • 《Retrieval-Augmented Generation with Vector Databases for Long-Form Question Answering》:探讨了如何使用向量数据库进行检索增强生成以解决长形式问答问题,提出了一种有效的检索和融合策略,在长文本生成任务中取得了显著的改进,论文地址。
  • 《RAG-Fusion: Fusing Retrieval-Augmented Generation with Conditional Generation》:介绍了 RAG-Fusion 技术,将检索增强生成与条件生成相结合,通过在生成过程中动态融合检索结果和条件信息,提高了生成的质量和多样性,论文地址。
  • 《A Survey of Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》:对知识密集型自然语言处理任务中的检索增强生成技术进行了全面的调查,分析了不同方法的优缺点和应用场景,为研究人员和实践者提供了有价值的参考,论文地址。
  • 《Enhancing Language Models with Retrieval-Augmented Generation for Domain-Specific Knowledge》:研究了如何使用检索增强生成技术增强语言模型在特定领域知识方面的能力,通过构建领域特定的知识库和优化检索器与生成器的交互,在特定领域任务中取得了良好的效果,论文地址。
  • 《Retrieval-Augmented Generation for Multimodal Knowledge Graph Completion》:提出了一种用于多模态知识图完成的检索增强生成方法,将文本和图像信息相结合,通过检索和生成的交互,提高了多模态知识图完成的准确性和效率,论文地址。

代码示例

以下是一个简单的 RAG 代码示例,使用 Python 和 Hugging Face Transformers 库:

import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, DPRContextEncoder, DPRContextEncoderTokenizer# 加载预训练的生成器模型和分词器
generator_tokenizer = AutoTokenizer.from_pretrained("t5-base")
generator_model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")# 加载预训练的检索器模型和分词器
retriever_tokenizer = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
retriever_model = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")# 模拟用户查询
query = "什么是人工智能的发展历史?"# 使用检索器对查询进行编码
encoded_query = retriever_tokenizer.encode(query, return_tensors="pt")
with torch.no_grad():query_embedding = retriever_model(encoded_query).pooler_output# 假设这里有一个简单的向量数据库,存储了一些文档的嵌入向量和内容
# 这里只是示例,实际应用中需要更复杂的数据库管理和检索逻辑
documents = [{"embedding": torch.randn(768), "content": "人工智能的发展可以追溯到20世纪50年代,当时提出了图灵测试等概念。"},{"embedding": torch.randn(768), "content": "近年来,深度学习技术的发展推动了人工智能的快速进步。"},# 更多文档...
]# 计算查询与文档的相似度
similarities = []
for doc in documents:similarity = torch.dot(query_embedding.squeeze(), doc["embedding"])similarities.append(similarity)# 找到最相似的文档
most_similar_index = torch.argmax(torch.stack(similarities))
most_similar_document = documents[most_similar_index]["content"]# 将最相似的文档与查询组合作为生成器的输入
input_text = f"查询:{query}\n文档:{most_similar_document}"
input_ids = generator_tokenizer.encode(input_text, return_tensors="pt")# 使用生成器生成回答
with torch.no_grad():output = generator_model.generate(input_ids)# 解码并输出回答
answer = generator_tokenizer.decode(output[0], skip_special_tokens=True)
print(answer)

相关文章:

解锁 RAG 技术:从原理、论文研读走向实战应用RAG

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...

HTML5实现好看的中秋节网页源码

HTML5实现好看的中秋节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 节日由来界面1.4 节日习俗界面1.5 节日文化界面1.6 节日美食界面1.7 节日故事界面1.8 节日民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看…...

数字孪生笔记 1 工业数字孪生的意义

什么是工业数字孪生? 很多在做这个工作研究的同学最开始都想问的一个问题。到底什么才是数字孪生?我在五年前做数字孪生的时候也在思考这个问题。五年时间从数字孪生兴起,到元宇宙爆发,再到数字孪生和元宇宙没人提起,…...

013:深度学习之神经网络

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式…...

计算机网络(四)网络层

4.1、网络层概述 简介 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来,形成一个更大的互…...

【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表

本文讲述在ArcGIS中,以globeland30数据为例,将栅格数据每个像元值转为Excel文本,便于在Excel中进行统计分析。 文章目录 一、加载globeland30数据二、栅格转点三、像元值提取至点四、Excel打开一、加载globeland30数据 打开配套实验数据包中的0138.rar中的tif格式栅格土地覆…...

Linux 中统计进程的线程数 | 查看进程的线程

注:本文为 “Linux 线程” 相关文章合辑。 在 Linux 中统计一个进程的线程数 作者:Dan Nanni 译者: LCTT struggling | 2015-09-17 10:29 在 Linux 中一个程序在运行时会派生出多个线程。检查每个进程的线程数,有以下几种方法可…...

【深度学习 】训练过程中loss出现nan

[toc]【深度学习 】训练过程中loss出现nan 训练过程中loss出现nan 在深度学习中,loss 出现 NaN 通常是由数值不稳定或计算错误引起的。 1. 学习率过高 原因: 学习率过大可能导致权重更新幅度过大,引发数值不稳定。 解决方法: 降低学习率,…...

Linux - 什么是线程和线程的操作

线程概念 什么是线程: 线程(Thread)是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位. 一个进程可以包含多个线程. 进程 : 线程 1 : n (n > 1). 进程是系统分配资源的基本单位. 线程则是系统调度的基本单位. 在…...

windows及linux 安装 Yarn 4.x 版本

1. 确保系统环境准备 a. 安装 Node.js Yarn 依赖于 Node.js,所以需要先安装 Node.js。前往 Node.js 官网 下载并安装适合你的 Windows 版本的 Node.js(推荐 LTS 版本)。安装完成后,打开命令提示符(CMD)或 PowerShell,验证安装:node -v npm -v如果显示版本号,则表示安…...

如何设计一个 RPC 框架?需要考虑哪些点?

面试官:如何设计一个 RPC 框架?需要考虑哪些点? 设计一个远程过程调用(RPC)框架是一个复杂的系统工程,涉及多个方面的考虑。一个好的 RPC 框架应具备可扩展性、灵活性、易用性和高性能。下面是设计 RPC 框…...

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要: 1,功能描述 通过DAC1通道1(PA4)输出三角波,然后通过DS100示波器查看波形 2,关闭通道1触发(即自动) TEN1位置0 3,关闭输出缓冲 BOFF1位置1 4,使用12位右对齐模式 将数字量写入DAC_…...

开源cJson用法

cJSON cJSON是一个使用C语言编写的JSON数据解析器,具有超轻便,可移植,单文件的特点,使用MIT开源协议。 cJSON项目托管在Github上,仓库地址如下: https://github.com/DaveGamble/cJSON 使用Git命令将其拉…...

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对…...

如何使用CSS让页面文本两行显示,超出省略号表示

talk is cheap, show me the code 举个栗子&#xff0c;如下&#xff1a; <span class"a">我说说<b class"b">打瞌睡党风建设打火机</b>说说色儿</span>a{display:block/inline-block;width:100px;overflow: hidden; white-spac…...

likeshop同城跑腿系统likeshop回收租赁系统likeshop多商户商城安装及小程序对接方法

前言&#xff1a;首先likeshop是一个开发平台&#xff0c;是一个独创的平台就像TP内核平台一样&#xff0c;你可以在这个平台上开发和衍生出很多伟大的产品&#xff0c;以likeshop为例&#xff0c;他们开发出商城系统&#xff0c;团购系统&#xff0c;外卖点餐系统&#xff0c;…...

C# 与 Windows API 交互的“秘密武器”:结构体和联合体

一、引言 在 C# 的编程世界里&#xff0c;当我们想要深入挖掘 Windows 系统的底层功能&#xff0c;与 Windows API 打交道时&#xff0c;结构体和联合体就像是两把神奇的钥匙&#x1f511; 它们能够帮助我们精准地操控数据&#xff0c;实现一些高级且强大的功能。就好比搭建一…...

PHP 使用 Redis

PHP 使用 Redis PHP 是一种广泛使用的服务器端编程语言,而 Redis 是一个高性能的键值对存储系统。将 PHP 与 Redis 结合使用,可以为 Web 应用程序提供快速的读写性能和丰富的数据结构。本文将详细介绍如何在 PHP 中使用 Redis,包括安装、连接、基本操作以及一些高级应用。 …...

嵌入式系统Linux实时化(四)Xenomai应用开发测试

1、Xenomai 原生API 任务管理 Xenomai 本身提供的一系列多任务调度机制,主要有以下一些函数: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任务的创建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…...

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测&#xff0c;到2030年&#xff0c;AI Agent的市场规模将从2024年的50亿美元激增至470亿美元&#xff0c;年均复合增长率为44.8%。 Gartner预计到2028年&#xff0c;至少15%的日常工作决策将由AI Agent自主完成&#xff0c;AI Agent在企业应用中…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...