Skip to content

BoTingY/RAG

Repository files navigation

Airplane RAG

面向研究生毕业设计“基于 RAG 的航空飞机资料智能问答系统设计与实现”的最小可运行原型。

本项目不追求一开始做成大平台,而是围绕开题报告中的三个核心创新点完成闭环:

  1. 分层混合检索
  2. 跨主题关联知识辨识与高精重排
  3. 基于证据组织的生成增强

系统闭环

航空资料导入
  -> 文档解析与章节识别
  -> 知识单元切分
  -> 文档级、章节级、chunk级分层检索
  -> BM25 + 语义检索混合召回
  -> 核心/扩展/噪声证据辨识与重排
  -> 结构化、可追溯回答

当前可运行版本

为了保证本机立即可跑,当前默认实现使用轻量依赖:

  • 稀疏检索:内置 BM25
  • 语义检索:sklearn TF-IDF char ngram
  • 重排:BM25 分数、语义分数、章节命中、层级分数、重复度惩罚的综合打分
  • 生成增强:先组织核心证据与扩展证据,再按固定结构输出答案
  • 界面:Streamlit

后续论文实验阶段可以替换为:

  • 向量检索:BGE-M3 + FAISS
  • 重排模型:bge-reranker-base 或 cross-encoder
  • LLM:Qwen2.5、DeepSeek、ChatGLM 或 Ollama 本地模型
  • PDF 解析:PyMuPDF
  • 扫描版 PDF OCR:RapidOCR

快速运行

安装最小依赖:

pip install -r requirements.txt

启动前后端分离系统:

python api_server.py --open

也可以直接双击:

start_airplane_rag.bat

停止服务可以双击:

stop_airplane_rag.bat

默认访问地址:

http://127.0.0.1:8000

构建知识库:

python build_kb.py --docs data/docs --embedding bge-m3 --index faiss

如果当前机器暂时没有安装 BGE-M3/FAISS 相关依赖,可以先用轻量实验模式:

python build_kb.py --docs data/docs --embedding tfidf --index numpy

命令行问答:

python ask.py "飞控系统的组成和工作原理是什么?"

显示证据包:

python ask.py "飞控系统的组成和工作原理是什么?" --method full --show-evidence

启动 Web 演示:

streamlit run app.py

app.py 是早期 Streamlit 演示入口;推荐使用 api_server.py + frontend/ 的前后端分离版本。

浏览器访问:

http://localhost:8501

资料目录

将航空资料放入:

data/docs/

当前默认支持:

  • .pdf
  • .txt
  • .md
  • .doc/.docx,需要 Windows + Microsoft Word COM

注意:如果 PDF 是扫描版/图片型 PDF,系统会自动使用 RapidOCR 进行 OCR,并把结果缓存到 storage/ocr_cache/。第一次处理几百页 PDF 会比较慢,后续会复用缓存。

可选参数:

$env:AIRPLANE_RAG_OCR_DPI="144"
$env:AIRPLANE_RAG_OCR_MAX_PAGES="50"
python build_kb.py --docs data/docs

如果要处理完整大 PDF,不设置 AIRPLANE_RAG_OCR_MAX_PAGES 即可。对于几百页的大 PDF,建议先小页数试跑,确认效果后再跑全量。

如果要安装完整增强依赖:

pip install -r requirements-full.txt

实验基础文件

构建知识库后会生成:

storage/airplane_rag.pkl
storage/chunks.jsonl

chunks.jsonl 是后续构造测试集、计算 Recall@K、Precision@K、MRR、nDCG、核心知识覆盖率、扩展知识覆盖率和噪声比例的基础文件。

论文对应关系

  • 分层混合检索:airplane_rag/retriever.py
  • 知识单元切分:airplane_rag/chunker.py
  • 文档解析:airplane_rag/loader.py
  • BGE-M3 embedding 接口:airplane_rag/embedding.py
  • FAISS / dense index:airplane_rag/faiss_index.py
  • BM25 稀疏索引:airplane_rag/bm25_index.py
  • 三级结构索引:airplane_rag/hierarchical_index.py
  • reranker:airplane_rag/reranker.py
  • 证据分类:airplane_rag/evidence.py
  • 去冗余:airplane_rag/dedup.py
  • 证据组织生成:airplane_rag/generator.py
  • Web 演示:app.py

实验脚本

检索对比实验:

python experiments/run_retrieval_eval.py --questions data/qa_dataset/questions.jsonl --annotations data/qa_dataset/annotations.jsonl --methods bm25 dense hybrid hierarchical full

重排与证据分类实验:

python experiments/run_rerank_eval.py --questions data/qa_dataset/questions.jsonl --annotations data/qa_dataset/annotations.jsonl

生成质量导出:

python experiments/run_generation_eval.py --questions data/qa_dataset/questions.jsonl

消融实验:

python experiments/run_ablation.py --questions data/qa_dataset/questions.jsonl --annotations data/qa_dataset/annotations.jsonl

About

研究生课题——基于RAG的航空飞机资料问答系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors