RAG知识库技术分享

RAG 知识库:从传统检索到智能问答的技术演进

本文基于一次内部技术分享整理而成,系统介绍 RAG(检索增强生成)知识库的核心概念、技术原理与实践经验。


一、什么是知识库

结构化知识集合

知识库本质上是一个结构化的知识集合。例如企业内部知识库,将产品手册、流程规范等信息分类存储,方便员工快速检索使用。

智能交互载体

在 AI 时代,知识库不再是静态的文档仓库,而是一个智能交互载体 —— 它可以解析用户问题,调取相关资料生成精准回答,就像客服系统自动回复常见咨询一样。

知识库的核心价值

  • 提升企业协作效率:集中管理项目文档,帮助团队成员快速获取所需信息,促进跨部门协作更加顺畅高效
  • 加速新员工培训:存储产品信息与操作指南,为新员工提供自主学习资源,帮助其快速熟悉业务流程和岗位要求
  • 保障知识资产沉淀:归档代码注释与解决方案,确保核心技术知识得到有效保存,减少因人员变动带来的知识损失风险

二、传统知识库检索的困境

在 AI 技术成熟之前,知识库检索主要依赖以下几种方式:

传统检索方法

方法 描述 典型场景
关键词匹配检索 需精确输入关键词才能找到结果,同义词或模糊表述无法识别 CNKI 等学术数据库
分类目录导航 采用层级分类目录,用户需逐层点击才能找到资源 早期门户网站(如雅虎)
人工索引卡片 纸质索引卡片记录书籍主题、作者等信息,需人工翻查 20 世纪图书馆

传统检索的三大局限

  1. 关键词匹配僵化:用户输入”数据备份”无法匹配到”备份策略”文档,需反复调整搜索词
  2. 语义理解缺失:检索”合同纠纷时效”时,系统仅返回含相同词组的文档,无法关联”诉讼时效”等近义术语
  3. 跨库整合困难:纸质档案与电子文档独立存储,用户需分别检索不同系统,获取完整资料耗时极长

三、RAG 知识库的核心概念

什么是 RAG

检索增强生成(Retrieval Augmented Generation,RAG) 是一种通过将外部知识整合到生成过程中,增强大语言模型(LLM)性能的技术方案。

简单来说,RAG = 检索(Retrieval) + 增强(Augmented) + 生成(Generation)

它的核心思路是:不让 LLM 仅凭”记忆”回答问题,而是先从知识库中检索相关内容,再将检索结果作为上下文交给 LLM 生成回答。

下图展示了 RAG 的整体架构:

RAG 整体架构图

图:RAG 系统架构 —— 从文档入库到查询生成的全流程

RAG 的两大核心流程

流程一:文档向量化(离线索引)

原始文档 → 文档解析 → 文档分块 → 向量化 → 存入向量数据库

文档向量化时序图

图:文档向量化流程时序图 —— 用户上传文档后,系统依次完成解析、分块、向量化并存入向量数据库

流程二:查询处理(在线检索)

用户提问 → 查询向量化 → 向量检索 → 获取相关文档块 → 组合 Prompt → LLM 生成回答

查询处理时序图

图:查询处理时序图 —— 用户提问后,系统经过问题优化、向量检索、ReRank 重排序,最终由 LLM 生成回答


四、RAG 核心技术详解

4.1 文档解析

文档解析是从原始文档中提取结构化或非结构化数据的过程,目的是将文档内容转化为可被后续处理(如分块、向量化、检索)的格式。

主流解析方式对比

解析方式 技术原理 优势 劣势 适用场景 费用
Native 解析 基于文档原生格式的解析器,直接提取文本、表格、图像等结构 速度快,资源消耗低;保留原始排版 对复杂格式(扫描 PDF、嵌套表格)支持差 纯文本或结构化文档(合同、报告) 本地解析,免费
MinerU 解析 基于深度学习模型(如 LayoutLM、TableMaster)解析文档布局 高精度表格识别;支持复杂排版;输出结构化数据 计算资源消耗高;对非表格内容解析较弱 含复杂表格的文档(财务报表、科研论文) 私有化部署
DeepDoc 解析 结合 OCR(如 Tesseract)与 NLP 模型,解析非结构化文档 支持扫描件和图像文档;可处理手写体、多语言 OCR 精度依赖图像质量;处理速度较慢 扫描件、图像文档(发票、合同扫描件) 私有化部署
VLM 模型解析 基于视觉-语言模型(如 LayoutLMv3、Donut)联合理解文档 端到端理解文档图像与文本;多模态能力 模型体积大,推理成本高 多模态文档(含图表、公式的论文) 调用第三方模型服务
Doc2x 解析 将文档转换为中间格式(如 Markdown、JSON),再结构化处理 支持多格式转换;易于后续处理 转换可能丢失复杂格式 需将文档转为结构化格式的场景 调用第三方 SaaS 服务

