使用说明
代码rag mcp
代码rag mcp 是为代码库设计的检索增强生成(RAG)MCP服务器。它使用FastAPI为基于LLM的编码助手(如Copilot)提供可扩展的、上下文感知的后端,使他们能够在创建新功能时搜索现有方法并有效地重用代码。
特性
- 代码库解析:使用以下命令自动解析代码库中支持的文件,以提取有意义的代码块(函数/类) 树保姆.
- 块状储存:将解析后的代码块与元数据一起存储在MongoDB中,以实现高效检索。
- 矢量嵌入和FAISS索引:将代码块转换为向量嵌入,并将其存储在FAISS索引中,以进行快速相似性搜索。
- API终点:FastAPI路由解析代码库、检索代码块、管理向量和启用语义代码搜索。
- 上下文代码搜索:LLM可以查询相似的代码块,以提高可重用性和可维护性,从而提高功能开发速度。
架构概述
1.代码库解析
- 支持的文件类型:
.py,.cpp,.java,.js,.csv,.json - 解析器:
CodeBaseParser遍历代码库目录,使用FileParser支持语言的树型语法。 - 块状物提取:表示函数或类的AST节点被提取为“块”,保留代码、类型、名称、文件路径和位置。
2.块状物储存
- MongoDB:块通过以下方式插入到MongoDB集合中
TreeSitterChunksDAO,支持高效的检索和CRUD操作。
3.矢量嵌入和FAISS商店
- 嵌入:使用可配置模型(默认值:
all-MiniLM-L6-v2)将代码块编码为嵌入。 - Faiss索引:
VectorStore管理FAISS HNSW索引,以便在代码嵌入上快速搜索内积。索引被持久化到磁盘(app/rag/faiss/data/code_index.faiss). - 批处理:块被嵌入并批量添加到FAISS中,以实现可扩展性。
4.API终点
- /解析:解析代码库并存储块。
- /按文件名获取块:检索指定文件的所有块。
- /按文件名删除块 和 /删除所有块:管理块存储。
- /创建向量:为存储的块创建向量嵌入。
- /搜索向量:按语义相似性搜索相似的代码块。
- /删除所有向量:重置FAISS指数。
5.FastAPI应用程序
- 中间件和CORS:支持CORS和定时中间件进行性能记录。
- 后台作业:将APScheduler用于周期性任务(例如刷新向量)。
- 模块化:所有路线都使用APIRouter进行组织,以实现干净的集成。
运作原理
- 解析代码库:邮寄至
/parse扫描代码库并提取代码块。 - 创建嵌入:邮寄至
/create-vectors嵌入所有块并在FAISS中对其进行索引。 - 语义搜索:邮寄至
/search-vectors检索类似于查询或功能请求的现有代码。 - 重用代码:该系统提供可重用的方法/类,提高了Copilot和其他LLM代理的生产力。
文件夹结构
app/core/CodeBaseParser.py:代码库遍历和块提取。app/helpers/file_parser.py:特定语言的解析和AST分块。app/db/tree_sitter_chunks_DAO.py:MongoDB块管理。app/rag/vector_embedding.py:嵌入和FAISS索引管理。app/rag/faiss/vector_store.py:FAISS矢量存储实现。app/api/routes/parse_codebase.py,app/api/routes/rag_api.py:FastAPI端点。
配置
- config.py:更改应用程序设置、MongoDB URI、接受的文件类型、嵌入模型和FAISS索引路径。
用法
运行FastAPI服务器,并通过记录的API端点进行交互,以解析代码库、管理向量,并启用LLM代理的上下文感知代码搜索。
许可证:Apache许可证2.0–请参阅 许可证 了解详情。