Блог

Создатель Spring хочет, чтобы система типов Java помогла обуздать агентный ИИ

Род Джонсон, создатель Spring Framework, вернулся с новым проектом с открытым исходным кодом — и на этот раз он ставит перед собой цель решить то, что считает главной проблемой корпоративного ИИ: сделать приложения, основанные на крупных языковых моделях, достаточно предсказуемыми, чтобы на их основе можно было реально вести бизнес.

На прошлой неделе во время живой демонстрации на конференции разработчиков Microsoft JDConf Джонсон представил Embabel — фреймворк агентского ИИ для Java. Фреймворк распространяется по лицензии Apache, размещен на GitHub и построен на базе Spring Boot. Это означает, что Java-разработчикам, уже знакомым с корпоративной экосистемой Spring на базе Java, будет легко освоить этот фреймворк.

Цель Джонсона при создании Embabel — показать, что Java подходит для агентских систем — особенно корпоративных — не хуже, а может быть, и лучше, чем их аналоги на базе Python.

К агентным фреймворкам на базе Python относятся LangChain и Crew.ai, а к агентным фреймворкам на базе Java — Embabel, JetBrains Koog, LangChain4j и Crew4j.

Саймон Риттер, заместитель технического директора компании Azul Systems, поставщика среды выполнения Java, отмечает, что этот шаг может помочь сократить растущий разрыв в мире агентов.

«Моё личное мнение заключается в том, что растущая доступность фреймворков на Java поможет сократить разрыв между использованием Python и Java в сфере ИИ-агентов», — говорит Риттер.

«Я решил, что было бы интересно посмотреть, как мог бы выглядеть идеальный фреймворк для создания агентов», — рассказывает Джонсон. «И я довольно быстро пришёл к выводу, что для того, чем я хотел бы заниматься, и что, по моему мнению, раскрывает потенциал существующих бизнесов, JVM [виртуальная машина Java] станет гораздо более подходящей платформой для этого…»

Однако «я не стал бы обязательно считать себя в первую очередь специалистом по Java», — сказал Джонсон во время своего выступления на JDConf. «Я бы назвал себя человеком, стремящимся решать проблемы в сфере корпоративного программного обеспечения. Ещё в начале 2000-х годов проблема заключалась в том, как эффективно работать с Java. В середине 2020-х годов проблема состоит в том, как использовать GenAI и сделать его актуальным для бизнес-приложений».

О происхождении Embabel

Embabel — это фреймворк на базе JVM для создания бизнес-приложений с использованием GenAI. Джонсон запустил его в мае 2025 года; в настоящее время над ним работают более пяти штатных инженеров, а на GitHub у проекта более 3 000 звёздочек.

По словам Джонсона, Embabel построен на Spring Boot и написан на Kotlin, при этом обеспечивая отличную совместимость с Java. Он рассказывает, что это технология с открытым исходным кодом, для которой планируется создать коммерческую структуру, аналогичную модели SpringSource.

В своём блоге Джеймс Губернатор, соучредитель аналитической компании RedMonk, пишет: «В эпоху революции распределённых систем и облачных технологий огромное количество созданных приложений и систем, а также значительная часть инфраструктуры были реализованы на Java, несмотря на появление новых языков, таких как Go и Rust. Представление о том, что Java каким-то образом не будет хорошо взаимодействовать с ИИ, не имеет никакого смысла».

Говоря о Джонсоне в том же посте, Губернатор пишет: «Сейчас он создал Embabel — фреймворк строго типизированных агентов, написанный для JVM. Он призван привнести детерминизм в план вашего проекта, используя модель, отличную от LLM, а затем задействуя автономных агентов для генерации кода, соответствующего этому плану. Не всё решается с помощью LLM».

Между тем на брифинге, посвящённом Java 26 — последней версии Java, выпущенной в прошлом месяце, — Чад Аримура, бывший вице-президент Oracle по связям с разработчиками, сообщил, что Java 26 поддерживает «нативно агентскую» природу Embabel.

Проблема детерминизма

Джонсон говорит, что рассматривает основную проблему внедрения ИИ в корпоративном секторе как спектр. На одном конце находится нечто вроде ChatGPT от OpenAI, который является мощным и генеративным, но не тем, на чем любая здравомыслящая организация стала бы запускать бизнес-процессы, — говорит он. На другом конце находится структурированный, детерминированный код, который разработчики Java пишут уже десятилетиями, отмечает он.

