代码检索增强生成服务

code-rag-mcp 是一个基于 FastAPI 的检索增强生成服务器,专为代码库设计,通过解析代码库、存储代码块、生成向量嵌入和提供语义搜索功能,帮助开发者高效重用代码。

  • by deepak-s-2000
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 deepak-s-2000/code-rag-mcp

使用说明

代码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进行组织,以实现干净的集成。

运作原理

  1. 解析代码库:邮寄至 /parse 扫描代码库并提取代码块。
  2. 创建嵌入:邮寄至 /create-vectors 嵌入所有块并在FAISS中对其进行索引。
  3. 语义搜索:邮寄至 /search-vectors 检索类似于查询或功能请求的现有代码。
  4. 重用代码:该系统提供可重用的方法/类,提高了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–请参阅 许可证 了解详情。