透過 Prompt API,您可以向 Chrome 中的基礎模型發送自然語言請求。

Prompt API 有許多應用方式,例如您可以建立:

這些只是部分可能性,我們期待看到您創造的作品。

以下是 Chrome 中使用這些 API 的開發者與使用者需遵守的條件。其他瀏覽器可能有不同的運作要求。

語言偵測器與翻譯器 API 僅在桌面版 Chrome 有效,行動裝置不支援這些 API。

Prompt API、摘要 API、寫作 API、重寫 API 及校對 API 僅在符合以下條件的 Chrome 中運作:

Gemini Nano 模型的大小會隨瀏覽器更新而變動。您可透過 chrome://on-device-internals 查詢目前大小。

Prompt API 在 Chrome 中使用 Gemini Nano 模型。雖然 API 內建於 Chrome,但模型會在首次使用時由來源下載。

要確認模型是否準備好使用,可呼叫 LanguageModel.availability()。

觸發下載並實例化語言模型前,需先確認使用者啟動,接著呼叫 create() 函數。

若 availability() 回傳下載中,請監聽下載進度並通知使用者,因下載可能需要時間。

params() 函數會告知語言模型的參數,物件包含以下欄位:

Prompt API 可運行後,您可透過 create() 函數建立會話。

在 Chrome 擴充功能中使用 Prompt API 時,每個會話可透過選用的 options 物件自訂 topK 與 temperature,預設值由 LanguageModel.params() 回傳。

create() 函數的選用 options 物件也接受 signal 欄位,可傳入 AbortSignal 以銷毀會話。

使用初始提示時,您可提供語言模型先前互動的上下文,例如讓使用者在瀏覽器重啟後恢復儲存的會話。

您可以新增「assistant」角色,除了先前的角色外,讓模型對先前回應進行補充說明。例如:

有時候,您可能不想請求新的回應,而是預先填入「assistant」角色回應訊息的一部分,這有助於引導模型使用特定回應格式。做法是在最後的「assistant」角色訊息中加入 prefix: true。例如:

Prompt API 支援多模態能力與多語言,建立會話時可設定 expectedInputs 與 expectedOutputs 的模態與語言。

若模型遇到不支援的輸入或輸出,可能會收到 "NotSupportedError" DOMException。

請參考 Mediarecorder Audio Prompt 範例,了解如何使用音訊輸入的 Prompt API,以及 Canvas Image Prompt 範例,了解如何使用影像輸入的 Prompt API。

Prompt API 支援以下輸入類型:

以下程式碼示範一個多模態會話,先處理兩個視覺輸入(一個影像 Blob 與一個 HTMLCanvasElement),讓 AI 進行比較,接著讓使用者以音訊錄音(AudioBuffer)回應。

推論可能需要一些時間,尤其是多模態輸入時。提前傳送預設提示以填充會話,能讓模型提前開始處理。

雖然 initialPrompts 在建立會話時很有用,append() 方法可搭配 prompt() 或 promptStreaming() 方法,在會話建立後提供額外上下文提示。

append() 回傳的 Promise 在提示驗證、處理並加入會話後完成;若無法加入提示則拒絕。

可在 prompt() 或 promptStreaming() 方法中加入 responseConstraint 欄位,傳入 JSON Schema,讓您使用結構化輸出。

以下範例中,JSON Schema 確保模型回應 true 或 false,以判斷訊息是否與陶藝相關。

您的實作可包含 JSON Schema 或正則表達式作為傳送給模型的訊息一部分,這會佔用部分上下文視窗。您可透過傳入 responseConstraint 選項給 session.measureContextUsage() 來測量使用量。

您可使用 omitResponseConstraintInput 選項避免此行為,建議同時在提示中加入指引:

您可以使用 prompt() 或 promptStreaming() 函數來提示模型。

若預期回應較短,可使用 prompt() 函數,該函數會在回應可用時回傳結果。

若預期回應較長,建議使用 promptStreaming() 函數,可即時顯示模型部分回應,該函數回傳 ReadableStream。

prompt() 與 promptStreaming() 均接受第二個可選參數,包含 signal 欄位,可用來停止執行中的提示。

每個會話會追蹤對話上下文,先前互動會影響後續互動,直到會話上下文視窗已滿。

每個會話可處理的最大 token 數有限,您可透過以下方式檢查進度:

若傳送的提示導致上下文視窗溢位,系統會逐一移除最早的提示與回應對,直到有足夠 token 處理新提示,系統提示(system prompt)除外,永遠不會被移除。

可透過監聽會話的 contextoverflow 事件偵測溢位情況:

若無法移除足夠 token 以處理新提示,prompt() 或 promptStreaming() 呼叫會失敗並拋出 QuotaExceededError,且不會移除任何內容。QuotaExceededError 具有以下屬性:

了解更多會話管理資訊。

為節省資源,您可使用 clone() 函數複製現有會話,建立對話分支,保留上下文與初始提示。

clone() 函數接受選用 options 物件,包含 signal 欄位,可傳入 AbortSignal 銷毀複製的會話。

若不再需要會話,請呼叫 destroy() 釋放資源。銷毀後會話無法再使用,且任何進行中的執行會中止。若您頻繁提示模型,建議保留會話,因為建立會話可能需要時間。

我們建立了多個範例展示 Prompt API 的多種應用,以下範例為網頁應用程式:

若要在 Chrome 擴充功能中測試 Prompt API,請安裝範例擴充功能,原始碼公開於 GitHub。

網頁版 Prompt API 仍在開發中,開發期間請參考我們的會話管理最佳實踐以獲得最佳效能。

預設情況下,Prompt API 僅對頂層視窗及其同源 iframe 開放。可透過 Permission Policy 的 allow="" 屬性授權跨源 iframe 存取 API:

目前 Prompt API 不支援 Web Workers,因為每個 Worker 需建立負責文件以檢查權限政策狀態,實作較為複雜。

您的使用回饋將直接影響我們未來版本及所有內建 AI API 的建置與實作。