公開日: 2024 年 1 月 13 日
これは、LLM チャットボットに関する 3 部構成シリーズの最後の記事です。前回の記事では、クライアントサイド LLM のパワーについて説明しました。また、WebLLM を搭載した chatbot を To-Do リスト アプリケーションに追加する方法についても説明しました。
新しいデバイスの中には、大規模言語モデルやその他の AI モデルがデバイスに搭載されているものもあります。Chrome では、組み込み AI API をブラウザに統合することを提案しており、さまざまな API が開発のさまざまな段階にあります。これらの API の多くは標準化プロセスを経て、ウェブサイトが同じ実装とモデルを使用して最大限の推論パフォーマンスを達成できるようにしています。
Prompt API はそのような AI API の 1 つです。デベロッパーは、早期プレビュー プログラムに登録することをおすすめします。承認されると、ブラウザで Prompt API を有効にする手順が届きます。Prompt API は Chrome 拡張機能のオリジン トライアルで利用できるため、実際の拡張機能ユーザーに対してこの API をテストできます。
共有モデルへのアクセス
Prompt API は WebLLM と同様に動作します。ただし、今回はモデル選択はありません(ブラウザに付属の LLM を使用する必要があります)。組み込み AI を有効にすると、Chrome は Gemini Nano をブラウザにダウンロードします。このモデルは、複数のオリジン間で共有して、最大限のパフォーマンスで実行できます。モデル選択機能の追加をリクエストするデベロッパーの GitHub の問題があります。
会話を設定する
メッセージの会話はまったく同じ方法で開始できますが、Prompt API にはシステム プロンプトを指定するための省略形の構文も用意されています。self.ai.languageModel
プロパティの create()
メソッドを使用して、言語モデル セッションを開始します。
const session = await self.ai.languageModel.create({
systemPrompt: `You are a helpful assistant. You will answer questions related
to the user's to-do list. Decline all other requests not related to the user's
todos. This is the to-do list in JSON: ${JSON.stringify(todos)}`,
});
最初の質問に回答する
ストリーミングを構成するための構成オブジェクトではなく、Prompt API には次の 2 つの方法があります。
prompt()
は完全な文字列を返します。promptStreaming()
は非同期イテラブルを返します。WebLLM とは対照的に、Prompt API は完全な文字列レスポンスを返すため、結果を自分で結合する必要はありません。
これまでに他のオリジンがモデルのダウンロードをトリガーしたことがない場合は、最初のリクエストで Gemini Nano がブラウザにダウンロードされるまでに非常に時間がかかることがあります。モデルがすでに使用可能な場合は、推論がすぐに開始されます。
const stream = session.promptStreaming("How many open todos do I have?");
for await (const reply of stream) {
console.log(reply);
}
デモ
概要
LLM をアプリに統合することで、ユーザー エクスペリエンスを大幅に向上させることができます。クラウド サービスは、ユーザーのデバイスに関係なく、高品質のモデルと高い推論パフォーマンスを提供しますが、WebLLM や Chrome の Prompt API などのオンデバイス ソリューションは、クラウドベースの代替ソリューションと比較して、オフライン対応、プライバシーの向上、費用の削減が可能です。これらの新しい API を試して、ウェブ アプリケーションをよりスマートにしましょう。