CHROME |
| |
|
| |
|
| |
|
|
最新消息📯
2024 年 12 月 5 日 如果您經常遇到以下錯誤,或者它出現在不應該出現問題的文字中,請嘗試在 Chrome 的標誌設置中禁用「文字安全性」分類器:chrome://flags/#text-safety-classifier
Uncaught NotSupportedError: 模型試圖以未測試的語言輸出文字,並被阻止執行此操作
2024 年 10 月 15 日:Chrome Canary 131.0.6776.0+ 中對 Prompt API 的重大變更;此文件已更新為最新版本。
2024 年 8 月 27 日:Chrome Canary 129.0.6667.0+ 中提示 API 的重大變更;本文件已更新為最新版本。
摘要 API 和語言檢測 API 現在可供實驗使用。
請查看 goo.gle/chrome-ai-dev-preview-index 查看完整更新列表!
導言
歡迎,感謝您參與我們內建 AI 功能的早期預覽計劃(文章、Google I/O 2024 演講)。您的參與對我們探索利用 AI 改進或增強網頁體驗的機會至關重要!
內建 AI 早期預覽計劃有幾個目標:
聆聽:我們渴望聽到您對早期 API 的反饋。幫助我們更好地了解您要解決的問題。這將確保我們以正確的方式設計您需要的 API。
探索:我們希望促進對內建 AI 的有前途應用程序的發現,這將直接影響我們的路線圖和優先級討論。在這方面,我們將提供訪問探索性 API(例如提示 API)的權限。
支持:您的見解和興趣將為與其他瀏覽器供應商的討論提供信息,因為我們正在努力建立網頁瀏覽器中 AI 整合的共同標準。
📣 |
|
在這次第一次更新中,我們很高興能提供有關即將推出的探索性 Prompt API 的詳細信息,該 API 設計用於通過本地原型開發促進 AI 用途的發現。更具體地說,此 API 將讓您在您的開發環境中直接與 Gemini Nano(設備上)互動。
📝 |
|
在我們共同探索此項技術的可能性時,我們必須將負責任的人工智能開發放在首位。為了引導我們的努力,請花點時間審閱 Google 的生成式 AI 禁止使用政策。該政策概述了部署人工智能的倫理和安全方面的關鍵考慮因素。
讓我們一起學習和建造吧✨!
提示 API
目的
Gemini Nano 的提示 API 提供給本地實驗,以促進探索內建 AI 的用例。使用此 API,您可以向 Chrome 中的 Gemini Nano 實例發送自然語言指令。
雖然提示 API 提供了最大的靈活性,但它不一定能提供最佳結果,並且在某些情況下可能無法提供足夠的品質。這就是為什麼我們認為專門針對特定任務的 API(例如翻譯 API)與微調或專家模型配對,將會帶來顯著更好的結果。我們希望提示 API 可以幫助加速發現引人入勝的用例,以告知特定任務 API 的路線圖。
時間安排
提示 API 可在 Chrome 127+ 桌面版中使用實驗性標誌啟用。
實驗性標記自 2024 年 5 月 31 日下午 6:09 開啟。
您需要版本 128.0.6545.0 或更高版本。.
建議您使用 Chrome Canary 或 Chrome Dev 版本。.
需求
我們內建的 AI 計畫目前專注於桌面平台。此外,Chrome 下載和運行 Gemini Nano 需要滿足以下條件。
| Windows | MacOS | Linux |
| 10, 11 | ≥ 13 (Ventura) |
|
|
| ||
GPU |
| ||
|
| ||
|
|
🚧 |
|
| |
|
設定
先備條件
確認已了解 Google 的生成式 AI 禁止使用政策.
下載 Chrome 開發版 (或金絲雀版),並確認您的版本至少為 128.0.6545.0 或更新。.
確認您的設備符合要求.
請勿跳過此步驟,特別是確保您至少有 22 GB 的可用儲存空間。.
如果下載後可用的儲存空間低於 10 GB,模型將再次被刪除。請注意,某些作業系統可能會以不同的方式報告實際的可用磁碟空間,例如包含或不包含垃圾桶佔用的磁碟空間。在 macOS 上,請使用磁碟工具獲取代表性的可用磁碟空間。
啟用 Gemini Nano 和提示 API
請遵循以下步驟,為本地實驗啟用 Gemini Nano 和提示 API 旗標:
前往 chrome://flags/#prompt-api-for-gemini-nano
選擇已啟用
重啟 Chrome。
確認 Gemini Nano 的可用性
開啟開發工具並在控制台中發送 (await ai.languageModel.capabilities()).available;。
如果返回“立即”,那麼您就準備好了。
如果失敗,請繼續如下:
📣🆕 強制 Chrome 識別您要使用此 API。为此,在控制台中發送 await ai.languageModel.create();。這可能會失敗,但這是預期的。
重啟 Chrome。
在 Chrome 中打開一個新標籤,然後轉到 chrome://components
確認 Gemini Nano 是否可用或正在下載中
您需要查看「設備上模型優化指南」,版本需大於或等於 2024.5.21.1031。
如果沒有列出任何版本,請單擊“檢查更新”以強制下載。
模型下載並達到上述版本後,在開發工具中發送 (await ai.languageModel.capabilities()).available; 在控制台中。如果返回“立即”,那麼您就準備好了。
否則,重新啟動,稍等片刻,然後從步驟 1 嘗試再次。
如果仍然失敗,請參閱疑難解答部分.
演示
在啟用了提示 API 後,轉到這個 Chrome 開發者遊樂場嘗試一下:
https://chrome.dev/web-ai-demos/prompt-api-playground/ (程式碼)
|
API 概觀
💡 |
|
樣本程式碼
立即版本
// 先檢查是否可以基於模型的可用性和設備特性創建一個會話。
const {available, defaultTemperature, defaultTopK, maxTopK } = await ai.languageModel.capabilities();
if (available !== "no") {
const session = await ai.languageModel.create();
// 向模型提示並等待整個結果返回。
const result = await session.prompt("寫一首詩給我");
console.log(result);
}
串流版本
const {available, defaultTemperature, defaultTopK, maxTopK } = await ai.languageModel.capabilities();
if (available !== "no") {
const session = await ai.languageModel.create();
// 向模型提示並流式傳輸結果:
const stream = session.promptStreaming("寫一首超長的詩給我");
for await (const chunk of stream) {
console.log(chunk);
}
}
追蹤模型下載進度
const session = await ai.languageModel.create({
監控器(m) {
m.addEventListener("downloadprogress", e => {
console.log(`已下載 ${e.loaded} 個字元/${e.total} 個字元。`);
});
}
});
會話持續性
每個會話會追蹤對話的上下文。
const session = await ai.languageModel.create({
systemPrompt: "您是一位專精於服裝選擇的友善、樂於助人的助理。"
});
const result = await session.prompt(`
我今天應該穿什麼?天氣晴朗,我猶豫不決於穿 T 恤還是襯衫。
`);
console.log(result);
const result2 = await session.prompt(`
那聽起來不錯,但是哦不,其實要下雨了!新的建議嗎?
`);
會話克隆
為了節省資源,您可以克隆現有的會話。對話上下文將被重置,但初始提示或系統提示將保持完整。
const clonedSession = await session.clone();
會話選項
每個會話都可以使用 topK 和溫度進行自訂。這些參數的預設值由 ai.languageModel.capabilities() 返回。.
```
const capabilities = await ai.languageModel.capabilities();
```
初始化新會話必須同時指定 topK 和溫度,或者都不指定。
const slightlyHighTemperatureSession = await ai.languageModel.create({
溫度:Math.max(capabilities.defaultTemperature * 1210)
topK:capabilities.defaultTopK
});
系統提示
給語言模型一些上下文。
const session = await ai.languageModel.create({
systemPrompt:「假裝成為一位口才流利的倉鼠。」
});
await session.prompt('你喜欢坚果吗?');
// '作為一位語言能力超群的倉鼠,我非常擅長回答你是否喜歡吃美味堅果的問題。堅果真是太棒了!'
會話資訊
一個給定的語言模型會話將有一個最大可以處理的令牌數。開發者可以使用以下屬性來檢查其當前使用情況以及接近該限制的進度:
console.log(`${session.tokensSoFar}/${session.maxTokens} (${session.tokensLeft} left)`);
結束會話
呼叫 destroy() 來釋放資源,如果您不再需要會話。當會話被销毁時,它將無法再使用,任何正在進行的執行都將被中止。如果您打算經常提示模型,您可能希望保留會話,因為創建會話可能需要一些時間。
等待 session.prompt(`
你是一位友善、樂於助人的助理,專精於服裝選擇。
`);
session.destroy();
// 此 Promise 將會因會話已終止而被拒絕,並包含說明的錯誤。
等待 session.prompt(`
我今天穿什麼好呢?天氣晴朗,我猶豫不決之間一件 T 恤和一件襯衫。
`);
例外狀況
AI 運行時可能導致 Prompt API 收到錯誤。請參閱本節,了解可能的錯誤列表以及它們如何映射到 DOMException。
注意事項
(await ai.languageModel.capabilities()).available 的“下載後”狀態
不支援“下載後”狀態和行為。API 不會觸發模型的下載。相反,Chrome 會觸發下載,無論是作為 chrome://flags 状态變更的一部分,還是因為其他設備上的 AI 功能。
流式傳輸
目前,promptStreaming() 返回一個 ReadableStream,其片段依次累積。
例如,以下程式碼會記錄一個序列,例如“你好”、“你好世界”、“你好世界我是一個”、“你好世界我是個 AI”。
for await (const chunk of stream) {
console.log(chunk);
}
這不是期望的行為。我們打算與平台上其他流式 API 對齊,其中片段是單個長串的連續部分。這意味著輸出將是一個序列,例如「你好」、「 世界」、「 我是」、「 個 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 API 的實施目前不支持隱私模式或訪客模式。這是由於 AI 運行層的依賴關係,而不是預期的永久限制。
企業
如果將 GenAILocalFoundationalModelSettings 設定為“不下載模型”,此 API 將無法運作。
您可以在 chrome://policy 中查看此設定。.
提示 101
為了撰寫最佳提示,我們建議您閱讀以下內容:
人類+AI 指南,談論如何、何時以及如何使用 AI(包括 UX 例子)。
提示設計策略,提供有關如何最佳提示 LLM 的具體指導。
此外,以下是我們對 Chrome 中 Gemini Nano 的建議。
|
| ||
|
| ||
|
| ||
|
| ||
| |||
|
模擬停止序列
模型不支持原生停止序列,但您可以按照以下方式模擬它們。
const abortController = new AbortController();
const signal = abortController.signal;
const STOP_SEQUENCES = ['world'];
const languageModel = await self.ai.languageModel.create();
const stream = await languageModel.promptStreaming('Say "Hello, world!"', {
信號,
});
let previousLength = 0;
streamingLoop: for await (const chunk of stream) {
const newContent = chunk.slice(previousLength);
console.log(`Chunk: "${newContent}"`);
for (const stopSequence of STOP_SEQUENCES) {
if (newContent.toLowerCase().includes(stopSequence.toLowerCase())) {
console.log(
`停止序列 "${stopSequence}" 在片段 "${newContent}" 中找到。中止。`;
);
abortController.abort();
break streamingLoop;
}
}
document.body.insertAdjacentText('beforeEnd', newContent);
previousLength = chunk.length;
}
分享您的意見
調查
我們將持續發送調查問卷,以了解 API 和特定任務的 API 使用情況,收集有關熱門用例、問題等信號。
關於品質或技術問題的回饋表
如果您遇到品質或技術問題,請考慮分享詳細信息。您的報告將幫助我們完善和改進我們的模型、API 和組件(位於 AI 運行層),以確保安全和負責任的使用。
方便的短網址:goo.gle/chrome-ai-dev-preview-feedback-quality
反饋 Chrome 的行為/Prompt API 的實施
如果您想報告 Chrome 行為/Prompt API 實現相關的錯誤或其他問題,請在公開的 chromium 錯誤報告中提供儘可能多的詳細信息(例如重現步驟)。.
對 API 的回饋
如果您想報告與內建 AI API 相關的人體工學問題或其他問題,請先查看是否有相關問題,如果没有,則提交一個公開的規格問題:
其他回饋
對於其他問題或疑難,請直接發送電子郵件至郵件清單所有者(chrome-ai-dev-preview+owners@chromium.org)。我們會盡力儘快回復,或者在更合適的情況下更新現有的文件(例如添加到 FAQ 部分)。
常問問題
早期預覽計劃參與
退訂和取消訂閱
要退出早期預覽計劃,只需發送電子郵件至:
chrome-ai-dev-preview+unsubscribe@chromium.org.
加入
如果您認識想加入該計劃的人,請他們填寫此表,並在回答調查最後一個問題時告訴他們渴望提供反饋!
非英語語言支持
Gemini Nano 最新模型版本僅針對英文進行了徹底的質量測試(例如,其響應應該準確且寫作良好)和安全性測試(它不應該告訴您危險的事情,例如如何製作炸彈)。我們正在努力很快解除此限制。將有一個標誌允許您繞過本地測試的限制,但它還沒有可靠地工作,已在這個 CL 中跟踪.
macOS 的相容性問題
未對使用 Rosetta 在 ARM 上運行 Chromium x64 版本進行測試和維護,很可能會出現意外行為。請檢查所有啟動 Chromium 的工具是否為 ARM 本地。
输出品質
Prompt API 的當前實現主要用於實驗,並且可能與我們打算發布的任務 API 集成時產生的最終輸出質量不符。
話雖如此,如果您看到模型生成有害內容或有問題的回應,我們鼓勵您分享對輸出品質的意見反饋。您的報告對於幫助我們改進和完善我們的模型、API 和 AI 運行層組件至關重要,以確保安全和負責任的使用。
當提示中的令牌數量超過上下文窗口時會發生什麼?
目前的設計只考慮給定輸入中最後 N 個令牌。因此,在提示中提供過多文本可能會導致模型忽略提示的開頭部分。例如,如果提示以「將以下文本翻譯成英文:」開始,然後是數千行文本,則模型可能無法接收提示的開頭,從而無法提供翻譯。
一些提示在使用流式執行時會停止。
請告訴我們您是否可以重現此問題:提示、會話選項、有關設備的詳細信息等。同時,請重新啟動 Chrome 並嘗試再次操作。
最後手段排查
其他解決方案
一些參與者報告說以下步驟有助於他們讓組件顯示:
如果您想嘗試在沒有性能或 VRAM 需求(即,當 capabilities() === 'no' 時)的設備上使用 API,您可以通過將標記 #optimization-guide-on-device-mode 設定為「Enabled BypassPerfRequirement」來強制執行它,然後重試設置步驟。這有一個警告,雖然模型可能能夠運行,但它也可能因通用錯誤而無法執行。
模型下載延遲
瀏覽器可能不會立即開始下載模型。如果您的計算機滿足所有要求,但在 chrome://components 中呼叫 ai.languageModel.create() 後未看到模型下載開始,並且優化指南設備模式顯示版本 0.0.0.0 / 新的,請將瀏覽器保持開啟狀態幾分鐘以等待調度程序開始下載。
偵錯日誌
如果一切都不順利:
開啟新標籤
前往 chrome://gpu
下載 gpu 報表
開啟 chrome://histograms/#OptimizationGuide.ModelExecution.OnDeviceModelInstallCriteria.AtRegistration.DiskSpace
If you see records for 0, it means that your device doesn’t have enough storage space for the model. Ensure that you have at least 22 GB on the disk with your user profile, and retry the setup steps
如果您看到記錄為 0,表示您的設備沒有足夠的儲存空間來容納模型。請確保您在使用者資料夾的磁碟上至少有 22 GB 的可用空間,然後重新嘗試設定步驟。如果仍然遇到問題,請繼續執行以下其他步驟。
在符合條件的系統上,直方圖應該與以下示例相似:
- 直方圖:OptimizationGuide.ModelExecution.OnDeviceModelInstallCriteria.AtRegistration.DiskSpace 記錄了 1 個樣本,平均值 =1.0 (flags = 0x41) [#]
前往 chrome://histograms/#OptimizationGuide 並下載直方圖報告
崩潰日誌
如果您遇到“模型進程崩潰太多次”之類的崩潰錯誤訊息,我們需要崩潰 ID 來調查根本原因。
確保已啟用崩潰報告.
重複執行問題。
前往 chrome://crashes
找到最新的崩潰
必要時點擊立即傳送。
然後等待並重新加載,直到狀態列從未上傳變為已上傳。請注意,這可能需要一些時間。
複製已上傳崩潰報告 ID 行旁邊的 ID。
此期間,您需要等待新版本的 Chrome 以獲得再次嘗試提示 API 的機會。
附錄
全面 API 表面
全面 API 表面的描述如下。有關語言的詳細信息,請參閱 Web IDL。目前的實作正在進行中,並且不支援以下所述的所有內容。
// 共享 self.ai API
部分介面 WindowOrWorkerGlobalScope {
[可替換] 只讀屬性 AI ai;
};
[Exposed=(Window,Worker)]
介面 AI {
只讀屬性 AILanguageModelFactory languageModel;
};
[Exposed=(Window,Worker)]
介面 AICreateMonitor : EventTarget {
屬性 EventHandler ondownloadprogress;
};
回調函數 AICreateMonitorCallback = undefined (AICreateMonitor monitor);
枚舉 AICapabilityAvailability { "立即", "下載後", "否" };
// LanguageModel
[Exposed=(Window,Worker)]
介面 AILanguageModelFactory {
Promise<AILanguageModel> create(optional AILanguageModelCreateOptions options = {});
Promise 能力()
};
[Exposed=(Window,Worker)]
介面 AILanguageModel:EventTarget {
Promise prompt(DOMString input, 可選的 AILanguageModelPromptOptions 選項 = {});
ReadableStream promptStreaming(DOMString input, 可選的 AILanguageModelPromptOptions 選項 = {});
Promise countPromptTokens(DOMString input, 可選的 AILanguageModelPromptOptions 選項 = {});
readonly attribute unsigned long long maxTokens;
readonly attribute unsigned long long tokensSoFar;
readonly attribute unsigned long long tokensLeft;
readonly attribute unsigned long topK;
readonly attribute float temperature;
Promise<AILanguageModel> clone();
undefined destroy();
};
[Exposed=(Window,Worker)]
介面 AILanguageModelCapabilities {
readonly attribute AICapabilityAvailability available;
// 如果 available === "no",則永遠為 null
readonly attribute unsigned long? defaultTopK;
readonly attribute unsigned long? maxTopK;
readonly attribute float? defaultTemperature;
};
字典 AILanguageModelCreateOptions {
AbortSignal signal;
AICreateMonitorCallback monitor;
DOMString systemPrompt;
sequence<AILanguageModelPrompt> initialPrompts;
[EnforceRange] unsigned long topK;
float temperature;
};
字典 AILanguageModelPrompt {
AILanguageModelPromptRole role;
DOMString content;
};
字典 AILanguageModelPromptOptions {
AbortSignal signal;
};
枚舉 AILanguageModelPromptRole { "system", "user", "assistant" };
完整例外清單
| DOMExceptions |
|
| |
|
|
|
| |
| OperationError |
|
| |
| UnknownError |
|
| |
NotSupportedError |
| |||
UnknownError |
| |||
NotReadableError |
| |||
AbortError |
| |||
prompt, promptStreaming |
|
|
| |
| NotSupportedError |
|
| |
|
|
|
其他更新
所有先前發送的更新和調查的連結可以在「上下文索引」中找到,也可以通過 goo.gle/chrome-ai-dev-preview-index 存取。
變更記錄
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|