תאריך פרסום: 20 במאי 2025, עדכון אחרון: 21 בספטמבר 2025
| סרטון הסבר | פיתוח אתרים | תוספים | הסטטוס של Chrome | הרציונל |
|---|---|---|---|---|
| GitHub | |
תצוגה | כוונה להתנסות |
באמצעות Prompt API, אתם יכולים לשלוח בקשות בשפה טבעית אל Gemini Nano בדפדפן.
יש הרבה דרכים להשתמש ב-Prompt API. לדוגמה, אפשר ליצור:
- חיפוש מבוסס-AI: תשובות לשאלות על סמך התוכן של דף אינטרנט.
- פידים של חדשות בהתאמה אישית: יצירת פיד שמסווג באופן דינמי מאמרים לקטגוריות ומאפשר למשתמשים לסנן את התוכן.
- מסנני תוכן בהתאמה אישית. לנתח כתבות חדשותיות ולטשטש או להסתיר תוכן באופן אוטומטי על סמך נושאים שהוגדרו על ידי המשתמש.
- יצירת אירועים ביומן. לפתח תוסף ל-Chrome שמחלץ באופן אוטומטי פרטי אירועים מדפי אינטרנט, כדי שהמשתמשים יוכלו ליצור אירועים ביומן בכמה שלבים פשוטים.
- חילוץ חלק של אנשי קשר. ליצור תוסף שמחלץ פרטים ליצירת קשר מאתרים, כדי להקל על המשתמשים ליצור קשר עם עסק או להוסיף פרטים לרשימת אנשי הקשר שלהם.
אלה רק כמה אפשרויות, ואנחנו סקרנים לראות מה יהיו התוצרים שלכם.
בדיקת דרישות החומרה
הדרישות הבאות חלות על מפתחים ועל משתמשים שמפעילים תכונות באמצעות ממשקי ה-API האלה ב-Chrome. בדפדפנים אחרים עשויות להיות דרישות הפעלה שונות.
Language Detector ו-Translator APIs פועלים ב-Chrome במחשב. ממשקי ה-API האלה לא פועלים במכשירים ניידים.
Prompt API, Summarizer API, Writer API, Rewriter API ו-Proofreader API פועלים ב-Chrome כשמתקיימים התנאים הבאים:
- מערכת הפעלה: Windows 10 או 11; macOS 13 ואילך (Ventura ואילך); Linux; או ChromeOS (מגרסה Platform 16389.0.0 ואילך) במכשירי Chromebook Plus. Chrome ל-Android, ל-iOS ול-ChromeOS במכשירים שאינם Chromebook Plus עדיין לא נתמך על ידי ממשקי ה-API שמשתמשים ב-Gemini Nano.
- אחסון: לפחות 22 GB של שטח פנוי בכרך שמכיל את פרופיל Chrome.
- GPU או CPU: אפשר להפעיל מודלים מובנים באמצעות GPU או CPU.
- מעבד גרפי (GPU): יותר מ-4 GB של VRAM.
- יחידת עיבוד מרכזית (CPU): זיכרון RAM של 16 GB או יותר ו-4 ליבות CPU או יותר.
- רשת: חבילת גלישה ללא הגבלה או חיבור ללא הגבלה.
הגודל המדויק של Gemini Nano עשוי להשתנות כשהדפדפן מעדכן את המודל. כדי לדעת מה הגודל הנוכחי, אפשר לעבור אל chrome://on-device-internals.
שימוש ב-Prompt API
Prompt API משתמש במודל Gemini Nano ב-Chrome. ה-API מובנה ב-Chrome, אבל המודל מורד בנפרד בפעם הראשונה שמקור משתמש ב-API. לפני שמשתמשים ב-API הזה, צריך לאשר את המדיניות של Google בנושא שימוש אסור ב-AI גנרטיבי.
כדי לקבוע אם המודל מוכן לשימוש, מתקשרים אל LanguageModel.availability().
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
availability() שבה משתמשים ב-prompt() או ב-promptStreaming(). זה חשוב מאוד, כי יכול להיות שחלק מהמודלים לא תומכים במודאליות או בשפות מסוימות.כדי להפעיל את ההורדה וליצור מופע של מודל השפה, צריך לבדוק אם יש הפעלת משתמש. לאחר מכן, קוראים לפונקציה create().
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
אם התשובה ל-availability() הייתה downloading, צריך להמתין להתקדמות ההורדה ולעדכן את המשתמש, כי ההורדה עשויה להימשך זמן מה.
שימוש ב-localhost
כל ממשקי ה-AI API המובנים זמינים ב-localhost ב-Chrome. מגדירים את הדגלים הבאים לערך Enabled:
chrome://flags/#optimization-guide-on-device-modelchrome://flags/#prompt-api-for-gemini-nano-multimodal-input
אחר כך לוחצים על הפעלה מחדש או מפעילים מחדש את Chrome. אם נתקלים בשגיאות, כדאי לעיין בקטע בנושא פתרון בעיות ב-localhost.
פרמטרים של מודל
הפונקציה params() מודיעה לכם על הפרמטרים של מודל השפה. האובייקט כולל את השדות הבאים:
-
defaultTopK: ערך ברירת המחדל של ה-K העליון. -
maxTopK: הערך של ה-K העליון המקסימלי. -
defaultTemperature: הטמפרטורה שמוגדרת כברירת מחדל. -
maxTemperature: הטמפרטורה המקסימלית.
// Only available when using the Prompt API for Chrome Extensions.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
יצירת סשן
אחרי שה-Prompt API יכול לפעול, יוצרים סשן באמצעות הפונקציה create().
const session = await LanguageModel.create();
יצירת סשן באמצעות Prompt API לתוספי Chrome
כשמשתמשים ב-Prompt API לתוספי Chrome, אפשר להתאים אישית כל סשן באמצעות topK ו-temperature באמצעות אובייקט אפשרויות אופציונלי. ערכי ברירת המחדל של הפרמטרים האלה מוחזרים מ-LanguageModel.params().
// Only available when using the Prompt API for Chrome Extensions.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
// Only available when using the Prompt API for Chrome Extensions.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.defaultTopK,
});
אובייקט האפשרויות האופציונלי של הפונקציה create() כולל גם שדה signal, שמאפשר להעביר AbortSignal כדי להרוס את הסשן.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
הוספת הקשר באמצעות הנחיות ראשוניות
בעזרת הנחיות ראשוניות, אתם יכולים לספק למודל השפה הקשר לגבי אינטראקציות קודמות, למשל כדי לאפשר למשתמש להמשיך סשן שנשמר אחרי הפעלה מחדש של הדפדפן.
const session = await 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. [...]',
},
],
});
הגבלת התשובות באמצעות קידומת
אתם יכולים להוסיף "assistant" תפקיד, בנוסף לתפקידים הקודמים, כדי לקבל מהמודל תשובות מפורטות יותר. לדוגמה:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
במקרים מסוימים, במקום לבקש תגובה חדשה, יכול להיות שתרצו למלא מראש חלק מההודעה עם תגובה בתפקיד "assistant". ההנחיות האלה יכולות לעזור למודל השפה להשתמש בפורמט תשובה ספציפי. כדי לעשות את זה, מוסיפים את prefix: true להודעה האחרונה עם התפקיד "assistant". לדוגמה:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
הוספת קלט ופלט צפויים
ל-Prompt API יש יכולות מולטימודאליות והוא תומך בכמה שפות. מגדירים את expectedInputs וexpectedOutputs
את האופנים והשפות כשיוצרים את הפגישה.
-
type: נדרשת שיטה.- במקרה של
expectedInputs, יכול להיות שזהtext,imageאוaudio. - ב-
expectedOutputs, ממשק Prompt API מאפשר גישה רק ל-text.
- במקרה של
-
languages: מערך להגדרת השפה או השפות הצפויות. ה-API של ההנחיות מקבל את הערכים"en","ja"ו-"es". אנחנו עובדים על הוספת תמיכה בשפות נוספות.- בשדה
expectedInputs, מגדירים את שפת הנחיית המערכת ושפה אחת או יותר של הנחיות משתמש צפויות. - מגדירים שפה אחת או יותר
expectedOutputs.
- בשדה
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
יכול להיות שתקבלו "NotSupportedError" DOMException אם המודל ייתקל בקלט או בפלט שלא נתמכים.
יכולות מולטימודאליות
היכולות האלה מאפשרות לכם:
- המשתמשים יכולים לתמלל הודעות קוליות שנשלחות באפליקציית צ'אט.
- תארו תמונה שהועלתה לאתר שלכם לשימוש בכיתוב או בטקסט חלופי.
כדאי לעיין בהדגמה של הנחיית אודיו של Mediarecorder כדי לראות איך משתמשים ב-Prompt API עם קלט אודיו, ובהדגמה של הנחיית תמונה של Canvas כדי לראות איך משתמשים ב-Prompt API עם קלט תמונה.
ה-API של ההנחיות תומך בסוגי הקלט הבאים:
- אודיו:
- תמונה:
HTMLImageElementSVGImageElement-
HTMLVideoElement(שימוש בפריים של הסרטון במיקום הנוכחי בסרטון) HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
בקטע הקוד הזה מוצג סשן מולטימודאלי שבו קודם מעובדים שני רכיבים חזותיים (תמונה אחת Blob ו-HTMLCanvasElement אחד), ו-AI משווה ביניהם. אחר כך המשתמש יכול להגיב בהקלטת אודיו (בתור AudioBuffer).
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en"] },
{ type: "audio" },
{ type: "image" },
],
expectedOutputs: [{ type: "text", languages: ["en"] }],
});
const referenceImage = await (await fetch("reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");
const response1 = await session.prompt([
{
role: "user",
content: [
{
type: "text",
value:
"Give a helpful artistic critique of how well the second image matches the first:",
},
{ type: "image", value: referenceImage },
{ type: "image", value: userDrawnImage },
],
},
]);
console.log(response1);
const audioBuffer = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBuffer },
],
},
]);
console.log(response2);
צירוף הודעות
יכול להיות שההסקה תימשך זמן מה, במיוחד כשמזינים הנחיות עם קלט רב-אופני. מומלץ לשלוח הנחיות מוגדרות מראש כדי לאכלס את הסשן, וכך המודל יוכל להתחיל לעבד את ההנחיות מוקדם יותר.
אמנם initialPrompts שימושיים בזמן יצירת הסשן, אבל אפשר להשתמש בשיטה append() בנוסף לשיטות prompt() או promptStreaming(), כדי לתת הנחיות הקשריות נוספות אחרי שהסשן נוצר.
לדוגמה:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
ההבטחה שמוחזרת על ידי append() מתקיימת אחרי שההנחיה מאומתת, מעובדת ומצורפת לסשן. ההבטחה נדחית אם אי אפשר לצרף את ההנחיה.
העברת סכימת JSON
מוסיפים את השדה responseConstraint לשיטה prompt() או promptStreaming() כדי להעביר סכימת JSON כערך. אחר כך אפשר להשתמש ב-structured output עם Prompt API.
בדוגמה הבאה, סכמת ה-JSON מוודאת שהמודל ישיב true או false כדי לסווג אם הודעה מסוימת היא בנושא קדרות.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
ההטמעה יכולה לכלול סכימת JSON או ביטוי רגולרי כחלק מההודעה שנשלחת למודל. הפעולה הזו משתמשת בחלק ממכסת הקלט. כדי למדוד כמה מהמכסה של נתוני הקלט ישמשו, מעבירים את האפשרות responseConstraint אל session.measureInputUsage().
כדי להימנע מההתנהגות הזו, אפשר להשתמש באפשרות omitResponseConstraintInput. אם אתם עושים את זה, מומלץ לכלול הנחיות בהנחיה:
const result = await session.prompt(`
Summarize this feedback into a rating between 0-5. Only output a JSON
object { rating }, with a single property whose value is a number:
The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
הנחיית המודל
אפשר להנחות את המודל באמצעות הפונקציות 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 = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
if (available !== 'unavailable') {
const session = await 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(), שמאפשרת להציג תוצאות חלקיות בזמן שהן מתקבלות מהמודל. הפונקציה
promptStreaming() מחזירה ReadableStream.
const available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
if (available !== 'unavailable') {
const session = await 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);
}
}
הפסקת ההנחיות
הפונקציות prompt() ו-promptStreaming() מקבלות פרמטר שני אופציונלי עם שדה signal, שמאפשר לכם להפסיק את הפעלת ההנחיות.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
ניהול סשנים
בכל סשן נשמר ההקשר של השיחה. אינטראקציות קודמות נלקחות בחשבון באינטראקציות עתידיות עד שחלון ההקשר של הסשן מתמלא.
לכל סשן יש מספר מקסימלי של טוקנים שהוא יכול לעבד. כדי לבדוק את ההתקדמות שלכם לקראת המגבלה הזו, תוכלו להיעזר בנתונים הבאים:
console.log(`${session.inputUsage}/${session.inputQuota}`);
שיבוט של סשן
כדי לשמור משאבים, אפשר להעתיק סשן קיים באמצעות הפונקציה clone(). כך נוצרת הסתעפות של השיחה, שבה ההקשר וההנחיה הראשונית נשמרים.
הפונקציה clone() מקבלת אובייקט אופציונלי עם שדה signal, שמאפשר להעביר AbortSignal כדי להרוס את הסשן המשוכפל.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
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 choosing between a t-shirt
and a polo."
);
הדגמות
יצרנו כמה הדגמות כדי להציג את מגוון תרחישי השימוש ב-Prompt API. ההדגמות הבאות הן אפליקציות אינטרנט:
כדי לבדוק את Prompt API בתוספים ל-Chrome, מתקינים את התוסף לדוגמה. קוד המקור של התוסף זמין ב-GitHub.
אסטרטגיית ביצועים
אנחנו עדיין מפתחים את Prompt API לאינטרנט. בזמן שאנחנו מפתחים את ה-API הזה, מומלץ לעיין בשיטות המומלצות שלנו בנושא ניהול סשנים כדי להשיג ביצועים אופטימליים.
מדיניות הרשאות, מסגרות iframe ו-Web Workers
כברירת מחדל, Prompt API זמין רק לחלונות ברמה העליונה ול-iframe מאותו מקור. אפשר להעניק גישה ל-API ל-iframes ממקורות שונים באמצעות מאפיין מדיניות ההרשאות allow="":
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Prompt API by
setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
בשלב הזה, Prompt API לא זמין ב-Web Workers, בגלל המורכבות של יצירת מסמך אחראי לכל worker כדי לבדוק את סטטוס מדיניות ההרשאות.
השתתפות ושיתוף משוב
המשוב שלכם יכול להשפיע ישירות על האופן שבו נפתח ונחיל גרסאות עתידיות של ה-API הזה ושל כל ממשקי ה-API המובנים של AI.
- כדי לשלוח משוב על ההטמעה של Chrome, אפשר לדווח על באג או לשלוח בקשה להוספת תכונה.
- כדי לשתף משוב על מבנה ה-API, אפשר להוסיף תגובה ל-Issue קיים או לפתוח Issue חדש במאגר GitHub של Prompt API.
- הצטרפות לתוכנית הגישה המוקדמת