Gemini 2.5 Flash-Lite によるニューラル オペレーティング システムのシミュレーション

2025年6月25日
D Shin Senior Staff Software Engineer
Ali Eslami Research Scientist
Madhavi Sewak Technical Director

従来のコンピューティングでは、ユーザー インターフェースはあらかじめ定義されており、ボタン、メニュー、ウィンドウは、すべてデベロッパーが細心の注意を払ってコーディングしています。しかし、リアルタイムにインターフェースを生成し、インタラクションごとにユーザーのコンテキストに適応させることができるとしたら、どうなるでしょうか。私たちはこの問いを追求するため、無限の生成型コンピュータ エクスペリエンスを実現する研究プロトタイプ(Google AI Studio でデモアプリを表示)に取り組んでいます。

このプロトタイプは、大規模言語モデルがオンザフライで画面を生成するオペレーティング システムをシミュレーションしています。使っているのは、Gemini 2.5 Flash-Lite です。一瞬で高速なインタラクションを生成するためには、この低レイテンシ モデルが不可欠です。ユーザーが操作するのは、静的なファイル システムではなく、クリックするたびにモデルによって作成または再作成される環境です。本投稿では、このプロトタイプを支える中核的な技術の概要を説明します。

即時 UI 生成用にモデルを準備する

UI を即時に生成するには、リクエストのたびに、モデルに明確な構造とコンテキストを提供する必要があります。ここでは、モデルの入力を「UI 構成」と「UI インタラクション」の 2 つの部分に分割してプロンプトを設計しました。

UI 構成は、UI の生成に利用する固定のルールを含むシステム プロンプトです。このルールで、OS レベルのスタイル設定、ホーム画面の形式、マップなどの要素を埋め込むロジックなどの一貫した要素を定義します。

UI インタラクションは、マウスでアイコンをクリックするなど、ユーザーの最新のアクションをキャプチャする JSON オブジェクトです。このオブジェクトは、モデルに次の画面を生成させるための具体的なクエリとなります。たとえば、メモ帳アプリで「メモを保存」アイコンをクリックすると、次のようなオブジェクトが生成されます。

{
  // `id`: ボタンの `data-interaction-id` 属性から取得するユニーク ID。
  id: 'save_note_action',
 
  // `type`: `data-interaction-type` から取得するインタラクションの種類。
  type: 'button_press',
 
  // `value`: ボタンに `data-value-from` 属性があるので、システムは
  // ID 'notepad_main_textarea' のテキストエリアのコンテンツを受け取る。
  value: 'Meeting notes\n- Discuss Q3 roadmap\n- Finalize budget',
 
  // `elementType`: クリックされた要素の HTML タグ。
  elementType: 'button',
 
  // `elementText`: ボタンに表示されているテキスト。
  elementText: 'Save Note',
 
  // `appContext`: ユーザーが現在使用しているアプリケーションの ID。
  // これは `App.tsx` の `activeApp` 状態から取得する。
  appContext: 'notepad_app'
}
JSON

この 2 段階のコンテキスト設定アプローチにより、一貫したルック アンド フィールを維持しつつ、ユーザーのリアルタイム入力に応じて新しい画面を生成できます。


インタラクションを追跡してコンテキストを認識する

1 つのインタラクションからでも即座にコンテキストを把握できますが、一連のインタラクションがあればさらに詳しい状況までわかります。このプロトタイプでは、過去 N 回のインタラクションを追跡することで、コンテキストを細かく考慮した画面を生成しています。たとえば、電卓アプリでは、ユーザーが以前にショッピング カートや旅行予約アプリを利用した場合、異なるコンテンツが生成されるかもしれません。追跡するインタラクションの数を変えることで、コンテキストの正確さと UI の可変性のバランスを調整できます。


UI をストリーミングしてエクスペリエンスを高速化する

システムを高速化するには、モデルが UI 画面全体を生成するのを待つことなく、レンダリングを始める必要があります。このプロトタイプでは、モデルによるストリーミングとブラウザのネイティブ パーサーを活用したプログレッシブ レンダリングを実装しています。モデルは HTML コードをチャンク単位で生成し、そのたびにコンポーネントの状態が継続的に追加されます。React がコンテンツを再レンダリングしてくれるので、ブラウザが有効な HTML 要素を受け取ると、すぐにそれが表示されます。ユーザーには、インターフェースが一瞬で画面に表示されるように見えます。


生成型 UI グラフでステートフルを実現する

デフォルトでは、モデルはユーザーの入力ごとに、新しい画面をゼロから生成します。つまり、同じフォルダに 2 回アクセスしても、まったく異なるコンテンツが生成される可能性があります。私たちが慣れ親しんでいる GUI が静的であることを考えると、結果が一意に決まらないステートレスなエクスペリエンスが好ましくない場合もあるでしょう。そこで、プロトタイプをステートフルにできるように、このデモシステムには、インメモリ キャッシュを作成してセッション固有の UI グラフをモデリングするオプションを設けています。ユーザーが生成済みの画面に移動すると、再度 Gemini にリクエストせずに、グラフに格納されたバージョンを返します。ユーザーがキャッシュにない新しい画面を要求するにつれて、UI グラフは徐々に増加します。この方法は、生成型出力の品質を損なうことなく、状態を実現します。ただし、単にモデルのサンプリング温度を下げるだけだと、出力の品質が下がるという副作用が起きる場合があります。


ジャストインタイム生成型 UI を活用できるアプリケーション

これは考え方を示すためのプロトタイプですが、この基礎フレームワークを実用的なユースケースに適用することもできるでしょう。

  • コンテキストに応じたショートカット: ユーザーのインタラクション パターンを観察し、その場限りの UI パネルを生成することで、タスクを高速化できます。たとえば、ユーザーが複数のウェブサイトでフライトを比較する場合なら、ジャストインタイムにフローティング ウィジェットを表示して、価格を比較したり、フライトを直接予約したりするボタンを動的に生成します。こうすることで、ユーザーはいくつかのステップを省くことができます。

  • 既存アプリの「生成モード」: アプリケーションに「生成モード」を追加できます。たとえば Google カレンダーなら、このモードを有効したユーザーにジャストインタイム UI を表示できます。カレンダーで参加依頼を確認するときには、標準のダイアログを表示するのではなく、出席者のスケジュールに基づいて最適な時間を直接選択できるボタンがある画面を生成することができるでしょう。これにより、生成型 UI 要素と静的 UI 要素が 1 つのアプリケーションにシームレスに共存するハイブリッド エクスペリエンスを実現できます。


このような新しい概念を追求することで、人間とコンピュータのインタラクションの新たなパラダイムがどのように進化しているかを理解することができます。モデルは高速になり、機能が向上し続けています。このような生成型インターフェースは、今後の有望な研究開発の分野となるはずです。