一款高性能的MCP(模型上下文协议)服务器,用于语义代码搜索,采用Rust编写。
custom_extensions添加的任何扩展名详见ARCHITECTURE.md中的详细架构文档。
关键设计决策:
git clone https://github.com/faxioman/code-sage.git
cd code-sage
cargo build --release
二进制文件将在target/release/code-sage中生成。
添加到您的MCP客户端配置(例如,Claude Desktop):
{
"mcpServers": {
"code-sage": {
"command": "/path/to/code-sage",
"env": {
"EMBEDDING_PROVIDER": "openai",
"OPENAI_API_KEY": "lm-studio",
"EMBEDDING_BASE_URL": "http://localhost:1234/v1",
"EMBEDDING_MODEL": "nomic-embed-text",
"DATA_DIR": "./data"
}
}
}
}
{
以下省略...
}
{
以下省略...
}
nomic-embed-text模型ollama pull nomic-embed-text可以在env部分添加可选参数:
{
以下省略...
}
analyze_code通过分析函数、类和方法创建可搜索的索引:
{
以下省略...
}
参数:
path(必需):代码库目录的绝对路径force(可选):如果已分析过,则强制重新分析(默认:false)splitter(可选):分块策略 - "ast" 或 "langchain"(默认:"ast")custom_extensions(可选):超出默认60多种之外要分析的额外文件扩展名(例如,[".proto", ".graphql"])ignore_patterns(可选):额外的忽略模式(补充.gitignore)如何选择文件:
.gitignore、.ignore和.git/info/excludecustom_extensions添加项目特定的文件类型,这些类型不在默认范围内默认支持的扩展名(总计60多种):
示例 - 添加自定义扩展名:
{
以下省略...
}
返回值:带有成功/错误消息的JSON
find_code使用自然语言问题查找代码:
{
以下省略...
}
返回值:带有搜索结果和格式化代码片段的JSON
delete_index删除代码库的搜索索引:
{
以下省略...
}
返回值:带有确认消息的JSON
check_status检查代码分析是否完成、正在进行或失败:
{
以下省略...
}
返回值:带有状态(已分析、正在分析百分比、失败或未找到)的JSON
进度跟踪(更新于2025-11-10): 分析进度分为细粒度阶段,以便准确反馈:
这确保了平滑的进度更新,没有突然跳跃,提供了对分析过程更好的可见性。
代码文件
↓
AST解析(tree-sitter)
↓
语义块(函数、类)
↓
嵌入(OpenAI/Ollama)
↓
存储(USearch + Tantivy + Sled)
查询
↓
├─→ 向量搜索(USearch)→ 前50个结果
│
└─→ BM25搜索(Tantivy)→ 前50个结果
↓
RRF重排序(合并,k=100)
↓
最终结果(前K个)
RRF(倒数排名融合): 混合搜索使用RRF重排序来平衡来自向量和BM25搜索的结果,根据它们的排名位置而不是原始分数。这创建了一个公平且平衡的最终排名,结合了语义相关性和关键词匹配。了解更多关于RRF
RRF公式使用:score = 1/(k + rank),其中k是平滑参数(默认:100,可通过RRF_K环境变量配置)。
# 安装依赖
cargo build
# 运行测试
cargo test
# 带日志运行
RUST_LOG=debug cargo run
# 格式化代码
cargo fmt
# 静态检查
cargo clippy
该项目受到启发于:
主要差异:
MIT许可证 - 详见LICENSE
custom_extensions添加才能被分析data/文件夹以避免维度不匹配错误用❤️用Rust构建 🦀