תאריך פרסום: 20 במאי 2025, עדכון אחרון: 21 בספטמבר 2025
| סרטון הסבר | פיתוח אתרים | תוספים | הסטטוס של Chrome | הרציונל |
|---|---|---|---|---|
| GitHub | |
תצוגה | הבעת כוונות לניסוי |
באמצעות Prompt API, אתם יכולים לשלוח בקשות בשפה טבעית אל Gemini Nano בדפדפן.
יש הרבה דרכים להשתמש ב-Prompt API. לדוגמה, אפשר ליצור:
- חיפוש מבוסס-AI: קבלת תשובות לשאלות על סמך התוכן של דף אינטרנט.
- פידים של חדשות בהתאמה אישית: יצירת פיד שמסווג באופן דינמי מאמרים לקטגוריות ומאפשר למשתמשים לסנן את התוכן הזה.
- מסנני תוכן בהתאמה אישית. לנתח כתבות חדשותיות ולטשטש או להסתיר תוכן באופן אוטומטי על סמך נושאים שהוגדרו על ידי המשתמש.
- יצירת אירועים ביומן. לפתח תוסף ל-Chrome שמחלץ באופן אוטומטי פרטי אירועים מדפי אינטרנט, כדי שהמשתמשים יוכלו ליצור אירועים ביומן בכמה שלבים פשוטים.
- חילוץ חלק של אנשי קשר. יצירת תוסף שמחלץ פרטים ליצירת קשר מאתרים, כדי להקל על המשתמשים ליצור קשר עם עסק או להוסיף פרטים לרשימת אנשי הקשר שלהם.
אלה רק כמה אפשרויות, ואנחנו סקרנים לראות מה יהיו התוצרים שלכם.
בדיקת דרישות החומרה
הדרישות הבאות חלות על מפתחים ועל משתמשים שמפעילים תכונות באמצעות ממשקי ה-API האלה ב-Chrome. בדפדפנים אחרים עשויות להיות דרישות הפעלה שונות.
ממשקי ה-API של כלי זיהוי השפה והתרגום פועלים ב-Chrome במחשב. ממשקי ה-API האלה לא פועלים במכשירים ניידים. ממשקי ה-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();
כדי להפעיל את ההורדה וליצור מופע של מודל השפה, צריך לבדוק אם יש הפעלת משתמש. לאחר מכן, קוראים לפונקציה 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: הטמפרטורה המקסימלית.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
יצירת סשן
אחרי ש-Prompt API יכול לפעול, יוצרים סשן באמצעות הפונקציה create().
אפשר להתאים אישית כל סשן באמצעות topK ו-temperature באמצעות אובייקט אפשרויות אופציונלי. ערכי ברירת המחדל של הפרמטרים האלה מוחזרים מ-LanguageModel.params().
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
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"-role. לדוגמה:
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 עם קלט תמונה.
צירוף הודעות
יכול להיות שההסקה תימשך זמן מה, במיוחד כשמזינים הנחיות עם קלט רב-אופני. כדאי לשלוח הנחיות מוגדרות מראש כדי לאכלס את הסשן, כדי שהמודל יוכל להתחיל לעבד את ההנחיות מראש.
אמנם 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 כערך. אחר כך תוכלו להשתמש בפלט מובנה עם 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 { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
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 { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
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
כברירת מחדל, ה-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.
- הצטרפות לתוכנית הגישה המוקדמת