תמיכה בפלט מובנה ב-Prompt API

תאריך פרסום: 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. פלט אידיאלי יכול להיראות כמו קובץ ה-JSON הבא:

{
  "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 בהתאם ל-JSON Schema בכלי לאימות JSON Schema.

העברת סכימת 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 מקומי בצד הלקוח.