RAG - 检索增强生成

第一部分:RAG 详解

一、RAG 是什么?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索(或知识检索)与大语言模型(LLM)的生成能力相结合的技术框架。

它的核心思想是:在让大模型回答问题之前,先从外部知识库中检索出与问题相关的信息,然后将这些信息作为上下文,连同问题一起交给大模型,让模型基于这些可靠的上下文来生成答案。

你可以把它想象成一个“开卷考试”:

  • 传统LLM(闭卷考试):模型只依赖它训练时学到的、固化在参数中的知识。如果问题超出它的知识范围或知识过时,它就可能“胡编乱造”(幻觉)。

  • RAG(开卷考试):模型允许在答题前“翻书”(从外部知识库检索文档)。它根据“书上”找到的相关内容来组织答案,因此答案更准确、更可靠,也更能引用最新信息。

二、为什么需要 RAG?它解决了什么问题?

尽管大语言模型能力强大,但它们存在几个固有缺陷:

  1. 知识滞后/静态性:模型的训练数据有截止日期,无法获取和知晓之后发生的事件或发布的信息。

  2. 事实性错误/“幻觉”:模型可能会生成看似合理但实际不准确或完全错误的内容。

  3. 对内部/私有知识的无知:模型无法知晓训练数据之外的、公司内部的私有文档、数据库、专业知识等。

  4. 可追溯性与可信度:用户无法核实模型答案的来源,难以判断其可信度。

RAG 正是为了解决这些问题而生。它通过引入外部知识源,让模型能够:

  • 获取最新知识:外部知识库可以随时更新。

  • 提高答案准确性:基于检索到的事实生成答案,减少幻觉。

  • 利用私有知识:可以将公司内部的Wiki、PDF、数据库等作为检索源。

  • 提供引用来源:答案可以追溯到检索出的原始文档,增强可信度。

三、RAG 的工作原理与流程

RAG 的工作流程可以清晰地分为三个核心阶段:

第1步:检索(Retrieval)

  • 输入:用户查询(Query)。

  • 过程

    1. 索引创建(预处理,离线进行):将外部知识库(如公司文档、网页、手册等)进行分块(Chunking),然后通过嵌入模型(Embedding Model)将每个文本块转换为一个高维向量(Vector),并存入向量数据库(Vector Database)。

    2. 实时检索:当用户提问时,使用同一个嵌入模型将用户查询也转换为向量。

    3. 相似度搜索:在向量数据库中,寻找与“查询向量”最相似的“文本块向量”。通常使用余弦相似度等度量方式。

  • 输出:一组与用户查询最相关的文本片段(Contexts)。

第2步:增强(Augmentation)

  • 过程:将上一步检索到的相关文本片段(Contexts)和原始的用户查询(Query)按照预设的提示模板(Prompt Template)组合成一个新的、增强后的提示(Augmented Prompt)。

  • 示例模板

    “请根据以下提供的信息,回答用户的问题。如果提供的信息不足以回答问题,请直接说‘根据已知信息无法回答该问题’。

    【提供的信息】:
    {retrieved_contexts}

    【用户问题】:
    {user_query}

    【回答】:”

第3步:生成(Generation)

  • 输入:增强后的提示(Augmented Prompt)。

  • 过程:将这个完整的提示输入给大语言模型(如 GPT-4、Llama 等)。LLM 会基于提供的上下文信息,而不是仅凭内部记忆,来生成最终答案。

  • 输出:一个准确、有据可依的回答。


第二部分:实际运用

RAG 的应用场景极其广泛,几乎所有需要基于特定、最新或私有知识进行问答的场景都可以使用。

