Prompt API を使用してローカルおよびオフライン対応の chatbot を作成する

公開日: 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 を試して、ウェブ アプリケーションをよりスマートにしましょう。