透過 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 的建置與實作。