跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

大模型应用:RAG 原理、流程与最佳实践

RAG(检索增强生成)通过检索外部数据增强大模型生成效果。核心流程包括数据处理、特征提取、检索召回及结果生成。 RAG 发展历史、数据预处理策略(结构化与非结构化)、Embedding 模型选择(对称/非对称语义)、检索方法(向量/关键字/混合)以及生成阶段的 Prompt 优化。涵盖 LangChain 实现示例、分块技巧、混合检索策略及评估指标,为构建企业级知识库提供技术参考。

lzdxwyh发布于 2025/2/6更新于 2026/10/273 浏览
大模型应用:RAG 原理、流程与最佳实践

前言

检索增强生成(Retrieval-Augmented Generation, RAG)是近年来大语言模型(LLM)落地应用中最关键的技术架构之一。它通过引入外部知识库,有效解决了大模型知识截止、幻觉问题以及私有数据无法利用的痛点。

本文将深入解析 RAG 的核心原理、完整技术流程、数据处理策略、检索优化方案及工程化最佳实践,帮助开发者构建高效、准确的企业级知识库系统。

一、RAG 发展背景与核心定义

1.1 为什么需要 RAG?

大语言模型虽然具备强大的通用能力,但在面对特定领域知识时存在明显局限:

  • 知识时效性:模型训练数据截止于过去,无法获取最新信息。
  • 幻觉问题:模型可能编造事实,缺乏依据。
  • 隐私与安全:企业敏感数据不能直接用于模型微调或公开访问。

RAG 通过'检索 + 生成'的模式,在不重新训练模型的前提下,将外部权威数据注入到生成过程中,实现精准回答。

1.2 核心流程概览

RAG 的标准工作流包含四个主要阶段:

  1. 数据预处理:清洗、分块、向量化。
  2. 检索召回:根据用户查询匹配相关文档片段。
  3. 上下文增强:将检索结果组装为 Prompt。
  4. 模型生成:基于增强后的上下文输出最终答案。
graph LR
    A[用户 Query] --> B(检索模块)
    C[知识库] --> B
    B --> D{重排序/过滤}
    D --> E[Prompt 构建]
    E --> F[大模型生成]
    F --> G[最终回答]

二、数据预处理与特征提取

高质量的数据处理是 RAG 效果的基础。若输入数据质量差,检索准确率将大幅下降。

2.1 数据结构化与清洗

原始数据通常包含噪声,需进行标准化处理:

  • 非结构化文本:PDF、Word、Markdown 等,需去除页眉页脚、特殊符号、HTML 标签。
  • 多模态数据:图片、表格可通过 OCR 或专用解析器转换为文本描述。
  • 结构化数据:数据库记录可转为自然语言描述后入库。

2.2 文本分块(Chunking)策略

由于 Embedding 模型和 LLM 的上下文窗口限制,长文档必须分割。常见策略包括:

2.2.1 固定长度分块

按字符数或 Token 数切分。简单但容易破坏语义完整性。

from langchain.text_splitter import CharacterTextSplitter
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_text(text)

2.2.2 递归分块

优先按段落、标题分割,再按大小切分,保留层级结构。

from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    separators=["\n\n", "\n", " ", ""],
    chunk_size=1000,
    chunk_overlap=200
)

2.2.3 语义分块

利用 Embedding 相似度判断段落边界,确保语义连贯。

2.3 Embedding 模型选择

Embedding 负责将文本映射为向量。选择需考虑场景:

  • 对称语义:适用于文档间相似度计算(如 Word2Vec)。
  • 非对称语义:适用于问答匹配(Query vs Document),如 BGE-M3、M3E。
  • 指令微调模型:支持 Instruction Tuning,能更好理解任务意图,如 GTE-Qwen。

建议优先选用开源且性能优秀的中文模型,如 BAAI/bge-large-zh-v1.5。

三、检索与召回机制

检索是 RAG 的核心环节,决定了上下文的准确性。

3.1 向量检索

将文本转化为向量存入向量数据库(Vector DB),使用近似最近邻搜索(ANN)算法。

  • 常用库:Milvus、Pinecone、ChromaDB、Faiss。
  • 索引算法:HNSW(高精度)、IVF(高吞吐)。
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
vector_store = Chroma.from_documents(documents=chunks, embedding=embeddings)
results = vector_store.similarity_search(query, k=5)

3.2 关键字检索

结合 BM25 等传统算法,对专有名词、实体词更敏感。适合精确匹配场景。

3.3 混合检索(Hybrid Search)

