Как Netflix повысила эффективность ИИ-агентов для написания кода с помощью интеллектуального движка IDE от JetBrains

Источник: The JetBrains Blog•

Как Netflix повысила эффективность ИИ-агентов для написания кода с помощью интеллектуального движка IDE от JetBrains

Netflix интегрировала headless-движок интеллектуального анализа кода JetBrains (тот же самый, что лежит в основе IntelliJ IDEA) в Claude Code и Codex, а затем провела его тестирование в различных сценариях. Подробности и цифры приведены ниже. Краткий обзор: Компании Netflix — платформы…

Расширьте возможности своих инструментов с помощью функций на базе ИИ во многих продуктах JetBrains

Агентный ИИ Истории клиентов ИИ Вариант использования Java

Netflix интегрировала headless-движок интеллектуального анализа кода JetBrains — тот же самый, что лежит в основе IntelliJ IDEA — в Claude Code и Codex, а затем провела его тестирование в различных сценариях. Подробности и цифры приведены ниже.

Краткий обзор

Цель: Повысить окупаемость инвестиций (ROI) в агентов

JetBrains и Netflix поставили перед собой задачу предоставить агентам для написания кода точное понимание кода на уровне IntelliJ IDEA в безголовых (headless) средах — без запущенного экземпляра IntelliJ IDEA.

«Такие агенты для написания кода, как Claude Code, работают медленно и ненадежно при навигации по коду на Java/Kotlin, особенно через границы библиотек (JAR). Мы интегрировали headless-движок кода IDE JetBrains, чтобы обеспечить агентов интеллектуальными возможностями анализа кода уровня IntelliJ IDEA в средах без графического интерфейса и без запущенной IDE. Мы создали бенчмарк с реальными задачами программирования, который показывает, что с движком кода IDE JetBrains агенты неизменно работают эффективнее — используя меньше токенов и времени, причем точный прирост зависит от модели». — Пол Баккер (Paul Bakker), старший инженер-программист, Netflix

«Такие агенты для написания кода, как Claude Code, работают медленно и ненадежно при навигации по коду на Java/Kotlin, особенно через границы библиотек (JAR). Мы интегрировали headless-движок кода IDE JetBrains, чтобы обеспечить агентов интеллектуальными возможностями анализа кода уровня IntelliJ IDEA в средах без графического интерфейса и без запущенной IDE. Мы создали бенчмарк с реальными задачами программирования, который показывает, что с движком кода IDE JetBrains агенты неизменно работают эффективнее — используя меньше токенов и времени, причем точный прирост зависит от модели».

Проблема JAR, которую пытается решить Netflix, описанная Полом выше: проекты на JVM обычно поставляют библиотеки только в виде JAR-файлов, но никогда в виде исходного кода. Агентам приходится распаковывать JAR-файлы (угадывая, какие из них имеют значение), потенциально декомпилировать файлы классов, а затем осуществлять поиск с помощью grep по этому неполному представлению.

Решение: Интеллектуальные возможности IDE JetBrains

Компания JetBrains годами создавала движок интеллектуального анализа кода, лежащий в основе IntelliJ IDEA. Он основан на детерминированном индексе исходных файлов вашего проекта, включая все библиотеки. Теперь этот интеллектуальный функционал доступен через LSP и поддерживается в редакторах, совместимых с VS Code. Специалисты Netflix работали с headless-сборкой этого движка.

Самого по себе LSP недостаточно для непосредственного использования агентом написания кода: это просто сервер, поддерживающий протокол, без удобного способа вызова со стороны агента и без встроенного управления процессами для повторного использования запущенного экземпляра между вызовами. Netflix закрыла этот пробел самостоятельно, используя демон и интерфейс командной строки (CLI), описанные в следующем разделе.

Подробности архитектуры: Поддержание индекса в актуальном состоянии

Создание индекса проекта требует реального времени, точно так же, как и открытие крупного проекта в IntelliJ IDEA в первый раз. ИИ-агент вызывает LSP в множество мелких, детализированных шагов, и для выполнения реалистичной задачи требуется несколько таких вызовов. Если бы каждый вызов запускал новый сервер LSP, каждый отдельный запрос сопровождался бы многосекундными накладными расходами на холодный запуск — даже для проекта, индекс которого был построен минутой ранее.

