Skip to content

Repository files navigation

MCP Server for Custom Code RAG

MCP (Model Context Protocol) сервер для кастомной системы Retrieval-Augmented Generation (RAG) с индексацией кода. Позволяет искать и получать контекст из большого кодобаза с использованием векторного поиска.

Обзор

Этот проект реализует MCP сервер, который предоставляет инструменты для:

  • Поиска по кодебазе на основе векторной семантической схожести
  • Получения полного контекста конкретного файла
  • Индексации кода в локальную векторную базу данных

Особенности

  • Локальная индексация: Все данные хранятся локально в LanceDB
  • Инкрементальная индексация: Возможность обновления индекса при изменении файлов
  • MCP интеграция: Готовая интеграция с Continue и другими MCP-клиентами
  • Гибкая стратегия чанкинга: Поддержка различных подходов к разбиению кода

Лоигка индексации

Выполняет три основных шага:

  1. Чанкинг: Разбиение файлов на части подходящего размера
  2. Генерация эмбеддингов: Создание векторных представлений чанков
  3. Вставка в базу данных: Сохранение результатов в LanceDB

Стратегии чанкинга

Проект поддерживает несколько стратегий разбиения кода:

  1. Truncate: Обрезка файлов при превышении лимита (самый простой вариант)
  2. Fixed-size chunks: Разбиение на чанки фиксированного размера
  3. AST-based: Рекурсивное разбиение на основе абстрактного синтаксического дерева (требует дополнительной настройки)

Доступные инструменты MCP

search_codebase

Поиск по кодебазе с использованием векторной схожести.

Параметры:

  • query (string): Текстовый запрос для поиска
  • limit (integer, optional): Максимальное количество результатов (по умолчанию: 10)

Пример использования:

{
  "name": "search_codebase",
  "arguments": {
    "query": "как реализовать аутентификацию пользователей",
    "limit": 5
  }
}

get_file_context

Получение всех чанков из конкретного файла.

Параметры:

  • filename (string): Имя файла для получения контекста

Пример использования:

{
  "name": "get_file_context",
  "arguments": {
    "filename": "src/main/App.java"
  }
}

Форматирование результатов

Результаты поиска возвращаются в формате, удобном для использования с LLM. Это обеспечивает четкое разделение между именем файла и его содержимым.

Рекомендации по использованию

Для больших кодебаз

  1. Периодическая индексация: Запускайте индексацию регулярно (раз в день/неделю) через cron job
  2. Инкрементальное обновление: Реализуйте логику для обновления только измененных файлов
  3. Фильтрация исключений: Исключите ненужные файлы и директории из индексации (.git, node_modules, etc.)

Оптимизация производительности

  1. Кэширование моделей: Храните модели эмбеддингов локально для ускорения загрузки
  2. Разделение по репозиториям: Для множества репозиториев используйте отдельные таблицы в БД или отдельные БД
  3. Тонкая настройка параметров: Экспериментируйте с размерами чанков и контекста для вашей кодебазы

Reranking (опционально)

Для улучшения качества результатов можно добавить этап reranking:

  1. Получить 50-100 результатов из векторной базы
  2. Отранжировать их с помощью модели reranking
  3. Вернуть топ-N наиболее релевантных результатов

Вклад в проект

Внесение изменений приветствуется! Пожалуйста:

  1. Создайте issue для обсуждения крупных изменений
  2. Отправьте pull request с описанием улучшений
  3. Убедитесь, что все тесты проходят успешно

Лицензия

Этот проект распространяется под лицензией MIT. Подробнее см. файл LICENSE.

Контакты и поддержка

При возникновении проблем или вопросов:


Этот проект является кастомной реализацией Code RAG с использованием бесплатных инструментов и моделей.

About

Codebase RAG

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages