פורסם: 11 בנובמבר 2024, עדכון אחרון: 20 במאי 2025
הסבר | פיתוח אתרים | תוספים | הסטטוס של Chrome | כוונת רכישה |
---|---|---|---|---|
GitHub | |
תצוגה | כוונה להתנסות |
באמצעות Prompt API, אתם יכולים לשלוח בקשות בשפה טבעית אל Gemini Nano בדפדפן.
יש הרבה דרכים להשתמש ב-Prompt API בתוספי Chrome. לדוגמה:
- אירועים ביומן שנוצרים באופן מיידי. לפתח תוסף ל-Chrome שמחלץ באופן אוטומטי פרטי אירועים מדפי אינטרנט, כדי שהמשתמשים יוכלו ליצור אירועים ביומן בכמה שלבים פשוטים.
- חילוץ חלק של אנשי קשר. ליצור תוסף שמחלץ פרטים ליצירת קשר מאתרים, כדי להקל על המשתמשים ליצור קשר עם עסק או להוסיף פרטים לרשימת אנשי הקשר שלהם.
- סינון תוכן דינמי. תצור תוסף ל-Chrome שמנתח מאמרי חדשות ומטשטש או מסתיר תוכן באופן אוטומטי על סמך נושאים שהמשתמש מגדיר.
אלה רק כמה אפשרויות, ואנחנו סקרנים לראות מה יהיו התוצרים שלכם.
בדיקת דרישות החומרה
הדרישות הבאות חלות על מפתחים ועל משתמשים שמפעילים תכונות באמצעות ממשקי ה-API האלה ב-Chrome. בדפדפנים אחרים עשויות להיות דרישות הפעלה שונות.
ממשקי ה-API של כלי זיהוי השפה והתרגום פועלים ב-Chrome במחשב. ממשקי ה-API האלה לא פועלים במכשירים ניידים. ממשקי Prompt API, Summarizer API, Writer API ו-Rewriter API פועלים ב-Chrome כשמתקיימים התנאים הבאים:
- מערכת הפעלה: Windows 10 או 11; macOS מגרסה 13 ואילך (Ventura ואילך); או Linux. Chrome ל-Android, ל-iOS ול-ChromeOS עדיין לא נתמך על ידי ממשקי ה-API שמשתמשים ב-Gemini Nano.
- אחסון: לפחות 22 GB בכרך שמכיל את פרופיל Chrome.
- מעבד גרפי (GPU): יותר מ-4 GB של VRAM.
- רשת: נתונים ללא הגבלה או חיבור ללא מדידה.
הגודל המדויק של Gemini Nano עשוי להשתנות מעט. כדי לראות את הגודל הנוכחי, נכנסים אל chrome://on-device-internals
ועוברים אל Model status (סטטוס המודל).
פותחים את נתיב הקובץ שמופיע ברשימה כדי לקבוע את גודל המודל.
שימוש ב-Prompt API בתוספים
לפני שמשתמשים ב-API הזה, צריך לאשר את המדיניות של Google בנושא שימוש אסור ב-AI גנרטיבי.
יש שתי פונקציות של תוספים שזמינות לכם במרחב השמות LanguageModel
:
-
availability()
כדי לבדוק מה היכולות של המודל ואם הוא זמין. create()
כדי להתחיל סשן של מודל שפה.
הורדת המודל
ה-Prompt API משתמש במודל Gemini Nano ב-Chrome. ה-API מוטמע ב-Chrome, אבל המודל מורד בנפרד בפעם הראשונה שתוסף משתמש ב-API.
כדי לקבוע אם המודל מוכן לשימוש, מפעילים את הפונקציה האסינכרונית LanguageModel.availability()
. אחת מהתגובות הבאות אמורה לחזור:
"unavailable"
פירושו שההטמעה לא תומכת באפשרויות המבוקשות, או שלא תומכת בהנחיית מודל שפה בכלל.-
"downloadable"
מציין שההטמעה תומכת באפשרויות המבוקשות, אבל היא תצטרך להוריד משהו (לדוגמה, מודל השפה עצמו או כוונון עדין) לפני שהיא תוכל ליצור סשן באמצעות האפשרויות האלה. -
"downloading"
מציין שההטמעה תומכת באפשרויות המבוקשות, אבל היא צריכה לסיים פעולת הורדה שמתבצעת כרגע לפני שהיא יכולה ליצור סשן באמצעות האפשרויות האלה. -
"available"
מציין שההטמעה תומכת באפשרויות המבוקשות בלי לדרוש הורדות חדשות.
כדי להפעיל את הורדת המודל וליצור את סשן מודל השפה, קוראים לפונקציה LanguageModel.availability()
האסינכרונית. אם התשובה ל-availability()
הייתה 'downloadable'
, מומלץ להאזין להתקדמות ההורדה. כך תוכלו ליידע את המשתמש אם ההורדה תיקח זמן.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
יכולות המודל
הפונקציה params()
מודיעה לכם על הפרמטרים של מודל השפה. לאובייקט יש את השדות הבאים:
-
defaultTopK
: ערך ברירת המחדל של ה-K העליון (ברירת מחדל:3
). -
maxTopK
: הערך של ה-K העליון המקסימלי (8
). -
defaultTemperature
: הטמפרטורה שמוגדרת כברירת מחדל (1.0
). ערך הטמפרטורה צריך להיות בין0.0
ל-2.0
. -
maxTemperature
: הטמפרטורה המקסימלית.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
יצירת סשן
אחרי שה-Prompt API יכול לפעול, יוצרים סשן באמצעות הפונקציה create()
.
אפשר להנחות את המודל באמצעות הפונקציות prompt()
או promptStreaming()
.
התאמה אישית של הסשן
אפשר להתאים אישית כל סשן באמצעות 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. [...]' }
]
});
מגבלות של פעילות באתר
לסשן נתון של מודל שפה יש מספר מקסימלי של טוקנים שהוא יכול לעבד. כדי לבדוק את השימוש ואת ההתקדמות לקראת המגבלה הזו, אפשר להשתמש במאפיינים הבאים באובייקט של הסשן:
console.log(`${session.inputUsage}/${session.inputQuota}`);
המשכיות של סשנים
בכל סשן נשמר ההקשר של השיחה. אינטראקציות קודמות נלקחות בחשבון באינטראקציות עתידיות עד שחלון ההקשר של הסשן מתמלא.
const session = await LanguageModel.create({
initialPrompts: [{
role: "system",
content: "You are a friendly, helpful assistant specialized in clothing choices."
}]
});
const result1 = await session.prompt(
"What should I wear today? It is sunny. 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 {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 }
);
סיום סשן
אם אתם לא צריכים יותר את הסשן, אתם יכולים להתקשר למספר 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.
השתתפות ושיתוף משוב
המשוב שלכם יכול להשפיע ישירות על האופן שבו נפתח ונחיל גרסאות עתידיות של ה-API הזה ושל כל ממשקי ה-API המובנים של AI.
- כדי לשלוח משוב על ההטמעה של Chrome, אפשר להגיש דוח באגים או בקשה להוספת תכונה.
- כדי לשתף משוב על מבנה ה-API, אפשר להוסיף תגובה ל-Issue קיים או לפתוח Issue חדש במאגר ב-GitHub של Prompt API.
- מורידים את תוסף לדוגמה של Prompt API ב-GitHub.
- כדי להשתתף בתהליך יצירת התקנים, אפשר להצטרף לקבוצת הקהילה Web Incubator.