# 掌柜智库项目(RAG)实战

### 1. 项目简介

#### 1.1 RAG**检索增强生成 (Retrieval-Augmented Generation)** 作用

> LLM (大语言模型) 在面对训练数据之外的陌生领域知识时，容易产生“幻觉” (Hallucination)，导致回答不准确。RAG 技术通过外挂知识库的方式，在 LLM 生成回答前检索相关信息作为“提示” (Context)，引导 LLM 基于事实回答，从而显著提升回答的准确率和可信度。

RAG核心定义：通过检索外部知识库增强大语言模型的生成能力。

<img src="images/1761729895413-1773556315997-1.png" alt="1761729895413" style="zoom:50%;" />

**RAG 核心流程：**

![image-20260311145734364](images/image-20260311145734364.png)

**大模型在 RAG 中的关键应用：**

*   **Embedding (向量化)**：使用 `Embedding 模型`将文本转化为向量 (支持稠密和稀疏向量)，用于后续的相似度检索。
*   **Rerank (重排序)**：使用 `Rerank 模型`对初步召回的切片 (如 Top 50) 进行精细排序，过滤无关信息，提升上下文的相关性。
*   **LLM (生成)**：使用`大语言模型`基于检索到的上下文和用户问题生成最终答案。

RAG 核心场景：**企业知识库问答、智能客服、法律 / 金融 / 政务专业咨询、文档助手、教育答疑、搜索增强**

#### 1.2 项目介绍

> 掌柜智库 (RAG) 是一款基于 **检索增强生成 (Retrieval-Augmented Generation)** 技术的企业级智能问答系统。本项目致力于构建一套集“私有知识库精准问答、实时联网信息补充、多维度结果优化”于一体的全流程智能客服解决方案，旨在实现核心知识的私有化管理、问答结果的高精准度以及业务场景的灵活适配。代码总行数： 5507

系统架构包含两大核心模块：

1. **数据处理流水线（准备）**：支持 PDF/Markdown 等多格式文档导入，执行文档结构化解析、智能切片、元数据提取及向量化存储的全链路预处理。（为智能客服提供数据支撑）

   <img src="images/image-20260202145456329.png" alt="image-20260202145456329" />

2. **智能检索系统 (查询)**：集成混合检索 (稠密向量 + 稀疏向量)、假设性问题生成 (HyDE)、MCP 联网搜索及结果重排序 (Rerank) 等高级策略，确保回答的准确性与时效性。

   <img src="images/image-20260202160422170.png" alt="image-20260202160422170"  />

### 1.2 项目核心技术&流程

#### 1.2.1 **项目标准流程总结**

* **知识库构建 (Indexing)**：原始数据 -> 文本解析 -> 文本切片 (Chunking) -> 向量化 (Embedding) -> 存入向量数据库。

  ```mermaid
  flowchart LR
      A[START]
      B[1.任务分发]
      C[2.PDF结构化解析]
      D[3.多模态图片理解]
      E[4.智能文档切片]
      F[5.主体识别与标签提取]
      G[6.混合向量化]
      H[7.数据持久化]
      I[END]
      
      A-->B
      B-->|PDF|C
      B-->|Markdown|D
      C-->D
      D-->E
      E-->F
      F-->G
      G-->H
      H-->I
      
      %% 核心样式设置：圆角 + 配色区分
      style A fill:#e8f4f8,stroke:#4299e1,stroke-width:2px,rx:20,ry:20
      style I fill:#f0f8fb,stroke:#38b2ac,stroke-width:2px,rx:20,ry:20
  ```

* **知识库检索 (Retrieval & Generation)**：用户提问 -> 问题向量化 -> 多路检索相关切片 -> 重排序 (rrf+Rerank) -> 提示词增强 (Prompt Engineering) -> LLM 生成答案。

  ```mermaid
  flowchart LR
      
      A[用户查询入口] --> STAR[开始]
      STAR --> B[1.意图识别与改写]
      B --> C[2.多路召回]
      C --> D[向量搜索]
      C --> E[HyDE检索]
      C --> F[网络搜索]
      D --> G[3.结果融合与粗排]
      E --> G
      F --> H
      G --> H[4.重排序]
      H --> I[5.LLM生成答案]
      I --> END[结束]
      END --> J[SSE流式输出]
      
      
      %% 核心样式设置：圆角 + 配色区分
      style STAR fill:#e8f4f8,stroke:#4299e1,stroke-width:2px,rx:20,ry:20
      style END fill:#e8f4f8,stroke:#4299e1,stroke-width:2px,rx:20,ry:20
      style A fill:#f0f800,stroke:#38b2ac,stroke-width:2px,rx:20,ry:20
      style J fill:#f0f800,stroke:#38b2ac,stroke-width:2px,rx:20,ry:20
  ```

#### 1.2.2 项目（RAG）确保准确率核心点

> RAG 的准确率问题拆解为六个可工程化能力层：
> 数据结构化 → 语义切片 → 多路召回 → 混合检索 → 假设增强 → 精排裁决 。
> 每一层都对应明确的误差来源与治理策略，形成端到端闭环。

##### 1.2.2.1 非结构化文档语义重建(PDF)&图片识别

PPDF 是排版格式，不是语义格式。直接抽取文本会出现结构坍塌、图文割裂、上下文断链。

专家级治理方案

