JetBrains открыла исходники KotlinLLM — плагин делегирует runtime-логику LLM из Kotlin-кода
Исследовательский прототип превращает вызовы LLM в обычный Kotlin-исходник, который можно коммитить, тестировать и запускать без плагина.
Новости TprogerТеперь можно встроить LLM в Kotlin-приложение так, чтобы сгенерированная логика выглядела и работала как обычный код. JetBrains Research выложила в открытый доступ KotlinLLM — IntelliJ IDEA-плагин, который добавляет в Kotlin/JVM-проекты «умные макросы» (Smart macros). Их тело генерирует LLM, сохраняется в репозитории и далее исполняется без повторных вызовов модели.
KotlinLLM позиционируется как research-прототип для делегирования runtime-логики большой языковой модели. Вместо того чтобы на каждый запрос звонить в API или запускать внешнего агента, разработчик пишет явный Kotlin-вызов. Плагин генерирует за него тело функции, обновляет его по мере появления новых сценариев и сохраняет результат как Kotlin source.
Ключевые выводы
- JetBrains Research открыла исходники KotlinLLM под лицензией Apache 2.0.
- Плагин вводит Smart macros: Kotlin-вызовы, тело которых генерирует LLM и сохраняется в проекте.
- Два API: asLlm
() для преобразования данных в типизированные значения и mockLlm () для генерации тестовых заглушек. - Сгенерированный код работает без плагина: после покрытия сценариев LLM больше не вызывается.
- Оценка на Spring Petclinic и синтетическом GitHub-радаре показала работоспособность подхода с небольшими накладными расходами.
Как устроены Smart macros
Smart macro — это обычный вызов Kotlin-функции, но его реализация пишется не разработчиком, а моделью. Публичное API пока состоит из двух макросов:
asLlm<F, T>(from, hint)— превращает входные данные типа F в типизированное значение T: data class, enum, список или примитив. Подходит для парсинга неструктурированных данных в runtime.mockLlm<T>()— создаёт реализацию интерфейса T с сохранением состояния. Поведение зависит от вызываемых методов, поэтому макрос можно использовать как тестовый дабл, который не нужно писать вручную.
Пример из документации:
Проблема, которую решает
Сегодня LLM чаще используют на этапе разработки: автодополнение, генерация кода, пояснение чужих решений. Делегировать runtime-логику модели сложнее: прямой вызов на каждом запросе — медленный, недетерминированный и дорогой, а внешние агенты держат сгенерированную логику за пределами кодовой базы, откуда её трудно ревьюить и тестировать. К тому же большинство предыдущих решений — вроде byLLM, nightjar и Healer — ориентированы на интерпретируемые языки вроде Python.
KotlinLLM строится на трёх принципах:
- Явность — в коде видно, что функция реализована через LLM, поэтому это можно ревьюить.
- Сохраняемость — сгенерированное поведение хранится как обычный Kotlin-исходник, который коммитится и тестируется.
- Портативность — после генерации код работает как обычный Kotlin без плагина. Если сценарий уже покрыт, LLM не вызывается повторно.
Оценка на реальных проектах
Авторы протестировали подход на двух Kotlin/JVM-проектах. Адаптированный Spring Petclinic Kotlin получил 18 вызовов asLlm и прошёл все 24 сценария приложения после эволюции Smart macros. Hot-reload сработал в 100% случаев, а накладные расходы на компиляцию и переопределение составили около 1% от общего времени выполнения.
Второй тест — синтетический «GitHub Beginner Issue Radar» — парсил реальные задачи из 20 репозиториев (более 30 000 issues). Макрос достиг примерно 0,89 recall по сравнению с эталонными метками beginner-friendly.
Что внутри репозитория
Репозиторий kotlinllm-plugin опубликован под Apache License 2.0. Внутри:
- прототип IntelliJ-плагина и стабильное API Smart macros;
- запускаемые примеры GitHub Issue Radar и адаптированного Petclinic с уже закоммиченными сгенерированными исходниками;
- запись доклада с KotlinConf 2026 и теоретическая статья с полным описанием дизайна и оценкой.
Часто задаваемые вопросы
Что такое Smart macros в KotlinLLM?
Это Kotlin-функции, тело которых генерирует LLM. Вызов выглядит как обычный код, но реализация создаётся моделью и сохраняется в проекте как исходник.
Нужен ли LLM в продакшене после генерации кода?
Нет. После того как сценарий покрыт, сгенерированный код работает как обычный Kotlin без плагина и без вызовов модели.
Какие API предоставляет KotlinLLM?
Два макроса: asLlm
Где взять исходники и примеры?
Код опубликован на GitHub в организации JetBrains-Research: репозиторий kotlinllm-plugin. Там же лежат примеры, README и научная статья.
Выводы
KotlinLLM — это попытка перенести LLM из редактора и чат-бота непосредственно в runtime компилируемого языка. Идея в том, чтобы модель помогала писать логику, которая затем живёт в репозитории как обычный код: с тестами, ревью и версионированием. Пока это research-прототип, поэтому для production-применения потребуются дополнительные проверки, но инструмент уже можно скачать и попробовать на своём Kotlin/JVM-проекте.
Runtime delegation to LLMs in compiled, statically typed languages is feasible when the generated behavior is explicit, persistent, and portable.
Источник: JetBrains Research Blog — KotlinLLM is Going Open Source.