GitHub hat Copilot SDK for Java angekündigt, eine Clientbibliothek, mit der serverseitige Java-Anwendungen Copilot-Agenten programmgesteuert steuern können, indem sie Agentensitzungen erstellen, Tools registrieren, Prompts senden und strukturierte Antworten empfangen. Laut GitHub wurde die Bibliothek so konzipiert, dass sie unabhängig von Java-Frameworks ist. Außerdem unterstützt sie die BYOK-Option, wodurch sie nicht an einen einzelnen Anbieter für künstliche Intelligenz gebunden ist.
Die Bibliothek richtet sich an Java-Entwickler in Unternehmensanwendungen und funktioniert in Serverumgebungen, darunter Jakarta EE und Spring. Sie verwendet Java-Entwicklern vertraute Schnittstellen wie CompletableFuture, Anmerkungen, Lambdas und virtuelle Threads, anstatt einen Ansatz vorzuschreiben, der an ein bestimmtes Framework gebunden ist.
Verfügbarkeit und Anforderungen
Die Bibliothek ist derzeit als Maven-Abhängigkeit in der Version 1.0.7-preview.1 verfügbar. Für ihre Nutzung gelten folgende Voraussetzungen:
- JDK 17 oder JDK 25; die Verwendung von JDK 25 wird empfohlen, um virtuelle Threads und weitere moderne Funktionen zu nutzen.
- Maven 3.9 oder höher.
- Ein GitHub-Konto mit einem aktiven Copilot-Abonnement.
- Eine lokale Installation der Copilot CLI in Version 1.0.71 oder höher.
Der GitHub-Beitrag zeigt eine vollständige Beispielanwendung auf Grundlage von Jakarta EE 11 und stellt den Quellcode zum Ausprobieren bereit. Das Unternehmen betont außerdem, dass Entwickler eigene Agenten mit den von ihnen gewählten Java-Frameworks und -Bibliotheken erstellen können.
Beispielanwendung zur Verwaltung von Immobilienanfragen
Das Beispiel verwendet eine Anwendung zur Verwaltung potenzieller Kunden im Immobiliensektor. Wenn ein Kunde eine Anfrage sendet, etwa nach einem Haus mit drei Schlafzimmern in London für weniger als 800.000 britische Pfund, erstellt das System einen isolierten Copilot-Agenten auf einem virtuellen Thread, um die Anfrage innerhalb eines festgelegten Arbeitsablaufs zu bearbeiten.
Die Anwendung verwendet Jakarta WebSocket, um Statusaktualisierungen in Echtzeit vom Server an den Browser zu senden. Dadurch lässt sich der Fortschritt der Agenten verfolgen, während sie Tools aufrufen. Mehrere Anfragen können gleichzeitig gesendet werden, wobei jede Anfrage unabhängig in ihrer eigenen Copilot-Sitzung verarbeitet wird.
Definition und Verwaltung von Tools
Die Bibliothek stellt die Schnittstelle @CopilotTool bereit, um Tools zu definieren, die das Modell aufrufen kann. Der Entwickler definiert eine gewöhnliche Java-Methode, während die Bibliothek das JSON-Schema erstellt, die Argumente analysiert und den Aufruf verteilt. Mit @CopilotToolParam kann jeder Parameter beschrieben werden, damit das Modell weiß, welcher Wert von ihm erwartet wird.
Diese Schnittstelle für Anmerkungen ist derzeit experimentell. Daher müssen experimentelle SDK-Schnittstellen über die Compileroption -Acopilot.experimental.allowed=true aktiviert und die Bibliothek in der Maven-Konfiguration als Teil des Pfads für Anmerkungsverarbeiter registriert werden. Die Verarbeitung erzeugt während des Kompilierungsvorgangs Metadaten für die Tools.
Neben Anmerkungen können Tools direkt am Verwendungsort über einen Lambda-Ausdruck mit ToolDefinition.from(...) definiert werden. Dadurch lässt sich ein Tool ohne eine eigene Methode erstellen. Außerdem bietet die Option overridesBuiltInTool(true) eine Möglichkeit, ein integriertes Tool durch ein benutzerdefiniertes Verhalten zu ersetzen. Tools können auch in Klassen getrennt von der Agentenlogik abgelegt und anschließend über ToolDefinition.fromObject registriert werden.
Nachrichten und Agenten-Workflow
Das SDK ermöglicht die Anpassung der Systemnachricht über SystemMessageMode.CUSTOMIZE. Dabei können bestimmte Abschnitte ersetzt und die übrigen Teile der Nachricht, einschließlich der Sicherheitsvorkehrungen, beibehalten werden. Außerdem steht der Modus APPEND zur Verfügung, um der standardmäßigen Systemnachricht Inhalte hinzuzufügen, ohne sie zu ersetzen.
Der vollständige Agenten-Workflow wird über sendAndWait(...) gestartet. Nach dem Senden des Prompts kann das Modell nachdenken, die registrierten Tools mehrfach aufrufen und anschließend das endgültige Ergebnis zurückgeben. Die Bibliothek übergibt die Tool-Ergebnisse an das Modell, bis die Aufgabe abgeschlossen ist. Virtuelle Threads ermöglichen das Warten über get(), ohne während des Wartens auf das Ergebnis einen herkömmlichen Thread zu belegen. Außerdem bietet session.on(...) die Möglichkeit, Ereignisse der Sitzung zu verarbeiten.