公開日: 2024 年 11 月 11 日
商品の解説 | ウェブ | 拡張機能 | Chrome のステータス | インテント |
---|---|---|---|---|
GitHub | 該当なし | 該当なし |
Prompt API を使用すると、ブラウザで Gemini Nano に自然言語リクエストを送信できます。
Prompt API は、Chrome 拡張機能のオリジン トライアルで利用できます。ウェブ デベロッパーは、早期プレビュー プログラムに参加することで、プロトタイピングと追加のユースケースの発見を目的とした探索 API を使用できます。
Chrome 拡張機能で Prompt API を使用する方法は多数あります。次に例を示します。
- カレンダーの即時予定。ウェブページから予定の詳細を自動的に抽出する Chrome 拡張機能を開発して、ユーザーが数ステップでカレンダーの予定を作成できるようにします。
- シームレスな連絡先の抽出。ウェブサイトから連絡先情報を抽出する拡張機能を作成して、ユーザーがビジネスに連絡したり、連絡先リストに詳細情報を追加したりしやすくします。
- 動的コンテンツ フィルタリング。ニュース記事を分析し、ユーザー定義のトピックに基づいてコンテンツを自動的にぼかしたり非表示にしたりできる Chrome 拡張機能を作成します。
これらはほんの一例にすぎませんが、皆様がどのようなものを作成されるか楽しみにしております。
使ってみる
Chrome 拡張機能で Prompt API を使用するには、拡張機能の manifest.json
に "aiLanguageModelOriginTrial"
権限と、拡張機能に必要なその他の権限を追加します。
{
"manifest_version": 3,
"name": "YOUR_EXTENSION_NAME",
"key": "YOUR_EXTENSION_KEY",
"permissions": ["aiLanguageModelOriginTrial"]
}
これにより、オリジン トライアルの期間のみ有効な一時的な権限が付与されます。API がリリースされた場合は、拡張機能を更新して再アップロードし、期限切れの権限を削除して最終的な権限に置き換える必要があります。
また、マニフェストに key
プロパティを追加して、拡張機能 ID の一貫性を保つことをおすすめします。
オリジン トライアルに参加する
Prompt API を Chrome 拡張機能に追加するには:
- Chrome 131 ~ 136 で実施される Prompt API オリジン トライアルに参加する。
ウェブオリジンとして、拡張機能の URL
chrome-extension://YOUR_EXTENSION_ID
を使用します。例:chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
マニフェストを更新して、試用トークンを配列として追加します。
{ "manifest_version": 3, "name": "YOUR_EXTENSION_NAME", "key": "YOUR_EXTENSION_KEY", "permissions": ["aiLanguageModelOriginTrial"], "trial_tokens": ["GENERATED_TOKEN"], }
拡張機能で Prompt API を使用する
Prompt API の使用許可をリクエストしたら、拡張機能を作成できます。chrome.aiOriginTrial.languageModel
名前空間で使用できる拡張関数は次の 2 つです。
capabilities()
を使用して、モデルの機能と利用可能かどうかを確認します。create()
: 言語モデル セッションを開始します。
モデルのダウンロード
Prompt API は、Chrome で Gemini Nano モデルを使用します。API は Chrome に組み込まれていますが、拡張機能が API を初めて使用するときにモデルが別途ダウンロードされます。
モデルが使用可能かどうかを確認するには、非同期 chrome.aiOriginTrial.languageModel.capabilities()
関数を呼び出します。available
フィールドを持つ AILanguageModelCapabilities
オブジェクトを返します。このフィールドには、次の 3 つの値を指定できます。
'no'
: 現在のブラウザは Prompt API をサポートしていますが、現時点では使用できません。モデルをダウンロードするための空きディスク容量が不足しているなど、さまざまな理由が考えられます。'readily'
: 現在のブラウザは Prompt API をサポートしており、すぐに使用できます。'after-download'
: 現在のブラウザは Prompt API をサポートしていますが、まずモデルをダウンロードする必要があります。
モデルのダウンロードをトリガーして言語モデル セッションを作成するには、非同期の chrome.aiOriginTrial.languageModel.create()
関数を呼び出します。capabilities()
へのレスポンスが 'after-download'
の場合、ダウンロードの進行状況をリッスンすることをおすすめします。これにより、ダウンロードに時間がかかる場合にユーザーに通知できます。
const session = await chrome.aiOriginTrial.languageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
モデルの機能
capabilities()
関数は、言語モデルの機能も通知します。結果の AILanguageModelCapabilities
オブジェクトには、available
のほかに次のフィールドもあります。
defaultTopK
: デフォルトの トップ K 値(デフォルト:3
)。maxTopK
: 最大 Top-K 値(8
)。defaultTemperature
: デフォルトの温度(1.0
)。温度値は0.0
~2.0
の範囲で指定する必要があります。
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
セッションを作成する
Prompt API が実行できることを確認したら、create()
関数でセッションを作成します。これにより、prompt()
関数または promptStreaming()
関数を使用してモデルにプロンプトを表示できます。
セッションをカスタマイズする
各セッションは、オプション オブジェクトを使用して topK
と temperature
でカスタマイズできます。これらのパラメータのデフォルト値は chrome.aiOriginTrial.languageModel.capabilities()
から返されます。
const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
topK: capabilities.defaultTopK,
});
create()
関数のオプション オブジェクトには、signal
フィールドも指定できます。これにより、AbortSignal
を渡してセッションを破棄できます。
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await chrome.aiOriginTrial.languageModel.create({
signal: controller.signal,
})
システム プロンプト
システム プロンプトを使用すると、言語モデルにコンテキストを提供できます。
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'
最初のプロンプト
初期プロンプトを使用すると、ブラウザの再起動後にユーザーが保存したセッションを再開できるように、以前のインタラクションに関するコンテキストを言語モデルに提供できます。
const session = await chrome.aiOriginTrial.languageModel.create({
initialPrompts: [
{ role: 'system', content: 'You are a helpful and friendly assistant.' },
{ role: 'user', content: 'What is the capital of Italy?' },
{ role: 'assistant', content: 'The capital of Italy is Rome.'},
{ role: 'user', content: 'What language is spoken there?' },
{ role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
]
});
セッションの制限
特定の言語モデル セッションで処理できるトークンの最大数があります。使用量と上限までの進捗状況は、セッション オブジェクトの次のプロパティを使用して確認できます。
console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
セッションの永続性
各セッションは、会話のコンテキストを追跡します。セッションのコンテキスト ウィンドウがいっぱいになるまで、以前のインタラクションは今後のインタラクションに考慮されます。
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: 'You are a friendly, helpful assistant specialized in clothing choices.'
});
const result1 = await session.prompt(
'What should I wear today? It is sunny. I am unsure between a t-shirt and a polo.'
);
console.log(result1);
const result2 = await session.prompt(
'That sounds great, but oh no, it is actually going to rain! New advice?'
);
console.log(result2);
セッションのクローンを作成する
リソースを保持するには、clone()
関数を使用して既存のセッションのクローンを作成します。会話のコンテキストはリセットされますが、最初のプロンプトまたはシステム プロンプトはそのまま残ります。clone()
関数は、signal
フィールドを持つオプション オブジェクトをオプションで受け取ります。このオプション オブジェクトを使用すると、AbortSignal
を渡してクローンを作成したセッションを破棄できます。
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
モデルにプロンプトを出す
モデルにプロンプトを表示するには、prompt()
関数または promptStreaming()
関数を使用します。
ストリーミング以外の出力
短い結果が予想される場合は、prompt()
関数を使用して、利用可能になったらレスポンスを返すことができます。
// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.languageModel.create();
// Prompt the model and wait for the whole result to come back.
const result = await session.prompt('Write me a poem!');
console.log(result);
}
ストリーミング出力
レスポンスが長くなる場合は、promptStreaming()
関数を使用します。この関数を使用すると、モデルから受信した部分的な結果を表示できます。
const {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.languageModel.create();
// Prompt the model and stream the result:
const stream = session.promptStreaming('Write me an extra-long poem!');
for await (const chunk of stream) {
console.log(chunk);
}
}
promptStreaming()
は、チャンクが連続してビルドされる ReadableStream
を返します。たとえば、"Hello,"
、"Hello world,"
、"Hello world I am,"
、"Hello world I am an AI."
。これは想定された動作ではありません。チャンクは 1 つの長いストリームの連続した部分であるため、プラットフォーム上の他のストリーミング API と整合させる予定です。つまり、出力は "Hello"
、" world"
、" I am"
、" an AI"
のようなシーケンスになります。
現時点では、意図した動作を実現するために、以下を実装できます。これは、標準動作と非標準動作の両方で機能します。
let result = '';
let previousChunk = '';
for await (const chunk of stream) {
const newChunk = chunk.startsWith(previousChunk)
? chunk.slice(previousChunk.length) : chunk;
console.log(newChunk);
result += newChunk;
previousChunk = chunk;
}
console.log(result);
プロンプトの実行を停止する
prompt()
と promptStreaming()
の両方では、signal
フィールドを含む 2 番目のパラメータ(省略可)を指定できます。これにより、プロンプトの実行を停止できます。
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt(
'Write me a poem!',
{ signal: controller.signal }
);
セッションを終了する
セッションが不要になった場合は、destroy()
を呼び出してリソースを解放します。セッションが破棄されると、そのセッションは使用できなくなり、進行中の実行は中止されます。セッションの作成には時間がかかるため、モデルに頻繁にプロンプトを表示する場合は、セッションを保持することをおすすめします。
await session.prompt(
'You are a friendly, helpful assistant specialized in clothing choices.'
);
session.destroy();
// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
'What should I wear today? It is sunny and I am unsure
between a t-shirt and a polo.'
);
デモ
Chrome 拡張機能で Prompt API をテストするには、デモ拡張機能をインストールします。拡張機能のソースコードは GitHub で入手できます。
参加してフィードバックを共有する
オリジン トライアルに参加して、Chrome 拡張機能で Prompt API のテストを始め、フィードバックをお寄せください。ご意見は、この API の今後のバージョンとすべての組み込み AI API の構築と実装に直接影響します。
- Chrome の実装に関するフィードバックについては、バグの報告または機能リクエストを送信してください。
- API のシェイプに関するフィードバックは、既存の問題にコメントするか、Prompt API GitHub リポジトリで新しい問題を報告してください。
- GitHub の Prompt API サンプル拡張機能をダウンロードします。
- Web Incubator コミュニティ グループに参加して、標準化の取り組みに参加してください。