Prompt API

פורסם: 20 במאי 2025, עדכון אחרון: 21 בספטמבר 2025

הסבר פיתוח אתרים תוספים הסטטוס של Chrome הרציונל
GitHub גרסת מקור לניסיון בגרסת מקור לניסיון Chrome 138 תצוגה כוונה להתנסות

בעזרת Prompt API, אתם יכולים לשלוח בקשות בשפה טבעית אל Gemini Nano בדפדפן.

יש הרבה דרכים להשתמש ב-Prompt API. לדוגמה, אפשר ליצור:

  • חיפוש מבוסס-AI: תשובות לשאלות על סמך התוכן של דף אינטרנט.
  • פידים של חדשות בהתאמה אישית: יצירת פיד שמסווג באופן דינמי מאמרים לקטגוריות ומאפשר למשתמשים לסנן את התוכן הזה.
  • מסנני תוכן בהתאמה אישית. לנתח כתבות חדשותיות ולטשטש או להסתיר תוכן באופן אוטומטי על סמך נושאים שהוגדרו על ידי המשתמש.
  • יצירת אירועים ביומן. לפתח תוסף ל-Chrome שמחלץ באופן אוטומטי פרטי אירועים מדפי אינטרנט, כדי שהמשתמשים יוכלו ליצור אירועים ביומן בכמה שלבים פשוטים.
  • חילוץ חלק של אנשי קשר. ליצור תוסף שמחלץ פרטים ליצירת קשר מאתרים, כדי להקל על המשתמשים ליצור קשר עם עסק או להוסיף פרטים לרשימת אנשי הקשר שלהם.

אלה רק כמה אפשרויות, ואנחנו סקרנים לראות מה תיצרו.

בדיקת דרישות החומרה

הדרישות הבאות חלות על מפתחים ועל משתמשים שמפעילים תכונות באמצעות ממשקי ה-API האלה ב-Chrome. בדפדפנים אחרים עשויות להיות דרישות הפעלה שונות.

ממשקי ה-API של כלי זיהוי השפה והתרגום פועלים ב-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): יותר מ-4 GB של VRAM.
  • רשת: נתונים ללא הגבלה או חיבור ללא מדידה.

הגודל המדויק של 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();

כדי להוריד את המודל, צריך שתהיה אינטראקציה של משתמש, כמו לחיצה, הקשה או לחיצה על מקש.

אם התשובה הייתה downloadable או downloading, המודל וממשקי ה-API זמינים אבל צריך להוריד אותם כדי להשתמש בתכונות. ההורדה תתאפשר רק אם המשתמש יבצע אינטראקציה עם הדף (לדוגמה, לחיצה, הקשה או לחיצה על מקש).

כדי להוריד את המודל וליצור ממנו מופע, קוראים לפונקציה create().

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

אם התשובה ל-availability() הייתה downloading, צריך להמתין להתקדמות ההורדה ולעדכן את המשתמש, כי ההורדה עשויה להימשך זמן מה.

פרמטרים של מודל

הפונקציה params() מודיעה לכם על הפרמטרים של מודל השפה. האובייקט כולל את השדות הבאים:

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 יש יכולות multimodal והוא תומך במספר שפות. מגדירים את expectedInputs ואת expectedOutputs האפשרויות והשפות כשיוצרים את הפגישה.

  • type: נדרשת שיטה.
    • במקרה של expectedInputs, הערך יכול להיות text, image או audio.
    • ב-expectedOutputs, ממשק Prompt API מאפשר רק text.
  • languages: מערך להגדרת השפה או השפות הצפויות. ה-Prompt 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

כברירת מחדל, Prompt API זמין רק לחלונות ברמה העליונה ול-iframe מאותו מקור. אפשר להעניק גישה ל-API ל-iframes ממקורות שונים באמצעות מאפיין allow="" Permission Policy:

<!--
  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.