RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合外部知识检索与大语言模型(LLM)生成能力的技术框架,旨在提升生成式AI在问答、内容创作等任务中的准确性、实时性和领域适应性。

1、核心概念

大语言模型(LLM)的两大局限性:

  • 时效性不足:LLM的训练数据截止于某一时间点,无法获取最新信息(如2025年后的新事件)。
  • 知识幻觉:当问题超出模型训练数据范围时,LLM可能生成虚假或过时信息。

RAG的核心目标:
解决如上LLM的两大局限性。通过动态检索外部知识库,为LLM提供实时、可信的上下文,从而生成更精准的回答。

技术本质:
RAG的本质是In-Context Learning(上下文学习),即通过“检索 + 提示词增强”的方式,让LLM在生成答案时参考外部知识,而非仅依赖模型内部的静态参数知识。

2、RAG系统的核心组件

1、知识库

  • 存储企业的所有文档、FAQ、产品手册等资料。
  • 可以是PDF、Word文档、网页、数据库记录等多种格式。

2、嵌入模型(Embedding Model)

  • 负责将文本内容转换为高维向量表示。
  • 常用的嵌入模型包括Sentence-BERT、OpenAI的text-embedding-ada-002等。

3、向量数据库

  • 存储经过嵌入模型处理后的向量。
  • 提供高效的相似度搜索功能,帮助快速找到与查询最相关的文档片段。
  • 常见的向量数据库有FAISS、Pinecone、Weaviate、Milvus等。

4、生成模型

  • 接收检索到的相关文档片段作为上下文,生成最终的回答。
  • 常用的生成模型包括T5、BART、GPT系列等。

3、工作流程

RAG的核心思想:
先从一个大型文档集合中检索出与输入查询最相关的片段或文档,然后将这些检索到的信息作为额外的上下文提供给一个大语言生成模型LLM。

这种方法允许生成模型不仅依赖于其训练数据中的知识,还能利用最新的、外部的信息源来生成更准确、更有针对性的回答。

RAG的典型流程分为三个阶段:

(1)检索(Retrieve)

  • 输入:用户的查询(如“最新的AI技术进展”)。
  • 过程:
    • 将用户输入的查询信息通过嵌入模型(Embedding Model)转换为向量(语义表示)。
    • 在外部知识库(如向量数据库)中,通过相似度计算(如余弦相似度)快速匹配最相关的文档或段落。
  • 具体步骤:
    • 预处理阶段:在系统初始化时,所有知识库内容会被切分成小块(chunk),并通过嵌入模型转换为向量形式存储在向量数据库中。
    • 实时查询阶段:用户的输入问题也会被转化为向量,并与向量数据库中的向量进行相似度比较(如余弦相似度)。然后选出最匹配的若干个文档片段。
  • 关键技术:
    • 向量检索:高效匹配语义关联内容(如Elasticsearch、Weaviate、FAISS)。
    • 多模态检索(如RAG-Anything项目):支持文本、图像、表格等多类型数据的联合检索。

即:根据用户的查询,通过检索组件,从知识库或者文档集中找到最相关的文档或段落。

(2)增强(Augment)

  • 过程:
    • 将检索到的相关文档与用户查询组合成提示词模板(Prompt Template)。
    • 提示词通常包含:用户问题、检索到的上下文、任务指令(如“基于以下信息回答问题”)。
  • 目的:
    为LLM提供具体且相关的背景信息,引导其生成准确答案。

即:将检索得到的文档或段落等内容与原始查询一起传递给生成模型。

(3)生成(Generate)

  • 过程:
    • 将增强后的提示词输入LLM(如GPT、Llama、通义千问)。
    • LLM基于提示词中的上下文生成最终答案。
  • 具体步骤:
    • 将检索到的相关文档片段与原始问题一起传递给生成模型。
    • 生成模型根据这些信息合成一段连贯的回答。
  • 优势:
    答案既融合了LLM的推理能力,又依赖外部知识库的实时信息,减少幻觉和过时内容。

