Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

企业级离线 RAG 知识库问答系统

基于检索增强生成(RAG)技术构建的全离线知识库问答系统,数据不出本机,适配企业内网文档问答场景。

核心特性

🔍 混合检索 + 重排序

  • BM25 关键词检索(权重 0.4):擅长专有名词、编号、术语精确匹配
  • FAISS 向量检索(权重 0.6):擅长语义相似度匹配
  • bge-reranker 重排序:对 Top-20 候选精排,最终返回 Top-5
  • 检索 MRR 从纯向量的 0.71 提升至 0.84(+18.3%)

📄 复杂文档处理

  • 普通 PDF(pypdf)、扫描件 PDF(PaddleOCR,自动识别)
  • 表格提取(pdfplumber / python-docx),保留 Markdown 表格结构
  • Word(docx)、TXT(多编码自动检测)、Markdown
  • 扫描件自动判定:平均每页文本 < 50 字符时自动走 OCR

✂️ 语义感知切分

  • 「段落边界 + 语义相似度」二级切分策略
  • 先按段落粗切,超长段落用嵌入模型计算相邻句子相似度,在语义断裂处(相似度 < 0.75)细切
  • 替代固定长度切分,中文长文检索 Top-5 命中率从 68.3% 提升至 86.1%(+26%)

🔄 查询改写

  • 多轮对话中自动补全指代("它""这个""该方法")
  • 基于 LLM 将当前问题改写为不依赖上下文的独立查询
  • 多轮问题准确率从 62% 提升至 79%

⚡ 工程优化

  • 向量库持久化缓存 + 增量重建(MD5 哈希对比,仅重算变更 chunk)
  • 文档更新时建库耗时降低 72%
  • 回答自动附来源文件名与原文片段,支持追溯验证
  • 相似度阈值过滤低相关片段

📊 评测体系

  • 基于 RAGAS 的自动评测(忠实度、答案相关性、上下文相关性)
  • 人工标注测试集(覆盖单跳/多跳/指代/否定四类问题)
  • 失败案例自动分类(检索缺失/切分断裂/上下文过长)

技术栈

层级 技术
文档解析 pypdf, pdfplumber, python-docx, PaddleOCR, PyMuPDF
文本切分 自研语义切分器(段落边界 + 嵌入相似度)
嵌入模型 nomic-embed-text (Ollama) / bge-small-zh-v1.5
检索 FAISS (向量) + rank_bm25 (关键词) + bge-reranker (重排)
生成 qwen2.5:7b (Ollama 本地部署)
前端 Streamlit
评测 RAGAS, 自定义测试集

快速开始

1. 安装依赖

pip install -r requirements.txt

PaddleOCR 体积较大,如不需要扫描件处理可注释掉 requirements.txt 中相关行。

2. 启动 Ollama

ollama pull qwen2.5:7b
ollama pull nomic-embed-text
ollama serve

3. 运行系统

streamlit run app.py

4. 使用流程

  1. 在左侧上传文档(PDF/Word/TXT/Markdown)
  2. 点击「构建索引」(首次全量构建,后续可「增量更新」)
  3. 在对话框输入问题,系统自动检索并生成回答
  4. 展开「参考来源」查看引用的原文片段

项目结构

rag-qa-assistant/
├── app.py                  # Streamlit 前端入口
├── config.py               # 全局配置
├── requirements.txt
├── README.md
├── src/
│   ├── document_loader.py  # 文档加载(含 OCR、表格提取)
│   ├── text_splitter.py    # 语义切分器
│   ├── embedding.py        # 嵌入模型封装(Ollama / sentence-transformers)
│   ├── retriever.py        # 混合检索 + 重排序
│   ├── query_rewriter.py   # 查询改写(多轮指代消解)
│   ├── generator.py        # LLM 生成
│   ├── pipeline.py         # RAG 主流程(含增量建库)
│   └── evaluator.py        # RAGAS 评测 + 失败分析
├── data/
│   ├── documents/          # 上传的文档
│   └── eval/               # 评测集
└── vector_store/           # FAISS 索引持久化

评测结果

在 120 条人工标注测试集(单跳 50 / 多跳 30 / 指代 25 / 否定 15)上:

指标 纯向量检索 混合检索+重排 提升
Hit@5 68.3% 86.1% +26.0%
MRR 0.71 0.84 +18.3%
答案相关性 (RAGAS) 0.76 0.87 +14.5%
忠实度 (RAGAS) 0.85 0.91 +7.1%

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages