Jetpack Compose 用の Agent-to-UI レンダラ(A2UI)

Jetpack Compose エージェントから UI(A2UI)へのレンダラは、A2UI プロトコルの実装を提供します。これにより、AI エージェントは、任意のコードを実行することなく、ネイティブの Compose コンポーネントをレンダリングするリッチでインタラクティブなユーザー インターフェースを生成できます。このライブラリは、イディオムの状態管理に準拠しながら、A2UI JSON プロトコルを Compose プリミティブにマッピングし、Compose スナップショット状態システムに基づくきめ細かいリアクティビティを提供します。

Compose A2UI レンダラ ライブラリには、次の機能があります。

  • 高パフォーマンスのリアクティビティ (androidx.a2ui.compose:compose-runtime): Compose スナップショット状態システムを活用して、きめ細かい UI の更新を実現します。これにより、ストリーミング エージェントの更新やユーザー操作の影響を受ける特定のコンポーネントのみが再コンポーズされます。
  • 柔軟なコンポーネント API とカスタマイズandroidx.a2ui.compose:compose-ui): JSON プロトコル スキーマをネイティブの Compose UI にマッピングするコンポーネント実装のカタログを定義するための構造化されたパターンを提供します。これにより、プログレッシブ レンダリング、サブコンポーネントのカスタム読み込み状態、アニメーション トランジション、エージェントにデータを送り返すことができる双方向データ バインディングをサポートするコンポーネントを構築できます。
  • デザイン システムに依存しないコア: ランタイム レイヤと UI レンダリング レイヤを特定のデザイン システムから独立させ、アプリのデザイン システム用のカスタム カタログを構築したり、提供されている基本カタログを採用したりできるようにします。
  • AI ハルシネーションの適切な処理androidx.a2ui:a2ui-modelandroidx.a2ui:a2ui-engine): 状態モデルに到達する前に不正なペイロードをインターセプトするスキーマ検証、コンポーネント エラー状態による適切なエラー処理、自己修正のためのエージェントへの自動エラー レポートを提供します。
  • 組み込みの基本カタログandroidx.compose.material3:material3-a2ui): マテリアル 3 コンポーネントを使用した、すぐに使用できる基本カタログの実装を提供します。Compose レンダラ上でプログレッシブ レンダリングとマテリアル テーマ設定をサポートします。

アーキテクチャの概要

すべての A2UI インターフェースはコンポーネント カタログによって駆動されます。エージェントが任意の UI コードを生成したり、登録されていないコンポーネントを考案したりするのではなく、カタログは、エージェントが使用できる特定の UI 要素、プロパティ、関数を定義するコントラクトとして機能します。カタログはコンポーネントを宣言し、エージェントはそれらを使用してユーザー インターフェースを構築します。

このモデルをサポートするため、Compose A2UI レンダラは、コアの設計システムに依存しないレンダリング エンジンを、前述の Jetpack アーティファクト全体にわたる具体的なカタログ実装から分離し、androidx.a2ui.compose:compose-ui-testing に専用のテスト API を提供します。

プロトコルの進化と API の互換性

Compose A2UI レンダラは現在、A2UI 仕様バージョン 0.9.1 をサポートしています。

UI(androidx.a2ui.compose:compose-ui)レイヤとランタイム レイヤ(androidx.a2ui.compose:compose-runtime)は、アプリとコンポーネント カタログ用の API サーフェスを提供します。一方、基盤となるデータレイヤ(androidx.a2ui:a2ui-modelandroidx.a2ui:a2ui-engine)は、プロトコル バージョン固有の解析とメッセージ処理を管理します。これらのライブラリは AndroidX の一部であるため、厳密なバイナリ互換性ルールが適用されます。たとえば、公開 API が安定版の 1.0.0 に達すると、クラスやインターフェースなどの公開 API サーフェスに破壊的変更は加えられません。

Compose A2UI レンダラは、次の戦略を使用してプロトコルの進化をサポートします。

UI とランタイム レンダラ API を進化させる

A2UI プロトコルが進化したり、新しい機能が追加されたりすると、レンダラ API は次の方法でこれらの変更をサポートします。

  • 非破壊的な API の追加: 新しい機能が導入されると、デフォルトの実装とともに、コアの公開インターフェース(A2uiComponentA2uiCatalog など)の一部になります。これにより、アプリのコンポーネントは変更なしでコンパイルと機能が継続されます。
  • 破壊的変更により古いインターフェースが非推奨になる: 将来のプロトコル アップデートで互換性のない変更が導入されると、古い互換性のないインターフェース(A2uiComponent など)は非推奨となり、新しいインターフェース(A2uiComponentV2 など)が導入され、それらと並行してサポートされます。

バージョン カタログとコンポーネントのスキーマ

カタログ スキーマ定義は、特定のプロトコル バージョンに関連付けられています。プロトコルが進化すると、カタログ定義もそれに応じて進化し、バージョンが上がります。この「次」のバージョンのコンポーネント実装では、更新されたレンダラ API を使用できます。

シームレスな移行を実現するため、クライアントはサポートされている複数のカタログ バージョンを宣言できます。エージェントは、機能ネゴシエーション フェーズでこれらのバージョンを取得します。