Реклама
Меморина
Меморина
Меморина

JetBrains открыла исходники KotlinLLM — плагин делегирует runtime-логику LLM из Kotlin-кода

Исследовательский прототип превращает вызовы LLM в обычный Kotlin-исходник, который можно коммитить, тестировать и запускать без плагина.

Обложка: JetBrains открыла исходники KotlinLLM — плагин делегирует runtime-логику LLM из Kotlin-кода

Теперь можно встроить 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 с сохранением состояния. Поведение зависит от вызываемых методов, поэтому макрос можно использовать как тестовый дабл, который не нужно писать вручную.

Пример из документации:

			val issuesApiUrl: String = asLlm(repoInput, hint = "GitHub API URL: get all issues, including closed")
val issues: List<Issue> = asLlm(response, hint = "Return all beginner-friendly issues for this repository")
		

Проблема, которую решает

Сегодня 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 и теоретическая статья с полным описанием дизайна и оценкой.
Часто задаваемые вопросы
1
Что такое Smart macros в KotlinLLM?

Это Kotlin-функции, тело которых генерирует LLM. Вызов выглядит как обычный код, но реализация создаётся моделью и сохраняется в проекте как исходник.

2
Нужен ли LLM в продакшене после генерации кода?

Нет. После того как сценарий покрыт, сгенерированный код работает как обычный Kotlin без плагина и без вызовов модели.

3
Какие API предоставляет KotlinLLM?

Два макроса: asLlm() для преобразования данных в типизированные значения и mockLlm() для генерации тестовых реализаций интерфейсов.

4
Где взять исходники и примеры?

Код опубликован на 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 ResearchKotlinLLM announcement

Источник: JetBrains Research Blog — KotlinLLM is Going Open Source.

Рекомендуем