结合向量检索与关键字检索,加权融合结果,提升召回率。

  • 策略:RRF(倒数排名融合)或线性加权。
  • 重排序(Rerank):使用 Cross-Encoder 模型对初步召回结果进行精细化打分,选取 Top-N。

3.4 Query 优化

直接搜索用户 Query 往往效果不佳,需进行改写:

  • Query 重写:补全省略信息,统一术语。
  • 多路召回:同时发起多个不同策略的检索请求。
  • HyDE:假设性文档嵌入,先生成假答案再检索。

四、生成与增强策略

检索到的内容需经过处理才能送入 LLM。

4.1 Prompt 构建

典型模板如下:

你是一个智能助手。请根据以下参考信息回答问题。
参考信息:
{context}

问题:{query}

请基于参考信息作答,如果不知道请说明。

4.2 上下文管理

  • 滑动窗口:当检索结果过多时,丢弃最旧或相关性最低的片段。
  • 摘要压缩:先对检索内容进行摘要,减少 Token 消耗。

4.3 幻觉抑制

  • 约束输出:在 System Prompt 中明确要求'仅依据提供信息'。
  • 置信度阈值:设定相似度阈值,低于阈值则拒绝回答。

五、评估与监控

构建 RAG 系统后,必须建立评估体系。

5.1 评估指标

  • 检索指标:Recall@K, MRR(平均倒数排名)。
  • 生成指标:Faithfulness(忠实度)、Answer Relevance(答案相关性)。
  • 工具:Ragas、TruLens。

5.2 持续迭代

收集用户反馈(点赞/点踩),分析 Bad Case,优化分块策略或 Embedding 模型。

六、最佳实践总结

  1. 数据质量优先:清洗比模型调优更重要。
  2. 分层存储:热数据用内存库,冷数据用对象存储。
  3. 缓存机制:对高频 Query 设置缓存,降低延迟。
  4. 安全合规:对检索内容进行权限校验,防止越权访问。
  5. 成本优化:小模型做检索,大模型做生成;合理使用量化技术。

七、结语

RAG 并非银弹,其效果高度依赖业务场景与数据质量。开发者需根据实际业务需求,灵活调整检索策略与生成参数,并建立完善的监控闭环,才能实现稳定可靠的知识服务。

目录

  1. 前言
  2. 一、RAG 发展背景与核心定义
  3. 1.1 为什么需要 RAG?
  4. 1.2 核心流程概览
  5. 二、数据预处理与特征提取
  6. 2.1 数据结构化与清洗
  7. 2.2 文本分块(Chunking)策略
  8. 2.2.1 固定长度分块
  9. 2.2.2 递归分块
  10. 2.2.3 语义分块
  11. 2.3 Embedding 模型选择
  12. 三、检索与召回机制
  13. 3.1 向量检索
  14. 3.2 关键字检索
  15. 3.3 混合检索(Hybrid Search)
  16. 3.4 Query 优化
  17. 四、生成与增强策略
  18. 4.1 Prompt 构建
  19. 4.2 上下文管理
  20. 4.3 幻觉抑制
  21. 五、评估与监控
  22. 5.1 评估指标
  23. 5.2 持续迭代
  24. 六、最佳实践总结
  25. 七、结语

更多推荐文章

查看全部
  • 通义灵码 AI 编程工具:IDE 配置与全栈开发实操
  • JD-GUI:Java 字节码逆向分析指南
  • Java 爬虫开发:基础构建、条件提取与正则策略
  • Sublime Text 跨平台编辑器安装与配置指南
  • 普通产品经理转型 AI 产品经理的准备指南
  • 2025年9月GESP C++八级真题解析:选择题与判断题
  • 使用 Java Flight Recorder 分析微信 API 服务的 GC 行为与内存泄漏
  • 前端实战:拦截右键菜单并实现自定义弹窗逻辑
  • PicoClaw 轻量级 AI 助手安装与使用指南
  • 4x Tesla P40 训练 Llama-3.3-70B 大模型技术方案
  • VSCode 扩展 Copilot MCP 使用教程
  • Python 异步编程实战:从 asyncio 入门到并发爬虫
  • iRobotCAM 机器人离线编程软件在激光加工中的高精度应用解析
  • 位运算算法实战:从字符唯一性到缺失数字查找
  • Java 调用 CPLEX:安装配置与示例代码
  • LeetCode 原地复写零:双指针与逆向填充 O(n) 时间 O(1) 空间解法
  • 字节跳动前端社招面试经验总结
  • KLayout 开源版图工具高效实战指南
  • 命令行大模型交互工具:MCPHost 实战指南
  • 第十六届极客大挑战 Web 安全题目复现与解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online