一、典型应用场景
  1. 智能客服与问答机器人

    • 场景:代替传统的关键词匹配FAQ。用户可以向机器人询问产品功能、报错信息、售后服务政策等。

    • 如何运用:将产品手册、帮助文档、常见问题解答、最新公告等文档导入向量数据库。机器人能基于这些最新、最准确的文件给出精细化的答案,而不是笼统的回复。

  2. 企业知识库与内部助手

    • 场景:新员工想了解公司政策、报销流程;程序员想查询内部API文档;财务人员想查找某个财务制度。

    • 如何运用:将公司内部的Wiki、Confluence、HR手册、项目文档、代码文档、会议纪要等全部接入RAG系统。创建一个企业内部版的“ChatGPT”,员工可以随时提问并获得精准答案,极大提升信息检索效率。

  3. 内容分析与研究报告生成

    • 场景:分析师需要快速理解一份冗长的财报或一篇复杂的学术论文;律师需要快速梳理案件卷宗的重点。

    • 如何运用:将目标文档(如100页的PDF财报)灌入RAG系统。然后可以提问:“总结一下该公司第三季度的主要财务风险是什么?”或“列出该论文提出的三个主要创新点”。系统能迅速定位到文档中的关键部分并生成摘要。

  4. AI 伴学与教育

    • 场景:学生针对某本特定的教科书或课程材料进行提问。

    • 如何运用:将教科书的内容构建成知识库。学生可以问:“用书上的例子解释一下牛顿第一定律”或“第五章的主要知识点有哪些?”。AI的回答将严格基于教材内容,避免误导学生。

  5. 新一代搜索引擎

    • 场景:用户不仅需要看到网页链接,更需要一个直接、整合的答案。

    • 如何运用:搜索引擎可以先检索相关网页,提取关键信息,然后通过RAG框架生成一个直接回答用户问题的摘要片段(就像Google的“AI Overview”和Bing的Copilot所做的那样)。

二、技术栈与工具