即:生成模型结合增加的内容,产生最终的答案或响应。

4、RAG的优势

在这里插入图片描述

  • 提升准确性:通过引入外部知识库,检索最新或特定领域的知识,确保提供的答案是最新的且准确的。。
  • 增强灵活性:允许系统针对特定领域的最新信息进行更新,而无需重新训练整个模型。

5、实现RAG系统的基本步骤

1、准备知识库

  • 收集并整理企业内部的所有文档资料。
  • 这些资料可以是PDF、Word、Excel、Markdown文件等形式。

2、构建向量数据库

  • 使用嵌入模型将知识库中的每个文档片段转换为向量。
  • 将这些向量存储在一个向量数据库中,以便后续进行高效检索。

python示例:(向量存储示例)

from sentence_transformers import SentenceTransformer
import faiss# 加载嵌入模型
model = SentenceTransformer('all-MiniLM-L6-v2')# 准备一些示例文档
documents = ["点击‘忘记密码’链接,输入您的邮箱地址。","如果您忘记了密码,请联系客服支持。","为了安全起见,请定期更改密码。"]# 将文档转换为向量
vectors = model.encode(documents)# 初始化FAISS索引
index = faiss.IndexFlatL2(vectors.shape[1])# 添加向量到向量数据库FAISS
index.add(vectors)

3、集成检索模块

  • 当用户提问时,将问题也转换为向量,并在向量数据库中查找最相似的文档片段。

python示例:(用户查询转向量匹配获取知识库片段)

query = "如何重置密码?"
query_vector = model.encode([query])# 在FAISS中查找最相似的文档片段
distances, indices = index.search(query_vector, k=3)# 输出检索结果
for idx in indices[0]:print(f"检索到的文档片段: {documents[idx]}")

4、集成生成模块

  • 将检索到的相关文档片段与原始问题一起传递给生成模型,生成最终的回答。

python示例:(调用模型,生成输出内容)

from transformers import pipeline# 加载生成模型
generator = pipeline('text-generation', model='facebook/bart-large-cnn')# 获取检索到的相关文档片段
retrieved_docs = [documents[idx] for idx in indices[0]]# 将问题和检索到的文档片段拼接起来作为输入
input_text = f"{query} \n Context: {' '.join(retrieved_docs)}"
response = generator(input_text, max_length=100)print(response[0]['generated_text'])

5、部署与优化

  • 部署到生产环境,并根据实际使用情况进行调优,如调整检索参数、优化生成模型等。

6、典型应用场景

1、企业问答系统

  • 示例:员工查询公司政策时,RAG可从内部文档、FAQ库中检索最新信息并生成回答。

2、医疗辅助诊断

  • 示例:结合医学知识图谱(如症状-疾病-药物关系)和患者病历,生成个性化诊疗建议。

3、金融风控分析

  • 示例:通过检索企业财报、供应链关系图谱,生成风险评估报告。

4、智能客服

  • 示例:实时检索产品手册和用户历史记录,提供个性化问题解决方案。

5、对话系统

  • 示例:帮助聊天机器人更好地理解和回应用户的需求,尤其是在涉及专业术语或最新资讯的话题上。

7、技术演进与扩展

(1)经典RAG(Naive RAG)

基础流程为“索引-检索-生成”,适用于简单场景。

(2)模块化RAG(Modular RAG)

支持更复杂的检索策略(如分块预处理、多跳检索)和结果优化(如去重、排序)。

(3)智能体RAG(Agentic RAG)

结合智能体架构(Agent),自动规划检索路径、调用工具链(如数据库查询、API接口)。

(4)GraphRAG

引入知识图谱(Knowledge Graph),通过实体关系网络实现逻辑推理(如多跳问答)。例如:

  • 问题:“哪位导演执导了汤姆·汉克斯主演且获奥斯卡最佳影片的电影?”
  • 推理路径:汤姆·汉克斯 → 主演电影 → 筛选奥斯卡获奖影片 → 获取对应导演。

