ある開発者が3億5000万パラメータの言語モデルを微調整(fine-tune)し、サーバー通信、APIキー、クラウド費用を一切必要とせず、あらゆる最新のウェブブラウザ上で動作する完全なAIアシスタントとしてデプロイしました。
このプロジェクトは、モデルの重みを静的なウェブページと共に配布することで、エージェントがツールの選択、引数のバインド、「2番目のもの」といった参照の解決、そして情報不足時の回答拒否を行えるようにしています。その間も、データは常にユーザー自身のデバイス内に留まります。
ブラウザベースのエージェントがどのように構築されたか
出発点はLiquidAIのLFM2.5ファミリー、具体的には230Mおよび350Mパラメータのバリアントでした。
製品カタログや価格表をモデルに詰め込む代わりに、トレーナーはインタラクションの「パターン」を学習させました。エージェントは特定のSKUを知っているわけではなく、以下の方法を学習しています:
- 与えられたリクエストに対して適切なツールを選択する。
- そのツールに対して正しい引数と識別子をバインドする。
- 曖昧な参照(「1ダース」「2番目のもの」など)を解釈する。
- 外部テキストを取り込み、それを使用して質問に回答する。
- 必要な情報が不足している場合に回答を断る。
- 会話のトピックを維持する。
ツールセットは意図的に固定されています:list_items, get_item, search_knowledge, add_to_cart, remove_from_cart, clear_cart, checkout, navigate。ツールリストを固定することで、モデルがツールIDを暗記してしまうのを防ぎ、微調整用のデータを軽量に保っています。
システムを軽量に保つための3つのエンジニアリング上の選択:
- 固定されたツールリスト – モデルは固定されたアクションリストのみを見るため、膨大なツール名の語彙を必要としません。
- ツールとしてのRAG – 検索拡張生成(RAG)を他の関数と同様に扱います。エージェントは
search_knowledgeを呼び出してテキストを取得し、そのテキストを回答に直接挿入します。これにより、レイテンシやメモリオーバーヘッドを増大させる個別の検索パイプラインを回避しています。 - 文法制約付きデコーディング(Grammar-constrained decoding) – 生成プロセスにおいて、デコーダーは出力が有効なツール呼び出し構造になるよう強制するシンプルな文法に従います。この制約により、無駄なトークンを排除し、不正なコマンドを削減します。
学習には合成データの蒸留(synthetic data distillation)が使用されました。著者は、典型的なユーザーとアシスタントのやり取りを記述した18のインタラクション・レシピを定義しました。より大規模な「教師」モデルが自然言語部分を生成し、決定論的なスクリプトが正確なツール呼び出し形式を生成しました。微調整の実行には約3000万トークンが消費され、メモリ16GBの単一GPUに収まりました。
なぜオンデバイスが重要なのか
- プライバシー – すべてのユーザープロンプトはブラウザのメモリ内に留まります。機密性の高いクエリにおいて重要な、デバイス外へのテレメトリ(遠隔測定データ)の送信もありません。
- オフライン機能 – モデルがローカルにキャッシュされているため、インターネット接続なしでもアシスタントが動作し、フィールドワークや旅行などの可能性を広げます。
- コスト – 静的なモデルファイルを配布することで、継続的なGPU推論サーバーの運用や、呼び出しごとのAPI料金を排除できます。
- アクセシビリティ – 低スペックのデバイスでも、複雑なウェブインターフェースの音声駆動ナビゲーションが可能になり、支援技術を利用するユーザーへのウェブアプリケーションの普及につながります。
これらの利点により、議論の焦点は「巨大なモデルがこれに答えられるか?」から、「有用な支援を提供しつつ、モデルをどこまで小さくできるか?」へとシフトします。
潜在的な制限事項
このサイズのモデルは、百科事典的な事実を保持することはできません。ユーザーが特定の製品価格や最新のニュースの見出しを尋ねた場合、アシスタントはsearch_knowledgeを介して情報を取得するか、丁寧に回答を拒否します。この設計はプライバシーを保護しますが、同時にシステムの性能を外部知識ソースの質と鮮度に依存させることにもなります。
今後の注目点
公開デモはシンプルなGitHub PagesのURLで公開されており、ソースコードもオープンに利用可能です。
要点: 中規模のLLMに厳格なツール文法に従うよう教え、検索を単なる一つの関数として扱うことで、開発者はブラウザ内で完全に動作する有用なAIアシスタントを提供できます。これにより、会話能力を損なうことなく、プライバシー、オフライン利用、そしてクラウドコストゼロを実現できます。
