RustRAG
  
用Rust编写的高性能本地RAG(检索增强生成)MCP服务器。
40倍代币减少 --在本地索引您的代码库,只为AI助手检索最相关的上下文。
______________________________________________________________________
最新版本(v2.4.3)
v2.4.3修复了sqlite-vec自动扩展注册顺序-- sqlite3_auto_extension 现在被称为 之前 Connection::open(),确保r2d2池中的每个连接都加载了扩展。
- 修复sqlite-vec初始化顺序:打开连接前必须注册自动扩展;SQLite仅对注册后创建的连接应用自动扩展。
- 备注:需要v2.4.1+版本(
sqlite-vec 0.1.9).
______________________________________________________________________
Expand to view History (v2.4.2 and prior)
v2.4.2文件监视器修复
v2.4.2修复了后台文件监视器中被忽略的目录(如 target 或 node_modules)尽管被列在 exclude_patterns.
- 观察者排除模式:文件监视器现在完全尊重
exclude_patterns使用ignore板条箱OverrideBuilder,防止对动态生成的文件进行不必要的索引。
v2.4.1 sqlite-vec升级
v2.4.1是一个维护版本升级 sqlite-vec 从 0.1.7-alpha.10 到稳定 0.1.9 release,修复运行时错误,其中 vec_version() 在某些平台上找不到该功能。
- 将sqlite-vec升级到0.1.9:解决
no such function: vec_version由矢量扩展的alpha预发布构建引起的错误。 - 备注:如果从v2.4.0或更早版本升级,请删除现有
vectors.db文件并重新启动以重新初始化数据库架构。
v2.4.0多格式文档支持
v2.4.0增加了多格式文档支持,将RustRAG从仅代码索引扩展到通用文档RAG引擎:
- 多格式文档支持:索引纯文本(
.txt,.log),结构化数据(.json,.yaml,.yml,.toml,.csv),HTML(.html,.htm),PDF(.pdf),单词(.docx),以及电子表格(.xls,.xlsx,.xlsb,.ods). - 格式特定分块:每种格式都使用量身定制的提取和分块策略,以保留结构信息(JSON键路径、CSV标题、电子表格表名称等)。
- 可配置扩展:默认情况下,在中启用了所有24种支持的文件类型
config.json。用户可以删除扩展名以过滤不需要的格式。完全支持配置热重载。 - 新依赖关系 (都是纯Rust,没有C绑定):
lopdf(PDF),docx-rs(DOCX),calamine(XLS/XLSX/ODS),scraper(HTML),toml,csv. - 此外:已添加
.jsx/.tsx支持的代码扩展(Tree sitter已经支持它们)。
v2.3.0安全与代码质量
v2.3.0是一个安全和代码质量强化版本,解决了通过系统代码审查发现的26个问题:
- 安全:修复了Windows上的路径验证,限制了通过MCP工具读取任意文件,默认情况下将HTTP服务器绑定到localhost。
- 可靠性:替代生产
assert_eq!panics具有适当的错误传播、固定的索引器计数器逻辑、打包的阻塞下载spawn_blocking. - 配置:无效的JSON现在返回错误,而不是默默地回到默认值;向量维度在启动时根据sqlitevec模式进行验证。
- 国际化语言检测现在可以识别日语(平假名/片假名)和韩语(韩文);YAML frontmatter正确地转义了特殊字符。
- 演出:ONNX线程数通过自动检测
available_parallelism();LanguageConfig缓存为LazyLock;build_dictionary默认情况下,迭代限制为100个文档。 - 代码质量:删除了死PHP代码路径,修复了文件查看器中的TOCTU竞争,添加了
// SAFETY:不安全块的文档。
v2.2.0架构重构
v2.2.0引入了一个主要的架构重构,重点是高并发性和异步可靠性:
- 数据库连接池:集成
r2d2和sqlite-vec以实现安全的多线程数据库访问。 - 异步网络:从迁移了更新检查器
reqwest::blocking转换为原生异步reqwest消除东京线程饥饿。 - 配置安全:解决了配置加载中的TOCTU(检查时间到使用时间)竞争条件,以提高可靠性。
- 演出:优化了ONNX嵌入器的延迟初始化,并改进了内部错误冒泡。
v2.1.0高级改进
v2.1.0引入了高级功能和改进,以提高性能、可靠性和开发人员体验:
- 新功能:增强功能和改善用户体验。
- 性能优化:更快的处理速度和更少的资源使用。
- 稳定性改进:增强的可靠性和错误修复。
v2.0.0从ONNX模型迁移
v2.0.0从迁移嵌入模型 model.onnx (470MB)给官方 model_O4.onnx (235MB)由HuggingFace提供,文件大小和运行时内存减半:
- ONNX O4图形优化模型:使用预先优化的ONNX图形优化级别4模型。矢量输出与原始输出相同——现有数据库100%兼容,不需要重新索引。
- 型号尺寸减半:下载大小从~470MB降至~235MB,运行时内存从~500MB降至~250MB。
- 自动迁移清理:现有用户
model.onnx文件将在启动时自动检测并删除旧模型。
v1.3.7配置热重载
v1.3.7通过以下方式为配置和模型实例引入了本机热重载机制 RwLock:
- GPU推理引擎热重载:核心模型执行环境现在使用读写锁解耦(
RwLock).修改硬件策略(device)或参数config.json将自动释放之前的ONNX推理图,并在下一次请求时使用新设置重新初始化它,不需要重新启动服务。 - 动态配置和监视器同步:系统现在监视
config.json为了改变。任何修改都会立即重新加载配置,并根据更新的包含/排除过滤规则实时调整后台文件监视过程。
v1.3.6硬件加速更新
- 多平台GPU加速:支持跨平台加载本机CUDA、TensorRT、DirectML和CoreML动态库,具有智能回退到CPU的功能。
- 配置和容错:
config.json支持自定义嵌入器batch_size和切换compute.fallback_to_cpu模式,以防止硬件初始化失败导致恐慌。 - 实时文件监视:集成了本机后台文件系统事件。对跟踪目录的修改会触发增量后台同步。
- SQLite WAL模式:SQLite矢量存储默认启用预写日志记录,防止
database is locked并发操作期间的争用。 - 粒度MCP错误报告:改进了错误处理,将本地化异常直接传播到客户端日志。
v1.2.0和v1.1.0性能和压缩更新
- INT8标量量化:重新设计DB虚拟表,替换
FLOAT[384]和INT8[384]这实现了75%的矢量存储大小减少,而没有明显的召回率下降。 - ONNX 3级图形优化:升级了ONNX推理会话构建器,以完全支持3级图优化,提高了纯CPU推理性能。
- 自动级联清理:更改过滤器模式(
exclude_patterns)提示系统在下次索引更新时清除过时的文档;删除物理文件也会自动清理数据库中的相应记录。
⚠️ 数据兼容性说明:如果从v1.1.x升级,请手动删除现有 vectors.db 文件来初始化新的INT8模式数据库。______________________________________________________________________
特性
- 7 MCP工具 --搜索、索引、列表文档、管理文档、frontmatter、搜索关系、构建字典
- 24种支持的格式 --代码(Rust、Go、Python、TypeScript、JavaScript)、Markdown、纯文本、结构化数据(JSON、YAML、TOML、CSV)、HTML、PDF、DOCX、电子表格(XLS、XLSX、XLSB、ODS)
- 向量搜索 --SQLite+SQLite-vec用于快速局部向量相似性搜索
- 代码智能 --Rust、Go、Python、TypeScript、JavaScript的树型AST解析
- 多语词典 --CJK↔英文符号映射提取
- 高并发性和稳定性 --异步无阻塞后台同步(
Arc)具有强大的分页功能,可防止10k+文件的MCP stdio传输缓冲区限制(零EOF丢失)。 - 汽车模型下载 --自动下载
multilingual-e5-smallONNX型号 - 交叉平台的 --macOS(英特尔/ARM)、Linux(x64/ARM64)、Windows(x64)
快速开始
1.安装
从以下网址下载适用于您平台的最新发布包 发布:
| 平台 | 包装示例 |
|---|---|
| Windows x64 | rustrag-windows-x64.exe.zip |
| macOS苹果硅 | rustrag-macos-apple-silicon.tar.gz |
| Linux x64 | rustrag-linux-x64.tar.gz |
| Linux ARM64 | rustrag-linux-arm64.tar.gz |
安装步骤:
视窗
# Extract to a permanent directory
Expand-Archive rustrag-windows-x64.zip -DestinationPath "$env:LOCALAPPDATA\RustRAG"⚠️ 重要:保持rustrag.exe与随附目录位于同一目录中.dll文件(例如。,onnxruntime.dll).做 不 单独移动exe——ONNX运行时库必须保留在它旁边。
macOS
mkdir -p ~/rustrag && tar xzf rustrag-macos-apple-silicon.tar.gz -C ~/rustrag
chmod +x ~/rustrag/rustragLinux
mkdir -p ~/rustrag && tar xzf rustrag-linux-x64.tar.gz -C ~/rustrag
chmod +x ~/rustrag/rustrag提取后,使用 绝对路径 到 rustrag 配置IDE MCP设置时使用二进制。
或者,您可以从源代码构建:
# Clone and build
git clone https://github.com/Michaol/RustRAG.git
cd RustRAG
cargo build --release2.配置
创建一个 config.json 在项目根目录中(首次运行时自动生成默认值):
{
"document_patterns": ["./"],
"exclude_patterns": ["**/node_modules/**", "**/target/**", "**/.git/**"],
"file_extensions": [
"md", "rs", "go", "py", "js", "ts", "jsx", "tsx",
"txt", "log",
"json", "yaml", "yml", "toml", "csv",
"html", "htm",
"pdf", "docx", "xls", "xlsx", "xlsb", "ods"
],
"db_path": "./vectors.db",
"chunk_size": 500,
"search_top_k": 5,
"compute": {
"device": "auto",
"fallback_to_cpu": true
},
"model": {
"name": "multilingual-e5-small",
"dimensions": 384,
"batch_size": 32
}
}3.添加到MCP客户端
反重力IDE
添加到您的 mcp_config.json (设置→ MCP服务器):
{
"mcpServers": {
"rustrag": {
"command": "path/to/rustrag",
"args": ["--config", "path/to/config.json"]
}
}
}克劳德桌面/光标
添加到MCP客户端配置文件:
{
"mcpServers": {
"rustrag": {
"command": "path/to/rustrag",
"args": ["--config", "path/to/config.json"]
}
}
}🌩️ 高级:远程安装、本地调用(SSH模式)
如果您的大量代码库、开发环境和模型权重驻留在远程高性能服务器(或本地NAS)上,而您在轻量级笔记本电脑上编码,则可以远程安装RustRAG 通过SSH无缝挂载由于MCP使用标准流(stdio),SSH可以轻松地将其传输到本地IDE!
身份验证要求(重要): MCP客户端(如Cursor或Claude Desktop)在后台静默运行进程 无法提示您输入密码因此,必须配置非交互式登录:
- 🔑 选项1:SSH密钥(强烈推荐,本机跨平台)
在本地计算机上生成密钥对(ssh-keygen -t ed25519)并将其推到遥控器上(ssh-copy-id user@ip)用于安全、无密码的安装。本机适用于Windows、macOS和Linux。
- 🔓 选项2:
sshpass(基于密码,仅限Linux/macOS)
如果必须使用密码,请替换 command 和 sshpass (例如。, args: ["-p", "YOUR_PASSWORD", "ssh", "user@ip", ...]). 备注: sshpass 在Linux和macOS上很容易获得(通过 brew install sshpass),但在Windows上本机安装极其困难。Windows用户应严格遵守选项1。
配置示例(本机SSH设置):
{
"mcpServers": {
"rustrag-remote": {
"command": "ssh",
"args": [
"user@remote.server.ip", // Replace with your remote host
"/absolute/path/to/rustrag", // Remote path to rustrag binary
"--config",
"/remote/project/config.json" // Remote path to config
]
}
}
}此设置使您的本地AI助手能够即时洞察数百万行远程代码,而您的本地计算机上的CPU或内存占用绝对为零。
💻 高级:解锁本地GPU加速(CUDA/TensorRT)
为了尽量减少存储库占用空间,并确保任何平台(特别是苹果Silicon Mac或没有独立GPU的笔记本电脑)上所有用户的开箱即用兼容性,RustRAG默认为轻量级 仅CPU模式 (fallback_to_cpu: true).但是,如果您拥有专用的NVIDIA GPU(例如RTX 30/40系列)并希望获得微秒级的矢量搜索吞吐量,则可以轻松解锁TensorRT/CUDA加速:
- 下载官方GPU运行库
导航到 ONNX Runtime v1.25.1发布页面 并下载相应的操作系统GPU包(约300+MB):
- 窗户: 下载
onnxruntime-win-x64-gpu-1.25.1.zip - Linux: 下载
onnxruntime-linux-x64-gpu-1.25.1.tgz - macOS: Apple Silicon Mac在CPU上运行速度很快,支持CoreML。请勿下载英伟达软件包。
- 设置动态库
提取存档并删除所有 .dll (适用于Windows)或 .so (对于Linux)文件(例如。, onnxruntime.dll, libonnxruntime_providers_cuda.so)确切地说 进入您的同一目录 rustrag 后端可执行二进制文件.
- 启用自动检测
打开项目配置(config.json)并确保:
"compute": {
"device": "auto", // <-- Will auto-seek TensorRT, then CUDA, DML/CoreML, etc.
"fallback_to_cpu": true // <-- Safety net to quietly fallback to CPU if GPU dlls are missing
}如果满足要求,启动时MCP日志将自信地宣布 🚀 ONNX Execution Provider Activated: [TensorRT] 或 [CUDA]. 此配置完全与您的执行文件夹隔离;它永远不会污染核心项目存储库!
CLI选项
| 标志 | 默认值 | 描述 |
|---|---|---|
--config, -c | config.json | 配置文件的路径 |
--log-level | info | 日志级别(跟踪/调试/信息/警告/错误) |
--skip-download | false | 跳过自动模型下载 |
--skip-sync | false | 跳过初始文档同步 |
--transport | stdio | 运输方式: stdio 或 http |
--port | 8765 | HTTP端口(用于传输=http) |
--version | -- | 显示版本并退出 |
MCP工具
| 工具 | 说明 |
|---|---|
search | 使用可选目录/文件名过滤器的自然语言矢量搜索 |
index | 使用逻辑AST分块和抽象对标记或代码文件进行索引 |
manage_document | 从索引中删除文档或强制重新索引现有文档 |
list_documents | 列出所有索引文档 |
frontmatter | 将YAML frontmatter元数据添加或更新到markdown文件 |
search_relations | 搜索代码关系(调用、导入、继承) |
build_dictionary | 提取CJK↔来自代码的英文术语映射 |
建筑
src/
├── lib.rs # Module exports
├── main.rs # CLI + startup sequence
├── config.rs # Configuration loading/validation
├── frontmatter.rs # YAML frontmatter operations
├── updater.rs # Version update checker (GitHub API)
├── db/ # SQLite + sqlite-vec vector database
│ ├── mod.rs # Schema + connection management
│ ├── models.rs # Data models
│ ├── documents.rs # Document CRUD operations
│ ├── search.rs # Vector similarity search
│ └── relations.rs # Code relationship queries
├── embedder/ # Text embedding engine
│ ├── mod.rs # Embedder trait
│ ├── onnx.rs # ONNX Runtime inference
│ ├── mock.rs # Mock embedder (testing)
│ ├── tokenizer.rs # BERT tokenizer wrapper
│ └── download.rs # Model auto-download
├── indexer/ # Document & code indexing
│ ├── core.rs # Differential sync engine
│ ├── markdown.rs # Markdown chunking
│ ├── text_parser.rs # Multi-format document extraction (PDF, DOCX, XLSX, etc.)
│ ├── code_parser.rs # Tree-sitter code parsing
│ ├── relations.rs # Code relationship extraction
│ ├── dictionary.rs # Multilingual dictionary
│ └── languages.rs # Language-specific TS queries
└── mcp/ # MCP protocol layer
├── server.rs # Server setup (stdio + HTTP transport)
└── tools.rs # 7 tool handler implementations支持的语言
| 语言 | 扩展 | 解析器 |
|---|---|---|
| 生锈 | .rs | 树锈 |
| 去吧 | .go | 树保姆走 |
python .py | 树栖蟒蛇 | |
| TypeScript | .ts .tsx | 树型字体 |
| JavaScript | .js .jsx | 树型javascript |
| Markdown | .md | 下拉cmark |
支持的文档格式
| 格式 | 扩展名 | 分析器/库 |
|---|---|---|
| 纯文本 | .txt, .log | fs::read_to_string |
| JSON | .json | serde_json |
| YAML | .yaml, .yml | serde_yaml |
| 汤姆 | .toml | toml |
| CSV | .csv | csv |
| HTML | .html, .htm | scraper |
.pdf | lopdf | |
| Word | .docx | docx-rs |
| 电子表格 | .xls, .xlsx, .xlsb, .ods | calamine |
从源头构建
先决条件: 锈蚀1.85+
cargo build --release二进制文件将位于 target/release/rustrag (或 rustrag.exe 在Windows上)。
测试
# Run all tests
cargo test --all
# Run integration tests only
cargo test --test integration_test
# Lint
cargo clippy -- -D warnings许可证
根据以下任一方式获得许可
由您选择。