Для предотвращения накладных расходов на холодный запуск процесса сервера LSP при повторяющихся вызовах требуется процесс демона. JetBrains работает над созданием демона, но на момент оценки его еще не было, поэтому Netflix разработала собственный демон для своих нужд:

  • Каждый вызов инструмента был кратковременным и не содержал состояния (stateless) — он просто обращался к CLI.
  • Демон — это компонент, который продолжает работать: его менеджер сеансов направляет каждый вызов по корневому каталогу проекта к соответствующему процессу сервера, который хранит индекс этого проекта в памяти.
  • Второй вызов того же проекта полностью пропускает индексацию и направляется напрямую к разогретому серверу через stdio.
  • И демон, и CLI разработаны на Java и распространяются в виде исполняемого файла GraalVM, поэтому здесь отсутствуют накладные расходы JVM на запуск или выполнение.

Как Netflix измеряла рентабельность инвестиций (ROI) в интеллектуальные возможности IDE JetBrains

Чтобы понять, улучшает ли (и в какой степени) интеллект IDE JetBrains производительность агента написания кода, был разработан набор тестов (бенчмарк). Та же модель, та же задача, та же кодовая база — единственной переменной было то, мог ли агент задействовать возможности IDE JetBrains. Результаты представлены как разница в производительности между запусками с интеллектуальным движком IDE JetBrains и без него.

Среда и подход к оценке:

Бенчмарки запускались многократно для проверки результатов и отслеживания эффектов от изменений в новых релизах LSP.

Результаты

Для каждой протестированной модели, агента и типа задач интеллектуальный движок IDE JetBrains в целом повышал эффективность агентов написания кода — обычно на 20–30%, а в лучших случаях примерно до 65%, в зависимости от конкретной модели, агента и задачи. Более мощные модели, работающие с большим уровнем усилий, показали наибольший прирост. Эти модели стоят дороже, поэтому повышение эффективности для них важнее, но они также лучше справляются с эффективным использованием индексов.

Прирост эффективности для каждой конфигурации, объединяющий экономию токенов и времени. Каждое сравнение выполняет одну и ту же задачу, задействует ту же модель и кодовую базу дважды: один раз с доступным интеллектом IDE JetBrains, второй раз — без него.

~25%

Средний прирост

20–30%

Типичный диапазон

~65%

Лучший результат

Эффективность представляет собой среднее значение экономии токенов и времени для каждой конфигурации. Показатель корректности оставался стабильным или улучшался в каждом запуске. *Только токены: пакетные поисковые вызовы этой конфигурации сделали сравнение времени навигации по коду нерепрезентативным — см. текст статьи. Цифры являются снимком состояния и будут меняться с выходом новых моделей.

Эти цифры являются снимком состояния, а не фиксированным результатом бенчмарка. Каждый новый выпуск модели меняет то, как агенты осуществляют поиск, рассуждают и используют инструменты, поэтому точные процентные показатели будут продолжать меняться — именно поэтому в данном материале приводятся диапазоны, а не результаты для каждой отдельной модели. Что оставалось неизменным во всех запусках Netflix, так это общая тенденция: каждая протестированная модель и агент становились эффективнее, наибольший прирост наблюдался у самой мощной модели при настройке с высоким уровнем усилий, а величина прироста заметно различалась от одной модели к другой.

Задачи навигации по коду: Повышение эффективности по всем направлениям, корректность сохранилась или улучшилась

Все протестированные модели и уровни усилий использовали меньше токенов при задействовании интеллектуальных возможностей IDE JetBrains — здесь не было исключений, а экономия составляла от примерно 15% до 60%. Величина прироста зависела главным образом от модели: самая мощная модель продемонстрировала самые большие улучшения, в то время как более легкие конфигурации оказались на нижнем уровне обоих диапазонов. Корректность оставалась стабильной в большинстве заходов и улучшилась в двух — она никогда не падала.

В частности, для задач навигации по коду одна комбинация инструмента и модели уже объединяет несколько поисковых вызовов в одну команду, поэтому как с интеллектуальными возможностями JetBrains IDE, так и без них, там выполняется всего один вызов инструмента. Обращение к интеллектуальным возможностям JetBrains IDE для этого единственного вызова работает немного медленнее, чем пакетная команда поиска, что и привело к явному отсутствию выигрыша во времени для этой комбинации, что не отражает реальное использование в полной мере. Именно поэтому более широкий набор комплексных задач является более надежным показателем времени, в рамках которого интеллектуальные возможности JetBrains IDE оказались быстрее для каждой протестированной модели и агента.

