代码检索系统-MCP服务器
一个用Python构建的综合代码检索系统,将向量搜索与基于图的关系相结合,用于智能代码分析和搜索,实现为模型上下文协议(MCP)服务器。
🌟 特性
- 🔍 本地代码库分析:扫描并索引您的本地项目以进行智能搜索
- 📚 多内容支持:分析代码、文档、配置文件等
- ⚡ 语义搜索:结合向量相似性和BM25的高级混合搜索
- 🤖 MCP集成:用于无缝集成AI IDE的模型上下文协议服务器
- 🎯 多语言支持:用于JavaScript、TypeScript、Python、Go、Rust、Java、C++等的AST拆分器
- 📊 知识图谱:构建代码依赖关系图以进行影响分析
- 🗄️ Milvus矢量数据库:高性能矢量相似性搜索
- 🕸️ Neo4j图形数据库:丰富的关系建模和查询
🏗️ 建筑
该系统完全用Python构建,具有干净、模块化的架构:
核心组件
- 扫描仪:本地代码库文件系统扫描程序(
src/scanner/) - 处理器:内容分块和嵌入生成(
src/processor/) - 矢量数据库:Milvus客户端,用于快速相似性搜索(
src/query/) - 图形数据库:用于代码关系的Neo4j客户端(
src/graph/) - 嵌入服务:针对Milvus优化的OpenAI嵌入生成(
src/embedding/) - 搜索引擎:使用BM25和重新排名进行混合搜索(
src/search/) - MCP服务器:基于FastMCP的服务器,用于AI工具集成(
src/mcp/)
处理管线
- 扫描 → 发现并分类本地项目文件
- 提取 → 解析代码和文档内容
- 块 → 具有上下文保留的智能文本分割
- 嵌入 → 使用OpenAI生成语义嵌入
- 索引 → 存储在Milvus矢量数据库和Neo4j图形数据库中
- 搜索 → 混合搜索与重新排序以获得最佳结果
🚀 快速开始
先决条件
- Python 3.10+
- Docker(适用于Milvus和Neo4j)
- 用于嵌入的OpenAI API密钥
安装
- 克隆存储库:
git clone
cd code-retrieval-system- 安装依赖项:
pip install -r requirements.txt- 设置环境变量:
cp .env.example .env
# Edit .env with your OpenAI API key and database settings- 使用Docker启动数据库:
docker-compose up -d- 运行MCP服务器:
# Using stdio transport (default)
python main.py --stdio
# Using SSE transport
python main.py --sse --port 8000配置
编辑 .env 要配置的文件:
- 数据库设置:Milvus和Neo4j连接参数
- OpenAI设置:API密钥和嵌入模型
- 搜索参数:BM25权重,重新排序阈值
- 文件处理:块大小,支持的扩展
📖 MCP工具
系统提供以下MCP工具:
核心工具
index_codebase-索引代码库以进行搜索search_code-混合搜索与重新排名search_in_file-在特定文件内搜索clear_database-清除数据库中的所有数据
图形分析工具
get_function_dependencies-获取函数依赖关系图get_class_hierarchy-获取类继承层次结构get_file_structure-获取文件结构分析
系统工具
get_system_stats-获取系统统计数据和运行状况
示例用法
为代码库建立索引
# Using MCP client
result = await client.call_tool("index_codebase", {
"root_path": "/path/to/your/code",
"max_workers": 4
})搜索代码
# Using MCP client
result = await client.call_tool("search_code", {
"query": "how to implement authentication",
"top_k": 10,
"use_graph": true,
"use_reranking": true
})获取函数依赖关系
# Using MCP client
result = await client.call_tool("get_function_dependencies", {
"function_name": "user.authenticate"
})在文件中搜索
# Using MCP client
result = await client.call_tool("search_in_file", {
"file_path": "src/main.py",
"query": "database connection"
})🔧 高级配置
OpenAI嵌入
# Required for vector search
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=text-embedding-ada-002搜索参数
BM25_K1:BM25参数用于术语频率饱和(默认值:1.2)BM25_B:用于文档长度规范化的BM25参数(默认值:0.75)TOP_K_RESULTS:要返回的结果数(默认值:10)RERANK_THRESHOLD:基于图形的重新排序阈值(默认值:0.5)
🛠️ 发展
项目结构
code-retrieval-system/
├── src/
│ ├── config.py # Configuration management
│ ├── types.py # Data models and types
│ ├── scanner/ # File system scanning
│ ├── processor/ # Content processing and chunking
│ ├── query/ # Vector database (Milvus)
│ ├── graph/ # Graph database (Neo4j)
│ ├── embedding/ # OpenAI embedding service
│ ├── search/ # Search and reranking
│ ├── mcp/ # FastMCP server
│ └── utils/ # Utilities and logging
├── main.py # MCP server entry point
├── requirements.txt # Python dependencies
├── docker-compose.yml # Database setup
├── .env.example # Environment template
└── README.md # This file测试
使用以下工具运行测试:
pytest tests/代码质量
# Format code
black src/
# Lint code
flake8 src/
# Type checking
mypy src/📊 演出
该系统设计用于以下性能:
- 并行处理:多线程文件扫描和处理
- 高效索引:优化分块和OpenAI嵌入生成
- 快速搜索:使用BM25回退进行Milvus向量相似性搜索
- 图形加速:Neo4j用于关系查询
- 缓存:对频繁访问的数据进行智能缓存
🔍 搜索流程
搜索过程遵循以下复杂的流程:
- 矢量搜索:Milvus中使用OpenAI嵌入的语义相似性
- BM25搜索:基于关键字的精确匹配
- 杂交组合:两种方法的加权组合
- 图形增强:用代码关系丰富结果
- 重新排序:根据图形上下文重新排序结果
- 最终排名:产生最佳有序的结果
🤝 贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加测试
- 提交拉取请求
📄 许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
🙏 致谢
- Milvus矢量数据库功能
- Neo4j用于图形数据库功能
- OpenAI用于嵌入服务
- MCP服务器框架的FastMCP
- 各种工具和库的开源社区
