当前位置:首页 > 技术分析 > 正文内容

RAG是什么

ruisui881个月前 (03-29)技术分析11

1. RAG 的工作流程(分步骤拆解)

RAG 的实现通常分为 数据准备、检索、增强生成 三个阶段:

(1) 数据准备阶段

● 目标:构建可检索的外部知识库。

● 关键步骤:

○ 数据收集:从文档、数据库、网页等渠道获取原始数据(如 PDF、HTML、JSON)。

○ 数据清洗:去除噪声(广告、重复文本)、标准化格式(统一时间、单位)、分块(将长文本切分为 100-500 词的片段)。

○ 向量化:使用嵌入模型(如 OpenAI 的 text-embedding-ada-002、Sentence-BERT)将文本转换为高维向量(例如 768 维)。

○ 存储到向量数据库:将向量与原文关联,存入专用数据库(如 FAISS、Pinecone、Milvus)。

(2) 检索阶段

● 目标:根据用户问题找到最相关的文本片段。

● 实现细节:

○ 问题向量化:将用户输入的查询(Query)转换为向量。

○ 相似度计算:在向量数据库中搜索与问题向量最接近的文本向量。常用算法:

■ 余弦相似度:衡量两个向量方向的一致性。

■ 近似最近邻(ANN):牺牲少量精度以提升检索速度(如 FAISS 的 HNSW 算法)。

○ 返回 Top-K 结果:通常返回前 3-5 个最相关的文本片段作为上下文。

(3) 生成阶段

● 目标:结合检索结果生成最终回答。

● 实现细节:

上下文拼接:将用户问题与检索到的文本片段拼接为模型输入,例如:

根据以下信息回答问题:{检索到的文本},问题:{用户输入}"

○ 生成模型推理:使用大语言模型(如 GPT-4、Llama 2)生成回答。模型会同时参考:

■ 自身预训练的知识(参数中的通用知识)。

■ 检索到的上下文(动态注入的领域知识)。

2. 技术组件详解

(1) 嵌入模型(Embedding Model)

● 作用:将文本映射到向量空间,使语义相似的文本在向量空间中距离更近。

● 常用模型:

○ 通用领域:OpenAI 的 text-embedding-ada-002、Google 的 Universal Sentence Encoder。

○ 专业领域:可微调开源模型(如 BERT、RoBERTa)以适应医疗、法律等垂直领域。

(2) 向量数据库(Vector Database)

● 核心功能:

○ 高效存储和检索高维向量。

○ 支持大规模数据(百万级以上)的实时搜索。

● 技术对比:

数据库 特点

FAISS Facebook 开源,适合静态数据集,需全量加载到内存

Pinecone 云托管服务,支持动态更新,自动处理索引优化

Milvus 开源分布式系统,支持海量数据,可扩展性强

(3) 生成模型(Generation Model)

● 模型选择:

○ 闭源模型:GPT-4(效果最佳但成本高)、Claude 2。

○ 开源模型:Llama 2、Falcon(可私有化部署,适合数据敏感场景)。

● 提示工程优化:

设计模板(Prompt Template)明确指令,例如:

"你是一个专业助手,请根据以下文档内容回答问题,如果信息不足则回答'不确定':{检索结果}"

○ 控制生成参数(temperature=0.3 减少随机性,max_tokens=500 限制长度)。

3. 高级优化策略

(1) 检索优化

● 混合检索:结合语义检索(向量相似度)与关键词检索(BM25 算法),提升召回率。

● 重排序(Rerank):使用小型模型(如 Cohere 的 Rerank API)对 Top-100 结果重新排序,选择 Top-3。

● 多跳检索(Multi-hop):迭代检索,例如先检索“气候变化的原因”,再根据结果检索“温室气体种类”。

(2) 生成优化

● 知识蒸馏:用大模型生成的数据训练小模型,降低成本。

● 自我验证(Self-Check):让模型在生成后检查回答是否与检索内容一致。

● 多模态扩展:检索图片、表格等非文本数据,生成图文并茂的回答(如 GPT-4V)。

