AI 大模型 RAG 技术原理与实战应用
一、RAG 概念
检索增强生成(Retrieval Augmented Generation),简称 RAG,已成为当前最火热的 LLM 应用方案之一。
检索增强生成(RAG)通过结合外部知识库检索与大语言模型生成能力,有效解决通用模型在垂直领域知识缺失及幻觉问题。核心流程包含数据预处理、向量化索引构建、查询召回及上下文注入生成。关键技术涉及双编码器、交叉编码器等排序模型选择,以及文档切片策略优化。实施中需处理多格式文档解析难题,并通过 LangChain 等框架实现工程化落地,最终提升问答系统的准确性与实用性。

检索增强生成(Retrieval Augmented Generation),简称 RAG,已成为当前最火热的 LLM 应用方案之一。
其核心逻辑在于:通过自有垂域数据库检索相关信息,将其合并为提示模板(Prompt),再输入给大模型生成回答。尽管基础大模型能力强大,但在实际业务场景中,通用模型往往无法满足特定领域的知识需求,RAG 正是解决这一问题的关键路径。
RAG 系统的起点通常是一个文本文档的语料库。基本流程如下:
在运行时,使用相同的编码器模型完成用户查询的向量化,执行索引搜索找到 Top-K 结果,从数据库中检索相应文本块,并提供给 LLM 作为上下文输入。
检索是 RAG 流程的第一步,旨在从预先建立的知识库中检索与问题相关的信息。这一步的目的是为后续的生成过程提供有用的上下文信息和知识支撑,确保模型回答基于事实而非凭空捏造。
增强是将检索到的信息用作生成模型的上下文输入。这一步将外部知识融入生成过程中,使生成的文本内容更加丰富、准确和符合用户需求。通过增强步骤,LLM 能够充分利用外部知识库中的信息,减少幻觉现象。
生成是 RAG 流程的最后一步。生成器会利用检索到的信息作为上下文输入,并结合大语言模型来生成最终回答。此阶段需优化 Prompt 工程,确保模型能正确理解上下文并输出结构化或自然语言答案。
在 RAG 的检索阶段,排序模型的质量直接影响召回结果的准确性。主要有三类架构:
以 BERT 模型为例,它针对查询和文档分别编码,最后经过 Pooling 层输出单个向量。排序阶段只需计算两个向量相似度。优点是速度快,适合大规模检索;缺点是无法捕获查询和文档 Token 之间的复杂交互关系,语义损耗较大。
Cross-Encoder 使用单编码器同时编码查询和文档,能捕捉复杂的交互关系,提供更精准的排序结果。但它不输出向量,而是直接输出相似度得分。缺点是需要对每个文档和查询共同编码,速度较慢,通常仅用于对初筛结果(如 Top 10)进行重排序。
以 ColBERT 为例,采用双编码器策略但保留多向量输出。查询 Token 和文档 Token 在编码时互不影响,文档编码可离线处理。相比双编码器,它保留了更多语义细节;相比交叉编码器,它处理速度更快,可针对更多文档(如 Top 1000)进行排序,平衡了精度与效率。
文档种类包括 doc、ppt、excel、pdf 等。其中 PDF 有扫描版和文字版之分,PPT 包含大量架构图和流程图。
切片方式直接影响检索精准度。
用户提问往往笼统,实际意图未完全体现,导致检索内容不匹配。
以下是一个简化的 RAG 流程代码示例,展示如何使用 LangChain 框架构建检索问答系统。
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import HuggingFacePipeline
# 1. 加载文档
loader = PyPDFLoader("example.pdf")
documents = loader.load()
# 2. 文本分割
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)
# 3. 向量化与索引
embeddings = HuggingFaceEmbeddings(model_name="bge-base-zh-v1.5")
vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. 初始化 LLM 与检索链
llm = HuggingFacePipeline.from_model_id(
model_id="Qwen/Qwen-7B-Chat",
task_text_generation,
pipeline_kwargs={"max_new_tokens": 512}
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 5})
)
# 5. 查询
response = qa_chain.run("请总结文档中的关键技术点?")
print(response)
RAG 概念于 2020 年首次提出,随后进入高速发展期。演进历程大致分为:
RAG 技术通过检索外部知识增强了大语言模型的能力,有效解决了垂直领域知识更新慢、幻觉多等问题。在实际落地中,需重点关注数据清洗质量、切片策略优化以及检索排序模型的选型。随着多模态技术和 Agent 架构的发展,RAG 将在企业级知识库、智能客服等领域发挥更大价值。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online