Prompt API は、Web サイトまたはブラウザー拡張機能の JavaScript コードから、Microsoft Edge に組み込まれている小さな言語モデル (SLM) を確認できる実験的な Web API です。 Prompt API を使用して、テキストの生成と分析、またはユーザー入力に基づくアプリケーション ロジックの作成を行い、プロンプト エンジニアリング機能を Web アプリケーションに統合する革新的な方法を発見します。
詳細な内容:
- Prompt API を使用して組み込みの言語モデルをプロンプト表示する
Prompt API の可用性
Prompt API は、バージョン 138.0.3309.2 以降の Microsoft Edge Canary または Dev チャネルで開発者プレビューとして使用できます。
Prompt API は、ユース ケースを検出し、組み込みの SLM の課題を理解するのに役立ちます。 この API は、書き込み支援やテキスト翻訳などの特定の AI を利用するタスクに対して、他の試験的 API によって成功することが期待されます。 これらの他の API の詳細については、次を参照してください。
Prompt API の代替手段と利点
Web サイトとブラウザー拡張機能で AI 機能を活用するには、次の方法を使用することもできます。
Azure AI ソリューションなどのクラウドベースの AI サービスにネットワーク要求を送信します。
Web ニューラル ネットワーク (WebNN) API または ONNX Runtime for Web を使用して、ローカル AI モデルを実行します。
Prompt API では、モデルの入力と出力が使用されているのと同じデバイスで実行される SLM が使用されます (つまり、ローカル)。 これには、クラウドベースのソリューションと比較して、次の利点があります。
コストの削減: クラウド AI サービスの使用に関連するコストはありません。
ネットワークの独立性: 最初のモデルのダウンロードを超えて、モデルを要求する際のネットワーク待機時間はなく、デバイスがオフラインのときにも使用される場合があります。
プライバシーの向上: モデルへのデータ入力がデバイスから離れることはなく、AI モデルをトレーニングするために収集されることはありません。
Prompt API は、Microsoft Edge によって提供され、ブラウザーに組み込まれているモデルを使用します。これには、WebGPU、WebNN、WebAssembly に基づくカスタム ローカル ソリューションよりも追加の利点があります。
共有 1 回限りのコスト: ブラウザーで実行されるすべての Web サイトで API が初めて呼び出されて共有されるときに、ブラウザーから提供されるモデルがダウンロードされ、ユーザーと開発者のネットワーク コストが削減されます。
Web 開発者向けの簡略化された使用方法: 組み込みモデルは、単純な Web API を使用して実行でき、AI/ML の専門知識やサードパーティのフレームワークを使用する必要はありません。
Phi-4-mini モデル
Prompt API を使用すると、Microsoft Edge に組み込まれているテキスト ベースのタスクに優れた強力な小さな言語モデルである Phi-4-mini をプロンプトできます。 Phi-4-mini とその機能の詳細については、microsoft/Phi-4-mini-instruct でカードモデルを参照してください。
免責事項
他の言語モデルと同様に、Phi ファミリのモデルは、不公平、信頼性の低い、または攻撃的な方法で動作する可能性があります。 モデルの AI に関する考慮事項の詳細については、「 責任ある AI に関する考慮事項」を参照してください。
ハードウェア要件
Prompt API 開発者プレビューは、予測可能な品質と待機時間で SLM 出力を生成するハードウェア機能を備えたデバイスで動作することを目的としています。 Prompt API は現在、次に制限されています。
オペレーティング システム: Windows 10または 11 および macOS 13.3 以降。
貯蔵: Edge プロファイルを含むボリュームで少なくとも 20 GB を使用できます。 使用可能なストレージが 10 GB を下回ると、モデルが削除され、他のブラウザー機能が機能するのに十分な領域が確保されます。
GPU: 5.5 GB 以上の VRAM。
ネットワーク: 無制限のデータ プランまたは測定されていない接続。 従量制課金接続を使用している場合、モデルはダウンロードされません。
デバイスで Prompt API 開発者プレビューがサポートされているかどうかをチェックするには、以下の「Prompt API を有効にする」を参照し、デバイス のパフォーマンス クラスをチェックします。
Prompt API の実験的な性質により、特定のハードウェア構成に関する問題が発生する可能性があります。 特定のハードウェア構成に関する問題が表示される場合は、MSEdgeExplainers リポジトリで 新しい問題を開 いてフィードバックを提供してください。
モデルの可用性
Web サイトが組み込みの AI API を初めて呼び出す場合は、モデルの初回ダウンロードが必要になります。 新しい Prompt API セッションを作成するときに、monitor オプションを使用してモデルのダウンロードを監視できます。 詳細については、以下 の「モデルのダウンロードの進行状況を監視する」を参照してください。
プロンプト API を有効にする
Microsoft Edge で Prompt API を使用するには:
最新バージョンの Microsoft Edge Canary または Dev (バージョン 138.0.3309.2 以降) を使用していることを確認します。 「Microsoft Edge Insider になる」を参照してください。
Microsoft Edge Canary または Dev で、新しいタブまたはウィンドウを開き、[
edge://flags/
] に移動します。検索ボックスで、ページの上部にある「 Prompt API for Phi mini」と入力します。
ページがフィルター処理され、一致するフラグが表示されます。
[ Prompt API for Phi mini] で、[ 有効] を選択します。
必要に応じて、問題のデバッグに役立つ可能性のある情報をローカルでログに記録するには、[ デバイス AI モデルのデバッグ ログで有効にする] フラグも有効にします。
Microsoft Edge Canary または Dev を再起動します。
デバイスが Prompt API 開発者プレビューのハードウェア要件を満たしているかどうかをチェックするには、新しいタブを開き、[
edge://on-device-internals
] に移動し、[デバイス パフォーマンス クラス] の値をチェックします。デバイス のパフォーマンス クラスが High 以上の場合は、デバイスで Prompt API がサポートされている必要があります。 問題が引き続き発生する場合は、MSEdgeExplainers リポジトリで 新しい問題を作成 してください。
作業例を参照する
プロンプト API の動作を確認し、API を使用する既存のコードを確認するには:
Microsoft Edge Canary または Dev ブラウザーで、タブまたはウィンドウを開き、 組み込みの AI プレイグラウンドに移動します。
左側のナビゲーションの [ プロンプト] をクリックします。
上部の情報バナーで、状態をチェックします。最初はモデルのダウンロードと読み取り、お待ちください。
モデルのダウンロード後、情報バナーは API とモデルの準備完了を読み取り、API とモデルを使用できることを示します。
モデルのダウンロードが開始されない場合は、Microsoft Edge を再起動してやり直してください。
Prompt API は、特定のハードウェア要件を満たすデバイスでのみサポートされます。 詳細については、上記の 「ハードウェア要件」を参照してください。
指定された既定のプロンプトと設定値を使用するか、 ユーザー プロンプト、 システム プロンプト、 応答制約スキーマ、 N ショット プロンプト命令、 TopK、 Temperature などの値を変更して変更します。
ページの下部にある [プロンプト ] ボタンをクリックします。
応答は、ページの応答セクションで生成されます。
応答の生成を停止するには、いつでも [停止 ] ボタンをクリックします。
Prompt API プレイグラウンドのソース コードを表示するには、GitHub の MicrosoftEdge/Demos リポジトリを参照してください。
プロンプト API を使用する
API が有効になっているかどうかを確認する
Web サイトまたは拡張機能のコードで API を使用する前に、LanguageModel
オブジェクトの存在をテストすることによって API が有効になっていることをチェックします。
if (!LanguageModel) {
// The Prompt API is not available.
} else {
// The Prompt API is available.
}
モデルを使用できるかどうかを確認する
Prompt API は、デバイスがモデルの実行をサポートしている場合、および言語モデルとモデル ランタイムが Microsoft Edge によってダウンロードされた後にのみ使用できます。
API を使用できるかどうかをチェックするには、LanguageModel.availability()
メソッドを使用します。
const availability = await LanguageModel.availability();
if (availability == "unavailable") {
// The model is not available.
}
if (availability == "downloadable" || availability == "downloading") {
// The model can be used, but it needs to be downloaded first.
}
if (availability == "available") {
// The model is available and can be used.
}
新しいセッションを作成する
セッションを作成すると、使用できるように言語モデルをメモリに読み込むようブラウザーに指示されます。 言語モデルを求める前に、 create()
メソッドを使用して新しいセッションを作成します。
// Create a LanguageModel session.
const session = await LanguageModel.create();
モデル セッションをカスタマイズするには、 create()
メソッドにオプションを渡します。
// Create a LanguageModel session with options.
const session = await LanguageModel.create(options);
利用可能なオプションは以下のとおりです。
monitor
をクリックして、モデルのダウンロードの進行状況に従います。initialPrompts
を使用して、モデルに送信されるプロンプトに関するモデル コンテキストを指定し、将来のプロンプトのためにモデルが従う必要があるユーザー/アシスタント操作のパターンを確立します。topK
をtemperature
して、モデル出力の一貫性と決定性を調整します。
これらのオプションについては、以下で説明します。
モデルのダウンロードの進行状況を監視する
[ monitor
] オプションを使用して、モデルのダウンロードの進行状況に従うことができます。 これは、モデルが使用されるデバイスにまだ完全にダウンロードされていない場合に役立ち、ユーザーが待機する必要があることを Web サイトのユーザーに通知します。
// Create a LanguageModel session with the monitor option to monitor the model
// download.
const session = await LanguageModel.create({
monitor: m => {
// Use the monitor object argument to add an listener for the
// downloadprogress event.
m.addEventListener("downloadprogress", event => {
// The event is an object with the loaded and total properties.
if (event.loaded == event.total) {
// The model is fully downloaded.
} else {
// The model is still downloading.
const percentageComplete = (event.loaded / event.total) * 100;
}
});
}
});
システム プロンプトをモデルに提供する
プロンプトに応答してテキストを生成するときに使用するモデル命令を提供する方法であるシステム プロンプトを定義するには、 initialPrompts
オプションを使用します。
新しいセッションの作成時に指定したシステム プロンプトは、プロンプトが多すぎるためにコンテキスト ウィンドウがオーバーフローした場合でも、セッションの存在全体に対して保持されます。
// Create a LanguageModel session with a system prompt.
const session = await LanguageModel.create({
initialPrompts: [{
role: "system",
content: "You are a helpful assistant."
}]
});
initialPrompts
の 0 番目の位置以外の任意の場所に{ role: "system", content: "You are a helpful assistant." }
プロンプトを配置すると、TypeError
で拒否されます。
initialPrompts を使用した N ショット プロンプト
initialPrompts
オプションを使用すると、プロンプトが表示されたときにモデルで引き続き使用するユーザー/アシスタント操作の例を提供することもできます。
この手法は N ショット プロンプト とも呼ばれ、モデルによって生成される応答をより明確にするのに役立ちます。
// Create a LanguageModel session with multiple initial prompts, for N-shot
// prompting.
const session = await LanguageModel.create({
initialPrompts: [
{ role: "system", content: "Classify the following product reviews as either OK or Not OK." },
{ role: "user", content: "Great shoes! I was surprised at how comfortable these boots are for the price. They fit well and are very lightweight." },
{ role: "assistant", content: "OK" },
{ role: "user", content: "Terrible product. The manufacturer must be completely incompetent." },
{ role: "assistant", content: "Not OK" },
{ role: "user", content: "Could be better. Nice quality overall, but for the price I was expecting something more waterproof" },
{ role: "assistant", content: "OK" }
]
});
topK と temperature を設定する
topK
と temperature
は サンプリング パラメーター と呼ばれ、テキストの生成に影響を与えるためにモデルによって使用されます。
TopK サンプリングでは、生成されたテキスト内の後続の単語ごとに考慮される単語の数が制限されます。これにより、生成プロセスが高速化され、より一貫性のある出力につながるだけでなく、多様性も低下します。
温度サンプリングは、出力のランダム性を制御します。 温度が低いほど、ランダムな出力が少なくなり、確率の高い単語が優先され、より決定的なテキストが生成されます。
モデルのサンプリング パラメーターを構成するには、 topK
オプションと temperature
オプションを設定します。
// Create a LanguageModel session and setting the topK and temperature options.
const session = await LanguageModel.create({
topK: 10,
temperature: 0.7
});
同じオプションを使用してセッションを複製して会話を再開する
既存のセッションを複製して、以前の操作の知識がなくても、同じセッション オプションを使用してモデルにプロンプトを表示します。
セッションの複製は、前のセッションのオプションを使用するが、以前の応答でモデルに影響を与えずに使用する場合に便利です。
// Create a first LanguageModel session.
const firstSession = await LanguageModel.create({
initialPrompts: [
role: "system",
content: "You are a helpful assistant."
],
topK: 10,
temperature: 0.7
});
// Later, create a new session by cloning the first session to start a new
// conversation with the model, but preserve the first session's settings.
const secondSession = await firstSession.clone();
モデルのプロンプトを表示する
モデルセッションを作成した後、モデルにプロンプトを表示するには、 session.prompt()
または session.promptStreaming()
メソッドを使用します。
最後の応答を待つ
prompt
メソッドは、プロンプトに応答してモデルがテキストの生成を完了すると解決される promise を返します。
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Prompt the model and wait for the response to be generated.
const result = await session.prompt(promptString);
// Use the generated text.
console.log(result);
トークンの生成時にトークンを表示する
promptStreaming
メソッドは、ストリーム オブジェクトをすぐに返します。 ストリームを使用して、生成中の応答トークンを表示します。
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Prompt the model.
const stream = session.promptStreaming(myPromptString);
// Use the stream object to display tokens that are generated by the model, as
// they are being generated.
for await (const chunk of stream) {
console.log(chunk);
}
同じセッション オブジェクト内で prompt
メソッドと promptStreaming
メソッドを複数回呼び出して、そのセッション内のモデルとの以前の操作に基づくテキストを生成し続けることができます。
JSON スキーマまたは正規表現を使用してモデル出力を制約する
モデル応答の形式をより明確にし、プログラムによる方法で使用しやすくするには、モデルを求めるときに responseConstraint
オプションを使用します。
responseConstraint
オプションは、JSON スキーマまたは正規表現を受け入れます。
特定のスキーマに従う文字列化された JSON オブジェクトでモデルを応答するには、使用する JSON スキーマに
responseConstraint
を設定します。モデルが正規表現に一致する文字列で応答できるようにするには、
responseConstraint
をその正規表現に設定します。
次の例は、特定のスキーマに続く JSON オブジェクトを使用して、モデルをプロンプトに応答させる方法を示しています。
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Define a JSON schema for the Prompt API to constrain the generated response.
const schema = {
"type": "object",
"required": ["sentiment", "confidence"],
"additionalProperties": false,
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"],
"description": "The sentiment classification of the input text."
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "A confidence score indicating certainty of the sentiment classification."
}
}
}
;
// Prompt the model, by providing a system prompt and the JSON schema in the
// responseConstraints option.
const response = await session.prompt(
"Ordered a Philly cheesesteak, and it was not edible. Their milkshake is just milk with cheap syrup. Horrible place!",
{
initialPrompts: [
{
role: "system",
content: "You are an AI model designed to analyze the sentiment of user-provided text. Your goal is to classify the sentiment into predefined categories and provide a confidence score. Follow these guidelines:\n\n- Identify whether the sentiment is positive, negative, or neutral.\n- Provide a confidence score (0-1) reflecting the certainty of the classification.\n- Ensure the sentiment classification is contextually accurate.\n- If the sentiment is unclear or highly ambiguous, default to neutral.\n\nYour responses should be structured and concise, adhering to the defined output schema."
},
],
responseConstraint: schema
}
);
上記のコードを実行すると、次のような文字列化された JSON オブジェクトを含む応答が返されます。
{"sentiment": "negative", "confidence": 0.95}
その後、 JSON.parse()
関数を使用して解析することで、コード ロジックで応答を使用できます。
// Parse the JSON string generated by the model and extract the sentiment and
// confidence values.
const { sentiment, confidence } = JSON.parse(response);
// Use the values.
console.log(`Sentiment: ${sentiment}`);
console.log(`Confidence: ${confidence}`);
詳細については、「 JSON スキーマまたは RegExp 制約を使用した構造化出力」を参照してください。
プロンプトごとに複数のメッセージを送信する
文字列に加えて、 prompt
メソッドと promptStreaming
メソッドは、カスタム ロールを持つ複数のメッセージを送信するために使用されるオブジェクトの配列も受け入れます。 送信するオブジェクトは、 { role, content }
形式である必要があります。ここで、 role
は user
または assistant
であり、 content
はメッセージです。
たとえば、同じプロンプトで複数のユーザー メッセージとアシスタント メッセージを指定するには、次のようにします。
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Prompt the model by sending multiple messages at once.
const result = await session.prompt([
{ role: "user", content: "First user message" },
{ role: "user", content: "Second user message" },
{ role: "assistant", content: "The assistant message" }
]);
テキストの生成を停止する
session.prompt()
によって返される promise が解決される前、またはsession.promptStreaming()
によって返されるストリームが終了する前にプロンプトを中止するには、AbortController
シグナルを使用します。
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Create an AbortController object.
const abortController = new AbortController();
// Prompt the model by passing the AbortController object by using the signal
// option.
const stream = session.promptStreaming(myPromptString , {
signal: abortController.signal
});
// Later, perhaps when the user presses a "Stop" button, call the abort()
// method on the AbortController object to stop generating text.
abortController.abort();
セッションを破棄する
セッションを破棄して、モデルをメモリからアンロードできるように、言語モデルが不要であることをブラウザーに知らせます。
セッションは、次の 2 つの異なる方法で破棄できます。
-
destroy()
メソッドを使用します。 -
AbortController
を使用する。
destroy() メソッドを使用してセッションを破棄する
// Create a LanguageModel session.
const session = await LanguageModel.create();
// Later, destroy the session by using the destroy method.
session.destroy();
AbortController を使用してセッションを破棄する
// Create an AbortController object.
const controller = new AbortController();
// Create a LanguageModel session and pass the AbortController object by using
// the signal option.
const session = await LanguageModel.create({ signal: controller.signal });
// Later, perhaps when the user interacts with the UI, destroy the session by
// calling the abort() function of the AbortController object.
controller.abort();
フィードバックの送信
Prompt API 開発者プレビューは、ブラウザーが提供する言語モデルのユース ケースの検出に役立つものです。 プロンプト API を使用するシナリオの範囲、API または言語モデルに関する問題、およびライティング アシスタンスや翻訳用 API などのより具体的なタスク固有 API が役に立つかどうかについて、非常に関心があります。
シナリオと達成するタスクに関するフィードバックを送信するには、 プロンプト API フィードバックの問題にコメントを追加してください。
代わりに API を使用するときに問題が発生した場合は、 リポジトリで報告してください。
また、W3C Web Machine Learning ワーキング グループ リポジトリの Prompt API の設計に関するディスカッションに投稿することもできます。
関連項目
Web Machine Learning GitHub リポジトリの Prompt API の Explainer。