Комплексные задачи: неизменно выше эффективность, корректность не страдает

При расширенном комплексном запуске показатели корректности оставались стабильными для всех протестированных моделей и агентов, поэтому преимущество проявляется исключительно в эффективности, а не в успешности выполнения задачи. Каждая комбинация модели и агента продемонстрировала примерно на 10–30% большую эффективность при использовании интеллектуальных возможностей JetBrains IDE, если оценивать время выполнения и затраты токенов. Во многом это объясняется тем, что для достижения тех же выводов требуется меньше вызовов инструментов.

Другие оцененные альтернативы

Прежде чем остановиться на описанном подходе, в Netflix исключили два других варианта. Первым отклоненным вариантом стала собственная внутренняя CLI, которая подключалась к запущенному экземпляру IntelliJ IDEA для получения доступа к индексу проекта. Этот процесс похож на то, что описано в данной статье, но он требует запущенной IDE. Такой подход не подходил для автономных агентов в таких средах, как Otto, Bitbot, инструменты распределенного рефакторинга, CI и т. д.

Во-вторых, рассматривался существующий Eclipse LSP, который используется для Java в VS Code. Но для системы сборки Netflix (на базе Gradle) он просто не подошел.

Что дальше

Куда Netflix движется дальше

После тестирования в Netflix пришли к выводу, что «бенчмарки показывают преимущества наличия детерминированного интеллектуального уровня вместе с вашим агентом». Разумеется, это не сокращает выполнение каждой задачи кодирующего агента на фиксированный процент. Но для этой конкретной проблемы — разрешения реальной структуры через границы JAR — выгода велика, сохраняется для всех моделей и не снижает корректность.

В Netflix планируют применить ту же методологию бенчмаркинга для Python, TypeScript/JavaScript и Go. У кодирующих агентов для этих языков возникают схожие проблемы. Но, конечно, способы загрузки библиотек в проекте различаются в зависимости от языка, поэтому механика проблем и возможные решения тоже отличаются. В JetBrains планируют продолжить сотрудничество и оказывать дальнейшую поддержку этой оценке.

Мнение JetBrains: LSP — это лишь шаг, а не конечная цель

Интеллектуальные возможности JetBrains IDE для Java были протестированы в Netflix и теперь поставляются в составе расширения Java & Kotlin by IntelliJ IDEA. В JetBrains также продолжают эксперименты с подходом LSP+CLI и сообщат о результатах, как только они будут готовы.

Базовым примитивом LSP является позиция в текстовом документе. Спецификация определяет позицию как «между двумя символами, как курсор вставки в редакторе». Это естественный примитив для человека, работающего за клавиатурой. Но агенты на самом деле мыслить категориями позиций курсора не умеют. Они задают вопросы о программе, например: «Почему этот вызов внутри createUser() не разрешен?» и «Какие тесты покрывают этот метод?» и т. д. Речь идет о понимании взаимосвязей между частями кода, а не о просмотре позиций курсора. И позиция в тексте — это хрупкий идентификатор: вставка одного символа перед любой заданной позицией приводит к смещению этой позиции.

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

«Вот что я имею в виду под кодовым движком: не очередной протокол, позволяющий агенту имитировать взаимодействие с редактором, а набор точных операций над структурой и выполнением программы — такой, который возвращает достаточно контекста для реального анализа результата. LSP полезен, но он не должен определять финальную абстракцию для агента. Создавайте инструменты для агента так, будто агент — это крошечный человек в редакторе, и вы заставите его говорить в координатах курсора. Агентам нужен кодовый движок, а не виртуальный редактор». — Алексей Стукалов, руководитель отдела IDE, JetBrains

«Вот что я имею в виду под кодовым движком: не очередной протокол, позволяющий агенту имитировать взаимодействие с редактором, а набор точных операций над структурой и выполнением программы — такой, который возвращает достаточно контекста для реального анализа результата. LSP полезен, но он не должен определять финальную абстракцию для агента. Создавайте инструменты для агента так, будто агент — это крошечный человек в редакторе, и вы заставите его говорить в координатах курсора. Агентам нужен кодовый движок, а не виртуальный редактор».

Показатели Netflix доказывают, что кодовый интеллект стоит того, чтобы за него платить. Определение формы, которую этот интеллект примет, — задача, которая ждет впереди.

Узнать больше

О чём эта статья