Революция в статическом анализе кода: новый подход к пониманию кодовой базы
Разработчики MetaVision for 1C: AI, системы для статического анализа конфигураций 1С, столкнулись с фундаментальной проблемой при обучении своих ИИ-агентов на реальных кодовых базах. Традиционная методология RAG (Retrieval-Augmented Generation), основанная на использовании чанков, эмбеддингов и векторного поиска, оказалась неэффективной. Агент часто галлюцинировал или уверенно заявлял об отсутствии информации, которая на самом деле присутствовала в коде.
Преодоление ограничений RAG: три источника фактов вместо чанков
В ответ на эти вызовы команда MetaVision for 1C: AI разработала инновационную архитектуру для своего ИИ-агента, отказавшись от стандартного подхода с чанками. Вместо этого, они построили локальный индекс на базе SQLite, который объединяет три ключевых источника фактов:
- SQL-индекс: для структурированных данных и быстрого поиска по метаданным.
- Полнотекстовый FTS5: для эффективного поиска по содержимому кода.
- Векторные представления: для семантического поиска и выявления скрытых связей.
Этот комплексный подход, дополненный графом вызовов, позволяет агенту глубоко понимать структуру и логику чужой кодовой базы, минимизируя галлюцинации и повышая точность анализа.
Архитектура ИИ-агента: инструменты, циклы и валидация
Разработанный ИИ-агент представляет собой сложную систему, включающую 71 специализированный инструмент. Процесс анализа кода организован через многоэтапный цикл tool-calling, который может достигать 30 ходов. Интересно, что первоначально внедренные валидаторы, предназначенные для проверки корректности файлов, были впоследствии удалены из-за ложных срабатываний на валидных данных. Это подчеркивает сложность итеративной разработки систем, взаимодействующих со сложными кодовыми базами.
Очень интересно, как именно отказ от традиционного RAG и переход к SQLite-индексу с тремя источниками фактов повлиял на снижение галлюцинаций. Хотелось бы подробнее узнать о примерах, когда агент «галлюцинировал» с RAG, и как новый подход это исправил. И еще, не могли бы вы рассказать, какие именно «скрытые связи» удается выявлять с помощью векторных представлений, чего не давал FTS5?