פורסם: 13 במאי 2025
מודלים גדולים של שפה (LLM) ידועים בתשובות הארוכות שלהם לפעמים. גם אם תבקשו מהמודל להשיב רק ב-true או ב-false, יכול להיות שהוא ייתן תשובה ידידותית עם מידע נוסף שלא ביקשתם, למשל: "בטח, התשובה היא: true".
כדי להתמודד עם האתגר הזה, Prompt API מאפשר לכם לציין פורמט פלט JSON של תגובת המודל על ידי העברת סכימת JSON לשיטות LanguageModel.prompt()
ו-LanguageModel.promptStreaming()
. התמיכה בפלט מובנה זמינה החל מגרסה 137 של Chrome.
מהי סכימת JSON
JSON Schema הוא אוצר מילים שמאפשר עקביות, תוקף ויכולת פעולה הדדית של נתוני JSON בהיקף נרחב. כשמדובר בהחלפת נתונים, סכימת JSON היא תקן יעיל להגדרת המבנה והכללים של נתוני JSON. הוא משתמש בקבוצה של מילות מפתח כדי להגדיר את המאפיינים של הנתונים.
סכימת JSON היא תקן בתעשייה להבטחת פלט מובנה, והיא נמצאת בשימוש, בין היתר, ב-OpenAI API וב-Gemini API.
לדוגמה, אתם מבקשים מהמודל להקצות לכל היותר שלושה האשטאגים לפוסט ברשת חברתית אונליין, כמו Mastodon. פלט אידיאלי יכול להיראות כך:
{
"hashtags": [
"#pottery",
"#dyi"
]
}
סכימת ה-JSON המתאימה לצורת אובייקט הפלט המבוקשת תיראה כך:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
סכימת ה-JSON הזו מגדירה מבנה לאובייקט שחייב להכיל שדה hashtags
עם האילוצים הבאים:
-
"type": "object"
: ערך הבסיס חייב להיות אובייקט JSON. -
"properties": { "hashtags": ... }
: לאובייקט יכול להיות (ובמקרה הזה חייב להיות) מאפיין בשםhashtags
. "hashtags":
-
"type": "array"
: הערך חייב להיות מערך. -
"maxItems": 3
: המערך יכול להכיל עד 3 פריטים. -
"items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: כל פריט במערך צריך להיות מחרוזת שתואמת לתבנית הביטוי הרגולרי שצוינה:^#[^\\s#]+$
:-
^#
→ חייב להתחיל ב-#
. -
[^\\s#]+
→ ואחריו תו אחד או יותר שלא כוללים רווח (\s
) או#
אחר. -
$
→ חייב להסתיים שם.
-
-
"required": ["hashtags"]
: האובייקט חייב להכיל את המאפייןhashtags
.
"additionalProperties": false
: אסור להשתמש במאפיינים אחרים מלבד האשטאגים.
תיאור מלא של היכולות של הפורמט מופיע במאמר יסודות של סכימת JSON.
למעשה, מודלים מסוג LLM מצטיינים ביצירת סכימת JSON. כדי להגיע לחצי הדרך, צריך לתאר את האילוצים בשפה טבעית בהנחיה ולספק אובייקט JSON תקין לדוגמה. אחר כך אפשר לאמת אובייקטים מסוג JSON מול סכימת ה-JSON שנוצרה באמצעות אחד מכלי האימות של סכימת ה-JSON, לדוגמה, כלי האימות של סכימת ה-JSON של Newtonsoft.
העברת סכימת JSON אל Prompt API
כדי לוודא שהמודל מתייחס לסכימת JSON שנדרשת, צריך להעביר את סכימת ה-JSON כארגומנט לשיטות prompt()
או promptStreaming()
של אובייקט האפשרויות, כערך של השדה responseConstraint
.
זוהי דוגמה מאוד בסיסית ל-JSON Schema שמוודאת שהמודל יגיב עם true
או false
כשמסווגים הודעה נתונה כמו הפוסט הזה ב-Mastodon בנושא קדרות.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes 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
תמיכה בפלטים צפויים
התמיכה בפלט מובנה ב-Prompt API הופכת את התשובות של ה-LLM להרבה יותר צפויות. במקום לחלץ אובייקט מתגובת Markdown או לבצע עיבוד נוסף, מפתחים יכולים להניח שהתגובה של המודל היא JSON תקין.
השינוי הזה מקרב את ה-AI המובנה לממשקי API מבוססי-ענן, עם כל היתרונות של הפעלת AI מקומי בצד הלקוח.