Вопрос, на который призвана ответить Embabel, заключается в том, где на этом континууме должно находиться конкретное приложение и как его туда довести.

Ответ Джонсона — декомпозиция. Разбивать большие задачи на отдельные шаги. Некоторые шаги выполняются как обычный код. Другие вызывают LLM. Эти вызовы LLM могут, в свою очередь, вызывать инструменты. Связывание этих шагов между собой предсказуемым и поддающимся аудиту образом, по мнению Джонсона, является основной задачей настоящего фреймворка агентов.

По его словам, большинство фреймворков справляются с этой связью одним из двух способов: либо позволяют LLM решать, какие инструменты вызывать во время выполнения, что приводит к потере предсказуемости; либо используют заранее определённую конечную автоматную модель — подход, принятый LangGraph в экосистеме Python. Embabel не использует ни того, ни другого.

Вместо этого он использует GOAP (Goal-Oriented Action Planning — целеориентированное планирование действий) — алгоритм поиска пути для ИИ, не основанный на LLM и заимствованный из разработки игр, — для динамического выбора путей выполнения во время выполнения с помощью строго типизированных методов Java, объясняет Джонсон.

«Java может и действительно вносит инновации в область генеративного ИИ», — говорит Джонсон.

В публикации на Medium, вышедшей в прошлом году, Джонсон описал GOAP следующим образом: «GOAP — это, по сути, алгоритм поиска путей. Он может находить пути, которые никогда не были запрограммированы. Однако он детерминирован и может выбирать только пути, состоящие из отдельных действий (шагов), которые были явно добавлены в систему. Если GOAP находит путь, он может объяснить, почему этот путь является наименее затратным из всех допустимых.

«GOAP находит пути на основе фактов, которые проявляются в виде предварительных и последующих условий. Цели (которые соответствуют реальным целям для потоков действий нашего агента) имеют предварительные условия. Действия имеют предварительные условия и ожидаемые последующие условия. Таким образом, между заданным состоянием и целью можно найти нулевую или более цепочек действий».

Система типов Java как преимущество

Постоянной темой в презентации Джонсона является то, что у разработчиков Java есть недооценённый актив: их доменные модели. Embabel создан для того, чтобы использовать это. Структурированные типы возвращаемых значений — записи Java, Plain Old Java Objects (также известные как POJO), аннотации валидации Jakarta EE — понимаются фреймворком нативно, говорит он.

Когда поле имеет ограничение валидации, Embabel передает это ограничение в LLM как часть запроса, чтобы модель понимала, как должен выглядеть допустимый ответ, прежде чем его сгенерировать. Если ответ не проходит валидацию, фреймворк возвращается к модели и объясняет ей причину, пояснил Джонсон.

В результате LLM становится участником системы типов приложения, а не «чёрным ящиком», находящимся вне её. «LLM становится частью приложения, а не просто конечной точкой, с которой ведётся диалог», — сказал он.

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

Выбор модели как принцип проектирования

Embabel изначально поддерживает нескольких поставщиков LLM, включая OpenAI, Anthropic и Llama, и Джонсон подчеркнул, что выбор модели должен быть решением на уровне отдельного шага, а не глобальной настройкой приложения. По его словам, для разных шагов в рабочем процессе могут потребоваться разные модели в зависимости от требований к стоимости, задержке или функциональным возможностям. Фреймворк позволяет легко указать модель по имени или роли на уровне отдельного шага.

Джонсон также отметил, что Embabel находится на более высоком уровне абстракции, чем большинство фреймворков для агентов — ближе к тому, что он назвал «агентским харнесом», чем к низкоуровневой библиотеке оркестрации. Такое позиционирование включает точки интеграции для инструментов кодирования агентов, таких как Claude Code и GitHub Copilot, что позволяет приложениям на базе Embabel напрямую использовать эти инструменты.

Начало работы

Embabel доступен на github.com/embabel. Джонсон также посоветовал разработчикам ознакомиться со своим блогом на Medium, где можно более подробно изучить философию фреймворка и модель планирования GOAP, лежащую в основе его поведения во время выполнения.

Читайте также

Подписывайтесь на наш канал в Телеграм

Подписаться
AI Agents