# 问答系统 **Repository Path**: duanmu-chuan/qa-system ## Basic Information - **Project Name**: 问答系统 - **Description**: 基于向量数据库的ai问答系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-11 - **Last Updated**: 2026-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 综合问答系统(FAQ + RAG) 一个把「传统 FAQ 检索」和「RAG 知识库问答」整合在一起的实战项目: 高频业务问题走 BM25 标准问答,文档类问题走向量检索 + 重排 + 大模型生成, 通用知识问题直接交给大模型。 ## 功能特性 - **传统 FAQ**:MySQL 标准问答语料 + jieba 分词 + BM25 + Redis 缓存, 分数和与第二名的差距同时达标才返回标准答案。 - **RAG 问答**:BGE-M3 Embedding → Milvus 多路召回 → BGE Reranker 重排 → DeepSeek 生成带引用编号的答案。 - **意图路由**:微调中文 BERT 二分类,专业咨询走 FAQ/RAG,通用知识直答。 - **检索策略**:普通检索、HyDE、子问题拆分、多路同义改写,按问题特征自动选择。 - **优雅降级**:意图模型 / FAQ / 重排 / 大模型任一不可用时自动降级,不中断请求。 - **FastAPI + 测试前端**:开箱即用的问答接口和聊天页面。 ## 系统架构 ```text 用户问题 ↓ 意图分类(BERT) ├─ 专业咨询 → 传统 FAQ(BM25 + Redis)→ 命中直接返回 │ ↓ 未命中 └─ 通用知识 → 大模型直答 RAG 主流程 ↓ 检索策略选择(direct / HyDE / 子查询 / 多路改写) ↓ BGE-M3 + Milvus 多路召回 ↓ BGE Reranker 精排 ↓ Prompt + LLM 生成带引用答案 ``` ## 技术栈 | 层次 | 技术 | | --- | --- | | Web | FastAPI、Uvicorn、Pydantic | | 传统检索 | MySQL、Redis、jieba、rank-bm25 | | 向量检索 | Milvus、pymilvus、BGE-M3 | | 重排 / 分类 | BGE Reranker、transformers、PyTorch、scikit-learn | | 大模型 | DeepSeek(OpenAI 兼容协议) | | 文档处理 | LangChain document loaders、PyMuPDF、python-docx、python-pptx、RapidOCR | ## 目录结构 ```text integrated_qa_system/ ├── base/ 全局配置与日志 ├── qa_system/ 传统 FAQ:BM25 + Redis + MySQL ├── rag_system/ 文档加载与语义切分 ├── rag_qa/ RAG 在线问答(core / models / main.py) ├── api/ FastAPI 服务 + 零构建测试前端 ├── scripts/ 数据初始化、意图训练、调试脚本 ├── docs/ 示例文档、测试数据、模型下载说明 ├── datasets/ 意图分类训练/验证数据 ├── notes/ 学习笔记 └── requirements.txt Python 依赖 ``` ## 快速开始 ### 1. 克隆并安装依赖 ```bash git clone git@gitee.com:duanmu-chuan/qa-system.git cd qa-system cp .env.example integrated_qa_system/.env # 编辑 integrated_qa_system/.env,填写 LLM_API_KEY、MYSQL_PASSWORD、REDIS_PASSWORD cd integrated_qa_system pip install -r requirements.txt ``` ### 2. 启动依赖服务 - MySQL(默认 `localhost:3306`,库 `itcast`) - Redis(默认 `localhost:6379`) - Milvus(默认 `localhost:19530`,Attu 控制台常见端口 `30000`) ### 3. 下载模型 模型权重不入库,按 [docs/MODELS.md](integrated_qa_system/docs/MODELS.md) 下载: ```text rag_qa/models/BAAI/bge-m3 Embedding,1024 维 rag_qa/models/BAAI/bge-reranker-v2-m3 重排 rag_qa/models/bert-intent-ft 意图分类(可选,缺失时全部走 RAG) ``` ### 4. 初始化数据 ```bash # 在 integrated_qa_system 目录下执行 # 建 FAQ 表并写入示例问答 python -m scripts.init_faq_db # 文档入库(父子切块 + 去重 + Embedding + 写入 Milvus) python -m rag_qa.core.ingestion --path docs/数据库和SQL完整笔记.txt # 可选:训练意图分类模型 python -m scripts.prepare_intent_data python -m scripts.download_pretrained_bert python -m scripts.train_intent_bert ``` ### 5. 启动 ```bash # HTTP 服务 + 前端 -> http://127.0.0.1:8000 python -m api.main # 或命令行问答 python -m rag_qa.main --query "Java课程的学费是多少?" ``` ## 常用命令 ```bash python -m api.main # FastAPI + 前端 python -m rag_qa.main # 交互式问答 python -m rag_qa.core.strategy_selector # 查看检索策略判定 python -m rag_qa.core.ingestion --path docs --drop # 重建知识库 python -m scripts.init_faq_db # 初始化 FAQ 语料 python -m scripts.test_milvus_search # Milvus 检索抽查 ``` ## 说明 - `.env`、模型权重、运行日志、意图训练缓存均已被 `.gitignore` 忽略,不会上传。 - `rag_system/core/document_processor(1).py` 和 `vector_store(1).py` 是课堂参考实现, 不参与当前运行链路;当前运行链路在 `rag_qa/core/`。 - 更详细的模块说明见 [integrated_qa_system/README.md](integrated_qa_system/README.md)。 - 接口文档:启动服务后访问 。