Skip to content

mixiuemo/HierRAG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Local-Industrial-RAG: 本地化文档检索增强系统

为了解决传统 RAG 在处理长文档时常见的“断章取义”问题,本项目实现了以下核心逻辑:

  1. 递归父子分块 (Recursive Parent-Child Chunking)

子块检索 (300字/50字重叠):利用递归切分算法,将文档切分为带有 50 字重叠的 300 字子块。较小的切片能让向量模型(BGE-M3)更精准地捕捉核心特征,提升召回率。

父块关联:每个子块在入库时都与其所属的父块(即 Markdown 标题下的完整章节)进行关联。

  1. 结果去重与父块还原 (Deduplication & Context Restoration)

上下文还原:当系统检索到最相关的子块后,不会直接将其丢给大模型,而是通过其携带的 ID 找回背后的完整父块(Parent Block)。这确保了 LLM 接收到的是逻辑连贯的完整技术条款,而非支离破碎的片段。

智能去重:在检索过程中,如果多个子块同时指向同一个章节,系统会根据 parent_id 自动去重,确保发给大模型的内容既全面又简洁,有效节省 Token 消耗。 本项目是一个基于 Docling 结构化解析、Elasticsearch 存储以及 BGE 系列本地化模型的 RAG(检索增强生成)系统。采用“父子块”检索策略,兼顾检索精度与上下文完整性。

🚀 核心特性

  • 结构化深度解析:集成 IBM 的 Docling 引擎,将 PDF/Word/PPT 转换为 Markdown,精准保留标题层级与文档逻辑。
  • 父子块检索策略 (Parent-Child Strategy):使用 300 字符的短子块进行高精召回,返回对应的完整父块(章节)给大模型,彻底解决碎片化文本导致的“断章取义”问题。
  • 双重检索架构:结合向量检索(BGE-M3)与二次重排(BGE-Reranker),在保证召回率的同时极大提升了结果的准确性。
  • 本地化推理极致优化:支持显卡硬件加速。
  • 工业级 Prompt 约束:针对技术参数设计的严谨回复准则,强制要求格式规范、拒绝幻觉、禁止路径转义。

🏗️ 系统架构流程

  1. 解析清洗:Docling 解析 -> 正则清洗 -> Markdown 结构化。
  2. 分层切片:按标题层级切分父块 -> 递归切分子块(300字/50字重叠)。
  3. 向量入库:本地 BGE-M3 批量生成向量 (Batching) -> Elasticsearch 稠密向量存储。
  4. 检索流水线:向量初筛 (Recall) -> 交叉编码重排 (Rerank) -> 父块去重与还原。
  5. LLM 生成:检索内容注入 -> 阿里 DashScope 推理回答。

🛠️ 技术栈

  • 文档解析:Docling
  • 向量模型:BAAI/bge-m3 (本地部署)
  • 重排模型:BAAI/bge-reranker-base (本地部署)
  • 数据库:Elasticsearch 8.x
  • LLM API:Aliyun DashScope (GLM/Qwen)
  • 硬件支持:NVIDIA RTX 5070 (支持 CUDA 加速)

📂 项目结构

.
├── src/
│   ├── config.py      # 环境变量与配置中心
│   ├── loader.py      # 文档解析与入库模块 (Parent-Child 逻辑)
│   └── searcher.py    # 检索与 Rerank 核心逻辑
├── models/            # 存放本地 BGE 模型文件 (bge-m3, bge-reranker)
├── file/              # 存放待处理的源文档 (.docx, .pdf, .pptx)
├── .env               # 环境变量配置 (API Key, IP等)
├── main.py            # 项目启动入口 (对话模式)
└── requirements.txt   # 依赖列表

⚙️ 快速开始
1. 环境准备
建议使用 Python 3.10 并在 Conda 环境下运行:

conda create -n rag_env python=3.10
conda activate rag_env
pip install -r requirements.txt

在根目录下创建 .env 文件:

2. 环境配置
# 阿里 DashScope 配置
DASHSCOPE_API_KEY=你的API_KEY
DASHSCOPE_BASE_URL=[https://dashscope.aliyuncs.com/compatible-mode/v1](https://dashscope.aliyuncs.com/compatible-mode/v1)
LLM_MODEL=glm-5.1

# Elasticsearch 配置
ES_HOST=[http://192.168.10.2:9200](http://192.168.10.2:9200)
INDEX_NAME=rag_prod_v1

# 本地模型路径
BGE_MODEL_PATH=./models/bge-m3
RERANK_MODEL_PATH=./models/bge-reranker-base


3. 文档入库
将文件放入 file/ 文件夹,修改 src/loader.py 中的路径并执行:
python src/loader.py

4. 启动对话
python main.py

About

基于 Docling 和深度层级解析的本地 RAG 系统。支持父子块检索与重排。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages