GitHub представил GitHub Copilot SDK для Java — клиентскую библиотеку, которая позволяет Java-разработчикам интегрировать AI-агентов в серверные приложения. SDK позиционируется как первый по-настоящему фреймворк-агностичный способ работы с AI из Java: он не требует использования Langchain4j или Spring AI, а благодаря поддержке BYOK (Bring Your Own Key) позволяет подключать различных AI-провайдеров, включая OpenAI, Azure, Anthropic и OpenAI-совместимые эндпоинты. Это важно для корпоративных разработчиков, которые хотят сохранить гибкость в выборе инструментов и избежать привязки к конкретному вендору.
Что такое GitHub Copilot SDK для Java
SDK представляет собой клиентскую библиотеку для серверной Java-разработки. Она позволяет создавать сессии Copilot-агентов, регистрировать инструменты (tools), отправлять промпты и получать структурированные ответы. SDK работает в серверных средах, включая Jakarta EE и Spring, и использует привычные для Java-разработчиков конструкции: CompletableFuture, аннотации, лямбды и виртуальные потоки.
По словам Эдварда Бёрнса (Edward Burns), ведущего инженера Microsoft и автора статьи, SDK будет удобен тем, кто строит enterprise-приложения на Java. Бёрнс также отметил, что выбрал Jakarta EE 11 для демонстрации, так как был ведущим координатором этого релиза и поддерживает открытые стандарты.
Где взять SDK
SDK доступен как Maven-зависимость:
<dependency>
<groupId>com.github</groupId>
<artifactId>copilot-sdk-java</artifactId>
<version>1.0.7-preview.1</version>
</dependency>
Для работы потребуются:
- JDK 17 или 25 (рекомендуется 25 — он поддерживает виртуальные потоки);
- Maven 3.9+;
- GitHub-аккаунт с активной подпиской Copilot;
- Copilot CLI версии 1.0.71 или новее.
Демонстрационное приложение
В статье представлено демо-приложение — агент для обработки заявок на недвижимость. Оно построено на Open Liberty 26.0.0.5, Jakarta EE 11 (Faces 4.1, CDI 4.1, WebSocket 2.2, Data 1.0, Persistence 3.2), PrimeFaces 15.0.16, Copilot SDK for Java 1.0.7-preview.1 и H2 in-memory базе данных. Приложение позволяет отправлять несколько запросов одновременно, демонстрируя работу виртуальных потоков.
Ключевые возможности SDK
Аннотация @CopilotTool
Основной API для определения инструментов — аннотация @CopilotTool. Она объявляет метод как инструмент, который модель может вызывать. Параметры описываются с помощью @CopilotToolParam. SDK автоматически генерирует JSON Schema, обрабатывает аргументы и диспатчит вызовы.
Для использования аннотаций необходимо включить экспериментальные API (флаг -Acopilot.experimental.allowed=true) и зарегистрировать аннотационный процессор в maven-compiler-plugin.
Лямбда-инструменты
Инструменты можно определять прямо в коде с помощью ToolDefinition.from(...). Это удобно для простых функций. Метод overridesBuiltInTool(true) позволяет заменить встроенный инструмент с тем же именем.
Сканирование инструментов между классами
Инструменты могут находиться в разных классах. Например, в демо-приложении метод searchProperties определён в отдельном CDI-бине PropertyDatabase. Для регистрации используется ToolDefinition.fromObject(propertyDatabase), но в демо применяется лямбда-обёртка из-за особенностей CDI-прокси.
Настройка системного сообщения
SDK позволяет гибко настраивать системное сообщение через SystemMessageConfig. Режим CUSTOMIZE заменяет отдельные секции (например, IDENTITY), сохраняя остальные. Режим APPEND добавляет контент после стандартного сообщения.
Агентный цикл в одну строку
Метод session.sendAndWait(...) запускает полный агентный цикл: модель рассуждает, вызывает инструменты (возможно, несколько раз) и возвращает финальный ответ. Благодаря виртуальным потокам ожидание не блокирует платформенные потоки.
Обработка событий в реальном времени
Подписка на события сессии через session.on(...) позволяет создавать отзывчивые интерфейсы. Каждый вызов инструмента, результат или сообщение ассистента генерирует событие. В демо-приложении события отправляются в браузер через Jakarta WebSocket.
Headless-клиент и обработка разрешений
Клиент настраивается в режиме CopilotClientMode.EMPTY, что означает отсутствие интеграции с IDE — клиент общается напрямую с Copilot CLI. Для обработки разрешений в демо используется PermissionHandler.APPROVE_ALL, но в production рекомендуется реализовать собственную политику.
Интеграция с Jakarta EE
SDK хорошо сочетается с Jakarta EE. Ключевая точка интеграции — параметр Executor. Используя ManagedThreadFactory с атрибутом virtual="true", можно создавать виртуальные потоки, управляемые контейнером. Это обеспечивает автоматическое распространение контекста CDI, JNDI и транзакций.
В демо-приложении также используются CDI @ApplicationScoped для синглтон-клиента, Jakarta Faces f:websocket для обновлений в реальном времени и Jakarta Data @Repository для типобезопасных запросов к БД.
Тонкая настройка доступа к инструментам
С помощью ToolSet можно указать, какие инструменты доступны каждой сессии. Например, new ToolSet().addCustom("*").addBuiltIn("web_fetch") разрешает все пользовательские инструменты и только встроенный web_fetch. Это важно для безопасности: не нужно открывать доступ к файловой системе или shell.
Что это значит
Появление Copilot SDK для Java — шаг к более гибкой интеграции AI в корпоративные Java-приложения. Отказ от привязки к конкретному фреймворку и поддержка BYOK могут упростить внедрение AI в существующие проекты. Однако SDK находится на стадии предварительной версии, и для production-использования потребуется доработка, особенно в части безопасности и управления разрешениями.

Комментарии · 0
Войдите, чтобы участвовать в обсуждении.