Chrome Built-in AI API をざっくり
先日W3Cのブースで色々聞いて、ブラウザに組み込まれたAIが使えるのを全然チェックできてなかったのを悔やんだので調べてみた。
https://developer.chrome.com/docs/ai/get-started?hl=ja
見てるだけじゃわからないのでざっくりまとめて触れる確認ページを作ってみた。
https://wakasa.org/project/localllmcheck/
※PC系OS+Chromeのみで動作。ページ上部の動作チェック部分にtrueがあるものだけ動く。
※AI先生がざっくり作ったのを手直し
※Chromeのフラグいじらなくても動くらしい
今回の対象
- Translator
- LanguageDetector
- Summarizer
- Writer (*)
- Rewriter (*)
- Proofreader (*)
- LanguageModel
- 画像入力つきの prompt
※Write、Rewriter、Proofreaderは別途申告が必要ですが現在申請が閉じてるようです
これは何をするページか
目的は「実用アプリを作ること」ではなく、ブラウザからそのまま API を叩いたときに何ができるか確認する俺得アプリです。
たとえば次のようなことを確認できます。
- API がその環境で使えるか
- 初回実行時にモデルダウンロードが走るか
- 2回目以降にキャッシュされるか
- temperature / topK の違いで出力がどう変わるか
- prompt 系で言語ヒントを変えるとどうなるか
- 画像つき prompt が通るか
作ったものの方針
今回はアプリとしてのわかりにくいですがシンプルにどれくらい時間がかかるかなど計測するようにしています。
今後ブラウザ上でモデルが変わったりしたら速度を測定したいとかは出てくると思うので。
以下の方針で実装はしてあります。
- 可能な限り API をそのまま呼ぶ
- 実行時間とダウンロード進捗を見えるようにする
- モデル用に作ったオブジェクトの再利用状況も見えるようにする
text 系で試せるもの
text 側では以下の API を切り替えて実行できます。
- translator
- languageDetector
- summarizer
- writer (*)
- rewriter (*)
- proofreader (*)
- prompt
※Write、Rewriter、Proofreaderは別途申告が必要ですが現在申請が閉じてるようです
input のテキストはサンプルで長文のものなども読み込めるようにしています。
translator
sourceLanguage と targetLanguage を指定して翻訳します。
翻訳に関しては速度は短文の場合は実用的な速度が出るのですが、翻訳精度的に実用なのかどうかはわかりません。
languageDetector
入力テキストの言語判定です。
複雑な UI は不要なので、単純に入力テキストをそのまま流しています。
まぁそうだよね。という内容でしかないけど言語判別には使えそうでそういう時にさらっと使いたい。
summarizer
要約のAPIです。
プロンプトでやらずに短めとかheadlineにしてとかできます。
細かい指定として context を第2引数側で渡せるので、本文とは別で送れます。
たぶん一番使われる可能性が高いものなので作り込みがしっかりしてる印象です。
writer / rewriter / proofreader
試せずよくわかってません。
prompt
LanguageModel を使った prompt 実行です。
ピュアにテキストを渡してというLLMな使い方になります。追加で入力できるフィールドは用意してるのですがinputの後ろに付け加えてるだけです。
また、inputLanguages / outputLanguages は 優先順位などもあるため CSV 形式にしてます。
image(prompt)
分けていますが上記のpromptに画像入力も可能だったので切り出しています。getUsermediaでカメラたちあげて静止画を渡せるようにしています。
サーバになどは投げていませんのでお気軽に撮影してください。
なので必ずstartCameraでカメラ立ち上げ要求を許可した上でcaptureしてから実行してください。
まとめ
Built-in AI API を触っていてモデルのDonwloadは早い(というかLocalのを使ってるからだと思う)のでそこはボトルネックにはなってなさそう。
あとモデルを使い回すかどうかではメモリ量は影響しますが時間としては多少はあるもののそんなに大きな影響はなさそう。
ただ同条件でも出力の量にも依存するのですが長文でも3秒くらいでサクッと行く時と短文なのに十数秒かかる時とかあってムラが多いのは如何ともし難いところだなぁという感じです。
あと言語の優先順位を変えても日本語で出ないとかもあったりします。
とりあえず1.3万字くらいは入れられるのでそれなりの文章の要約に使えるのですが、まぁ時間がかかるのでUIちゃんとしないとという感じではあります。アプリなら体験的に可能だけどいかんせんブラウザだから感覚がちょっと違うんですよね。
何に使うかというところでは色々難しいところはあるんですが、ブラウザの特性を活かすというよりも時間軸があるものに対してザクザクかけてくみたいな用途が向いてそうだなぁという感じです。