GitHub представил GitHub Copilot SDK для Java — клиентскую библиотеку, которая позволяет серверному Java-коду управлять Copilot-агентами без привязки к конкретному фреймворку и поставщику ИИ.
SDK даёт Java-разработчикам возможность программно создавать сессии Copilot-агентов, регистрировать инструменты, отправлять запросы и получать структурированные ответы. Библиотека работает в серверных средах, включая Jakarta EE и Spring, и использует привычные для enterprise Java подходы: CompletableFuture, аннотации, лямбда-выражения и виртуальные потоки.
GitHub подчёркивает, что Copilot SDK для Java является фреймворк-независимым способом вызывать ИИ из Java-приложений. Поддержка BYOK (Bring Your Own Key) делает SDK независимым от конкретного вендора ИИ. В отличие от решений на основе Langchain4j или Spring AI, разработчики не зависят от архитектурных решений этих библиотек и фреймворков.
В демонстрационном приложении на Jakarta EE 11 показан агентный конвейер для обработки заявок на покупку недвижимости. Клиент отправляет запрос вроде «Ищу дом с 3 спальнями в Лондоне до £800 000», после чего система запускает изолированный Copilot-агент на виртуальном потоке и проводит запрос через цепочку шагов. Для обмена статусами в реальном времени используется Jakarta WebSocket: сервер отправляет обновления в браузер, и пользователь видит, как агент проходит разные стадии и вызывает инструменты.
SDK предлагает два основных способа регистрации инструментов (tools), которые модель может вызывать. Аннотация @CopilotTool помечает метод как инструмент, а @CopilotToolParam описывает параметры, чтобы модель понимала, какие данные передавать. SDK автоматически формирует JSON Schema, разбирает аргументы и выполняет вызовы, оставляя разработчику обычную Java-логику. Для инструментов, которые нужно задать «на лету» без отдельного метода, поддерживается лямбда-стиль. Флаг overridesBuiltInTool(true) позволяет заменить встроенный инструмент собственной реализацией.
Инструменты могут находиться в отдельных классах, например в CDI-бинах. В типовом случае они регистрируются через ToolDefinition.fromObject. В демонстрационном приложении используется лямбда-обёртка, поскольку CDI-прокси могут скрывать аннотационную метаинформацию.
Отдельное внимание уделено системному сообщению, которое задаёт поведение модели. Режим SystemMessageMode.CUSTOMIZE даёт возможность выборочно заменить части системного промпта, сохранив остальные, например оставить правила безопасности и изменить только самоописание агента (IDENTITY). Режим SystemMessageMode.APPEND просто добавляет новый текст к стандартному системному сообщению.
Вызов модели осуществляется через .get(): модель может многократно вызывать инструменты, пока не сформирует итоговый ответ. На виртуальных потоках такой блокирующий вызов дешёв по ресурсам: платформа не держит занятый поток ОС, пока идёт ожидание. SDK автоматически диспетчеризует вызовы инструментов к зарегистрированным обработчикам и возвращает результаты модели.
Для построения интерактивных интерфейсов SDK поддерживает подписку на события сессии. Каждый вызов инструмента, каждое сообщение ассистента и результат порождают событие. В примере эти события пересылаются в браузер через Jakarta WebSocket, чтобы панель мониторинга обновлялась в реальном времени. Можно использовать сопоставление с образцом для обработки конкретных типов событий.
Клиент Copilot настраивается под серверное использование. Режим CopilotClientMode.EMPTY отключает интеграцию с IDE: клиент взаимодействует напрямую с Copilot CLI. Для выполнения обратных вызовов инструментов задаётся специальный Executor, который учитывает контекст контейнера. В демонстрации для выдачи виртуальных потоков с контейнерным контекстом применяются возможности Jakarta Concurrency и ManagedThreadFactory. Например, Open Liberty 26.x поддерживает виртуальные потоки через атрибут virtual в server.xml, а созданный на его основе Executor передаётся в Copilot SDK.
SDK также позволяет гибко управлять доступом к инструментам через ToolSet и SessionConfig. Для каждой сессии можно явно указать, какие инструменты ей доступны. Это важно для продакшена: вместо того чтобы разрешать все встроенные инструменты (включая доступ к файловой системе или оболочке), разработчик выбирает только те, которые действительно нужны агенту. В примере включены все пользовательские инструменты и web_fetch, чтобы агент мог получать актуальную информацию о недвижимости во время этапа поиска.
По словам команды GitHub, Copilot SDK для Java даёт Java-разработчикам возможность использовать Copilot в серверных приложениях без IDE и без привязки к какому-либо фреймворку. Демонстрационный проект на Jakarta EE 11 показывает полный пример интеграции: от аннотированных инструментов и работы с виртуальными потоками до потоковой передачи событий в браузер.
Автор демонстрации, Эд Бернс, Principal Software Engineer в Microsoft и GitHub, работает с Java с 1997 года и продвигает открытые стандарты как лучший способ расширить возможности разработчиков.
Источник: материалы GitHub и публикация о GitHub Copilot SDK для Java.






















