RAG-ARC 是一个模块化的检索增强生成(RAG)框架,旨在构建高效、可扩展的架构,支持多路径检索、图结构提取和融合排序。该系统解决了传统RAG系统在处理非结构化文档(PDF、PPT、Excel等)时的关键挑战,如信息丢失、检索准确率低和多模态内容识别困难等问题。
🧩 RAG 全流程支持: 覆盖从文档解析、文本分块、向量化,到多路径检索、图结构提取、结果重排序与知识图谱管理的完整流程,实现端到端的智能检索增强生成。
📚 知识密集型任务: 适用于依赖大量结构化与非结构化知识的问答、推理与内容生成场景,确保高召回率与语义一致性。
🌐 多场景适配: 同时支持 标准 RAG 与 GraphRAG 模式,可灵活应用于学术论文分析、个人知识库、企业知识库等多种领域,配置灵活、部署简便。
RAG-ARC 融合了多项关键创新,构建出一个高效、可扩展、精密集成的检索增强生成(RAG)框架:
- 支持多种文件类型:DOCX、PDF、PPT、Excel、HTML 等
- 灵活解析策略:支持 OCR 与 布局感知的 PDF 解析(基于
dots_ocr模块) - 同时具备 原生 OCR 与 基于多模态大模型(VLM)的 OCR 能力
- 支持多种分块策略:按 Token、语义、递归规则 或 Markdown 层级
- 集成 HuggingFace 嵌入模型 生成高质量向量表示
- 分块大小与重叠比例 可灵活配置
- 集成 BM25(稀疏检索)、Dense(Faiss-GPU) 与 Tantivy 全文搜索
- 采用 倒数排名融合(RRF) 实现多通道结果合并
- 支持 自定义权重与融合策略,实现检索优化
- 基于事实的 实体与关系抽取,构建结构化知识图谱
- 与 Neo4j 图数据库 无缝集成
- 支持面向问答与推理的知识图谱管理
- 采用简洁高效的建图方式,支持增量更新,便于企业级部署
- 引入 子图 PPR(Personalized PageRank):相比 HippoRAG2 在全图范围内的 PPR 计算,子图 PPR 实现了 更精准的定位与更高的推理效率
- 基于 Qwen3 模型 的高精度结果重排序
- 支持 LLM 驱动 与 列表式策略 的双模式重排序
- 结合 分数归一化与元数据增强 提升排序鲁棒性
- 工厂模式 管理 LLM、嵌入与检索器组件创建
- 分层设计:
config、core、encapsulation、application、api - 单例模式 管理分词器与数据库连接
- 共享机制 支持检索器与嵌入模型实例复用,提高系统性能
基于 HippoRAG2 的架构演进,RAG-ARC 在成本效率与召回性能方面均实现了显著突破:
-
🚀 Token 成本降低 22.9% 通过精心设计的提示词策略,在保持精度的同时有效减少 Token 消耗
-
🎯 召回率提升 5.3% 借助剪枝优化,显著提高了文档检索的全面性与相关性
-
🔁 支持知识图谱的增量更新 无需重新构图即可更新图谱,大幅降低计算与维护成本
RAG-ARC/
├── 📁 api/ # API层(FastAPI路由/MCP集成)
│ ├── routers/ # API路由定义
│ ├── config_examples/ # 配置示例
│ └── mcp/ # MCP服务器实现
│
├── 📁 application/ # 业务逻辑层
│ ├── rag_inference/ # RAG推理模块
│ ├── knowledge/ # 知识管理
│ └── account/ # 用户账户管理
│
├── 📁 core/ # 核心能力
│ ├── file_management/ # 文件解析和分块
│ ├── retrieval/ # 检索策略
│ ├── rerank/ # 重排序算法
│ ├── query_rewrite/ # 查询重写
│ └── prompts/ # 提示模板
│
├── 📁 config/ # 配置系统
│ ├── application/ # 应用配置
│ ├── core/ # 核心模块配置
│ └── encapsulation/ # 封装配置
│
├── 📁 encapsulation/ # 封装层
│ ├── database/ # 数据库接口
│ ├── llm/ # LLM接口
│ └── data_model/ # 数据模型和模式
│
├── 📁 framework/ # 框架核心
│ ├── module.py # 基础模块类
│ ├── register.py # 组件注册表
│ └── config.py # 配置系统
│
├── 📁 test/ # 测试套件
│
├── main.py # 🎯 主应用程序入口点
├── app_registration.py # 组件初始化
├── pyproject.toml # 项目依赖
└── README.md # 项目文档
三步部署:
# 1. 克隆仓库
git clone https://github.com/DataArcTech/RAG-ARC.git
cd RAG-ARC
# 2. 构建Docker镜像(一次性设置)
./build.sh
# 3. 启动所有服务
./start.sh部署包含以下服务:
- ✅ PostgreSQL 16:元数据存储
- ✅ Redis 7:缓存层
- ✅ Neo4j:知识图谱数据库
- ✅ RAG-ARC应用:支持GPU的FastAPI应用
脚本功能说明:
build.sh:
- 检查Docker环境
- 创建.env配置文件
- 选择CPU/GPU模式(自动检测NVIDIA GPU)
- 拉取基础镜像(PostgreSQL、Redis、Neo4j)
- 构建RAG-ARC应用镜像
start.sh:
- 创建Docker网络
- 启动全部4个容器
- 等待服务就绪
- 验证部署状态
stop.sh:
- 停止所有运行中的容器(保留数据)
cleanup.sh:
- 删除所有容器和Docker卷
- 删除Docker网络
- 保留本地数据目录(
./data、./local、./models) - 适用于清理Docker资源但保留数据的情况
clean-docker-data.sh:
- 删除所有容器和Docker卷
- 同时删除本地数据目录(
./data/postgresql、./data/neo4j、./data/redis、./data/graph_index_neo4j) - 适用于需要完全清理的情况(
⚠️ 这将删除所有数据!)
访问服务:
- API服务:http://localhost:8000
- API文档:http://localhost:8000/docs
📖 详细说明和故障排除请参见 Docker部署指南(中文) 或 Docker Deployment Guide (English)
# 1. 克隆仓库
git clone https://github.com/DataArcTech/RAG-ARC.git
cd RAG-ARC
# 2. 安装uv(如果尚未安装)
# 推荐:使用国内镜像(国内更快)
curl -LsSf https://astral.ac.cn/uv/install.sh | sh
# 备选:使用官方安装器
# curl -LsSf https://astral.sh/uv/install.sh | sh
# 或添加到PATH:export PATH="$HOME/.local/bin:$PATH"
# 3. 安装依赖(uv会自动创建虚拟环境)
uv sync
# 4. 复制并配置环境变量
cp .env.example .env
# 编辑.env以配置您的设置RAG-ARC使用模块化配置系统。关键配置文件位于config/json_configs/,在这里,你可以控制选择每个模型使用的显卡,业务流程中使用的模型等不同的参数:
rag_inference.json:RAG检索配置knowledge.json:知识管理配置account.json:用户账户配置
# 启动FastAPI服务器(uv run会自动管理虚拟环境)
uv run uvicorn main:app --host 0.0.0.0 --port 8000 --reload# 上传文档
curl -X POST "http://localhost:8000/knowledge" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@/path/to/your/document.pdf"
# 与RAG系统对话
curl -X POST "http://localhost:8000/rag_inference/chat" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "什么是RAG-ARC?"}'
# 获取Token(登录)
curl -X POST "http://localhost:8000/auth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=YOUR_USERNAME&password=YOUR_PASSWORD"
# 注册新用户
curl -X POST "http://localhost:8000/auth/register" \
-H "Content-Type: application/json" \
-d '{"name": "新用户", "user_name": "YOUR_USERNAME", "password": "YOUR_PASSWORD"}'
# 创建新对话会话
curl -X POST "http://localhost:8000/session" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# 列出会话内消息
curl -X GET "http://localhost:8000/session/YOUR_SESSION_ID/messages" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"import asyncio
import websockets
async def chat():
uri = 'ws://localhost:8000/rag_inference/stream_chat/YOUR_SESSION_ID'
async with websockets.connect(uri, additional_headers=[('Cookie', 'auth_token=YOUR_ACCESS_TOKEN')]) as ws:
await ws.send('你好,RAG-ARC!')
print(await ws.recv())
asyncio.run(chat())- 后端:Python 3.11+
- 框架:FastAPI
- 向量数据库:FAISS(GPU/CPU)
- 图数据库:Neo4j
- 全文搜索:Tantivy
- 机器学习框架:HuggingFace Transformers、PyTorch
- 数据验证:Pydantic v2
- 序列化:Dill
- LLM支持:Qwen3、OpenAI API、HuggingFace模型
RAG-ARC 支持可配置的多路径检索,包含以下组件:
- 密集检索:使用 FAISS 进行向量相似度搜索
- 稀疏检索:通过 Tantivy 实现的 BM25
- 图检索:基于 Neo4j 的知识图谱检索与 Pruned HippoRAG
融合方法可配置为使用:
- 倒数排名融合(RRF):默认的结果合并方法
- 加权求和:为每个检索路径自定义权重
- 排名融合:基于排名的组合方法
RAG-ARC 实现了基于 HippoRAG2 的增强 GraphRAG 方法,具有以下关键改进:
- 子图PPR:RAG-ARC 在相关子图上计算个性化PageRank,而不是在整个图上计算,以获得更好的效率和准确性
- 查询感知剪枝:根据实体与查询的相关性动态调整图扩展期间保留的邻居数量
- 增量更新:支持在不完全重建的情况下更新知识图谱
文档处理管道包含几个阶段:
- 文件存储:文档存储在可配置的存储后端(本地文件系统或云存储)
- 解析:多个解析器支持不同类型的文档:
- 标准格式的原生解析器(PDF、DOCX、PPTX等)
- 扫描文档的OCR解析器(使用DOTS-OCR或基于VLM的方法)
- 分块:文本使用可配置的策略分割成块:
- 基于Token的分块
- 语义分块
- 递归分块
- 基于Markdown标题的分块
- 索引:块在多个系统中建立索引:
- FAISS用于密集检索
- Tantivy用于稀疏检索
- Neo4j用于基于图的检索
RAG-ARC 提供了全面的 REST API,包含以下关键端点:
POST /knowledge:上传文档GET /knowledge/list_files:列出用户文档GET /knowledge/{doc_id}/download:下载文档DELETE /knowledge/{doc_id}:删除文档
POST /rag_inference/chat:与 RAG 系统对话WebSocket /rag_inference/stream_chat/{session_id}:基于 WebSocket 的流式对话
POST /auth/register:用户注册POST /auth/token:用户认证(登录)
POST /session:创建聊天会话GET /session:列出用户会话GET /session/{session_id}:获取会话详情DELETE /session/{session_id}:删除会话
RAG-ARC 实现了基于 JWT 的认证机制,具有以下功能:
- 用户注册和登录
- 基于角色的访问控制
- 文档级别的权限控制(VIEW/EDIT)
- 使用 bcrypt 进行安全密码哈希
- 令牌刷新机制
RAG-ARC 包含内置的监控功能:
- 可配置级别的日志记录
- 性能指标收集
- 健康检查端点
- 索引状态监控
我们欢迎社区的贡献!您可以这样参与:
- 🍴 Fork仓库
- 🌿 创建功能分支(
git checkout -b feature/AmazingFeature) - 💾 提交更改(
git commit -m 'Add some AmazingFeature') - 📤 推送到分支(
git push origin feature/AmazingFeature) - 🔄 打开Pull Request
- 新解析策略:实现自定义文档解析逻辑
- 检索算法:添加新的检索方法和融合技术
- 重排序模型:集成额外的重排序模型
- 分块方法:实现新颖的文本分块方法
如有问题、建议或反馈,请在GitHub上提交issue或联系维护者。
本项目采用MIT许可证 - 详情请见LICENSE文件。