如何选择解析方式

  • 纯文本或结构化文档 → 优先 Native 解析,速度快且资源消耗低
  • 复杂表格和结构化数据 → 使用 MinerU 解析,高精度识别表格和复杂排版
  • 扫描件和图像文档 → 选择 DeepDoc 解析,支持手写体和多语言
  • 多模态文档和高精度语义解析 → 使用 VLM 模型解析,理解复杂文档内容
  • 多格式转换和结构化处理 → 使用 Doc2x 解析,便于转为中间格式

4.2 文档分块

文档分块是将长文档分割为较小的、语义连贯的单元(chunk)的过程。

好的分块策略需要:

  • 精确识别核心观点与论据
  • 建立语义关联
  • 确保文档结构完整性

分块质量直接影响后续检索的精度 —— 块太大会引入噪音,块太小会丢失上下文。

4.3 向量检索(语义检索)

向量检索是 RAG 的核心检索方式,基于语义相似度而非关键词匹配。

工作原理

  1. 向量表示:将文本转化为高维向量。例如 OpenAI 的 text-embedding-ada-002 模型可将文本转为 1536 维向量,实现语义的数字化表示
  2. 相似度计算:通过余弦相似度计算向量间的夹角,余弦值 0.8 以上判定为高度相似
  3. 检索流程:先对知识库文本向量化建库,用户查询时生成查询向量,通过最近邻搜索快速匹配 TopK 相似结果,耗时通常在毫秒级

向量索引

实践中常使用 HNSW(Hierarchical Navigable Small World) 算法构建向量索引。HNSW 是一种专为高维向量数据设计的近似最近邻搜索(ANN)索引结构,可以在海量数据中快速找到语义最相近的内容。

实践:向量存储表结构

下图展示了一个典型的向量存储表结构设计。核心字段包括 chunk_id(关联分块)、content_vector(存储向量化结果)、team_id(租户隔离)等:

向量存储表结构

图:向量存储表结构 —— content_vector 字段使用 PostgreSQL 的 vector 类型存储嵌入向量

实践:HNSW 索引创建

在 PostgreSQL 中,可以通过 pgvector 扩展创建 HNSW 索引,实现高效的向量近似搜索:

HNSW 索引 SQL

图:使用 pgvector 创建 HNSW 索引,参数 m=16 控制图的连接度,ef_construction=64 控制构建时的搜索范围

实践:向量检索代码实现

以下是向量检索的核心代码,展示了从查询向量化到数据库检索的完整流程:

向量检索代码

图:向量检索实现 —— 将查询文本向量化后,通过 SQL 查询在向量数据库中进行相似度匹配

4.4 全文检索

全文检索是传统但依然有效的检索方式,基于关键词匹配。

核心技术

  • 索引构建:使用 Elasticsearch 或 PostgreSQL 插件构建倒排索引,将文档拆解为关键词-文档 ID 映射,检索响应速度可提升至 0.1 秒内
  • 分词处理:采用 jieba 等分词器对中文内容进行切分,如”人工智能应用”拆分为”人工”、”智能”、”应用”等词条,提升匹配精度
  • 相关性排序:通过 fts_vector 算法计算文档与检索词的相关度,按分数排序返回结果

实践:全文检索表结构

全文检索需要额外的分词字段来支持关键词匹配。下图展示了分块表中用于全文检索的字段设计:

全文检索表结构

图:分块表结构 —— 包含 fts_vector 等用于全文检索的字段

实践:jieba 分词与 tsvector 生成

利用 PostgreSQL 的 jieba 分词插件,可以自动为不同类型的分块(QA 模式、图片模式、普通模式)生成 tsvector

fts_vector 生成 SQL

图:通过 GENERATED ALWAYS AS 计算列,根据分块类型(QA/图片/普通)自动拼接不同字段进行 jieba 分词

实践:全文检索代码实现

以下是全文检索的核心代码实现,展示了如何利用 PostgreSQL 的 tsvector 进行关键词匹配和相关性排序:

全文检索代码

图:全文检索实现 —— 使用 jieba 分词对查询进行处理,通过 tsvector 匹配并按相关度排序

4.5 混合检索

混合检索是将向量检索(语义相似度)全文检索(关键词匹配)结合的方案,通过加权评分或排序模型,提升检索的准确性与覆盖率。