4. 实际案例:医疗问答系统

(1) 场景需求

● 用户输入症状描述,系统给出可能的疾病及建议。

● 需确保回答基于最新医学指南,避免误导。

(2) RAG 实现

● 知识库:PubMed 论文、临床指南(更新至 2023 年)。

● 检索:使用 BioBERT(医学领域嵌入模型)检索相关段落。

生成:输入提示词:

"你是一名医生,根据以下最新研究回答患者问题,避免使用过时知识:

{检索到的医学文献}

问题:{患者描述的症状}"

● 输出控制:模型生成回答后追加免责声明(“本建议仅供参考,请咨询专业医生”)。

5. RAG 的挑战与解决方案

挑战 解决方案

检索质量差(噪声多) 增加数据清洗步骤,使用领域专用嵌入模型

生成与检索内容不一致 在提示词中强制要求引用检索结果,或添加后处理校验模块

实时性要求高(延迟敏感) 使用 GPU 加速向量检索,或预缓存热门查询的检索结果

多语言支持 使用多语言嵌入模型(如
paraphrase-multilingual-mpnet-base-v2)

6. RAG vs 微调(Fine-tuning)

● RAG 的优势:

○ 无需重新训练模型,成本低。

○ 知识可追溯(知道答案来自哪篇文档)。

● 微调的优势:

○ 更适合学习特定风格(如法律文书格式)。

○ 推理速度更快(无需检索步骤)。

● 混合方案:先微调模型适应领域,再结合 RAG 注入实时数据。

7. 工具链推荐

● 全流程框架:

○ LangChain:支持 RAG 流程编排,集成多种数据库和模型。

○ LlamaIndex:专为 RAG 优化,提供高效的数据连接器。

● 本地部署:

○ 嵌入模型:HuggingFace 的 all-MiniLM-L6-v2(轻量级开源模型)。

○ 向量数据库:Chroma(简单易用)、Weaviate(支持语义与关键词混合检索)。

通过以上细节,RAG 不仅是一个技术框架,更是一种平衡静态知识与动态信息的解决方案,正在成为企业级 AI 系统的核心组件

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3121.html

标签: bert词向量
分享给朋友:

“RAG是什么” 的相关文章

前后端分离自动化运维平台开发

运维平台采用前后端分离:前端vue,框架vue-element-admin;后端python,框架django-rest-framework.目前运维平台模块如下:1、 CMDB管理应用管理、环境管理、开发语言管理、产品项目管理、资产管理2、 构建发布持续构建、持续部署、Jar工程依赖构建3、 容器...

jvm疯狂吃内存,到底是谁的锅?

jvm应该是每一个java程序员都需要掌握的内容,但是在没有遇到问题之前,很多都是基于理论的,唯有实战才能增加个人的知识储备。本文是从一个角度来分析是谁在狂吃内存,希望对你有所帮助。本文是易观技术人员注意到一台开发机上各个微服务进程占用内存很高,随即便展开了调查......ps:本文来源于:http...

Excel中的FILTER函数详细介绍及使用示例

在Excel中处理大量数据时,经常需要根据特定条件筛选出符合条件的数据行或列。这正是Excel的FILTER函数发挥作用的地方。FILTER函数是Excel中一个非常强大的工具,它可以基于一个或多个条件动态地过滤数据,使数据分析和报告制作变得更加高效和准确。本文将详细介绍FILTER函数的用法,并提...

史上最全 vue-router 讲解 !!!

前端路由 前端路由是后来发展到SPA(单页应用)时才出现的概念。 SPA 就是一个WEB项目只有一个 HTML 页面,一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转。 前端路由在SPA项目中是必不可少的,页面的跳转、刷新都与路由有关,通过不同的url显示相应的页面。 优点:前...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...

uni-app基于vue开发小程序与标准vue开发新增点

1、路由跳转传参uni.navigateTo({ url: `/pages/transition/spreadTextAction?t=${this.options.t}&rt=${this.options.rt}&l=${this.options.l}`});uni.navigateBack({...