- 版面语义重建 ：基于 MinerU 等引擎恢复标题层级、段落边界、表格与公式结构，输出语义化 Markdown。
- 图文联合解析 ：对图片/图表执行 OCR + VLM 双通路理解，将视觉知识转化为可检索文本与向量。
- 结构一致性校验 ：对标题树、段落归属、图文引用关系进行规则化校验，降低语义漂移。

 将“展示型文档”升级为“可计算知识资产”，从源头提升召回上限与答案可解释性。

##### 1.2.2.2 语义自治切片

固定长度切片会打断论证链路，导致“召回命中但证据不完整”。

切片级治理方案

- 按语义边界切分 ：优先使用章节、段落、主题变化等自然边界。
- 动态长短控制 ：长块二次切分、短块同域合并，避免信息稀释与碎片噪声。
- 上下文连续性增强 ：引入适度 overlap (重叠10~20%)与父标题继承，保持证据链完整。
技术价值

让每个 Chunk 成为“最小可解释知识单元”，显著提升检索相关性与生成连贯度。

##### 1.2.2.3  多路召回引擎

> **RAG 多路召回（Multi-Path Retrieval）** 是当前检索增强生成（RAG）系统中提升检索准确率（Recall）和鲁棒性的核心策略。

它的核心思想是：不依赖单一的检索方式，而是并行使用多种不同的检索策略，最后将结果合并。

单纯依靠向量检索（Dense Retrieval）已被证明存在盲区，因此“多路召回 + 融合重排序”已成为标准架构。

![多路召回.drawio](images/多路召回.drawio.png)

##### 1.2.2.4 混合向量检索

核心痛点: 语义相关 ≠ 词项命中，关键词命中 ≠ 语义正确，单一检索无法兼顾。

专家级治理方案

- Dense Vector ：负责语义理解、同义泛化、隐含关联。
- Sparse Vector ：负责术语命中、实体精确、关键字段约束。
- 统一评分空间融合 ：通过归一化与权重机制消除量纲偏差，避免单路分数“劫持”结果。

实现“语义广覆盖 + 关键词高精度”的双重最优。

**向量了解**

向量是**既有大小、又有方向**的一组数字，可用来**量化描述事物特征**。

文本、图片、语音、用户行为等信息，都可以被转换成向量。

在向量空间中，**两个向量越接近，代表它们对应的内容越相似**。

**注意：**数学领域表示向量常用小括号，编程领域常用中括号

![向量](images/向量.jpeg)

**稠密向量(语义向量)**

作用：用于表示**语义、含义、内容特征**，侧重 “懂意思”。

特点：

- 向量中几乎没有 0，数值分布**稠密、饱满**
- 维度通常在几十到几千维

典型场景：

- 大模型生成的 Embedding（词嵌入 / 句嵌入）
- 语义搜索、智能推荐、相似度计算、内容理解

**稀疏向量(统计向量)**

作用：用于表示**词频、计数、关键词是否出现**，侧重 “查字面”。

特点：

- 向量中**绝大多数是 0**，只保留少数非 0 数值
- 维度可以非常大（几万、几十万甚至更高）

典型场景：

- 关键词匹配、精确检索
- 词袋模型、TF-IDF、传统搜索召回

**混合向量检索 = 稀疏 + 稠密协同使用**

- **稀疏向量**：负责**快速、精准召回**，保证关键词匹配不遗漏

- **稠密向量**：负责**语义理解与泛化匹配**，能识别同义、近义、相关内容

- 结合优势：既保留关键词搜索的准确性，又具备语义搜索的全面性，让搜索结果又准、又全、更懂用户意图。


##### 1.2.2.5 重排序裁决层

将“可用候选”升级为“高置信证据”，直接决定最终答案质量上限。

在 RAG系统中，结果重排序（Rerank / 重排）是指：对初步检索到的候选文档（或文本片段）进行第二次、更精细的相关性排序，以选出最相关、最有用的内容输入给大语言模型

```mermaid
flowchart LR
    A["用户查询 Query"] --> B["召回阶段（快速检索）"]
    B -->|"向量检索/BM25<br/>从海量文档捞候选片段"| C["重排序阶段"]
    C -->|"Rerank模型<br/>精细打分+重新排序"| D["筛选Top-K相关片段"]
    D --> E["LLM（大语言模型）"]
    E --> F["生成最终回答"]
    
    %% 标注粗排/精排，更易理解
    B:::rankStyle
    C:::rankStyle
    
    style A fill:#f0f8ff,stroke:#4169e1,stroke-width:2px
    style F fill:#f0fff0,stroke:#228b22,stroke-width:2px
    classDef rankStyle fill:#fff8dc,stroke:#cd853f,stroke-width:2px
```

**为什么需要重排序？**

RAG 的基本流程是：

1. 用户提问
2. 系统从知识库（如向量数据库）中**快速检索**一批可能相关的文档（比如 Top-50）
3. 将这些文档拼接成上下文，交给 LLM 生成答案。

但问题在于：第一步的“快速检索”通常**不够精准**。原因包括：

- 初步检索追求高召回率，宁可多召回一些，也不漏掉，但会混入低相关性的噪声；
- LLM 的上下文窗口有限，不能把所有召回结果都塞进去，必须优中选优。

因此，需要对初步结果重新打分、排序——这就是 **重排序**。

