写在前面
在大模型应用开发领域,RAG技术栈在其中具有很重要的地位,本文主要通过介绍带大家了解一下什么是RAG技术,RAG技术栈的整体流程,希望对于想要学习RAG技术的你提供帮助。
什么是RAG
RAG,全称为Retrieval-Augmented Generation(检索增强生成),是一种结合了 “信息检索” 与 “生成式 AI” 的混合 AI 技术。它的核心目标是解决传统大语言模型(LLM,如 GPT、LLaMA 等)的两大关键局限 ——知识时效性不足和事实准确性偏差(幻觉),通过 “先检索外部权威信息,再基于检索结果生成回答” 的逻辑,让 AI 输出更精准、更具时效性和可信度的内容。
为什么需要RAG
传统 LLM(如 GPT、LLaMA)因自身特性,难以满足实际场景需求,具体局限如下:
-
1. 知识过时且固定:仅包含训练数据截止前的 “静态知识”,无法获取实时或者最新信息;
-
2. 易产生 “幻觉”:基于概率生成 “听起来合理” 的内容,可能编造事实、混淆信息,且无法验证回答准确性;
-
3. 无法对齐私有 / 场景化需求:训练数据是通用公开内容,无法调用企业内部文档、个人笔记、行业专属资料等 “私有知识”。
RAG的核心
|
|
|
|
|
| 知识数据源 |
|
结构化数据(MySQL、PostgreSQL)、非结构化数据(PDF、TXT)、API 接口(如新闻 API)
|
|
| 文档分割器(Chunkers) |
|
LangChain(RecursiveCharacterTextSplitter)、Haystack(SentenceSplitter)
|
|
| Embedding 模型 |
|
闭源:OpenAI Embedding、Anthropic Embedding;开源:Sentence-BERT、BERT-Chinese
|
|
| 向量数据库 |
|
闭源:Pinecone、Weaviate、Qdrant(托管版);开源:FAISS(轻量)、Milvus(大规模)
|
|
| 大语言模型(LLM) |
|
闭源:GPT-4、文心一言、通义千问;开源:Llama 3、Mistral、Qwen
|
|
RAG步骤
RAG大概分为两个步骤:知识库构建和知识库的使用,下面将对这两个步骤进行详细介绍。
1.知识库的构建
该阶段为后续在线响应做准备,核心是将原始数据转化为结构化、高检索效率的知识索引,避免在线时重复处理数据导致延迟,共 4 个关键步骤:
-
1. 数据采集与清洗:收集目标领域的知识源(如 PDF、文档、数据库表、网页文本等),去除冗余(重复内容)、修正错误(乱码、格式问题),保证数据质量;
-
2. 文档分割(Chunking):按 “语义完整 + 适配 LLM 上下文窗口” 原则,将长文档拆分为片段(Chunk),常用策略包括 “固定长度分割(带前后文重叠)” 或 “语义分割(按段落 / 章节)”,避免语义断裂;
-
3. 文本向量化(Embedding):用 Embedding 模型(如 OpenAI Embedding、Sentence-BERT)将每个 Chunk 转化为数值向量,把 “语义相似性” 转化为 “向量空间距离”,为检索做准备;
-
4. 构建向量索引:将所有 Chunk 的向量存入向量索引结构(如 FAISS、Milvus、Pinecone),替代 “暴力遍历”,实现毫秒级相似性检索。
2. 知识库的使用
该阶段是 RAG 与用户交互的核心,实时根据用户查询匹配知识并生成可靠答案,共 5 个关键步骤:
-
1. 用户查询理解:优化原始查询(如纠错、提取关键词、扩展同义词),明确检索目标(例:将 “2024 新能源车销量同笔增长” 修正为 “2024 中国新能源汽车销量同比增长”);
-
2. 相似性检索:将优化后的查询转化为向量,通过向量数据库检索 “距离最近” 的 Top-N 个相关 Chunk(即与问题最匹配的外部知识),部分场景会结合关键词检索(如 BM25)做 “混合检索”;
-
3. 知识过滤与排序:二次筛选检索结果(去除重复、无关内容),并用轻量模型(如 Cross-Encoder)重新排序,提升知识精准度;
-
4. Prompt 构建:将 “用户查询 + 筛选后的相关 Chunk + 指令(要求答案仅来自参考知识)” 组合成 LLM 可理解的 Prompt;
-
5. LLM 生成与输出:将 Prompt 输入 LLM(如 GPT-4、Llama 3),模型基于检索到的外部知识生成答案,可选标注知识来源以提升可追溯性。
RAG相关的技术栈
1.知识源与数据处理层
该层负责将非结构化(文本、PDF 等)、半结构化(表格、JSON 等)数据转化为机器可理解的 “检索友好型” 格式,是 RAG 的 “知识储备基础”。
|
|
|
|
| 数据采集工具 |
– 网络爬虫:Scrapy、Beautiful Soup、Selenium – 文档解析:PyPDF2、pdfplumber、Unstructured – 数据库连接:SQLAlchemy(关系型)、PyMongo(非结构化)
|
从网页、本地文档(PDF/Word/PPT)、数据库中采集原始知识数据,解决 “知识从哪来” 的问题。
|
| 数据清洗与预处理 |
– 文本清洗:NLTK、spaCy(去停用词、标点) – 格式标准化:LangChain DocumentLoader、LlamaIndex Reader – 数据去重:SimHash、MinHash
|
去除噪声数据(如乱码、重复内容),统一数据格式,为后续分词、嵌入做准备。
|
| 数据结构化处理 |
– 信息抽取:spaCy(实体识别)、AllenNLP(关系抽取)、LangChain StructuredTool – 表格处理:Pandas、Tabula(PDF 表格提取)
|
将非结构化文本中的关键信息(实体、关系、事件)或半结构化表格转化为结构化数据,提升检索精度。
|
2.向量工程层
该层通过 “向量嵌入(Embedding)” 将文本转化为高维向量,再通过向量数据库存储和索引,是 RAG “快速找到相关知识” 的关键
|
|
|
|
| 向量嵌入模型 |
– 通用模型:OpenAI Embedding(text-embedding-3-small)、Sentence-BERT(all-MiniLM-L6-v2) – 领域模型:BioBERT(医疗)、CodeBERT(代码)、ERNIE(中文)
|
将文本(句子 / 段落)转化为语义向量,确保 “语义相似的文本向量距离近”,支撑语义检索(而非关键词匹配)。
|
| 向量数据库 |
– 开源:Milvus、Chroma、FAISS(轻量)、Qdrant、Weaviate – 商业:Pinecone、Weaviate Cloud、Zilliz Cloud
|
专门存储向量数据,提供高效的近似最近邻(ANN)检索能力(如 IVF、HNSW 索引),解决 “百万级向量快速匹配” 问题。
|
| 向量索引优化 |
– 索引算法:HNSW(高召回)、IVF-Flat(高精度)、FAISS IVF-PQ(压缩存储) – 量化技术:Scalar Quantization、Product Quantization
|
通过索引算法降低检索时间复杂度,通过量化技术减少向量存储占用,平衡 “检索速度” 与 “精度”。
|
3.检索策略层
该层负责设计 “从向量库中筛选相关知识” 的逻辑,不仅依赖语义向量,还通过多策略优化确保 “找得准、找得全”。
|
|
|
|
| 基础检索方法 |
– 语义检索:基于向量数据库的 ANN 检索 – 关键词检索:Elasticsearch、Solr(倒排索引) – 混合检索:Elasticsearch + 向量插件(如 ES-HNSW)
|
语义检索解决 “意图匹配”,关键词检索解决 “精确术语匹配”,混合检索结合两者优势(如 “糖尿病” 语义匹配 +“胰岛素” 关键词过滤)。
|
| 高级检索策略 |
– 多轮检索(Multi-turn Retrieval):LangChain RetrievalQAWithSourcesChain – 分层检索(Hybrid Hierarchical):先粗筛文档→再精筛段落 – 重排序(Reranking):Cross-Encoder(BERT-based)、Cohere Rerank API
|
多轮检索通过用户追问迭代优化结果;分层检索降低计算成本;重排序对初筛结果二次打分(如 “相关段落排前”),提升精度。
|
| 检索过滤机制 |
– 元数据过滤:LangChain MetadataFilters(按 “文档类型 / 发布时间” 筛选) – 权限过滤:Milvus Access Control、Weaviate Auth
|
基于业务需求筛选知识(如 “只检索 2023 年后的医疗文献”),或控制知识访问权限。
|
4.生成与增强层
该层是 RAG 的 “输出端”,负责将检索到的知识与大模型结合,生成 “有依据、无幻觉” 的回答。
|
|
|
|
| 基础大模型(LLM) |
– 开源模型:Llama 3(70B)、Mistral 8x7B、Qwen-72B – 闭源 API:GPT-4o、Claude 3、Gemini 1.5
|
提供 “理解检索知识 + 生成自然语言回答” 的核心能力,开源模型适合私有化部署,闭源 API 适合快速验证。
|
| 提示工程(Prompt Engineering) |
– 提示模板:LangChain PromptTemplate、LlamaIndex Prompt – 思维链(CoT):Few-shot CoT、Zero-shot CoT – 知识注入:将检索到的 “知识片段 + 来源” 嵌入 Prompt
|
通过模板规范输入(如 “基于以下知识回答:{retrieved_context}n 问题:{user_question}”),通过 CoT 引导 LLM 逻辑推理,减少 “幻觉”。
|
| 回答增强技术 |
– 来源引用:LangChain CitationQATool、LlamaIndex CitationGenerator – 多模态生成:GPT-4o Vision(结合图片知识)、Gemini Pro(文本 + 图片)
|
为回答添加 “知识来源标注”(如 “参考文档 1:XXX”),提升可信度;支持多模态知识(图片、表格)的生成融合。
|
5.系统集成与框架层
该层提供 “开箱即用” 的 RAG 全流程框架,封装数据处理、检索、生成等模块,简化工程落地难度。
|
|
|
|
| 全流程 RAG 框架 |
– LangChain:最流行框架,支持 “DocumentLoader→Embedding→Retriever→LLM” 全链路,生态丰富(插件 / 工具多) – LlamaIndex:专注 “知识索引”,优化长文档检索(如自动分块),适合复杂知识图谱场景 – Haystack:模块化设计,支持 Pipeline 可视化,适合工业级部署
|
无需从零开发,通过调用框架 API 快速搭建 RAG 原型(如 LangChain 5 行代码实现基础 RAG)。
|
| 低代码 / 可视化工具 |
– Flowise:LangChain 可视化拖拽平台 – LlamaIndex Chat Engine:开箱即用的 RAG 对话界面 – Steamship:托管式 RAG 平台,支持一键部署
|
非技术人员可通过拖拽配置 RAG 流程;托管平台减少服务器部署、模型运维成本。
|
| 多模态 RAG 框架 |
– LlamaIndex MultiModalReader、LangChain MultiModalPromptTemplate – Florence-2(微软)、mPLUG-Owl(多模态理解)
|
支持图片、音频、视频等非文本知识的检索与生成(如 “检索产品图片 + 生成使用说明”)。
|
6.评估与运维层
该层负责监控 RAG 系统的 “检索精度”“生成质量” 和 “运行效率”,持续优化系统性能。
|
|
|
|
| 效果评估指标 |
– 检索评估:Recall@k(前 k 个结果是否包含正确知识)、Precision@k(前 k 个结果的准确率) – 生成评估:ROUGE-L(与标准答案的相似度)、BLEU(流畅度)、Faithfulness(无幻觉率,如 Factuality Score)
|
量化 RAG 效果(如 “Recall@5=90%” 表示前 5 个检索结果 90% 包含正确知识),定位优化点。
|
| 评估工具 |
– RAGAs(开源):专门评估 RAG 的 “检索相关性、生成忠实度、回答有用性” – TruLens:监控 RAG 全链路(检索→生成),支持归因分析 – Hugging Face Evaluate:提供 ROUGE、BLEU 等标准化评估函数
|
自动化评估 RAG 系统,替代人工打分(如 RAGAs 可批量测试 1000 个问题的无幻觉率)。
|
| 运维与监控 |
– 模型监控:Prometheus + Grafana(监控 LLM 响应时间、向量检索耗时) – 日志管理:ELK Stack(Elasticsearch+Logstash+Kibana) – 迭代优化:LangSmith(LangChain 生态,跟踪 Prompt / 检索结果迭代)
|
实时监控系统响应速度、错误率;通过日志定位 “检索失败”“生成幻觉” 的原因;记录迭代历史。
|