GitHubは、Copilot SDK for Javaを発表した。これは、サーバー上のJavaアプリケーションからプログラムでCopilotエージェントを操作できるクライアントライブラリであり、エージェントのセッション作成、ツールの登録、プロンプトの送信、構造化された応答の受信を可能にする。GitHubによると、このライブラリはJavaフレームワークに依存しないよう設計されており、BYOKオプションもサポートするため、単一のAIプロバイダーに限定されない。
このライブラリはエンタープライズアプリケーションのJava開発者を対象としており、Jakarta EEやSpringを含むサーバー環境で動作する。また、特定のフレームワークに結び付いた方式を強制するのではなく、CompletableFuture、アノテーション、ラムダ、仮想スレッドといったJava開発者に馴染みのあるAPIを採用している。
提供状況と要件
このライブラリは現在、Maven依存関係として1.0.7-preview.1で提供されている。利用には以下が必要となる。
- JDK 17またはJDK 25。仮想スレッドやその他の最新機能を活用するため、JDK 25の使用が推奨される。
- Maven 3.9以降。
- 有効なCopilotサブスクリプションを持つGitHubアカウント。
- バージョン1.0.71以降のCopilot CLIをローカルにインストールしていること。
GitHubの投稿では、Jakarta EE 11で構築された完全なサンプルアプリケーションを紹介しており、試用できるソースコードも提供している。同社はまた、開発者が自分で選択したJavaフレームワークやライブラリを使用して独自のエージェントを構築できることを強調している。
不動産リクエスト管理のサンプルアプリケーション
この例では、不動産分野の見込み顧客を管理するアプリケーションを使用する。顧客が「ロンドンで、3ベッドルームの家を80万ポンド未満で探したい」といったリクエストを送信すると、システムは仮想スレッド上に分離されたCopilotエージェントを作成し、定義されたワークフロー内でリクエストを処理する。
アプリケーションはJakarta WebSocketを使用して、サーバーからブラウザーへリアルタイムで状態を更新し、エージェントがツールを呼び出す間の進行状況を確認できるようにする。また、複数のリクエストを同時に送信することもでき、各リクエストは独自のCopilotセッション内で独立して処理される。
ツールの定義と管理
このライブラリは、モデルが呼び出せるツールを定義するための@CopilotToolインターフェースを提供する。開発者は通常のJavaメソッドを定義し、ライブラリがJSONスキーマの作成、引数の解析、呼び出しのディスパッチを担う。各引数を説明するには@CopilotToolParamを使用でき、モデルが必要な値を把握できるようにする。
このアノテーションインターフェースは現在試験的なものである。そのため、コンパイラーオプション-Acopilot.experimental.allowed=trueで実験的なSDKインターフェースを有効にし、Maven設定でライブラリをアノテーションプロセッサーのパスに登録する必要がある。プロセッサーはコンパイル時にツールのメタデータを生成する。
アノテーションに加えて、ToolDefinition.from(...)を使用したラムダ方式により、使用箇所で直接ツールを定義することもできる。これにより、専用メソッドなしでツールを作成できる。また、overridesBuiltInTool(true)オプションを使えば、組み込みツールをカスタム動作に置き換えられる。さらに、ツールをエージェントのロジックとは別のクラスに配置し、ToolDefinition.fromObjectで登録することも可能である。
メッセージとエージェントのワークフロー
SDKでは、SystemMessageMode.CUSTOMIZEを使用してシステムメッセージをカスタマイズできる。特定のセクションを置き換えながら、安全ガードレールを含む残りのメッセージを維持できる。また、デフォルトのシステムメッセージを置き換えずに内容を追加するためのAPPENDモードも提供する。
エージェントの完全なワークフローはsendAndWait(...)によって開始される。プロンプトを送信すると、モデルは推論し、登録されたツールを複数回呼び出した後、最終結果を返すことができる。ライブラリはタスクが完了するまでツールの結果をモデルに渡す。仮想スレッドにより、結果を待つ間も従来のスレッドを消費せずにget()で待機できる。また、session.on(...)によって、セッションから発生するイベントを処理できる。