[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-85677":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":32,"discoverSource":33},85677,"Educational_RAG_System","Happy-Chen-CH\u002FEducational_RAG_System","Happy-Chen-CH","面向教育场景的RAG智能问答系统，融合关键词匹配与语义检索双引擎，融合MySQL和RAG技术，先经过MySQL数据库的检索(还融合了Redis辅助储存和搜索)，若无符合条件答案，则进入RAG系统，RAG知识库中的知识储存在Milvus向量数据库中","",null,"Python",140,2,1,0,76,66.03,false,"main",true,[22,23,24,25,26,27,28],"ai","llm","milvus","mysql","python","rag","redis","2026-06-21 04:01:46","\u003Cp align=\"center\">\n  \u003Ch1 align=\"center\">🎓 EduRAG — 教育领域智能问答系统\u003C\u002Fh1>\n  \u003Cp align=\"center\">\n    一个面向教育场景的 \u003Cb>RAG (检索增强生成)\u003C\u002Fb> 智能问答系统，融合关键词匹配与语义检索双引擎，\u003Cbr>\n    支持多种文档格式、自动查询分类、智能策略选择与流式 LLM 答案生成。\n  \u003C\u002Fp>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9+-blue.svg\" alt=\"Python\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMilvus-2.5+-green.svg\" alt=\"Milvus\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMySQL-8.0+-orange.svg\" alt=\"MySQL\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRedis-7.0+-red.svg\" alt=\"Redis\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLLM-DashScope%20(qwen)-purple.svg\" alt=\"LLM\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-lightgrey.svg\" alt=\"License\">\n\u003C\u002Fp>\n\n---\n\n## 📖 目录\n\n- [系统架构](#-系统架构)\n- [核心特性](#-核心特性)\n- [项目结构](#-项目结构)\n- [查询流程](#-查询流程)\n- [环境要求](#-环境要求)\n- [快速开始](#-快速开始)\n  - [1. 克隆项目](#1-克隆项目)\n  - [2. 安装依赖](#2-安装依赖)\n  - [3. 配置服务](#3-配置服务)\n  - [4. 导入数据](#4-导入数据)\n  - [5. 运行系统](#5-运行系统)\n- [配置说明](#-配置说明)\n- [RAG 检索策略](#-rag-检索策略)\n- [技术栈](#-技术栈)\n- [常见问题](#-常见问题)\n\n---\n\n## 🏗 系统架构\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│                     main.py (顶层入口)                         │\n│                   IntegratedQASystem                          │\n├──────────────────────────────────────────────────────────────┤\n│                                                               │\n│  ┌─────────────────────┐        ┌──────────────────────────┐ │\n│  │     mysql_qa         │        │        rag_qa            │ │\n│  │   (关键词检索引擎)     │        │     (语义检索引擎)        │ │\n│  │                      │        │                          │ │\n│  │  • BM25 关键词匹配    │        │  • BERT 查询意图分类      │ │\n│  │  • Redis 查询缓存     │  未命中 │  • LLM 检索策略选择       │ │\n│  │  • MySQL 答案存储     │ ─────→ │  • Milvus 混合向量检索    │ │\n│  │  • jieba 中文分词     │        │  • BGE-Reranker 精排     │ │\n│  │                      │        │  • DashScope LLM 生成     │ │\n│  └─────────────────────┘        └──────────────────────────┘ │\n│                                                               │\n│                    ▼ 最终答案 ▼                                │\n│              • 流式输出 (token-by-token)                       │\n│              • 对话历史持久化 (MySQL)                           │\n└──────────────────────────────────────────────────────────────┘\n```\n\n**两级检索策略：**\n1. **第一级 — BM25 关键词匹配**：对已有明确问答对，直接通过关键词匹配快速返回精确答案\n2. **第二级 — RAG 语义检索**：当关键词匹配置信度不足时，自动进入深度语义检索流程\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|---|---|\n| 🔍 **两级检索** | BM25 关键词匹配（快速）+ Milvus 混合向量检索（深度语义） |\n| 🧠 **智能查询分类** | 微调 BERT 模型自动判断「通用知识」\u002F「专业咨询」，避免无意义检索 |\n| 🎯 **四种检索策略** | 直接检索、HyDE、子查询分解、回溯简化 — LLM 自动选择最优策略 |\n| 📊 **混合检索 + 精排** | BGE-M3 稠密 + 稀疏双路检索 → BGE-Reranker Cross-Encoder 重排序 |\n| 📄 **多格式文档支持** | PDF、DOCX、PPT\u002FPPTX、PNG\u002FJPG（OCR）、TXT、Markdown |\n| ✂️ **父子块切分** | 小块检索（高精度）+ 大块返回（完整上下文），兼顾精度与召回 |\n| 💬 **多轮对话** | MySQL 持久化存储会话历史，支持上下文连续对话 |\n| ⚡ **Redis 缓存** | 预计算分词结果缓存 + 热门查询答案缓存，加速重复查询 |\n| 🔌 **模型在线下载** | BERT\u002FBGE\u002F文档分割模型通过 HuggingFace\u002FModelScope 首次自动下载 |\n| 🛡️ **环境变量注入** | 支持通过环境变量覆盖敏感配置，适配容器化部署 |\n\n---\n\n## 📁 项目结构\n\n```\nEducational_RAG_System\u002F\n├── main.py                    # 🔝 主入口：集成问答系统\n├── config.ini.example         # 📋 配置文件模板（复制为 config.ini）\n├── requirements.txt           # 📦 Python 依赖\n├── README.md                  # 📖 项目文档\n├── .gitignore                 # 🔒 Git 忽略规则\n│\n├── base\u002F                      # 🔧 基础工具模块\n│   ├── config.py              #   配置管理（config.ini + 环境变量覆盖）\n│   └── logger.py              #   统一日志系统\n│\n├── mysql_qa\u002F                  # 🔑 关键词检索子系统\n│   ├── mysql_main.py          #   独立运行入口（仅 BM25）\n│   ├── db\u002Fmysql_client.py     #   MySQL 连接与 CRUD\n│   ├── cache\u002Fredis_client.py  #   Redis 缓存管理\n│   ├── retrieval\u002Fbm25_search.py  # BM25 关键词检索引擎\n│   ├── utils\u002Fpreprocess.py    #   jieba 中文分词预处理\n│   └── data\u002F                  #   MySQL 知识库 CSV 数据\n│\n├── rag_qa\u002F                    # 🧠 语义检索子系统\n│   ├── rag_main.py            #   独立运行入口（支持数据导入\u002F交互查询）\n│   ├── core\u002F\n│   │   ├── rag_system.py      #   RAG 主控：分类→策略→检索→生成\n│   │   ├── vector_store.py    #   Milvus 向量存储与混合检索\n│   │   ├── query_classifier.py #  BERT 查询意图分类器（含自动训练）\n│   │   ├── strategy_selector.py # LLM 检索策略选择器\n│   │   ├── prompts.py         #   Prompt 模板集合\n│   │   └── document_processor.py # 文档加载与父子块切分\n│   ├── edu_text_spliter\u002F      #   中文文本分割器\n│   ├── edu_document_loaders\u002F  #   多格式文档加载器（含 OCR）\n│   ├── classify_data\u002F         #   BERT 分类器训练数据\n│   ├── data\u002F                  #   RAG 知识库文档\n│   └── samples\u002F               #   测试样本文件\n│\n├── logs\u002F                      # 📝 日志目录\n└── tmp_trainer\u002F               # 🔄 模型训练临时目录\n```\n\n---\n\n## 🔄 查询流程\n\n```\n用户输入查询\n    │\n    ▼\n┌──────────────────────────┐\n│ 1. BM25 关键词匹配         │  jieba 分词 → BM25 打分 → Softmax 归一化\n│    置信度 ≥ 0.85?         │\n└──────────┬───────────────┘\n           │\n     ┌─────┴─────┐\n     │ YES       │ NO\n     ▼           ▼\n  返回精确     ┌──────────────────────────┐\n  答案        │ 2. BERT 查询分类           │  bert-base-chinese 微调模型\n              │    通用知识? \u002F 专业咨询?    │\n              └──────────┬───────────────┘\n                         │\n                   ┌─────┴─────┐\n                   │ 通用知识   │ 专业咨询\n                   ▼           ▼\n              LLM 直接     ┌──────────────────────────┐\n              回答        │ 3. LLM 策略选择            │  分析查询特征，从\n                          │    直接 \u002F HyDE \u002F          │  四种策略中选最优\n                          │    子查询 \u002F 回溯          │\n                          └──────────┬───────────────┘\n                                     │\n                                     ▼\n                          ┌──────────────────────────┐\n                          │ 4. Milvus 混合检索         │  BGE-M3 Dense(稠密)\n                          │    稠密 + 稀疏双路检索      │  + Sparse(稀疏) 向量\n                          └──────────┬───────────────┘\n                                     │\n                                     ▼\n                          ┌──────────────────────────┐\n                          │ 5. BGE-Reranker 重排序    │  Cross-Encoder 精排\n                          │    父文档去重 → 精排       │  → Top-M 文档\n                          └──────────┬───────────────┘\n                                     │\n                                     ▼\n                          ┌──────────────────────────┐\n                          │ 6. LLM 上下文生成          │  检索文档 + 原始问题\n                          │    DashScope 流式输出      │  → 自然语言答案\n                          └──────────────────────────┘\n```\n\n---\n\n## 📋 环境要求\n\n| 组件 | 版本要求 | 用途 |\n|---|---|---|\n| Python | 3.9+ | 运行环境 |\n| MySQL | 8.0+ | 问答对存储 + 对话历史 |\n| Redis | 7.0+ | 分词缓存 + 答案缓存 |\n| Milvus | 2.5+ | 向量存储与混合检索 |\n| DashScope API Key | — | LLM 调用（阿里云灵积） |\n\n> **💡 模型说明：** 所有深度学习模型（BGE-M3、BGE-Reranker、BERT、文档分割模型）首次运行时通过 HuggingFace\u002FModelScope 自动下载，无需手动下载模型文件。\n\n---\n\n## 🚀 快速开始\n\n### 1. 克隆项目\n\n```bash\ngit clone \u003Cyour-repo-url>\ncd Educational_RAG_System_online_model\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n> ⚠️ 依赖包含 PyTorch、Transformers 等大型框架，建议在虚拟环境中安装，约需 3–5 分钟。\n\n### 3. 配置服务\n\n**创建配置文件：**\n\n```bash\ncp config.ini.example config.ini\n```\n\n**编辑 `config.ini`，填入真实值：**\n\n```ini\n[mysql]\nhost = localhost\nuser = root\npassword = your_real_mysql_password\ndatabase = subject_kg\n\n[redis]\nhost = localhost\nport = 6379\npassword = your_real_redis_password\n\n[milvus]\nhost = localhost\nport = 19530\n\n[llm]\ndashscope_api_key = your_dashscope_api_key_here\ndashscope_base_url = https:\u002F\u002Fdashscope.aliyuncs.com\u002Fcompatible-mode\u002Fv1\n```\n\n> 🔒 **安全提示：** 也可以使用环境变量注入敏感信息（如 `DASHSCOPE_API_KEY`），环境变量优先级高于 `config.ini`。详见 `base\u002Fconfig.py`。\n\n**启动基础服务（以 Docker 为例）：**\n\n```bash\n# 启动 MySQL\ndocker run -d --name mysql -p 3306:3306 \\\n  -e MYSQL_ROOT_PASSWORD=your_password mysql:8.0\n\n# 启动 Redis\ndocker run -d --name redis -p 6379:6379 \\\n  redis:7.0 --requirepass your_redis_password\n\n# 启动 Milvus (使用 Milvus Standalone)\n# 详见: https:\u002F\u002Fmilvus.io\u002Fdocs\u002Finstall_standalone-docker.md\n```\n\n### 4. 导入数据\n\n**MySQL 问答数据（BM25 检索用）：**\n\n```bash\ncd mysql_qa\npython db\u002Fmysql_client.py   # 自动建表 + 从 CSV 导入数据\ncd ..\n```\n\n**知识库文档（RAG 语义检索用）：**\n\n```bash\n# 将文档放入对应学科目录，例如：\n#   rag_qa\u002Fdata\u002Fai_data\u002F    → AI 学科文档\n#   rag_qa\u002Fdata\u002Fjava_data\u002F  → Java 学科文档\n\n# 执行数据导入（文档 → 切分 → 向量化 → 存入 Milvus）\npython -m rag_qa.rag_main --data_processing --data_dir rag_qa\u002Fdata\n```\n\n### 5. 运行系统\n\n**方式一：集成问答系统（推荐）**\n\n```bash\npython main.py\n```\n\n```\n欢迎使用集成问答系统！\n会话ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890\n支持的学科类别：['ai', 'java', 'test', 'ops', 'bigdata']\n\n请输入查询: AI学科有哪些课程？\n请输入学科类别 (ai\u002Fjava\u002Ftest\u002Fops\u002Fbigdata) (直接回车默认不过滤): ai\n\n答案: AI学科主要包括以下课程：机器学习基础、深度学习...\n```\n\n**方式二：仅 RAG 语义检索**\n\n```bash\npython -m rag_qa.rag_main\n```\n\n**方式三：仅 MySQL 关键词检索**\n\n```bash\npython mysql_qa\u002Fmysql_main.py\n```\n\n---\n\n## ⚙ 配置说明\n\n### 配置文件结构 (`config.ini`)\n\n| 配置段 | 键 | 说明 | 默认值 |\n|---|---|---|---|\n| `[mysql]` | `host`, `user`, `password`, `database` | MySQL 连接参数 | `localhost`, `root` |\n| `[redis]` | `host`, `port`, `password`, `db` | Redis 连接参数 | `localhost:6379` |\n| `[milvus]` | `host`, `port`, `database_name`, `collection_name` | Milvus 连接参数 | `localhost:19530` |\n| `[llm]` | `model_name`, `dashscope_api_key`, `dashscope_base_url` | LLM API 配置 | `qwen3.7-plus` |\n| `[retrieval]` | `parent_chunk_size`, `child_chunk_size`, `chunk_overlap` | 文档切分参数 | `1200`, `300`, `50` |\n| `[retrieval]` | `retrieval_k`, `candidate_m` | 检索召回与最终候选数 | `5`, `2` |\n| `[app]` | `valid_source`, `customer_service_phone` | 学科列表、客服电话 | `['mysql']` |\n| `[logger]` | `log_file` | 日志文件路径 | `.\u002Flogs\u002Fapp.log` |\n\n### 环境变量覆盖\n\n所有 `config.ini` 配置项均可被同名环境变量覆盖（优先级更高），无需修改配置文件即可注入敏感信息：\n\n```bash\nexport DASHSCOPE_API_KEY=\"sk-your-key\"\nexport MYSQL_PASSWORD=\"secure_password\"\nexport REDIS_PASSWORD=\"redis_pass\"\n```\n\n---\n\n## 🎯 RAG 检索策略\n\n系统内置四种检索策略，由 LLM 根据查询特征自动选择：\n\n| 策略 | 原理 | 适用场景 | 示例 |\n|---|---|---|---|\n| **直接检索** | 原始查询直接检索 | 查询意图明确，需特定信息 | \"AI学科学费多少？\" |\n| **HyDE** | LLM 生成假答案 → 用假答案检索 | 查询较抽象，原始查询与文档语义不匹配 | \"人工智能在教育中的应用\" |\n| **子查询检索** | LLM 拆分为 N 个子查询 → 分别检索 → 合并去重 | 查询涉及多方面比较 | \"比较 Java 和 Python 的优缺点\" |\n| **回溯问题检索** | LLM 简化为基础问题 → 用简化问题检索 | 查询过于具体、细节太多 | \"我有100亿条数据存Milvus可以吗？\" |\n\n策略选择由 `StrategySelector` 通过 LLM Few-Shot Prompt 自动完成，无需用户干预。\n\n---\n\n## 🛠 技术栈\n\n| 层次 | 技术选型 |\n|---|---|\n| **LLM** | DashScope (qwen3.7-plus) \u002F OpenAI 兼容 API |\n| **嵌入模型** | BGE-M3 (BAAI) — 1024维稠密 + 稀疏双路向量 |\n| **重排序模型** | BGE-Reranker-Large (BAAI) — Cross-Encoder 精排 |\n| **查询分类** | bert-base-chinese 微调 — 二分类（通用\u002F专业） |\n| **向量数据库** | Milvus 2.5 — IVF_FLAT (稠密) + SPARSE_INVERTED_INDEX (稀疏) |\n| **关键词检索** | BM25 (rank-bm25) + jieba 中文分词 |\n| **缓存** | Redis — JSON 序列化存储 |\n| **关系数据库** | MySQL (PyMySQL) — 问答对 + 对话历史 |\n| **文档处理** | PyMuPDF、python-docx、python-pptx、RapidOCR、Unstructured |\n| **文本分割** | ChineseRecursiveTextSplitter、MarkdownTextSplitter、语义分割 (ModelScope) |\n| **深度学习框架** | PyTorch 2.7、Transformers 4.5、Sentence-Transformers 4.1 |\n\n---\n\n## ❓ 常见问题\n\n### Q: 首次运行很慢？\n首次运行会自动下载多个模型（BERT ~400MB、BGE-M3 ~2.2GB、BGE-Reranker ~2.1GB、文档分割 ~400MB），并可能自动训练 BERT 分类器（~10-20 分钟 CPU）。模型下载后会缓存，后续启动秒开。\n\n### Q: 不想用 MySQL\u002FRedis 可以吗？\n可以。仅运行 RAG 子系统即可：`python -m rag_qa.rag_main`。BM25 关键词匹配和对话历史功能需要 MySQL；性能优化和预计算缓存需要 Redis。\n\n### Q: 如何添加新的学科类别？\n1. 在 `config.ini` 的 `valid_source` 列表中添加新学科（如 `math`）\n2. 创建对应数据目录 `rag_qa\u002Fdata\u002Fmath_data\u002F`，放入文档\n3. 重新运行数据处理 `python -m rag_qa.rag_main --data_processing`\n\n### Q: 支持其他 LLM 吗？\n支持任何 OpenAI API 兼容的后端。修改 `config.ini` 中的 `dashscope_api_key` 和 `dashscope_base_url` 即可切换到其他服务（如 vLLM、Ollama、本地模型等）。\n\n### Q: BERT 分类器已训练好，可以跳过训练吗？\n训练好的模型保存在 `rag_qa\u002Fcore\u002Fbert_query_classifier\u002F` 目录。`.gitignore` 已排除此目录的模型文件，首次 clone 后会自动从 HuggingFace 下载基座并训练。你也可以手动放入预训练好的模型文件。\n\n---\n\n## 👤 作者\n\n**Happy-Chen-CH** — [@Happy-Chen-CH](https:\u002F\u002Fgithub.com\u002FHappy-Chen-CH)\n\n---\n\n","EduRAG 是一个面向教育场景的 RAG (检索增强生成) 智能问答系统，旨在通过融合关键词匹配与语义检索双引擎来提高问答效率和准确性。该项目利用了 MySQL 作为初步答案检索库，并结合 Redis 进行辅助存储与搜索加速；当 MySQL 中未找到合适答案时，则转向基于 Milvus 向量数据库构建的知识库进行更深层次的语义分析。其核心特性包括智能查询分类、多文档格式支持及自动选择最佳检索策略等，能够有效应对复杂且多样化的教育咨询需求。特别适合于需要快速响应用户提问并提供准确信息的在线学习平台或教育资源管理系统中使用。","2026-06-21 04:01:25","CREATED_QUERY"]