GitHub ha anunciado Copilot SDK for Java, una biblioteca cliente que permite a las aplicaciones Java en servidores controlar agentes de Copilot mediante programación, creando sesiones para los agentes, registrando herramientas, enviando indicaciones y recibiendo respuestas estructuradas. GitHub afirma que la biblioteca se diseñó para ser independiente de los frameworks de Java y que también ofrece compatibilidad con la opción BYOK, por lo que no está vinculada a un único proveedor de inteligencia artificial.
La biblioteca está dirigida a desarrolladores de Java de aplicaciones empresariales y funciona en entornos de servidor, incluidos Jakarta EE y Spring. Utiliza interfaces conocidas por los desarrolladores de Java, como CompletableFuture, las anotaciones, las expresiones lambda y los hilos virtuales, en lugar de imponer un enfoque ligado a un framework específico.
Disponibilidad y requisitos
La biblioteca está disponible actualmente como una dependencia de Maven, en la versión 1.0.7-preview.1. Para utilizarla se requiere lo siguiente:
- JDK 17 o JDK 25, con la recomendación de utilizar JDK 25 para aprovechar los hilos virtuales y otras funciones modernas.
- Maven 3.9 o una versión posterior.
- Una cuenta de GitHub con una suscripción activa a Copilot.
- Copilot CLI instalado localmente en la versión 1.0.71 o posterior.
La publicación de GitHub muestra una aplicación de ejemplo completa basada en Jakarta EE 11 y proporciona el código fuente para probarla. La empresa también confirma que los desarrolladores pueden crear sus propios agentes utilizando los frameworks y las bibliotecas de Java que elijan.
Aplicación de ejemplo para gestionar solicitudes inmobiliarias
El ejemplo utiliza una aplicación para gestionar clientes potenciales del sector inmobiliario. Cuando un cliente envía una solicitud, como buscar una casa de tres dormitorios en Londres por menos de 800.000 libras esterlinas, el sistema crea un agente de Copilot aislado en un hilo virtual para procesar la solicitud dentro de un flujo de trabajo definido.
La aplicación utiliza Jakarta WebSocket para enviar actualizaciones de estado en tiempo real desde el servidor al navegador, lo que permite seguir el progreso de los agentes mientras invocan herramientas. También se pueden enviar varias solicitudes al mismo tiempo, de modo que cada una se procesa de forma independiente dentro de su propia sesión de Copilot.
Definición y gestión de herramientas
La biblioteca ofrece la interfaz @CopilotTool para definir las herramientas que el modelo puede invocar. El desarrollador define el método normal en Java, mientras que la biblioteca se encarga de crear el esquema JSON, analizar los argumentos y distribuir la invocación. Se puede utilizar @CopilotToolParam para describir cada argumento, de modo que el modelo conozca el valor que se le solicita.
Esta interfaz de anotaciones es actualmente experimental, por lo que las interfaces experimentales del SDK deben activarse mediante la opción del compilador -Acopilot.experimental.allowed=true, además de registrar la biblioteca en la ruta de procesadores de anotaciones de la configuración de Maven. El procesamiento genera metadatos de las herramientas durante el proceso de compilación.
Además de las anotaciones, las herramientas se pueden definir directamente en el lugar de uso mediante un estilo lambda utilizando ToolDefinition.from(...). Esto permite crear una herramienta sin un método personalizado, mientras que la opción overridesBuiltInTool(true) ofrece una forma de sustituir una herramienta integrada por un comportamiento personalizado. También es posible colocar las herramientas en clases separadas de la lógica del agente y registrarlas mediante ToolDefinition.fromObject.
Mensajes y ciclo de trabajo del agente
El SDK permite personalizar el mensaje del sistema mediante SystemMessageMode.CUSTOMIZE, sustituyendo secciones específicas y conservando el resto del mensaje, incluidas las barreras de seguridad. También ofrece el modo APPEND para añadir contenido al mensaje del sistema predeterminado sin sustituirlo.
El ciclo de trabajo completo del agente comienza mediante sendAndWait(...). Al enviar la indicación, el modelo puede razonar e invocar varias veces las herramientas registradas y después devolver el resultado final, mientras que la biblioteca se encarga de transferir los resultados de las herramientas al modelo hasta que la tarea se completa. Los hilos virtuales permiten esperar mediante get() sin consumir un hilo tradicional mientras se espera el resultado. Además, session.on(...) permite gestionar los eventos emitidos por la sesión.