多路混合检索 RAG + 知识图谱推理,覆盖蛇种识别、血清推荐、医院查询、急救指导的全链路智能咨询
蛇咬伤是全球重要的公共卫生问题,尤其在热带和亚热带地区。传统急救知识获取方式存在信息分散、 专业性不足、难以快速定位等问题,延误了最佳救治时机。
SnakeGuardian 采用先进的 RAG(检索增强生成)技术与知识图谱推理相结合的方式, 构建了一个智能蛇咬伤急救咨询系统。系统能够根据用户描述的症状、地区、蛇的特征等信息, 智能推理蛇种、推荐抗蛇毒血清、查询附近救治医院,并提供科学的急救指导。
系统采用前后端分离架构,核心由 RAG 检索引擎和知识图谱推理引擎双驱动:
以下是系统的主要界面展示,从用户交互到知识图谱可视化,覆盖完整的使用场景:
React + Vite 构建的现代化 Web 界面,支持流式输出、快捷提问、反馈收集等交互功能。
Flask + Flask-CORS 提供 RESTful API,处理对话请求、会话管理、反馈存储等业务逻辑。
多路混合检索(向量 + BM25 + Reranker)+ 知识图谱推理,双引擎驱动精准回答。
ChromaDB 存储向量知识库,Neo4j 存储知识图谱,JSONL 存储用户反馈数据。
知识图谱是系统的核心推理引擎,包含 50 种毒蛇 的结构化知识,支持多维度推理:
| 路径 | 起点 | 终点 | 说明 |
|---|---|---|---|
| 路径 1 | 症状 | 血清 | 症状 → 毒素 → 蛇种 → 血清 |
| 路径 2 | 地区 | 血清 | 地区 → 蛇种 → 血清 |
| 路径 3 | 颜色 | 血清 | 颜色 → 蛇种 → 血清 |
| 路径 4 | 蛇种 | 医院 | 蛇种 → 血清 → 医院 |
| 路径 5 | 省份 | 医院 | 省份 → 城市 → 医院 → 血清储备 |
系统采用三路并行检索策略,确保信息覆盖的广度和精度:
ChromaDB + BGE-small-zh 语义相似度匹配,捕捉"意思相近"的召回。权重 1.0。
BM25Okapi 关键词精确匹配,确保"关键词命中"的召回。权重 0.3。
实体抽取 → Neo4j 图查询,结构化推理蛇种、血清、医院等信息。
地名提取 → 医院索引精确查询,快速定位附近救治医院。
基于 Neo4j 图数据库,支持多跳推理:症状→毒素→蛇种→血清,覆盖 50 种毒蛇的完整知识网络。
向量检索(语义相似)+ BM25(关键词精确)+ 知识图谱(结构化推理)三路并行,RRF 融合 + Reranker 精排。
滑动窗口保留最近 2 轮对话 + 向量检索历史相关对话(相似度>0.5),跨轮次记住地理位置等关键信息。
用户点赞 → 质量过滤 → 去重检查 → 向量化存储 → 下次检索使用,实现系统的持续自我优化。
Server-Sent Events 实现逐字流式输出,支持打断生成,提供流畅的用户体验。
自动过滤低质量反馈:问题≥10字、回答≥50字、不含"抱歉"等否定词,确保数据飞轮的高质量。
| 组件 | 技术 | 说明 |
|---|---|---|
| 前端 | React + Vite | 现代化 Web 界面 |
| 后端 | Flask + Flask-CORS | RESTful API 服务 |
| 向量检索 | Chroma + BGE-small-zh | 语义相似度匹配 |
| 关键词检索 | BM25Okapi | 精确关键词匹配 |
| 重排序 | BGE-reranker-base | 精排 Top-K 结果 |
| 知识图谱 | Neo4j + NetworkX | 结构化推理 |
| LLM | ZhipuAI GLM-4-Flash | 生成式回答 |
| 接口 | 方法 | 说明 |
|---|---|---|
/api/chat/stream |
POST | 流式对话接口,支持 SSE 逐字输出 |
/api/feedback |
POST | 用户反馈接口,支持点赞/差评 |
/api/session/clear |
POST | 清除会话历史 |
/api/health |
GET | 健康检查接口 |
# 流式对话示例
curl -X POST http://localhost:5000/api/chat/stream \
-H "Content-Type: application/json" \
-d '{"question": "在广东被绿色的蛇咬了怎么办?"}'
# 反馈示例
curl -X POST http://localhost:5000/api/feedback \
-H "Content-Type: application/json" \
-d '{"message_id": "123", "liked": true}'
# 1. 克隆项目
git clone https://github.com/YUII99166/SnakeGuardian-Agent.git
cd SnakeGuardian-Agent
# 2. 安装后端依赖
python -m venv .venv1
source .venv1/bin/activate # Linux/Mac
pip install -r requirements.txt
# 3. 安装前端依赖
cd frontend && npm install && cd ..
# 4. 配置 API Key(config.yaml)
apikey: "your-zhipuai-api-key"
# 5. 初始化向量库
jupyter notebook 01_setup.ipynb
# 6. 启动服务
python app.py # 后端
cd frontend && npm run dev # 前端
# 7. 访问 http://localhost:3000 🎉
# 验证所有存储
python verify_storage.py
# 查看反馈数据
python view_feedback.py
# 查看向量库
python view_vectordb.py
Flask 后端入口:对话 API、反馈接口、会话管理
RAG 核心服务:混合检索、知识图谱查询、上下文管理
知识图谱构建:实体抽取、关系建模、Neo4j 导入
React 前端:App.jsx 主组件 + 流式对话 UI
知识库数据:蛇类数据、医院索引、提取文本
向量数据库:自动生成的 ChromaDB 存储
1. 在 knowledge/snakes/ 添加蛇类数据文件
2. 运行 02_knowledge_base.ipynb 重建向量库
3. 运行 05_knowledge_graph.ipynb 更新知识图谱
编辑 rag_service.py 中的:
_hybrid_search() - 混合检索逻辑
_rrf_merge() - RRF 融合权重
_query_kg() - 知识图谱查询
编辑 rag_service.py 中的:
_get_relevant_history() - 历史检索策略
相似度阈值(默认 0.5)
滑动窗口大小(默认 2 轮)
SnakeGuardian 是一个完整的蛇咬伤急救智能咨询系统,通过 RAG + 知识图谱的双引擎架构, 实现了从蛇种识别、血清推荐到医院查询的全链路覆盖。
系统采用多路混合检索策略确保信息覆盖的广度,通过知识图谱推理确保专业判断的精度, 配合数据飞轮机制实现系统的持续自我优化。
未来计划包括:多模态支持(蛇种图片识别)、语音对话(ASR/TTS 集成)、 更完善的地区医院覆盖、以及基于用户反馈的自动评估系统。
欢迎提交 Issue 和 Pull Request!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)GLM-4-Flash 大语言模型
BGE Embedding & Reranker
RAG 框架支持
图数据库
本项目采用 MIT 许可证 - 详见 LICENSE 文件