1 of 36

AI-ассистент на легаси-проекте

Хоть кто-то понимает, что тут происходит

Дмитрий Кожин

2 of 36

Fiji. Это где что

  • Внутренний продукт 2ГИС
  • Векторный георедактор
  • Desktop-клиент + 25 backend-сервисов
  • На бою с 2014 года
  • Солюшн на 120 проектов
  • ~15К файлов и 1.5М строк кода
  • 95% кода на С#

2

3 of 36

Рост команды

  • Было: 4 Dev + 2 QA + 1 SA + 1 Lead
  • Стало: 8 Dev + 5 QA + 2 SA + 1 Lead
  • Плюс поддержка и заказчики
  • Задач и интеграций всё больше
  • Вопросов всё больше
  • 🤯

3

4 of 36

Пусть как-то само отвечается🤖

4

5 of 36

Готовые инструменты

  • GitHub Copilot в режиме агента

– слабая индексация на большой кодовой базе

– список доступных AI-моделей ограничен

5

6 of 36

Готовые инструменты

  • GitHub Copilot в режиме агента

– слабая индексация на большой кодовой базе

– список доступных AI-моделей ограничен

  • Cursor и подобные IDE

– недоступны для рабочего кода

– нацелены на разработчиков

6

7 of 36

Что есть у нас

  • RAG (Retrieval Augmented Generation) API
  • Командный чат-бот в Mattermost
  • Код в GitLab
  • README.md с описанием проекта и его структуры
  • Summary к коду

7

8 of 36

Summary

8

9 of 36

Первый эксперимент

9

10 of 36

Генерация summary

  • Roslyn-анализатор
  • OpenAI API
  • Глоссарий
  • Работает для public классов и методов
  • Анализ изменений и перегенерация

10

11 of 36

Генерация summary

11

12 of 36

12

13 of 36

Ссылки на код

  • Преобразование XML в JSON
  • Тюнинг промпта

13

14 of 36

Пример содержимого RAG

14

15 of 36

Нужно больше контекста. Идём в GitLab

15

16 of 36

Нужно ещё больше контекста

16

17 of 36

Граф зависимостей кода

  • Строим синтаксическое дерево нашего проекта
  • Для каждого класса ищем
    • Базовые классы
    • Реализации интерфейсов
    • Статические вызовы
  • Складываем в БД пары
    • Путь до файла – Путь до файла-зависимости
  • Актуализируем раз в сутки

17

18 of 36

Граф зависимостей кода

18

19 of 36

Использование tool'ов

  • Описание солюшна
  • Описание проекта (README.md) и доступные файлы
  • Содержимое файла
  • Информация о структуре и связях объектов в БД

19

20 of 36

20

21 of 36

21

22 of 36

22

23 of 36

А можно как-то попроще?

  • Описание общей структуры всего .sln в .md файле
  • Для каждого проекта readme.md с описанием структуры проекта
  • Tool для получения списка файлов проекта и его readme.md
  • <summary>, много <summary>

23

24 of 36

24

25 of 36

25

26 of 36

Что в итоге

  • Есть чат-бот для ответов по коду
    • как работает…?
    • расскажи про…?
    • в каком классе/методе…?
  • Помогает в онбординге
  • Пользуются не только разработчики, но аналитики с менеджерами
  • Ещё и другие команды для интеграций
  • QA для генерации тест-кейсов
  • Возможности дальнейшего расширения набора инструментов

26

27 of 36

Интеграция с IDE через MCP

27

28 of 36

28

29 of 36

Что ещё умеет наш бот

  • Подготавливать релизы
  • Генерировать Release Notes
  • Описать изменения из Merge Request
  • Заводить задачи в Jira
  • Проводить ротацию дежурных

29

30 of 36

Нужно ли оно вам

30

31 of 36

Нужно ли оно вам

  • Большая кодовая база

31

32 of 36

Нужно ли оно вам

  • Большая кодовая база
  • Недостаточная или неактуальная документация

32

33 of 36

Нужно ли оно вам

  • Большая кодовая база
  • Недостаточная или неактуальная документация
  • Есть доступ к LLM

33

34 of 36

Нужно ли оно вам

  • Большая кодовая база
  • Недостаточная или неактуальная документация
  • Есть доступ к LLM
  • Есть командный чат-бот

34

35 of 36

Нужно ли оно вам

  • Большая кодовая база
  • Недостаточная или неактуальная документация
  • Есть доступ к LLM
  • Есть командный чат-бот
  • Есть немного свободного времени

35

36 of 36

Спасибо

Кожин Дмитрий

tg: dmitriykz26