智能图RAG旅游助手 - 基于 Neo4j 图数据库与向量检索的智能问答系统
全新设计的 Web UI,更现代的界面、更流畅的交互体验
智能对话界面
系统状态监控
- 图 RAG 检索 - 基于 Neo4j 的多跳遍历与图结构推理
- 向量检索 - Milvus + BGE 中文嵌入模型高效搜索
- 智能路由 - LLM 驱动的查询策略自动选择
- 混合检索 - 传统检索与图 RAG 的 Round-robin 融合
- 现代 Web UI - 基于 FastAPI + 现代前端的美观 Web 界面
- 数据采集系统 - 自动化的多源旅游数据采集与处理
- 缓存管理 - 智能缓存机制提升响应速度
本项目采用模块化分层架构,从查询理解到答案生成的完整 RAG 流程:
架构说明:
| 层级 | 组件 | 功能描述 |
|---|---|---|
| 查询层 | Query Translation | 用户查询翻译与理解 |
| 规划层 | Plan / Routing | 查询规划与路由决策 |
| 构建层 | Query Construction | 查询构建,分发至不同存储 |
| 存储层 | GraphDB / Relational DB / VectorStore | 图数据库、关系库、向量库 |
| 检索层 | Document / Retrieval | 文档召回与重排序 |
| 生成层 | LLM | 大模型生成最终答案 |
| 扩展层 | QA / Web Research | 问答增强与网络搜索 |
- Python 3.12+(目前使用3.12.7)
- Docker (用于 Neo4j 和 Milvus)
- Node.js 18+ (用于 ToolBbrowser 数据采集)
- 16GB+ 内存
本项目数据采集功能依赖以下两个开源项目,作为 git submodule 自动集成。
详细许可信息请参见 THIRD_PARTY_NOTICE.md。
| 工具 | 用途 | 项目地址 | 许可证 |
|---|---|---|---|
| ToolBbrowser | 浏览器自动化数据采集 | epiral/bb-browser | 参见原项目 |
| Scrapling | Python 爬虫框架 | D4Vinci/Scrapling | 参见原项目 |
使用安装脚本(推荐)
# 自动安装所有第三方工具及其依赖
./setup-tools.sh手动安装
如果安装脚本无法使用,可以手动初始化 submodule 并安装:
# 1. 初始化并更新 git submodule
git submodule update --init --recursive
# 2. 安装 ToolBbrowser
cd ToolBbrowser
pnpm install
pnpm build
cd ..
# 3. 安装 Scrapling
cd Scrapling-main
pip install -e .
cd ..# 1. 克隆项目 (使用 --recursive 拉取 submodule)
git clone --recursive https://github.com/Zzeng0917/Rag_python.git
cd Rag_python
# 如果已经克隆但没有使用 --recursive,可以手动初始化:
# git submodule update --init --recursive
# 2. 创建虚拟环境
conda create -n rag_graph python=3.12.7
conda activate rag_graph
# 3. 启动基础设施服务 (Neo4j + Milvus)
# 方式一:使用 CLI(推荐,自动检测服务就绪状态)
cd rag_graph
python main.py service up
# 方式二:使用 docker-compose 直接启动
cd config
docker-compose up -d
# 4. 安装依赖
pip install -r requirement.txt
# 5. 配置环境变量 (.env 文件)
NEO4J_URI=bolt://127.0.0.1:7687
NEO4J_PASSWORD=your-password
LLM_MODEL=your_model
LLM_API_KEY=your_api_key
LLM_BASE_URL=your_base_url方式一:Web UI(推荐)
# 进入项目目录
cd rag_graph
# 启动 Web 服务(默认端口 8080)
python main.py web
# 指定端口启动
python main.py web --port 8000
# 开发模式(热重载)
python main.py web --reload访问 http://localhost:8080 打开 Web 界面
方式二:命令行界面
# 进入项目目录
cd rag_graph
# 启动交互式 CLI(默认命令,自动检查服务状态)
python main.py
# 或明确指定
python main.py start
# 自动启动基础设施后运行(如果服务未启动,自动启动 Docker 容器)
python main.py start -a
# 跳过服务检查(快速启动)
python main.py start --skip-service-check
# 单次查询模式
python main.py query "北京有哪些必去的景点?"
# 系统健康检查
python main.py doctor
# 查看所有命令
python main.py --help基础设施服务管理
# 启动所有基础设施服务 (Neo4j + Milvus)
python main.py service up
# 查看服务状态和健康检查
python main.py service status
# 查看服务日志
python main.py service logs
python main.py service logs -s neo4j -f # 跟踪 Neo4j 日志
# 重启指定服务(自动等待就绪)
python main.py service restart neo4j
python main.py service restart standalone # 重启 Milvus
# 等待服务就绪(用于检查或脚本)
python main.py service wait # 等待所有服务就绪
python main.py service wait neo4j # 只等待 Neo4j
python main.py service wait milvus -t 60 # 等待 Milvus,超时60秒
# 停止所有服务
python main.py service down
# 停止并删除数据(危险!)
python main.py service down -vWeb 界面提供以下功能模块:
| 模块 | 功能描述 |
|---|---|
| 对话问答 | 智能旅游问答,支持上下文对话 |
| 系统状态 | 实时监控 Neo4j、Milvus、LLM 服务状态 |
| 数据采集 | 触发和管理多源数据采集任务 |
| 数据文件 | 查看和管理采集的原始数据文件 |
| 缓存管理 | 查看缓存统计和清理缓存 |
| 系统配置 | 动态调整系统参数和模型配置 |
在 CLI 交互模式中可使用以下命令:
/help- 显示帮助信息/stats- 查看系统统计/quit或/exit- 退出系统
Ctrl+C(连续两次): 退出系统Shift+Enter: 输入框换行Enter: 发送消息
Rag_python/
├── config/ # 配置文件目录
│ ├── config.py # 主配置管理
│ ├── .env # 环境变量
│ ├── .env.example # 环境变量示例
│ └── docker-compose.yml # Docker 编排
│
├── rag_graph/ # 主程序目录
│ ├── main.py # 程序入口
│ ├── cli.py # CLI 界面 (Typer + Rich)
│ ├── requirement.txt # 依赖列表
│ │
│ ├── rag_modules/ # 核心 RAG 模块
│ │ ├── graph_data_preparation.py # 图数据准备
│ │ ├── graph_rag_retrieval.py # 图 RAG 检索
│ │ ├── hybrid_retrieval.py # 混合检索
│ │ ├── intelligent_query_router.py # 智能路由
│ │ ├── milvus_index_construction.py # 向量索引
│ │ ├── generation_integration.py # 生成集成
│ │ └── graph_indexing.py # 图索引构建
│ │
│ ├── web/ # Web UI 服务
│ │ ├── app.py # FastAPI 应用入口
│ │ ├── routers/ # API 路由
│ │ │ ├── system.py # 系统状态 API
│ │ │ ├── chat.py # 对话 API
│ │ │ ├── collect.py # 数据采集 API
│ │ │ ├── cache.py # 缓存管理 API
│ │ │ └── data.py # 数据文件 API
│ │ └── static/ # 前端静态文件
│ │
│ ├── collectors/ # 数据采集系统
│ │ ├── processor.py # 数据处理主入口
│ │ ├── core/ # 采集核心模块
│ │ ├── adapters/ # 数据源适配器
│ │ └── tasks/ # 采集任务定义
│ │
│ ├── ui/ # CLI 界面组件
│ ├── utils/ # 通用工具函数
│ └── cache/ # 缓存数据
│
├── docs/ # 文档和图片
│ ├── image1.png # 界面预览图
│ └── image2.png # 系统状态图
│
├── data/ # 数据目录
│
# 第三方采集工具 (通过 git submodule 集成)
├── ToolBbrowser/ # [epiral/bb-browser](https://github.com/epiral/bb-browser)
├── Scrapling-main/ # [D4Vinci/Scrapling](https://github.com/D4Vinci/Scrapling)
├── .gitmodules.example # git submodule 配置示例
│
└── setup-tools.sh # 第三方工具自动化安装脚本
系统配置通过 config/.env 文件管理:
# Neo4j 图数据库
NEO4J_URI=bolt://127.0.0.1:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-password
# Milvus 向量数据库
MILVUS_HOST=127.0.0.1
MILVUS_PORT=19530
MILVUS_COLLECTION_NAME=travel_knowledge
# 大语言模型
LLM_MODEL=your_model
LLM_API_KEY=your_api_key
LLM_BASE_URL=your_base_url
# 嵌入模型 (中文优化)
EMBEDDING_MODEL=BAAI/bge-small-zh-v1.5
# 检索配置
TOP_K=5
MAX_GRAPH_DEPTH=2
TEMPERATURE=0.1复制 config/.env.example 到 config/.env 并修改为你的配置:
cp config/.env.example config/.env
# 编辑 config/.env 填入你的配置- 数据库: Neo4j (图), Milvus (向量), MinIO (对象存储)
- AI/ML: BGE 中文嵌入, LangChain, OpenAI API
- Web 框架: FastAPI + 现代前端
- CLI 框架: Typer + Rich
- 核心语言: Python 3.12+
记录发现的 RAG 相关有用内容
| 日期 | 内容 | 标签 |
|---|---|---|
| 11/30 | 字节跳动 RAG 实践手册 字节内部 RAG 系统架构设计,涵盖数据处理、索引构建、检索优化、生成层设计等完整实践经验 |
工业实践 架构设计 |
- BAAI - 优秀的 BGE 嵌入模型
- Neo4j - 强大的图数据库
- Milvus - 高性能向量数据库
- Datawhale - RAG 学习教程
- Hugging Face - 丰富的预训练模型资源
- ToolBbrowser - 浏览器自动化数据采集 (by @epiral)
- Scrapling - Python 爬虫框架 (by @D4Vinci)
- 项目主页: https://github.com/Dexterity-AI/Rag_python
- 问题反馈: Issues
- 功能建议: Discussions
- 邮箱: zxd450273@gmail.com
如果这个项目对你有帮助,请给我们一个 Star!
Made with by RAG Python Team


