Prompt API

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

הסברים פיתוח אתרים תוספים סטטוס Chrome הרציונל
GitHub Chrome 148 Chrome 138 תצוגה Intent to Ship
GitHub גרסת מקור לניסיון גרסת מקור לניסיון של פרמטרים לדגימה Chrome 148 תצוגה כוונה לערוך ניסוי

באמצעות Prompt API, אתם יכולים לשלוח בקשות בשפה טבעית למודל הבסיס ב-Chrome.

יש הרבה דרכים להשתמש ב-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 (מפלטפורמה 16389.0.0 ואילך) במכשירי Chromebook Plus. ממשקי ה-API שמשתמשים במודלים בסיסיים עדיין לא תומכים ב-Chrome ל-Android, ל-iOS ול-ChromeOS במכשירים שהם לא Chromebook Plus.
  • אחסון: לפחות 22GB של נפח אחסון פנוי בכונן שמכיל את פרופיל Chrome.
  • GPU או CPU: מודלים מובנים יכולים לפעול עם GPU או CPU.
    • GPU: יותר מ-4GB של VRAM.
    • מעבד (CPU): זיכרון RAM בנפח 16GB או יותר ו-4 ליבות מעבד או יותר.
    • הערה: כדי להשתמש ב-Prompt API עם קלט אודיו, צריך GPU.
  • רשת: חבילת גלישה ללא הגבלה או חיבור ללא הגבלה.

הגודל המדויק של Gemini Nano עשוי להשתנות כשהדפדפן מעדכן את המודל. כדי לבדוק את הגודל הנוכחי, צריך להיכנס אל chrome://on-device-internals.

שימוש ב-Prompt API

‫Prompt API משתמש במודל Gemini Nano ב-Chrome. ה-API מובנה ב-Chrome, אבל המודל יורד בנפרד בפעם הראשונה שמקור משתמש ב-API.

כדי לבדוק אם המודל מוכן לשימוש, מפעילים את הפונקציה LanguageModel.availability().

const availability = await LanguageModel.availability({
  // The same options in `prompt()` or `promptStreaming()`
});

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

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

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

יצירת סשן

אחרי ש-Prompt API יכול לפעול, יוצרים סשן באמצעות הפונקציה create().

const session = await LanguageModel.create();

אובייקט האפשרויות האופציונלי של הפונקציה create() מקבל שדה signal, שמאפשר להעביר AbortSignal כדי להשמיד את הסשן.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await LanguageModel.create({
  signal: controller.signal,
});

פרמטרים לדגימה

שליטה בדגימה מאפשרת לכם לקבוע עד כמה התשובות של המודל יהיו צפויות (דטרמיניסטיות) או יצירתיות (מגוונות). הזמינות של פרמטרים לדגימה שונה בין פלטפורמת האינטרנט לבין תוספים ל-Chrome:

  • אינטרנט: משתמשים באפשרות samplingMode, שמשתמשת בערכי enum תיאוריים במקום במספרים גולמיים כדי לשנות את יכולת החיזוי של הפלט.
  • תוספים ל-Chrome: יש תמיכה בפרמטרים מספריים מדור קודם (topK, temperature) ובשיטה LanguageModel.params().

מצב דגימה באינטרנט

מעבירים את האפשרות samplingMode אל LanguageModel.create() (או אל LanguageModel.availability()).

ערכי ה-enum הנתמכים של samplingMode הם:

  • ‫"most-predictable": רמת הדטרמיניזם והחיזוי הגבוהה ביותר.
  • ‫"predictable": פלט צפוי יותר עם שינויים מינימליים.
  • ‫"slightly-predictable": פלט שניתן לחיזוי במידה מסוימת.
  • ‫"balanced": איזון בין יכולת חיזוי ליצירתיות (פעולת ברירת מחדל אופיינית).
  • ‫"slightly-creative": פלט יצירתי ומגוון קצת יותר.
  • ‫"creative": פלט יצירתי ומגוון.
  • ‫"most-creative": רמת השונות והיצירתיות המקסימלית.
// Available on the web with the Sampling Parameters Origin Trial enabled
const session = await LanguageModel.create({
  samplingMode: 'creative',
});

