יש הרבה דרכים להשתמש ב-Prompt API. לדוגמה, אפשר ליצור:
אלה רק כמה אפשרויות, ואנחנו סקרנים לראות מה תיצרו.
Prompt API משתמש במודל Gemini Nano ב-Chrome. ה-API מובנה ב-Chrome, אבל המודל מורד בנפרד בפעם הראשונה שמקור משתמש ב-API. לפני שמשתמשים ב-API הזה, צריך לאשר את המדיניות של Google בנושא שימוש אסור ב-AI גנרטיבי .
כדי לקבוע אם המודל מוכן לשימוש, מתקשרים אל
LanguageModel.availability() .
const availability = await LanguageModel . availability ();
זהירות: תמיד צריך להעביר את אותן אפשרויות לפונקציה availability() שבה משתמשים ב-prompt() או ב-promptStreaming(). זה חשוב מאוד, כי יכול להיות שחלק מהמודלים לא תומכים במודאליות או בשפות מסוימות.
כדי להפעיל את ההורדה וליצור מופע של מודל השפה, צריך לבדוק אם יש הפעלת משתמש . לאחר מכן, קוראים לפונקציה 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-model
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
אחר כך לוחצים על הפעלה מחדש או מפעילים מחדש את Chrome. אם נתקלים בשגיאות, כדאי לפתור בעיות שקשורות ל-localhost .
פרמטרים של מודל
הפונקציה 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 אם המודל ייתקל בקלט או בפלט שלא נתמכים.
יכולות מולטימודאליות
זהירות: יכולות מולטימודאליות זמינות בגרסת המקור לניסיון של Prompt API לאינטרנט ולתוספים ל-Chrome. הן עדיין לא זמינות בגרסה היציבה של Chrome.
היכולות האלה מאפשרות לכם:
המשתמשים יכולים לתמלל הודעות קוליות שנשלחו באפליקציית צ'אט.
מתאר תמונה שהועלתה לאתר לשימוש בכיתוב או בטקסט חלופי.
כדאי לעיין בהדגמה של הנחיית אודיו ב-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 .