Web Analytics

Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Chrome統合Gemini Nanoの呼び出し - Chrome Version 128の場合、129以降の場合

昨年、RAM=8GBのPC環境上で生成AIを動作させていた*1。約1年が経過し、今やLLMはブラウザに統合され、直接ブラウザ内のコンソールからLLMを呼び出すことのできる時代が到来した。

developer.chrome.com

Google Chromeの場合、Version 128以降から、APIを介してGemini Nanoモデルをブラウザ内のコンソールから呼び出すことができるのだ。小型のLLMとはいえ、昨年、散々試したのと本質的に同じことが、"out-of-the-box"に実現できてしまうのだ。

しかし、やはり落とし穴はある。Version 128、129で、すでにAPIの仕様が変更されている。すでに、いろいろなブログなどでGemini Nanoの動かし方は紹介されているのだが、確認した範囲では、すべてVersion 128向けの情報だった。Version 129以降で動かすには、新しいAPIに合わせたスクリプトを実行する必要がある。

この違いも含めて、この投稿ではGemini Nanoの動かし方を紹介する。

この投稿時点でのChrome

Chromeにはリリース・チャンネル*2が定義されている。一般的に流通している安定板でStableと呼ばれるもの、開発者向けのDev、さらに試験的で不安定なCanaryが存在している。
先に触れたように、128、129間でAPIの仕様が異なっている。投稿時点でのメジャー・バージョンは、

Stable 128
Dev 129
Canary 130

この違いにより、Gemini Nanoを動作させるためのスクリプトは、APIに合わせて異なる記述をする必要がある。

厄介なのはCanaryだ。129向けのスクリプトを用いる前提なのだが、現時点で、Canary 130ではGemini Nanoを動作させることができない。これは、130でさらにAPIが変化することを意味しているのではない。昨日まで動いていたものが、今日は動かない、あるいは今日動いていたものが、明日動かなくなるような、Canary特有の不安定さに由来した問題だ。そして、このような問題は,
次のリンク先で示されているように、今回に限ったことではない。

issues.chromium.org

そして実際、Chrome Canary 130では動作しない。

Chromeの設定変更

まず次のURLを参照し、指定する2項目の値を変更し、ブラウザを再起動する。

Enables optimization guide on deviceEnabled BypassPerfRequirement

chrome://flags/#optimization-guide-on-device-model

Prompt API for Gemini NanoEnabled

chrome://flags/#prompt-api-for-gemini-nano

コンポーネントのダウンロード

ここからはChromeに付属しているDeveloper ToolsのConsoleを通じて操作する。コンソールからスクリプトを実行し、APIを呼び出す。先に触れたとおり、Chromeのバージョンによってスクリプトの記述が異なる。
Version 128、あるいは129以降で、それぞれ異なるスクリプトを実行する。実行後、エラーが出力されるが問題ない。

128

await ai.createTextSession();

129以降

await ai.assistant.create();

実行後、次のURLを参照し、指定された項目のボタン「Check for Update」を押すと、コンポーネントのダウンロードが始まる。ダウンロードが完了したら、再びブラウザを再起動する。

Optimization Gruide On Device Model

chrome://components

Prompt APIの呼び出し

再びDeveloper ToolsのConsoleを通じて操作する。コンソールからスクリプトを実行し、プロンプトとともにAPIを呼び出すことで、Gemini Nanoからプロンプトに応じた回答を得ることができる。
やはりVersion 128と、129以降では、呼び出しに用いるスクリプトの記述、具体的には、セッション開始コードが異なっている。以下は、典型的な記述例だ。

128

const session = await ai.createTextSession();
const result = await session.prompt("hello gemini");
console.log(result);

129以降

const session = await ai.assistant.create();
const result = await session.prompt("hello gemini");
console.log(result);

このコードを実行すると、Gemini Nanoからの応答が出力される。日本語での応答にも対応していることが分かる。

スクリプトを次のように書き換えることで、トークンごとに出力することもできる。

const stream = session.promptStreaming("2024年9月4日、シアトルの気候はどのような感じですか?");
for await (const chunk of stream){console.log(chunk)};

各自で試す際には、今後のAPI仕様変更の情報を含め、Prompt APIの書き方など、巻末に示す資料も併せて参照してほしい。