面向电商企业内部知识场景(产品手册、售后政策、FAQ)的智能问答系统。 基于 BGE-M3 + BM25 + BGE-Reranker + Qdrant + DeepSeek,实现文档解析、 语义切分、混合检索、交叉编码精排、答案生成与引用溯源的完整 RAG 链路。
rag-knowledge-base/
├── data/
│ ├── raw/ # 原始语料(12 篇:政策 / 产品手册 / FAQ)
│ ├── processed/ # 切分后的 chunks(68 个语义 chunk)
│ └── eval/ # 评估测试集(24 条)+ 实验结果
├── src/
│ ├── ingestion/ # 文档解析(parser)与语义切分(chunker)
│ ├── embedding/ # BGE-M3 向量化
│ ├── vectorstore/ # Qdrant 本地向量库
│ ├── retrieval/ # 检索管线(vector / hybrid / hybrid_rerank 三模式)
│ ├── generation/ # DeepSeek LLM 生成 + Prompt + 查询改写
│ ├── cache/ # Redis 缓存(fakeredis 本地降级)
│ └── api/ # FastAPI 服务 + SSE 流式 + 引用溯源
├── static/ # Web 聊天界面
├── scripts/ # 构建 / 评估 / 测试脚本
└── requirements.txt
用户查询
├─ 查询改写(LLM 消解多轮对话中的代词指代)
├─ BGE-M3 向量化 ──→ Qdrant 向量检索(语义召回 top-20)
└─ jieba 分词 ─────→ BM25 关键词检索(精确召回 top-20)
│
▼
RRF 倒数排名融合(k=60)
│
▼
BGE-Reranker-v2-m3 交叉编码精排(top-20 → top-5)
│
▼
Redis 缓存检查(命中则直接返回)
│
▼
DeepSeek LLM 流式生成答案 + 引用溯源 [1][2]
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env # 填入 DeepSeek API Key
# 1. 切分文档
python scripts/build_chunks.py
# 2. 构建向量索引(首次下载 BGE-M3 约 2.3GB)
python scripts/build_index.py
# 3. 跑检索评估对比实验
python scripts/eval_retrieval.py
# 4. 启动 Web 服务
python -m uvicorn src.api.app:app --port 8000
# 浏览器打开 http://localhost:8000| 端点 | 方法 | 说明 |
|---|---|---|
/ |
GET | Web 聊天界面 |
/chat |
POST | 非流式问答,返回答案 + 引用来源 |
/chat/stream |
POST | SSE 流式问答,逐字推送答案 |
/health |
GET | 健康检查,向量库状态 + 缓存统计 |
/cache/clear |
POST | 清空缓存 |
/cache/stats |
GET | 缓存命中率统计 |
24 条评估集(含错误码、产品型号、文档编号等硬核 query),三种检索模式对比:
| 检索模式 | Recall@1 | Recall@5 | MRR |
|---|---|---|---|
| vector(纯向量) | 83.3% | 95.8% | 0.8819 |
| hybrid(向量+BM25+RRF) | 87.5% | 100% | 0.9132 |
| hybrid_rerank(+Reranker精排) | 87.5% | 100% | 0.9201 |
纯代码类 query(E01 / X200 / SP-POL-003 / 5ATM / CR2025)Recall@1: 50% → 83% → 100%
| 指标 | 含义 | 分数 |
|---|---|---|
| faithfulness | 答案是否基于上下文(幻觉控制) | 0.9288 |
| answer_relevancy | 答案是否切题 | 0.8842 |
| context_precision | 检索上下文精确度 | 0.8381 |
| context_recall | 检索上下文召回率 | 0.9615 |
# 1. 准备数据(首次)
python scripts/build_chunks.py
python scripts/build_index.py
# 2. 一键启动(App + Redis 双容器)
docker compose up -d
# 3. 访问 http://localhost:8000
docker compose logs -f rag-app- v0.1 文档解析 + 语义切分 + 向量检索 + LLM 问答
- v0.2 BM25 混合检索 + RRF 融合 + BGE-Reranker 精排 + 评估对比实验
- v0.3 FastAPI + SSE 流式输出 + 引用溯源 + Redis 缓存 + 查询改写 + Web 界面
- v0.4 RAGAS 评估体系 + Docker Compose 部署 + 简历文档