实现一个RAG系统通常涉及以下工具:

  • 文档加载器LangChain, LlamaIndex (用于加载TXT、PDF、PPT、HTML等各种格式的文档)

  • 文本分块LangChain, LlamaIndex (提供多种分块策略和算法)

  • 嵌入模型OpenAI的text-embedding-ada-002, Cohere的Embed模型, 开源的sentence-transformers模型(如all-MiniLM-L6-v2

  • 向量数据库Chroma(轻量简单), Pinecone(云托管,强大), Weaviate, Qdrant, Milvus

  • 大语言模型OpenAI的GPT系列, Anthropic的Claude系列, 开源的Llama 2/3, Mistral

  • 框架与编排LangChain 或 LlamaIndex 是首选的框架,它们将以上所有组件无缝地连接起来,简化开发流程。

三、挑战与改进方向

虽然RAG强大,但要构建一个生产级的高效系统,仍需考虑以下挑战:

  • 检索质量:如果检索到的文档不相关,再好的LLM也生成不出好答案。改进方法包括:优化分块大小、使用更好的嵌入模型、进行重排序(Re-ranking)等。

  • 提示工程:如何设计提示模板,才能让LLM最好地利用上下文,并遵循指令(如“不知道就说不知道”)。

  • 处理多模态数据:未来的RAG不仅能处理文本,还能处理图片、表格、音频等信息。

  • “推理-行动”模式:更复杂的Agent(智能体)可以决定何时调用检索工具、如何迭代检索,甚至调用其他API来完成任务。

总结

RAG 通过巧妙地结合检索系统的精确性和大语言模型的生成能力,有效地弥补了后者的主要缺陷。它已成为当前构建可信、可靠、基于知识的AI应用的最主流和最实用的架构范式。从智能客服到企业知识管理,其应用前景非常广阔,是将AI技术落地产生实际业务价值的关键路径之一。

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

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

相关文章

大数据毕业设计选题推荐-基于大数据的分化型甲状腺癌复发数据可视化分析系统-Spark-Hadoop-Bigdata

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Spring Bean扫描

好的,没有问题。基于我们之前讨论的内容,这是一篇关于 Spring Bean 扫描问题的深度解析博客。Spring Bean扫描作者:Gz | 发布时间:2025年9月9日🎯 Spring如何找到你的Bean? 首先要理解原理。Spring的组件扫…

【 运维相关】-- HTTP 压测/负载发生器之新秀 oha

目录 oha 项目分析(hatoo/oha) 一、概述 二、安装 三、快速上手 三、常用参数(摘选) 四、输出解读(终端 TUI) 五、与其它工具对比 六、最佳实践 七、注意事项 八、参考 oha 项目分析(h…

淘宝闪购基于FlinkPaimon的Lakehouse生产实践:从实时数仓到湖仓一体化的演进之路

摘要:本文整理自淘宝闪购(饿了么)大数据架构师王沛斌老师在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在数字化转型的浪潮中,企业对实时数据处理的需求日益增长。传统的实时数仓架构在面对业务快速变化和数据规模爆炸性增长时,逐渐…

Android应用添加日历提醒功能

功能 在安卓应用里调用系统日历&#xff0c;直接创建一个带提醒的日历事件&#xff0c;甚至不需要跳转到日历界面&#xff0c;只需要获取系统日历的读取权限即可。 需要的权限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

‌Git Bisect 二分查找定位错误总结

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意图&#xff09; 假设提交历史是一条时间线&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;异常&#xff09;&#xff1a;提交顺序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物联网平台 v2.0.0 发布|前端UI重构、底层架构升级

v2.0.0 Release发布日期&#xff1a;2025/08/25 代码标签&#xff1a;v2.0.0_Release&#x1f947; 新增功能国标级联&#xff08;支持上级、下级国标级联&#xff09;视频回放、录像计划&#xff08;用户可以通过录像计划生成对应的视频回放并查看&#xff09;Modbus_TCP协…

Lua > Mac Mini M4安装openresty

Mac Mini M4安装openresty 主要参考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多线程案例】:单例模式

多线程案例8.1 单例模式饿汉模式懒汉模式懒汉模式-单线程版懒汉模式-多线程版懒汉模式-多线程版(改进)8.1 单例模式 单个实例. 在一个 java 进程中, 要求指定的类,只能有唯–个实例。&#xff08;尝试 new 多个实例的时候, 就会直接编译报错&#xff09; 单例模式是校招中最常…

【Python/Pytorch】-- 贝叶斯定理

文章目录 文章目录01 贝叶斯定理的理解02 在MRI重建领域应用01 贝叶斯定理的理解 贝叶斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解这个公式&#xff1f; 在B事件发生的条件下&#xff0c;A发生的概率 P(A|B) 在B事件发生的条件下&#xff0c;A和B同…

子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问

问题现象深度解析在近期企业网络维护中&#xff0c;运维团队发现一个具有教学意义的典型案例&#xff1a;某台部署在10.165.111.0/24网段的业务服务器&#xff08;10.165.111.71&#xff09;可以成功ping通目标中间件主机(10.165.110.11)&#xff0c;但通过HTTPS协议访问https:…

【ArcGIS】如何编辑图层的属性表

GIS按属性选择后删除所选项呈现灰色_arcgis删除字段灰色-CSDN博客

大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。

一、数据仓库核心价值铺垫在讲具体技术前&#xff0c;先明确数据仓库&#xff08;Data Warehouse&#xff0c;简称数仓&#xff09; 的核心作用&#xff1a; 数据仓库是 “整合企业多源数据、按业务主题组织、支持决策分析” 的结构化数据存储体系&#xff0c;核心价值是打破数…

React From表单使用Formik和yup进行校验

一、Formik的使用 官方文档地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安装依赖 yarn add formik2.导入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 输入框的密码和账号 onSubmit&#xff1a;当点击提交按钮时&am…

netty-scoket.io路径配置

1、服务端代码 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏闪屏的问题

20250910荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏闪屏的问题 2025/9/5 15:44缘起&#xff1a;荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏。 按 POWER按键 关机之后&#xff0c;2s之内再次短按 POWER按键&#xff0c;开机之后屏会抖动。 2s后短按…

正态分布 - 计算 Z-Score 的 无偏估计

正态分布 - 计算 Z-Score 的 无偏估计 flyfish Z-Score公式与计算步骤 1 公式&#xff08;样本Z-Score&#xff09; 实际应用中&#xff0c;我们几乎不知道“总体均值/标准差”&#xff0c;所以常用样本数据计算&#xff1a; zixi−xˉsz_i \frac{x_i - \bar{x}}{s}zi​sxi​−…

ai生成文章,流式传输(uniapp,微信小程序)

1.环境nutui-uniappvue3tsunocss2.功能源码包含ai生成逻辑&#xff0c;内容生成实时打字机功能&#xff0c;ai数据处理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…

Linux设备内存不足如何处理

[rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 31208 14317 1280 1551 15610 14657 Swap: 15927 2781 13146 [rootlocalhost ~]#从 free -m 输出来看&…

中间件八股

文章目录RedisRedis为什么快&#xff1f;Redis Redis为什么快&#xff1f; 首先它是内存数据库&#xff0c;所有数据直接操作内存而非磁盘&#xff0c;避免了 I/O 瓶颈&#xff1b;其次采用单线程模型&#xff0c;消除了多线程切换的开销&#xff0c;同时通过非阻塞 I/O 多路…