תאריך פרסום: 13 במאי 2025
מודלים גדולים של שפה (LLMs) ידועים בתשובות הארוכות שלהם לפעמים. גם אם תבקשו מהמודל לענות רק ב-'true' או ב-'false', יכול להיות שהמודל יגיב עם פלט ידידותי ועם מידע נוסף מעבר למה שביקשת, למשל: 'בהחלט, התשובה היא: true'.
כדי להתמודד עם האתגר הזה, ב-Prompt API אפשר לציין פורמט פלט JSON של התגובה של המודל על ידי העברת סכימת JSON לשיטות LanguageModel.prompt()
ו-LanguageModel.promptStreaming()
. התמיכה בפלט מובנה זמינה החל מגרסה 137 של Chrome.
מהי JSON Schema
JSON Schema הוא אוצר מילים שמאפשר עקביות, תקינות ויכולת פעולה הדדית של נתוני JSON בקנה מידה נרחב. כשמדובר בחילופי נתונים, JSON Schema הוא סטנדרט חזק להגדרת המבנה והכללים של נתוני JSON. הוא משתמש בקבוצה של מילות מפתח כדי להגדיר את המאפיינים של הנתונים.
JSON Schema הוא תקן תעשייתי להבטחת פלט מובנה, שנעשה בו שימוש, בין היתר, ב-OpenAI API וב-Gemini API.
לדוגמה, אתם יכולים לבקש מהמודל להקצות עד שלושה hashtags לפוסטים ברשתות חברתיות אונליין, כמו 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
: אסור להוסיף מאפיינים אחרים מלבד תגי hashtag.
תיאור מלא של היכולות של הפורמט זמין במאמר JSON Schema Basics.
למעשה, מודלים מסוג LLM טובים מאוד ביצירת סכימה של JSON. מתארים את האילוצים בשפת טבע בבקשה ומספקים אובייקט JSON לדוגמה תקין, וזהו. לאחר מכן תוכלו לאמת אובייקטים מסוג JSON בהתאם ל-JSON Schema שנוצר באמצעות אחד ממאמתי ה-JSON Schema, למשל Newtonsoft JSON Schema Validator אונליין.
העברת סכימה של JSON ל-Prompt API
כדי לוודא שהמודל עומד ב-JSON Schema המבוקש, צריך להעביר את ה-JSON Schema כארגומנטים לאובייקט האפשרויות של השיטות 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 מקומי בצד הלקוח.