面向研究生毕业设计“基于 RAG 的航空飞机资料智能问答系统设计与实现”的最小可运行原型。
本项目不追求一开始做成大平台,而是围绕开题报告中的三个核心创新点完成闭环:
- 分层混合检索
- 跨主题关联知识辨识与高精重排
- 基于证据组织的生成增强
航空资料导入
-> 文档解析与章节识别
-> 知识单元切分
-> 文档级、章节级、chunk级分层检索
-> BM25 + 语义检索混合召回
-> 核心/扩展/噪声证据辨识与重排
-> 结构化、可追溯回答
为了保证本机立即可跑,当前默认实现使用轻量依赖:
- 稀疏检索:内置 BM25
- 语义检索:
sklearnTF-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.pyapp.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