8、挑战与未来方向

  • 挑战:
    • 知识库质量:低效的检索或错误数据会导致生成结果偏差。
    • 多模态融合:如何统一处理文本、图像、表格等异构数据(如RAG-Anything项目)。
  • 未来方向:
    • 实时动态知识更新:结合流式数据处理(如Kafka、Flink)实现知识库的实时同步。
    • 增强推理能力:通过知识图谱与因果推理模型提升复杂问题解决能力。

9、总结

RAG是连接大语言模型与外部知识世界的桥梁,通过“检索 + 生成”的协同,解决了LLM的知识局限性和幻觉问题。通过这种架构,不仅可以提供更加准确的回答,还能显著提高系统的灵活性和可维护性。

RAG已成为企业级AI应用的核心技术(如AWS Bedrock、Azure Databricks的RAG解决方案),并在医疗、金融、教育等领域发挥重要作用。随着多模态处理和智能体架构的发展,RAG将进一步推动AI系统向更智能、更高效的混合式系统演进。

向阳而生,Dare To Be!!!

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

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

相关文章

CppCon 2018 学习:What do you mean “thread-safe“

什么是“线程安全”? “线程安全”指的是一个函数、方法或代码块能够在多个线程同时执行时,不会出现意外的交互或破坏共享数据,能够安全地运行。 POSIX 对线程安全的定义很清楚: “一个线程安全的函数可以在多个线程中被安全地并…

热方程初边值问题解法