核心机制

  1. 双路检索:同时执行向量检索和全文检索,获得两组结果
  2. RRF 融合排序:使用 RRF(Reciprocal Rank Fusion) 算法 —— 一种无监督的多结果排序融合算法,将多个独立检索系统的排序结果合并为一个综合排序列表
  3. 重排序(ReRank):通过重排序模型对融合后的结果再次打分,进一步优化排序质量

混合检索的优势在于:语义检索擅长理解用户意图,全文检索擅长精确匹配关键词,两者互补可以显著提升检索效果。

实践:混合检索配置

下图展示了一个实际的混合检索配置界面,可以灵活调整语义检索和全文检索的权重比例,以及 ReRank 模型参数:

混合检索配置

图:混合检索配置 —— 支持语义检索(权重 0.58)与全文检索(权重 0.42)的比例调节,以及 ReRank 重排序模型选择

实践:混合检索代码实现

以下代码展示了混合检索的实现逻辑,包括双路检索的并行执行和 RRF 融合排序:

混合检索代码

图:混合检索实现 —— 并行执行向量检索与全文检索,通过 RRF 算法合并结果


五、RAG 知识库的优化方向

RAG 技术仍在快速演进,以下是一些主要的优化方向:

优化阶段 技术方向
基础优化 语义分块、上下文增强检索、上下文标题、文档增强
查询优化 查询转换、假设文档生成(HyDE)
检索优化 混合检索、重排序、相关片段扩展(RSE)
生成优化 上下文压缩、反馈循环
高级架构 自适应 RAG、自反思 RAG(Self RAG)、纠错 RAG(CRAG)
知识增强 知识图谱、层次索引

每个方向都在解决 RAG 流程中的不同痛点:

  • 语义分块:让分块边界更贴合语义,而非机械切割
  • HyDE:先让 LLM 生成一个假设性回答,用这个回答去检索,往往比直接用问题检索效果更好
  • Self RAG:让模型学会自我反思检索结果是否足够,不够则继续检索
  • CRAG:在生成过程中检测并纠正潜在的知识错误
  • 知识图谱:为文档间的关系建立显式图结构,增强推理能力

如何评估 RAG 效果

评估 RAG 系统效果时,最常用的两个指标是准确率(Precision)召回率(Recall)

准确率与召回率

图:准确率 P = A/(A+B),即检索到的结果中有多少是相关的;召回率 R = A/(A+C),即所有相关内容中有多少被检索到了

  • 准确率关注”检索结果的质量” —— 返回的内容是否都是有用的
  • 召回率关注”检索结果的完整性” —— 有用的内容是否都被找到了

在实际应用中,需要根据业务场景在两者之间取得平衡。


总结

RAG 知识库技术正在从”能用”走向”好用”。从最初的简单向量检索,到混合检索、重排序,再到自适应和自反思 RAG,每一步进化都在让知识库更准确、更智能地服务于用户的真实需求。

对于正在建设企业知识库的团队,建议的技术路线是:

  1. 起步阶段:选择合适的文档解析方式 + 基础 RAG(向量检索)
  2. 优化阶段:引入混合检索 + 重排序模型
  3. 进阶阶段:根据业务场景逐步引入高级 RAG 架构

关键不在于追求最复杂的方案,而在于针对业务场景选择最合适的技术组合。

文章目录
  1. RAG 知识库:从传统检索到智能问答的技术演进
    1. 一、什么是知识库
      1. 结构化知识集合
      2. 智能交互载体
      3. 知识库的核心价值
    2. 二、传统知识库检索的困境
      1. 传统检索方法
      2. 传统检索的三大局限
    3. 三、RAG 知识库的核心概念
      1. 什么是 RAG
      2. RAG 的两大核心流程
        1. 流程一:文档向量化(离线索引)
        2. 流程二:查询处理(在线检索)
    4. 四、RAG 核心技术详解
      1. 4.1 文档解析
        1. 主流解析方式对比
        2. 如何选择解析方式
      2. 4.2 文档分块
      3. 4.3 向量检索(语义检索)
        1. 工作原理
        2. 向量索引
        3. 实践:向量存储表结构
        4. 实践:HNSW 索引创建
        5. 实践:向量检索代码实现
      4. 4.4 全文检索
        1. 核心技术
        2. 实践:全文检索表结构
        3. 实践:jieba 分词与 tsvector 生成
        4. 实践:全文检索代码实现
      5. 4.5 混合检索
        1. 核心机制
        2. 实践:混合检索配置
        3. 实践:混合检索代码实现
    5. 五、RAG 知识库的优化方向
      1. 如何评估 RAG 效果
    6. 总结
评论