Prompt API בתוספים ל-Chrome

תאריך פרסום: 11 בנובמבר 2024

Prompt API לתוספים זמין עכשיו בגרסת מקור לניסיון, כך שתוכלו ליצור תוספים ל-Chrome שמשתמשים ב-Gemini Nano, מודל השפה היעיל ביותר שלנו, בדפדפן.

יש הרבה תרחישי שימוש ל-Prompt API עם תוספי Chrome. הנה כמה דוגמאות:

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

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

זמינות

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

השתתפות בתוכנית הניסוי למקורות

כדי להשתמש ב-Prompt API בתוספים ל-Chrome, צריך להוסיף את ההרשאה "aiLanguageModelOriginTrial" לקובץ manifest.json לפי הקטע הבא, יחד עם כל הרשאה אחרת שדרושה לתוסף.

כדי להירשם לתוסף לתקופת הניסיון למקור, צריך להשתמש בכתובת ה-URL‏ chrome-extension://YOUR_EXTENSION_ID בתור מקור האינטרנט. לדוגמה: chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

הרשמה לגרסת הניסיון של Chrome Origin

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

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

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

שימוש ב-Prompt API

אחרי ששולחים בקשה לקבלת הרשאה לשימוש ב-Prompt API, אפשר לפתח את התוסף. יש שתי פונקציות חדשות של תוספים שזמינות לך במרחב השמות של chrome.aiOriginTrial.languageModel:

  • capabilities() כדי לבדוק מה המודל יכול לעשות ואם הוא זמין.
  • create() כדי להתחיל סשן של מודל שפה.

הורדת מודל

Prompt API משתמש במודל Gemini Nano ב-Chrome. אמנם ה-API מובנה ב-Chrome, אבל ההורדה של המודל מתבצעת בנפרד בפעם הראשונה שבה תוסף משתמש ב-API.

כדי לבדוק אם המודל מוכן לשימוש, צריך להפעיל את הפונקציה chrome.aiOriginTrial.languageModel.capabilities() האסינכרונית. הפונקציה מחזירה אובייקט AILanguageModelCapabilities עם שדה available שיכול לקבל שלושה ערכים אפשריים:

  • 'no': הדפדפן הנוכחי תומך ב-Prompt API, אבל אי אפשר להשתמש בו כרגע. יכולות להיות לכך כמה סיבות, למשל, אין מספיק מקום בכונן זמין להורדת המודל.
  • 'readily': הדפדפן הנוכחי תומך ב-Prompt API ואפשר להשתמש בו מיד.
  • 'after-download': הדפדפן הנוכחי תומך ב-Prompt API, אבל קודם צריך להוריד את המודל.

כדי להפעיל את הורדת המודל וליצור את הסשן של מודל השפה, מפעילים את הפונקציה chrome.aiOriginTrial.languageModel.create() האסינכרונית. אם התשובה להודעה capabilities() היא 'after-download', מומלץ להאזין להתקדמות ההורדה. כך תוכלו להודיע למשתמש אם ההורדה נמשכת זמן רב.

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

יכולות המודל

הפונקציה capabilities() גם מאפשרת לכם לדעת מהן היכולות של מודל השפה. בנוסף ל-available, באובייקט AILanguageModelCapabilities שנוצר יש גם את השדות הבאים:

  • defaultTopK: ערך ברירת המחדל של top-K (ברירת המחדל: 3).
  • maxTopK: הערך של ה-K העליון (8).
  • defaultTemperature: טמפרטורת ברירת המחדל (1.0). הטמפרטורה צריכה להיות בין 0.0 ל-2.0.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

יצירת סשן

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

אפשרויות סשן

אפשר להתאים אישית כל סשן באמצעות topK ו-temperature באמצעות אובייקט אפשרויות אופציונלי. ערכי ברירת המחדל לפרמטרים האלה מוחזרים מ-chrome.aiOriginTrial.languageModel.capabilities().

const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
  temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
  topK: capabilities.defaultTopK,
});

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

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

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
הנחיות מערכת

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

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

הנחיות ראשוניות

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

const session = await chrome.aiOriginTrial.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. [...]' }
  ]
});

פרטי הסשן

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

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

שמירת נתונים בסשן

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

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a friendly, helpful assistant specialized in clothing choices.'
});

const result1 = await session.prompt(
  'What should I wear today? It is sunny and I am unsure between a t-shirt and a polo.'
);
console.log(result1);

const result2 = await session.prompt(
  'That sounds great, but oh no, it is actually going to rain! New advice?'
);
console.log(result2);

שכפול סשן

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

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

const clonedSession = await session.clone({
  signal: controller.signal,
});

הנחיה למודל

אפשר להנחות את המודל באמצעות הפונקציות 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, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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(), שמאפשרת להציג תוצאות חלקיות כפי שהן מגיעות מהמודל.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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);
  }
}

הפונקציה promptStreaming() מחזירה ReadableStream שהקטעים שלו נבנים זה על גבי זה. לדוגמה, "Hello,", "Hello world,", "Hello world I am,", "Hello world I am an AI.". זו לא ההתנהגות הרצויה. אנחנו מתכוונים להתאים את ה-API לסטרימינג לממשקי API אחרים בסטרימינג בפלטפורמה, שבהם הקטעים הם קטעים רצופים של סטרימינג ארוך אחד. כלומר, הפלט יהיה רצף כמו "Hello", " world", " I am", " an 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() וגם promptStreaming() מקבלים פרמטר שני אופציונלי עם שדה signal, שמאפשר להפסיק את ההפעלה של ההנחיות.

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

const result = await session.prompt(
  'Write me a poem!',
  { 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 unsure
  between a t-shirt and a polo.'
);

הדגמה (דמו)

כדי לבדוק את Prompt API בתוספים ל-Chrome, צריך להתקין את התוסף לדוגמה. קוד המקור של התוסף זמין ב-GitHub.

ממשק הדגמה ל-Prompt API

השתתפות ושיתוף משוב

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