naoki.yokohama

Chromeに内蔵されたローカルLLMを使ってみる

Chrome に、ローカル LLM (Gemini Nano) を内蔵させて動かす Prompt API が乗りました。
本記事では、後半の 【活用】 セクションにあるボタンを押すだけでも、体験できるようになっています(Chromeで開いてね!)。

開発者でない方にも威力が伝わって、これからのWebサイトがどうなっていくのか想像を膨らませてもらえたらイイな。

長めなのでインデックス↓

いつから使える?

年月日 Chrome バージョン 内容
2024-11-12 Chrome 131〜136 拡張機能向けに origin trial (試験運用)。まずは拡張開発者だけが触れる時期。
2025-06-24 Chrome 138(stable) 拡張機能向けに正式版。同タイミングで Summarizer / Translator / Language Detector なども安定版に。
2026-05-05 Chrome 148(stable) Web ページ(通常のサイト)向けに安定版window.LanguageModel がそのまま使えるように。マルチモーダル(画像・音声入力)やサンプリングパラメータは引き続き origin trial で段階展開。

とりあえず、普通のサイトで使えるようになったのは割と最近ということ。

使える機種

on-device で数 GB のモデルを動かすので、それなりのスペックが求められます。

  • OS: Windows 10/11、macOS 13(Ventura)以降、Linux、Chromebook Plus(ChromeOS 16389.0.0+)
  • 空き容量: 22GB 以上(モデル格納用。割り込むと自動で削除されることがある)
  • GPU 経路: VRAM 4GB 以上
  • CPU 経路: RAM 16GB 以上 + 4 コア以上

スマホ(iOS、Android)、通常の Chromebook は今のところ非対応です。

使い始めるには?

DevTools の Console で下記の操作をします。
※ 記事後半の 【活用】 セクションにあるボタンを押すだけでも始められます。このセクションは丁寧に使い始めたい方向けです。

自分が使える環境か確認

そもそも API が来ているか(Chrome のバージョン/対応プラットフォーム)
※ここで筐体スペックの判定はしていません。

'LanguageModel' in self

"true" → API あり
"false" → 未対応

この筐体で実際に使えるか(スペック・空き容量・モデル状態込み)

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

"unavailable" → この端末では使えない(要件未達・空き容量不足など)
"downloadable" → 使える。初回は create() でモデルDLが要る
"downloading" → DL中
"available" → 即使える(DL済み)

APIを叩く

create() でセッション作成。初回実行時にモデルのDLが走ります。
出力言語(expectedOutputs)を指定しないと「出力言語を指定してください(en/es/ja)」という警告が出るので、日本語なら ja を渡しておくとよいです。

const session = await LanguageModel.create({
  expectedInputs: [{ type: "text", languages: ["ja"] }],
  expectedOutputs: [{ type: "text", languages: ["ja"] }],
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`ダウンロード: ${Math.round(e.loaded * 100)}%`);
    });
  },
});

Console 上で出力させてみる

const stream = session.promptStreaming("ping");
let result = "";
for await (const chunk of stream) {
  result += chunk;
}
console.log(result);

公式のお試しサイト

Prompt API Playground を対応 Chrome で開くと、その場で on-device のチャットを試せます。
当然、 Network タブに動きはありません。

おまけ: Chrome 過去の炎上

availability() はあくまで状態を返すだけでDLのトリガーにはならず、モデルのDLが走るのは create() を呼んだとき。

これは、初期に「サイトを開いただけで数 GB のモデルが勝手に落ちてくる」挙動が炎上したからのようです。
「ユーザーの操作を起点に、進捗を見せながら落とす」のが現行の作法となっています。

【活用 Lv.1】チャットをページに組み込む

サイト内で使えている確認と、ローカルLLMのスピード感を体験してみます。

🤖 AIチャットセクション

対応状況を確認中…

【活用 Lv.2】サイトUIを着せ替え

実用性はあやしいけど、AIらしい機能をクライアント側で実現します。

🎨 着せ替えをしてみよう

対応状況を確認中…

【活用 Lv.3】「深掘りモード」を実装

本ブログサイト全体の(他記事でも右下のボタンから使える)機能として、ページ内の任意の場所を長押しすると、割り込む形で深掘り質問できる機能を追加しました。知らない単語があっても、タブを移動せず、記事内でのニュアンスを考慮した回答を得られます。

ローカルLLMでの実装価値として、下記が挙げられます。

  • 基本的に応答が速い
  • APIの従量課金を気にせず、各々で使ってもらえる

🔍 深掘りモード

注意: インストールしたくない人へ

前述のとおり、何の操作もなしに(アクセスしただけで)モデルが落ちてくることは Chrome が禁止しています(DL を伴う create() にはユーザー操作が必須)。

ただし、このガードが見ているのは「何らかのユーザー操作があったか」だけで、開発者は create() のトリガを任意の場所に仕込めるので、厳密には専用の同意ボタンである必要はなくページ上のどんなクリックやキー入力でも条件を満たしてしまう状態です。 「閉じる」ボタン等、一見 AI と無関係なクリックに便乗させて、ユーザーが意図しないうちに約 1.5GB のDLを始めさせる、といったことも技術的には可能となっています。

どうしようもないけど注意しましょう?!

入ってしまったモデルを消したいとき

  1. 入っているか確認: アドレスバーに chrome://components と入力し、「Optimization Guide On Device Model」を探す。
    バージョンが入っていればモデルがある証拠(0.0.0.0 なら未DL)。
  2. 設定から無効化+削除: アドレスバーに chrome://settings/system と入力(または 設定 → システム)し、「On-device AI (オンデバイス AI)」のトグルをオフにすると、無効化+モデル削除までやってくれる。
    これが一番ラクで確実(2026年2月頃から順次提供)。見当たらなければ chrome://settings/ai も確認。
  3. 再ダウンロードを止める: 上記が見当たらない場合は chrome://flags を開き、検索窓で「guide」を検索 →「Enables optimization guide on-device」を Disabled に。
    これをやらないと、次回起動時にまた落ちてくることがある。

利用を再開したい時は、Chromeを再起動する必要があるようです。

考察・感想

  • まだ使える端末要件は厳しく感じるけど、いずれユーザー端末も追いついてくると思うので、これがデフォルトとなればWebが今とはかなり違う設計・体験になりそう(画期的な使い方はまだ思いつかないけど)。楽しみではある。
  • 今はターゲットを検索ワードごと等で分類してLPを出し分けるけど、ユーザー端末が追いつけば、検索ワードごとに無限種のLPを出し分け(ているようにクライアント側で整形させる)ようになってたり...?