先日、Chromeの最新版(v148)で言語モデル(LanguageModel)APIが利用可能になりました。このAPIは、GoogleのGemini Nanoをブラウザ上で直接利用できるようにする画期的な機能です。このAPIは可能性を秘めている一方、Web標準のAPIにGoogle独自のGemini Nanoを組み込むことになるため賛否両論も巻き起こしています。今後仕様が変更される可能性もあるものの、現時点でもAPIが利用可能なので、さっそく試してみましょう。

  • Chrome最新版で追加された言語モデルAPIを使ってみよう

    Chrome最新版で追加された言語モデルAPIを使ってみよう

LanguageModel APIとは?

「LanguageModel API(通称:Prompt API、言語モデルAPI)」は、ブラウザに内蔵されているAIモデルを、直接JavaScriptで呼び出して利用できるようにする仕組みです。外部のクラウドサーバーにデータを送ることなく、ユーザーのデバイス上で、要約や翻訳・チャット・文書作成などのAI処理が完結するのが特徴です。オフラインでも動作するため、プライバシー面でのメリットもあります。

今回、このAPIのために、Chromeに搭載されたのは、Gemini Nanoです。これは、Googleが提供するGeminiシリーズの中では最も小型の言語モデルです。ただし、API利用時に、最小の言語モデルながら4GBものストレージを勝手に占有することになるために批判も出ています。

ちなみに、MicrosoftのブラウザEdgeでも同様のAPIを搭載する予定があります。ただし、Edgeでは、言語モデルに「Phi-4-mini-instruct」が採用されます。こちらの情報によれば、開発者プレビューのv138.0.3309.2以降で試すことができます。

実際に試してみよう - APIが利用可能かチェックしよう

今のところ、LanguageModel APIは、Chromeの最新バージョンでのみ利用可能です。以下のコードをブラウザのコンソールに貼り付けて、APIが動作するか確認してみましょう。Chromeのコンソールを起動するには、F12キーを押して「コンソール(Console)」タブを開くか、右クリックして「検証」を選択し「コンソール(Console)」タブを開いてください。

以下のコードをコンソールに貼り付けて実行してみましょう。以下は、LanguageModel APIが利用可能かどうかを調べるコードです。セキュリティの観点から、コンソールに動作が不明なコードを貼り付けないようにしましょう。また、最新のChromeではコンソールでコードを貼り付けて実行するために、「貼り付けを許可」と入力する必要がありました。

await LanguageModel.availability({
    expectedInputs: [{ type: 'text', languages: ['ja'] }],
    expectedOutputs: [{ type: 'text', languages: ['ja'] }]
});

実行すると、APIが利用可能な場合、下記のように「available」と表示されます。

  • LanguageModel APIが利用可能かどうか判定したところ

    LanguageModel APIが利用可能かどうか判定したところ

もし、利用できない場合には、いくつかの理由が考えられます。筆者がmacOSで試したところ、Chromeのバージョンが148.0.7778.168となっていました。最新版かどうかを確認してください。また、APIが無効に設定されている可能性もあります。Chromeのアドレスバーに「chrome://flags/」と入力して、「Prompt API for Gemini Nano」という項目が「Default」または「Enabled」になっているかを確認してください。

  • 利用できない場合はChromeの設定を見直そう

    利用できない場合はChromeの設定を見直そう

言語モデルのセッションを作成してみよう

続いて、APIが利用可能な場合には、以下のコードを実行してみましょう。これにより、Gemini Nanoのセッションが作成されます。セッションが作成されると、APIがモデルをダウンロードするため、ダウンロードの進捗がコンソールに表示されるはずです。

const session = await LanguageModel.create({
    expectedInputs: [{ type: 'text', languages: ['ja'] }],
    expectedOutputs: [{ type: 'text', languages: ['ja'] }],
    monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
            console.log(`Downloaded ${e.loaded * 100}%`);
        });
    },
});
console.log(session);

無事に、正しくセッションが作成されると、次のように、コンソールにセッションオブジェクトが表示されます。

  • セッションの作成を試みたところ

    セッションの作成を試みたところ

現在の仕様では、ストレージサイズが不足している場合や、そもそもマシンの性能が不足している場合には、APIが利用できない可能性があります。

試しに、敢えて筆者がmacOS上のWindows仮想環境で試したところ、コンソールに「Uncaught NotSupportedError: The device is not eligible for running on-device model.(訳: このデバイスはオンデバイスモデルの実行条件を満たしていません)」というエラーが表示されました。

  • 性能不足の環境で試したところ

    性能不足の環境で試したところ

なお、Chromeの設定(chrome://on-device-internals/)から、ダウンロードされたモデルのストレージ使用量や、Gemini Nanoのバージョンを確認することができます。

  • Chromeの設定でGemini Nanoのバージョンやモデルのサイズを確認できる

    Chromeの設定でGemini Nanoのバージョンやモデルのサイズを確認できる

推論させてみよう

セッションが作成できたら、実際に推論をさせてみましょう。以下のコードを実行してみてください。これは、Gemini Nanoに対して、質問を行うものです。

await session.prompt('可愛い猫の名前を3つ考えて');

すると、少し待った後で、次のような結果が返ってくるはずです。筆者のマシンMacBook Pro M4では、上記のような簡単な質問では、数秒で応答が返ってきました。答えは、毎回異なるものになります。

  • プロンプトを入力してGeminiからの応答を表示したところ

    プロンプトを入力してGeminiからの応答を表示したところ

下記のような簡単な知識を問う質問でも数秒以内に答えが返ってきました。

await session.prompt('日本で一番高い山は?');

しかし、次のような少し複雑な質問をしてみると、応答が返ってくるまでに20秒ほどかかることもありました。

await session.prompt('人間とAIの違いは?');

簡単な質問応答アプリを作ってみよう

それでは、上記のAPIを利用して簡単な質問応答アプリを作ってみましょう。どれほどの推論ができるのか試すことができます。こちらにHTML/JavaScriptのコードを用意しました。「prompt_test.html」と「style.css」をダウンロードして、同じフォルダに配置しましょう。そして、ブラウザに「prompt_test.html」をドラッグ&ドロップして開いてみてください。

まとめ

以上、今回は、Chromeの最新バージョンで利用可能になったLanguageModel APIを使って、GoogleのGemini Nanoをブラウザ上で試してみました。APIが利用可能かどうかの確認方法から、セッションの作成、実際に推論させる方法までを紹介しました。さらに、簡単な質問応答アプリも作成してみました。このAPIが今後どのように活用されていくのか、また、他のブラウザやモデルがどのように対応していくのか、とても楽しみです。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「実践力をアップする Pythonによるアルゴリズムの教科書(マイナビ出版)」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。