> 项目地址:https://gitee.com/qinghe-sixteen/psychology
一、项目背景
心理学在专升本、教师资格证等考试中占比越来越大,但传统教学面临几个痛点:
– 师资不足,学生课后问题得不到及时解答 – 教材体量大,知识点密集,难以快速定位 – 通用大模型回答不够精准,可能"编造"教材中没有的内容
基于以上问题,我开发了"心语导师"——一个严格基于《2025心理学教材》的智能问答系统。它不是通用聊天机器人,而是先检索教材原文、再基于真实内容生成答案,确保答案的学术准确性和考试针对性。
二、系统架构

整体流程:用户提问 → BM25 FAQ快速匹配 → RAG流程(BERT意图分类 → 策略选择 → 混合检索 → 精排 → LLM流式生成)→ WebSocket推送答案。
核心模块:

三、核心技术选型
3.1 为什么用混合检索?

权重设为 dense:1.0、sparse:0.7,语义为主、关键词为辅。
3.2 为什么用父子分块?

实现:子块300字做向量检索保证命中精度,命中后通过 parent_id 找到父块1200字送给LLM保证上下文完整。
3.3 为什么召回后还要Rerank?
召回用的 BGE-M3 是双塔架构,query 和 doc 分别独立编码,两者之间没有交互。BGE-Reranker 是交叉编码器,把 [query, doc] 拼接后联合编码,每一层 attention 都在做逐词交互,精度高出一个档次。
简单说:召回负责"广"(从539条里快速筛出6条),Rerank负责"准"(从6条里精选3条)。
四、关键实现
4.1 4种自适应检索策略

策略选择由 LLM 根据提示词中的4种策略定义自动判断,失败时降级为直接检索。
4.2 BM25 FAQ 快速匹配
对于高频标准问题(如"短时记忆的容量是多少"),走 BM25 + Softmax 快速通道:
1. jieba 分词 → BM25 计算54条FAQ的相关性分数 2. Softmax 归一化(减去最大值防止溢出) 3. 最高分 ≥ 0.85 → 直接返回标准答案(<100ms) 4. 命中后缓存到 Redis(TTL=180s),下次相同问题直接命中
未命中才走 RAG 流程,兼顾速度和准确性。
4.3 多轮对话记忆
```python
# 获取最近5轮历史
history = self._get_session_history(session_id)
# 历史注入提示词 + 检索增强
history_context = '\\n'.join([f'Q:{h["question"]}\\nA:{h["answer"]}' for h in history[-5:]])
# 检索时把历史问题和当前问题拼接
retrieve_query = f"{history_questions}\\n\\n{query}"
学生追问"详细说说"时,模型知道是在追问上一轮的哪个知识点。
五、效果展示
示例问答:
Q: "短时记忆的容量和编码方式是什么?" → 基于教材准确回答 7±2 个组块 Q: "为什么我背了就忘?" → 回溯策略简化为"遗忘的原因及提取失败理论"后精准检索 Q: "无意注意和有意注意有什么区别?" → 子查询策略拆分后分别检索再合并
六、部署指南
环境要求 Python 3.10+ MySQL 8.0+、Redis 6.x+、Milvus 2.x(Docker) 内存 ≥ 16GB(本地模型约需 6-8GB)
快速启动
# 1. 克隆项目
git clone https://gitee.com/qinghe-sixteen/psychology.git
cd psychology
# 2. 安装依赖
pip install fastapi uvicorn langchain langchain-community
pip install pymilvus milvus-model sentence-transformers
pip install transformers torch pymysql redis rank_bm25 jieba
# 3. 下载模型到 rag_qa/models/(见README)
# 4. 配置 config.ini(复制 config.ini.example 修改)
# 5. 启动中间件(MySQL、Redis、Milvus)
# 6. 数据初始化
python mysql_qa/utils/mysql_client.py
python main.py –data
# 7. 启动服务
python rag_api.py
浏览器访问 localhost 即可使用。
七、总结
本项目实现了从数据处理到在线问答的完整 RAG 链路,核心亮点:
1.混合检索:稠密语义 + 稀疏关键词双路召回,覆盖面更广 2.父子分块:子块检索保证精度,父块全文保证上下文完整 3.4种自适应策略:LLM 自动判断问题类型选择最优检索方式 4.BM25 + RAG 双层架构:简单问题秒回,复杂问题深度检索 5.全链路降级:任何环节失败都有兜底策略,保证系统可用性 6.后续优化方向:引入 ONNX 量化加速 Rerank、支持更多文档格式、增加用户反馈闭环优化检索效果。
项目地址:https://gitee.com/qinghe-sixteen/psychology 欢迎 Star 和提 Issue!
网硕互联帮助中心




评论前必须登录!
注册