使用说明
RAG项目-用于代码理解的MCP服务器
一种基于Rust的模型上下文协议(MCP)服务器,为AI助手提供强大的RAG(检索增强生成)功能,用于理解海量代码库。
概述
此MCP服务器使AI助手能够通过以下方式高效搜索和理解大型项目:
- 创建代码文件的语义嵌入
- 将它们存储在本地矢量数据库中
- 提供快速语义搜索功能
- 支持增量更新以提高效率
特性
- 本地优先:所有处理都使用fastembed-rs在本地进行(不需要API密钥)
- 混合搜索:使用往复式秩融合(RRF)将向量相似性与BM25关键字匹配相结合,以获得最佳结果
- 基于AST的分块:使用Tree sitter为12种语言提取语义单元(函数、类、方法)
- 全面的文件支持:索引40多种文件类型,包括代码、文档(带PDF)→Markdown转换)和配置文件
- Git历史搜索:使用智能按需索引搜索提交历史记录(默认值:10次提交,仅根据需要进行更深入的索引)
- 多项目支持:通过项目筛选同时索引和查询多个代码库
- 智能索引:自动为新代码库执行完整索引,或为以前索引的代码库执行增量更新
- 跨进程锁定:基于文件系统的锁可防止多个进程(例如多个Claude Code会话)同时对同一代码库进行索引
- 并发访问保护:安全锁管理可防止多个代理尝试同时索引时索引损坏
- 稳定的嵌入式数据库:LanceDB矢量数据库(默认,无外部依赖),具有可选的Qdrant支持
- 语言检测:自动检测40多种文件类型(编程语言、文档格式和配置文件)
- 高级过滤:按文件类型、语言或路径模式搜索
- 尊敬的吉吉尼奥尔:在索引过程中自动排除忽略的文件
- 代码导航:查找定义、引用和调用图(轻量级LSP类功能)
- 自适应搜索阈值:未找到结果时自动降低相似性阈值(0.7→0.6→0.5→0.4→0.3)
- Slash命令:通过MCP Prompts提供9个方便的斜线命令
MCP Slash命令
服务器提供了9个斜线命令,用于在Claude Code中快速访问:
/project:index-索引代码库目录(自动执行完整或增量)/project:query-搜索索引代码库/project:stats-获取索引统计信息/project:clear-清除所有索引数据/project:search-使用过滤器进行高级搜索/project:git-search-使用按需索引搜索git提交历史记录/project:definition-查找符号的定义位置(类似LSP)/project:references-查找对某个符号的所有引用/project:callgraph-获取函数的调用图(调用者/被调用者)
看 slash-commands.md 详细用法。
支持的文件类型
Project RAG自动索引和搜索 40+文件类型 分为三类:
编程语言(24种语言)
支持这些语言的基于AST的语义分块:
- 锈 (
.rs) - python (
.py) - JavaScript (
.js,.mjs,.cjs), TypeScript (.ts), JSX (.jsx), 多伦多证券交易所 (.tsx) - 去 (
.go) - Java (
.java) - C (
.c), C (.cpp,.cc,.cxx), C/C++头文件 (.h,.hpp) - C (
.cs) - 迅速 (
.swift) - Kotlin (
.kt,.kts) - Scala (
.scala) - 红宝石 (
.rb) - PHP (
.php) - 外壳 (
.sh,.bash) - 结构化查询语言 (
.sql) - 超文本标记语言 (
.html,.htm) - 层叠样式表 (
.css), SCSS (.scss,.sass)
文档格式(8种格式)
对丰富内容进行特殊处理:
- 标记语言 (
.md,.markdown) - PDF (
.pdf) - 自动转换为Markdown 有桌子保护 - 重新结构化文本 (
.rst) - AsciiDoc (
.adoc,.asciidoc) - 组织模式 (
.org) - 纯文本 (
.txt) - 日志文件 (
.log)
PDF转换功能:
- 使用提取文本内容
pdf-extract图书馆 - 自动转换为Markdown格式
- 蜜饯 表格结构 (检测制表符/空格分隔的列)
- 检测和格式化 标题 (所有大写线条和剖面标记)
- 智能处理多列布局
- 与任何其他文本文件一样的块(默认情况下每个块50行)
配置文件(8种格式)
为了全面了解项目:
- JSON (
.json) - YAML (
.yaml,.yml) - 汤姆 (
.toml) - 可扩展标记语言 (
.xml) - INI (
.ini) - 配置文件 (
.conf,.config,.cfg) - 属性 (
.properties) - 环境 (
.env)
示例用例
# Index documentation PDFs in your project
query_codebase("API authentication flow") # Finds content in .pdf, .md, .rst files
# Search configuration files
query_codebase("database connection string") # Finds .yaml, .toml, .env, .conf files
# Find code implementations
search_by_filters(query="JWT validation", file_extensions=["rs", "go"])
MCP工具
服务器提供了9个可以直接使用的工具:
-
指数_贬值 -智能地索引代码库目录
- 自动为新代码库执行完整索引
- 自动对以前索引的代码库执行增量更新
- 尊重、尊重和排除模式
- 返回模式信息(完整或增量)
-
查询_降级 -跨索引代码的混合语义+关键字搜索
- 将向量相似性与BM25关键字匹配相结合(默认启用)
- 返回包含向量和关键字分数的相关代码块
- 可配置的结果限制和分数阈值
- 多项目设置的可选项目筛选
-
get_统计 -获取索引代码库的统计信息
- 文件计数、块计数、嵌入计数
- 语言细分
-
clear_index -清除所有索引数据
- 删除整个矢量数据库集合
- 为新索引做准备
-
search_by_filters -带过滤器的高级混合搜索
- 始终使用混合搜索以获得最佳结果
- 按文件扩展名过滤(例如,[“rs”,“toml”])
- 按编程语言筛选
- 按路径模式过滤
- 可选项目筛选
-
search_git_历史 -使用语义搜索搜索git提交历史
- 按需自动索引提交(默认:10次提交,可配置)
- 搜索提交消息、差异、作者信息和更改的文件
- 智能缓存:只根据需要索引新的提交
- 按作者姓名/电子邮件和文件路径过滤正则表达式
- 日期范围过滤(ISO 8601或Unix时间戳)
- 分行选择支持
-
find_definition -查找符号的定义位置(类似LSP)
- 指定文件路径、行号和列
- 返回包含符号元数据的定义位置
- 使用混合方法:高精度堆栈图(Python、TypeScript、Java、Ruby)或基于AST的RepoMap回退
- 报告结果的精度水平
-
查找引用 -查找对某个符号的所有引用
- 指定文件路径、行号和列
- 返回使用该符号的所有位置
- 对引用类型进行分类:调用、读取、写入、导入、类型引用、继承、实例化
- 可选:在结果中包含定义站点
-
get_call_graph -获取函数的调用图
- 为函数指定文件路径、行号和列
- 返回调用者(调用此函数的内容)和被调用者(此函数调用的内容)
- 可配置的遍历深度(默认值:1级)
- 有助于理解代码流和影响分析
先决条件
- 锈:1.88+支持Rust 2024版本
- protobuf编译器:建筑所需(通过安装
sudo apt-get install protobuf-compiler在Ubuntu/Debian上)
矢量数据库选项
LanceDB(默认-嵌入式,稳定)
无需额外设置!LanceDB是一个直接在应用程序中运行的嵌入式矢量数据库。它将数据存储在 ./.lancedb 默认情况下为目录。
为什么LanceDB是默认设置:
- 嵌入式 -无需外部依赖或服务器
- 稳定 -ACID交易证明了生产
- 丰富 -完整的SQL类过滤功能
- 内置混合搜索 -具有互易秩融合的Tantivy BM25+LanceDB向量
- 柱状存储器 -使用Apache Arrow高效处理大型数据集
- 零拷贝 -用于快速查询的内存映射文件
Qdrant(可选-基于服务器)
要使用Qdrant而不是LanceDB,请使用 qdrant-backend 特点:
cargo build --release --no-default-features --features qdrant-backend
然后启动Qdrant实例:
使用Docker(推荐):
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_data:/qdrant/storage \
qdrant/qdrant
使用Docker Compose:
version: '3.8'
services:
qdrant:
image: qdrant/qdrant
ports:
- "6333:6333"
- "6334:6334"
volumes:
- ./qdrant_data:/qdrant/storage
或者单独下载: https://qdrant.tech/documentation/guides/installation/
安装
# Navigate to the project
cd project-rag
# Install protobuf compiler (Ubuntu/Debian)
sudo apt-get install protobuf-compiler
# Build the release binary (with default LanceDB backend - stable and embedded!)
cargo build --release
# Or build with Qdrant backend (requires external server)
cargo build --release --no-default-features --features qdrant-backend
# The binary will be at target/release/project-rag
用法
作为MCP服务器运行
服务器通过stdio按照MCP协议进行通信:
./target/release/project-rag
在Claude代码中配置
使用CLI将MCP服务器添加到Claude Code:
# Navigate to the project directory first
cd /path/to/project-rag
# Add the MCP server to Claude Code
claude mcp add project --command "$(pwd)/target/release/project-rag"
# Or with logging enabled
claude mcp add project --command "$(pwd)/target/release/project-rag" --env RUST_LOG=info
添加后,重新启动Claude Code以加载服务器。斜线命令(/project:index, /project:query等等)将立即可用。
在Claude Desktop中配置
添加到您的Claude Desktop配置中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"project-rag": {
"command": "/absolute/path/to/project-rag/target/release/project-rag",
"env": {
"RUST_LOG": "info"
}
}
}
}
备注:Claude Code和Claude Desktop是不同的产品,具有不同的配置方法。
工具使用示例
索引代码库:
{
"path": "/path/to/your/project",
"include_patterns": ["**/*.rs", "**/*.toml"],
"exclude_patterns": ["**/target/**", "**/node_modules/**"],
"max_file_size": 1048576
}
查询代码库:
{
"query": "How does authentication work?",
"limit": 10,
"min_score": 0.7
}
高级筛选搜索:
{
"query": "database connection pool",
"limit": 5,
"min_score": 0.75,
"file_extensions": ["rs"],
"languages": ["Rust"],
"path_patterns": ["src/db"]
}
索引(或重新索引)代码库:
{
"path": "/path/to/your/project",
"include_patterns": [],
"exclude_patterns": []
}
注意:这会自动为新代码库执行完整索引,或为以前索引的代码库执行增量更新。
查找符号的定义:
{
"file_path": "/path/to/your/project/src/main.rs",
"line": 42,
"column": 10
}
查找对符号的所有引用:
{
"file_path": "/path/to/your/project/src/lib.rs",
"line": 15,
"column": 8,
"include_definition": false
}
获取函数的调用图:
{
"file_path": "/path/to/your/project/src/api.rs",
"line": 100,
"column": 4,
"depth": 2
}
建筑
project-rag/
├── src/
│ ├── bm25_search.rs # Tantivy BM25 keyword search with RRF fusion
│ ├── client/ # High-level client API
│ │ ├── mod.rs # RagClient - unified interface for all operations
│ │ └── indexing/ # Indexing pipeline with progress reporting
│ ├── embedding/ # FastEmbed integration for local embeddings
│ │ ├── mod.rs # EmbeddingProvider trait
│ │ └── fastembed_manager.rs # all-MiniLM-L6-v2 implementation
│ ├── vector_db/ # Vector database implementations
│ │ ├── mod.rs # VectorDatabase trait
│ │ ├── lance_client.rs # LanceDB + Tantivy hybrid search (default)
│ │ └── qdrant_client.rs # Qdrant implementation (optional)
│ ├── indexer/ # File walking and code chunking
│ │ ├── mod.rs # Module exports
│ │ ├── file_walker.rs # Directory traversal with .gitignore + 40+ file types
│ │ ├── chunker.rs # Chunking strategies (AST-based, fixed-lines, sliding window)
│ │ ├── ast_parser.rs # Tree-sitter AST parsing for 12 languages
│ │ └── pdf_extractor.rs # PDF to Markdown converter with table support
│ ├── relations/ # Code relationship analysis (LSP-like features)
│ │ ├── mod.rs # RelationsProvider trait, HybridRelationsProvider
│ │ ├── types.rs # SymbolId, Definition, Reference, CallEdge types
│ │ ├── repomap/ # AST-based symbol extraction (fallback provider)
│ │ │ ├── mod.rs # RepoMapProvider
│ │ │ ├── symbol_extractor.rs # Extract definitions from AST
│ │ │ └── reference_finder.rs # Find references via identifier matching
│ │ ├── storage/ # Relations storage layer
│ │ │ ├── mod.rs # RelationsStore trait
│ │ │ └── lance_store.rs # LanceDB storage (placeholder)
│ │ └── stack_graphs/ # Optional: High-precision name resolution
│ │ └── mod.rs # StackGraphsProvider (feature-gated)
│ ├── mcp_server.rs # MCP server with 9 tools
│ ├── types/ # Request/Response types with JSON schema
│ │ └── mod.rs # All MCP request/response types
│ ├── main.rs # Binary entry point with stdio transport
│ └── lib.rs # Library root
├── Cargo.toml # Rust 2024 edition with dependencies
├── README.md # This file
├── CONTRIBUTING.md # Contributor guidelines
├── TESTING.md # Testing guide
└── CLAUDE.md # AI assistant instructions
配置
环境变量
RUST_LOG-设置日志记录级别(选项:error,warn,info,debug,trace)- 例子:
RUST_LOG=debug cargo run
- 例子:
Qdrant配置
- 目前硬编码为
http://localhost:6334 - 未来:添加配置文件支持
嵌入模型
- 违约:
all-MiniLM-L6-v2(384个维度) - 首次运行下载模型(~50MB)到缓存
分块策略
- 默认:基于混合AST,可回退到固定线路
- AST解析:提取Rust、Python、JavaScript、TypeScript、Go、Java、Swift、C、C++、C#、Ruby、PHP的语义单元(函数、类、方法)
- 后备方案:对于不支持的语言,每个块50行
- 替代:可配置重叠的滑动窗口
技术细节
嵌入
- 模型:全MiniLM-L6-v2(句子转换)
- 维度: 384
- 图书馆:带ONNX运行时的fastembed rs
- 演出:约500次嵌入/秒
向量数据库
- 发动机:Qdrant
- 距离度量:余弦相似性
- 索引:HNSW用于快速近似最近邻搜索
- 有效载荷:存储文件路径、项目、行号、语言、哈希、时间戳、内容
混合搜索
- 向量相似性:通过嵌入进行语义理解(LanceDB或Qdrant)
- 关键词匹配:通过Tantivy倒排索引进行全文BM25搜索
- 融合算法:k=60常数的互易秩融合(RRF)
- BM25参数:使用Tantivy优化的BM25实现
- 排名:RRF使用1/(k+排名)公式组合两个排名
- 演出:并行查询两个索引以获得快速结果
自适应阈值逻辑
两者 query_codebase 和 search_by_filters 工具实现了智能自适应阈值降低:
它是如何工作的:
- 初始搜索使用所请求的
min_score阈值(默认值:0.7) - 如果未找到结果且阈值>0.3,则自动以较低的阈值重试
- 按顺序尝试的回退阈值:0.6→ 0.5 → 0.4 → 0.3
- 响应包括
threshold_used和threshold_lowered透明度字段
优点:
- 防止语义相似度低于预期时出现空结果
- 尽可能选择更高的阈值来保持搜索质量
- 透明:您始终知道实际使用的阈值
示例响应:
{
"results": [...],
"duration_ms": 45,
"threshold_used": 0.4,
"threshold_lowered": true
}
轻量级LSP功能
Project RAG提供了类似于语言服务器协议(LSP)实现的代码导航功能,但针对语义搜索用例进行了优化:
查找定义 (find_definition):
- 定位定义符号(函数、类、变量)的位置
- 使用混合方法:Python、TypeScript、Java、Ruby的高精度堆栈图
- 对所有其他语言回归到基于AST的RepoMap分析
- 报告结果中的精度级别(高、中、低)
查找引用 (find_references):
- 查找整个代码库中使用符号的所有位置
- 对引用类型进行分类:调用、读取、写入、导入、类型引用、继承、实例化
- 有助于理解代码是如何连接的
- 包含/排除定义站点的选项
获取调用图 (get_call_graph):
- 分析函数调用关系
- 显示调用者(调用此函数的内容)和被调用者(此函数调用的内容)
- 多级分析的可配置遍历深度
- 非常适合影响分析和理解代码流
架构:
RelationsProvider (trait)
├── StackGraphsProvider (high precision: ~95%)
│ └── Supports: Python, TypeScript, Java, Ruby
└── RepoMapProvider (fallback: ~70% precision)
└── Supports: All tree-sitter languages (12+)
何时使用:
- 查找定义“这个功能在哪里定义?”
- 查找引用:“从哪里调用此函数?”
- 获取调用图:“此代码依赖于哪些功能?”
跨进程锁定
RAG项目使用 双层锁闭系统 为了防止多个进程同时对同一代码库进行索引:
第1层:文件系统锁(跨进程)
- 用途
flock()操作系统级独占锁的系统调用 - 锁定存储在中的文件
~/.local/share/project-rag/locks/(或brainwires/locks/) - 进程退出时自动释放(即使在崩溃时)
- 防止多个克劳德代码会话用重复索引攻击CPU
第2层:内存锁(进程中)
- 广播通道允许等待任务接收结果
- 防止同一流程中的重复工作
工作原理:
Process A (Claude Session 1) Process B (Claude Session 2)
───────────────────────────── ─────────────────────────────
index_codebase("/project") index_codebase("/project")
│ │
▼ ▼
Acquire filesystem lock Try filesystem lock
│ │
▼ ▼
ACQUIRED BLOCKED (waits)
│ │
▼ │
Do full indexing... │
│ │
▼ │
Release lock ──────────────────────────────────►│
▼
Lock acquired
│
▼
Return (index is current)
优点:
- 在多个Claude Code会话中没有重复的CPU工作
- 并发写入不会导致数据库损坏
- 进程崩溃时自动清理(操作系统发布羊群)
- 索引完成后,等待过程立即得到响应
BM25索引锁安全
BM25(Tantivy)索引使用额外的基于文件的锁来防止并发写入:
死锁检测:
- 检查锁文件是否过期(超过5分钟)
- 使用文件修改时间戳来检测崩溃的进程
- 新鲜锁(<5分钟)被视为有效
自动恢复:
- 当索引失败并出现锁错误时,系统会检查锁是否过期
- 陈旧的锁 (来自崩溃):自动清理并索引重试
- 主动锁 (来自正在运行的代理):返回明确的错误消息,要求等待
错误消息:
- 检测到活动索引:
"BM25 index is currently being used by another process. Please wait and try again later." - 清除过期锁:自动记录警告和重试
螺纹安全:
- 进程内同步:Mutex可防止同一进程内的并发写入程序
- 跨进程安全:基于文件的锁可防止跨不同进程的并发写入
- 读取操作始终是安全的,从未被阻止
最佳实践:
- 如果您看到“当前正在使用”错误,请等待其他索引操作完成
- 索引操作通常在几秒钟到几分钟内完成,具体取决于代码库的大小
- 多个代理可以同时安全地执行搜索操作(读取永远不会被锁定)
代码分块
- 默认:基于AST的混合分块
- AST支持:Rust、Python、JavaScript、TypeScript、Go、Java、Swift、C、C++、C#、Ruby、PHP
- 后备方案:对于不支持的语言,每个块50行
- 元数据:跟踪开始/结束行、语言、文件哈希、项目
文件处理
- 二进制检测:30%不可打印字节阈值(专门处理PDF)
- 语言检测:支持40多种文件类型(代码、文档、配置)
- PDF处理:自动文本提取和Markdown转换,并保留表格
- 哈希算法:SHA256用于更改检测(适用于所有文件类型,包括PDF)
- .gitignore支持:用途
ignore板条箱
发展
运行测试
# Run all unit tests (413 tests with ~94% coverage)
cargo test --lib
# Run specific module tests
cargo test --lib types::tests
cargo test --lib chunker::tests
cargo test --lib pdf_extractor::tests # PDF to Markdown conversion tests
cargo test --lib bm25_search::tests # Includes concurrent access & lock safety tests
cargo test --lib config::tests # Includes validation & env override tests
cargo test --lib indexing::tests # Includes error path & edge case tests
# Run with output
cargo test --lib -- --nocapture
# Run with code coverage
cargo llvm-cov --lib --html
# Open target/llvm-cov/html/index.html to view coverage report
建筑
# Debug build
cargo build
# Release build (optimized)
cargo build --release
# Check without building
cargo check
代码质量
# Format code
cargo fmt
# Lint with clippy
cargo clippy
# Fix clippy warnings
cargo clippy --fix
调试
# Run with debug logging
RUST_LOG=debug cargo run
# Run with trace logging
RUST_LOG=trace cargo run
演出
基准(典型硬件)
-
索引速度:约1000个文件/分钟
- 取决于文件大小和复杂性
- 包括文件I/O、哈希、分块、嵌入生成
-
搜索延迟:每次查询20-30ms
- HNSW指数召回率约为95%
- 大多数查询为50毫秒以下
-
内存使用:
- 基座:~100MB
- 嵌入模型:~50MB
- 每10k块:~40MB(嵌入+元数据)
-
存储:
- 嵌入:每个块约1.5KB(384个浮点数)
- 典型项目(1000个文件):Qdrant中约75MB
优化提示
- 调整块大小:较小的块=更精确但索引速度较慢
- 使用过滤器:按语言/扩展名进行预筛选,以加快搜索速度
- 批量处理:对于大多数系统,默认每批32个块是最佳选择
- 增量更新:在初始索引后使用以节省时间
当前状态
✅ 生产准备就绪-100%完成
- 模块化设计的核心架构
- 所有9个MCP工具均已实施并正常工作
- 已执行所有9个MCP斜线命令
- 混合搜索 -矢量相似性+带IDF的完整BM25
- 基于AST的分块 -12种语言的语义代码提取
- 代码导航 -查找定义、引用和调用图(类似LSP)
- 多项目支持 -索引和查询多个代码库
- 持久哈希缓存 -跨重启快速增量更新
- 并发访问保护 -智能锁管理可防止索引损坏
- FastEmbed集成用于本地嵌入
- Qdrant矢量数据库集成
- 使用.gitignore支持进行文件行走
- 语言检测(40+文件类型:代码、文档、配置)
- PDF到Markdown转换,保留表格
- 基于SHA256的变化检测
- 413个单元测试通过(包括关系、PDF提取、BM25/RRF、自适应阈值、跨进程锁定和锁定安全测试)
- 全面的文件
- 启用了完整的MCP提示支持
- 基于RRF的Tantivy BM25+LanceDB矢量混合搜索
- 混合关系提供商 -Python/TS/Java/Ruby的堆栈图,所有语言的RepoMap回退
📋 已知限制
-
Qdrant API变更
- 需要构建器模式(UppersBuilder、SearchPointsBuilder等)
- 所有建设者都正确实施
-
快速嵌入可变性
- 对可变模型访问使用不安全的解决方法
- 工作正常,但应重构为使用Arc<Mutex<>>
-
异步特性警告
- 9个无害的警告
async fn公共特征 - 外观问题,不影响功能
- 9个无害的警告
局限性
当前限制
-
Qdrant后端:使用Qdrant后端功能时需要外部Qdrant服务器
- 默认LanceDB后端完全嵌入,没有外部依赖关系
-
型号下载:首次运行下载~50MB型号
- 未来:在二进制文件中包含模型或提供离线安装程序
-
路径筛选:当前查询后过滤(未优化)
- 未来:为路径模式添加Qdrant有效载荷索引
-
无配置文件:所有设置都硬编码
- 未来:添加TOML/YAML配置支持
规模限制
-
大型代码库:包含100000多个文件的项目可能需要花费大量时间进行索引
- 缓解措施:使用增量更新
-
记忆:非常大的索引(1M以上的块)可能需要大量的RAM
- 典型项目(5k文件)总共使用<500MB
故障排除
索引锁定错误
错误:“BM25索引当前正被另一个进程使用”
这意味着另一个代理或进程正在进行索引。这是防止索引损坏的预期行为。
解决:
- 等待:让当前索引操作完成(通常为几秒到几分钟)
- 检查流程:验证没有其他克劳德代码/桌面实例正在运行索引操作
- 强制清理 (最后手段):如果您确定没有其他进程正在运行,请手动删除过时的锁:
rm ~/.local/share/project-rag/lancedb/lancedb_bm25/.tantivy-*.lock
注: 系统会自动检测并清理崩溃进程中的过期锁(>5分钟)。你应该很少需要人工干预。
Qdrant连接失败
# Check if Qdrant is running
curl http://localhost:6334/health
# View Qdrant logs
docker logs <container-id>
模型下载失败
# Pre-download model
python -c "from fastembed import TextEmbedding; TextEmbedding()"
# Or set HuggingFace mirror
export HF_ENDPOINT=https://hf-mirror.com
内存不足
# Reduce batch size (edit source)
# Or index in smaller chunks
# Or use smaller embedding model
索引速度慢
# Check disk I/O
# Reduce max_file_size
# Use exclude_patterns to skip unnecessary files
未来的增强功能
高优先级
- []添加全面的集成测试
- []配置文件支持(TOML)
- []将IDF统计数据缓存到磁盘,以加快启动速度
中优先级
- []嵌入式矢量数据库选项(无外部依赖)
- []支持更多嵌入模型
- []性能基准和分析
- []AST支持更多语言(Kotlin、Perl、Scala等)
低优先级
- []用于测试/调试的Web UI
- []指标和监控端点
- []多语言文档
- []替代传输机制(HTTP、WebSocket)
许可证
MIT许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!请确保:
-
代码质量:
- 源文件保持在600行以下(强制)
- 代码格式为
cargo fmt - 夹棉绒通行证(
cargo clippy)
-
测试:
- 添加新功能的测试
- 现有测试通过(
cargo test) - 更新文档
-
提交:
- 清晰、描述性的提交消息
- 每次提交一个逻辑更改
- 参考问题(如适用)
支持
- 问题: https://github.com/Brainwires/project-rag/issues
- 文档:参见 docs/ 用于部署、故障排除和斜线命令
- 建筑:参见 docs/adr/ 用于架构决策记录
致谢
- rmcp:官方Rust模型上下文协议SDK
- Qdrant:高性能矢量数据库
- 快速嵌入:快速生成本地嵌入
- 克劳德:用于MCP协议和测试
建于❤️ 使用Rust 2024版本