已知公式: u ( x , t ) ∫ − ∞ ∞ G ( x , y , t ) g ( y ) d y . u(x,t)\int_{-\infty}^{\infty}G(x,y,t)g(y)dy. u(x,t)∫−∞∞​G(x,y,t)g(y)dy. (1) 其中 G ( x , y , t ) 1 2 k π t e − ( x − y ) 2 4 k t G(x,y,t)\frac{1}{2…

怎样理解:source ~/.bash_profile

场景复现 $ source ~/.bash_profileAnalysis 分析 一句话概括 source ~/.bash_profile “在 当前 终端会话里,立刻执行并加载 ~/.bash_profile 中的所有命令,让其中定义的环境变量、函数、alias 等即时生效,而无需重新登录或开新 Shell。…

搜索问答技术概述:基于知识图谱与MRC的创新应用

目录 一、问答系统应用分析 二、搜索问答技术与系统 (一)需求和信息分析 问答需求类型 多样的数据源 文本组织形态 (二)主要问答技术介绍 发展和成熟度分析 重点问答技术基础:KBQA和DeepQA KBQA(…

TCP数据的发送和接收

本篇文章结合实验对 TCP 数据传输中的重传机制、滑动窗口以及拥塞控制做简要的分析学习。 重传 实验环境 这里使用两台腾讯云服务器:vm-1(172.19.0.3)和vm-2(172.19.0.6)。 超时重传 首先 vm-1 作为服务端启动 nc…

python 保存二维数组到本地

Python中保存二维数组有多种方法,以下是常用的几种方式:1. 使用NumPy(推荐)import numpy as np# 创建二维数组 arr np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 保存为.npy文件(NumPy专用格式) np.save…

LIN总线通讯中从节点波特率同步原理

波特率同步原理:从节点如何通过0x55校准时钟? 一、同步场的核心作用:统一“时间标尺” 在LIN总线中,主节点与从节点各自拥有独立的时钟源(如MCU内部RC振荡器),但由于制造工艺差异,…

【Unity笔记02】订阅事件-自动开门

流程 当玩家移动到触发区域的时候,门自动打开 事件系统 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class EventSystem : MonoBehaviour {public static EventSystem Instance { get; private set; }…

控制台字符动画

旋转的立方体 #include <cstdint> #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <ctime> #include <thread> using namespace std;float angleX .0f; float a…

基于 PyTorch 的猫狗图像分类实战

基于 PyTorch 的猫狗图像分类实战 项目背景简介 深度学习框架 PyTorch 因其动态计算图和灵活易用性&#xff0c;被广泛应用于图像分类等计算机视觉任务。在入门计算机视觉领域时&#xff0c;常常以手写数字识别&#xff08;MNIST&#xff09;作为 “Hello World”&#xff0c…

SwiftUI 7(iOS 26 / iPadOS 26)中玻璃化标签页的全新玩法

&#x1f378; Liquid Glass 登场&#xff1a;界面设计焕然一新 WWDC25 可谓惊喜连连&#xff0c;其中最引人瞩目的变革之一&#xff0c;莫过于苹果推出的全新跨平台设计语言 —— Liquid Glass&#xff08;液态玻璃&#xff09;。这一设计风格涵盖了从按钮到导航栏&#xff0…

PDF处理控件Spire.PDF教程:在Java中读取PDF,提取文本、图片和表格

在数据驱动的现代开发中&#xff0c;高效处理 PDF 文档已成为 Java 开发者不可或缺的核心能力。无论是处理各类发票扫描件、业务分析报告&#xff0c;还是包含丰富图表的技术文档&#xff0c;掌握 Java 版的 PDF 解析技术都将大幅提升数据处理效率&#xff0c;充分释放文档中的…

跨平台游戏引擎 Axmol-2.7.0 发布

Axmol 2.7.0 版本是一个以错误修复和功能改进为主的次要LTS长期支持版本 &#x1f64f;感谢所有贡献者及财务赞助者&#xff1a;scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox 重大变更 Android Studio 最低版本要求升级至 2025.1.1…

XML 笔记

<image src"hue.gif" width"100" height"auto" align"left"/> <br/> 换行 在 XML 中&#xff0c;<![CDATA[ 和 ]]> 用于定义一个 CDATA 节&#xff08;Character Data Section&#xff09;。CDATA 节是用于将一段…

Python实现优雅的目录结构打印工具

Python实现优雅的目录结构打印工具 在软件开发、系统管理和日常工作中&#xff0c;我们经常需要查看和分析目录结构。 工具功能概述 这个DirectoryPrinter类提供了以下功能&#xff1a; 递归打印目录结构可配置是否显示隐藏文件可设置最大递归深度自定义缩进和文件/文件夹符…

【Python】文件打开:with open具体解析

示例 # 使用 with 语句打开文件并读取内容 with open(pi.txt, r) as file_object:contents file_object.read()print(contents) # 文件在代码块结束后自动关闭with 解析 with 是 Python 中的上下文管理器语法&#xff0c;用于确保某个操作完成后自动执行清理操作。它常用于文…

Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用

摘 要&#xff1a;分布式光伏发电能够对日益严重的环境压力起到有效缓解作用,在当前对环境保护需求越来越大情况下,发电行业在发展中不但要提升发电效率,同时也需要降低成本。分布式光伏发电主要是利用风能和太阳能等可再生清洁能源进行发电,对于空气质量具有改善效果,和传统发…

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706 1️⃣ 参考 1 CentOS-6 与 CentOS-7 的网络配置IP设置方式对比 CentOS 6 和 CentOS 7 在网络配置上存在显著差异&#xff0c;主要体现在配置文件结构、管理工具、服务机制和命令集等方面。以下是两者的核心对比&#x…

【网络系列】HTTP 429 状态码

博客目录 HTTP 429 状态码的定义与背景产生 429 错误的常见场景1. API 速率限制触发2. 网络爬虫行为被检测3. 分布式拒绝服务(DDoS)防护4. 用户/IP 特定限流策略5. 应用程序逻辑错误 深入解读 429 响应的关键头部信息Retry-After 头部X-RateLimit 系列头部RateLimit 标准化头部…

C++无锁数据结构:CAS(Compare-and-Swap)

在高并发场景下&#xff0c;传统锁机制带来的线程阻塞和上下文切换开销成为性能瓶颈。无锁数据结构通过原子操作实现线程安全&#xff0c;避免了锁的使用&#xff0c;成为高性能系统的关键技术。本文将深入探讨C中基于CAS&#xff08;Compare-and-Swap&#xff09;的无锁数据结…