该项目是一个基于Python的服务器,设计用于文档处理和检索增强生成(RAG)。它提供了一个简单的Web界面和一个JSON API来上传文档,将它们分割成块,生成嵌入,并将其存储在DuckDB数据库中以进行高效的相似性搜索。
整个应用程序使用Docker容器化,并使用uv进行快速、优化的依赖管理。它还包括一个mcp-rag-service用于与MCP(机器理解平台)集成。
/api/search、/api/stats和/health端点以供程序集成。.txt、.md、.pdf以及多种编程语言源文件(如.py、.js、.java等)。CodeSplitter,文本使用RecursiveCharacterTextSplitter)。sentence-transformers/paraphrase-multilingual-mpnet-base-v2(主要,768维)或sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2(备用,384维)。uv进行超快依赖安装。mcp-rag-service以演示与外部系统的集成。sentence-transformers、llama-index、langchainuv克隆仓库:
git clone <repository-url>
cd <repository-name>
构建Docker镜像:
构建过程通过多阶段Dockerfile和uv进行了优化。您可以选择标准构建(包括GPU支持库)或仅CPU构建。
标准构建(适用于具有GPU支持的环境):
docker build -t rag-duckdb-server .
仅CPU构建(推荐用于本地开发或仅CPU服务器): 此构建更快且结果镜像更小,因为它使用了仅CPU版本的PyTorch。
docker build --build-arg USE_CPU_ONLY=true -t rag-duckdb-server-cpu .
运行Docker容器:
该命令启动服务器并将本地的uploads和data目录映射到容器中。这确保即使容器被移除,上传的文件和数据库也会保留。
对于标准构建:
docker run -p 8000:8000 \
-v "$(pwd)/uploads:/app/uploads" \
-v "$(pwd)/data:/app/data" \
--name rag-server \
rag-duckdb-server
对于仅CPU构建:
docker run -p 8000:8000 \
-v "$(pwd)/uploads:/app/uploads" \
-v "$(pwd)/data:/app/data" \
--name rag-server-cpu \
rag-duckdb-server-cpu
注意Windows用户:在PowerShell中使用${pwd}而不是$(pwd)。
访问应用:
打开您的网络浏览器并导航至http://localhost:8000。
data/rag.duckdb数据库中。/api/*端点与服务器进行程序交互。服务器支持广泛的文件类型:
.txt - 纯文本文件.md - Markdown文件.pdf - PDF文档.py - Python.js, .ts, .jsx, .tsx - JavaScript/TypeScript.java - Java.c, .cpp, .cc, .cxx - C/C++.cs - C#.go - Go.rs - Rust.php - PHP.rb - Ruby.scala - Scala.swift - Swift.html, .htm - HTML.css, .scss, .sass - CSS和预处理器.sh, .bash, .zsh, .fish - Shell脚本.json - JSON.yaml, .yml - YAML.xml - XML.sql - SQL.ini, .toml - 配置文件注意:不支持的文件扩展名在处理过程中会被自动跳过。
GET / - 主Web界面POST /upload-files/ - 上传单个文件POST /upload-directory/ - 上传目录并过滤扩展名POST /process-files/ - 处理上传的文件POST /search/ - 搜索界面POST /delete-file/ - 删除上传的文件POST /api/search - 程序搜索端点GET /api/stats - 获取集合统计信息GET /health - 健康检查端点query(必需):搜索查询字符串top_k(可选,默认值:5):返回的结果数量(1-50)search_type(可选,默认值:"hybrid"):"hybrid"、"semantic"或"keyword"use_reranker(可选,默认值:true):启用/禁用结果重新排序expand_query(可选,默认值:false):启用/禁用查询扩展项目中包含一个单独的MCP(机器理解平台)集成服务,位于mcp-rag-service/目录下。此服务提供:
mcp-rag-service/examples/目录包含工作示例:
upload_example.py - 展示文件上传功能search_example.py - 展示具有相似度阈值的语义搜索analysis_example.py - 综合的向量分析示例要运行示例:
cd mcp-rag-service/examples
python upload_example.py
python search_example.py
python analysis_example.py
.
├── app/
│ ├── main.py # FastAPI应用、路由和API端点
│ └── services.py # 业务逻辑(文件处理、分块、嵌入、数据库)
├── mcp-rag-service/ # MCP集成服务
│ ├── src/
│ │ ├── rag_client.py # RAG服务器客户端
│ │ ├── rag_mcp_server.py # MCP服务器实现
│ │ ├── vector_operations.py # 高级向量分析
│ │ └── utils.py # 工具函数
│ ├── examples/ # 工作示例
│ └── pyproject.toml
├── templates/
│ └── index.html # UI的Jinja2模板
├── uploads/ # 文件上传目录(作为卷挂载)
├── data/ # DuckDB数据库目录(作为卷挂载)
├── .dockerignore # 指定Docker构建上下文中忽略的文件
├── .gitignore # 指定Git忽略的文件
├── Dockerfile # 包含uv和多阶段构建的Docker构建指令
├── requirements-base.txt # 基础Python依赖
├── requirements-cpu.txt # 仅CPU的ML依赖
├── requirements-ml.txt # 完整的ML依赖(用于GPU)
└── README.md # 本文件
app/services.py中的常量。CHUNK_SIZE和CHUNK_OVERLAP调整块大小和重叠。默认值分别为700和100。app/services.py中配置。Hybrid(语义+关键词)、仅Semantic或仅Keyword(BM25)搜索。GraphRAG(基于图的检索增强生成)计划作为一个重大增强,将提供:
此功能目前处于规划阶段,并将作为可选启用的独立模块实现。
Docker构建失败:尝试仅CPU构建以获得更快、更可靠的构建:
docker build --build-arg USE_CPU_ONLY=true -t rag-duckdb-server-cpu .
内存问题:对于大型文档集合,请考虑:
模型加载问题:如果主模型加载失败,系统会自动回退到较小的模型。
数据库问题:DuckDB数据库会在首次运行时自动创建。如果遇到数据库错误,可以删除data/目录以重新开始。
使用健康检查端点监控服务状态:
curl http://localhost:8000/health
这将返回服务状态、模型加载状态和数据库连接信息。
欢迎贡献!请随时提交拉取请求或打开问题报告错误和功能请求。
本项目采用MIT许可证 - 详情参见LICENSE文件。 </中文翻译>