// The configured sampling mode is exposed on the session instance
console.log(session.samplingMode);
// "creative"

פרמטרים לדגימה של תוספים ל-Chrome

כשמשתמשים ב-Prompt API בתוספים ל-Chrome, עדיין אפשר להתאים אישית כל סשן באמצעות topK ו-temperature באמצעות אובייקט האפשרויות.

הפונקציה הסטטית LanguageModel.params() מספקת מידע על מגבלות הפרמטרים של מודל השפה, כברירת מחדל וכמקסימום:

  • ‫defaultTopK: ערך ברירת המחדל של top-K.
  • ‫maxTopK: הערך המקסימלי של top-K.
  • ‫defaultTemperature: ערך ברירת המחדל של temperature.
  • ‫maxTemperature: הטמפרטורה המקסימלית.
// Only available in Chrome Extensions
const params = await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

// Initializing a new session in extensions must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.min(params.defaultTemperature * 1.2, params.maxTemperature),
  topK: params.defaultTopK,
});

console.log(slightlyHighTemperatureSession.temperature);
console.log(slightlyHighTemperatureSession.topK);

הוספת הקשר באמצעות הנחיות ראשוניות

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

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: מערך להגדרת השפה או השפות הצפויות. ‫Prompt API מקבל את הפרמטרים "en",‏ "ja",‏ "es",‏ "de" ו-"fr". אנחנו מפתחים תמיכה בשפות נוספות.
    • ב-expectedInputs, מגדירים את שפת ההנחיה של המערכת ושפה אחת או יותר של הנחיות המשתמש הצפויות.
    • מגדירים שפה אחת או יותר ב-expectedOutputs.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

יכול להיות שתקבלו "NotSupportedError" DOMException אם המודל ייתקל בקלט או בפלט לא נתמכים.

יכולות מולטי-מודאליות

בעזרת היכולות האלה, אתם יכולים:

  • המשתמשים יכולים לתמלל הודעות קוליות שנשלחות באפליקציית צ'אט.
  • לתאר תמונה שהועלתה לאתר שלכם כדי להשתמש בתיאור ככיתוב או כטקסט חלופי.

כדי לראות איך משתמשים ב-Prompt API עם קלט אודיו, אפשר לעיין בהדגמה של Mediarecorder Audio Prompt. כדי לראות איך משתמשים ב-Prompt API עם קלט תמונה, אפשר לעיין בהדגמה של Canvas Image Prompt.

‫Prompt API תומך בסוגי הקלט הבאים:

בקטע הקוד הזה מוצג סשן מולטימודלי שקודם כל מעבד שני פריטים חזותיים (תמונה אחת 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 כערך. אחר כך תוכלו להשתמש בפלט מובנה עם 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.measureContextUsage().

כדי למנוע את ההתנהגות הזו, אפשר להשתמש באפשרות 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.contextUsage}/${session.contextWindow}`);

יכול להיות שתשלחו הנחיה שתגרום לחריגה מחלון ההקשר. במקרים כאלה, החלקים הראשונים של השיחה עם מודל השפה יוסרו, זוג אחד של הנחיה ותשובה בכל פעם, עד שיהיו מספיק אסימונים זמינים לעיבוד ההנחיה החדשה. היוצא מן הכלל הוא הנחיית המערכת, שאף פעם לא מוסרת.

כדי לזהות חריגות כאלה, אפשר להאזין לאירוע contextoverflow בסשן:

session.addEventListener("contextoverflow", () => {
  console.log("We've gone past the context window, and some inputs will be dropped!");
});

אם אי אפשר להסיר מספיק אסימונים מהיסטוריית השיחות כדי לעבד את ההנחיה החדשה, הקריאה ל-prompt() או ל-promptStreaming() תיכשל עם חריגה מסוג QuotaExceededError ושום דבר לא יוסר. ל-QuotaExceededError יש את המאפיינים הבאים:

  • requested: כמה טוקנים יש בקלט
  • contextWindow: כמה אסימונים היו זמינים

מידע נוסף על ניהול סשנים

שכפול סשן

כדי לחסוך במשאבים, אפשר להעתיק סשן קיים באמצעות הפונקציה 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 לרכיבי iframe ממקורות שונים באמצעות המאפיין 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.