پشتیبانی از خروجی ساختاریافته برای Prompt API

منتشر شده: ۱۳ مه ۲۰۲۵

مدل‌های زبان بزرگ (LLM) به خاطر پاسخ‌های گاه به گاه طولانی‌شان بدنام هستند. حتی اگر به مدل بگویید که فقط با «درست» یا «نادرست» پاسخ دهد، مدل ممکن است با خروجی دوستانه و بیشتر از آنچه شما خواسته‌اید پاسخ دهد، مانند: «قطعاً، پاسخ درست است».

برای رفع این چالش، API Prompt به شما امکان می‌دهد با ارسال یک JSON Schema به متدهای LanguageModel.prompt() و LanguageModel.promptStreaming() یک فرمت خروجی JSON از پاسخ مدل مشخص کنید. پشتیبانی از خروجی ساختاریافته از نسخه ۱۳۷ کروم در دسترس است.

طرحواره JSON چیست؟

JSON Schema یک واژگان است که امکان سازگاری، اعتبار و قابلیت همکاری داده‌های JSON را در مقیاس بزرگ فراهم می‌کند. وقتی صحبت از تبادل داده‌ها می‌شود، JSON Schema به عنوان یک استاندارد قدرتمند برای تعریف ساختار و قوانین داده‌های JSON برجسته می‌شود. این استاندارد از مجموعه‌ای از کلمات کلیدی برای تعریف ویژگی‌های داده‌های شما استفاده می‌کند.

JSON Schema استاندارد صنعتی برای تضمین خروجی ساختاریافته است که توسط 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 Schema ساختاری را برای یک شیء تعریف می‌کند که باید شامل یک فیلد 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 Schema Basics را مطالعه کنید.

در واقع، LLMها در ایجاد JSON Schema واقعاً خوب هستند. محدودیت‌ها را به زبان طبیعی در اعلان خود شرح دهید و یک نمونه معتبر از شیء JSON ارائه دهید، و شما نیمی از راه را رفته‌اید. سپس می‌توانید اشیاء JSON را در برابر JSON Schema تولید شده با یکی از اعتبارسنج‌های JSON Schema ، به عنوان مثال، اعتبارسنج آنلاین Newtonsoft JSON Schema، اعتبارسنجی کنید.

اعتبارسنجی موفقیت‌آمیز یک شیء JSON در برابر یک طرحواره JSON در یک اعتبارسنج طرحواره JSON.

یک طرحواره JSON را به API Prompt ارسال کنید

برای اطمینان از اینکه مدل، JSON Schema درخواستی را رعایت می‌کند، باید JSON Schema را به عنوان آرگومان به شیء options متدهای prompt() یا promptStreaming() به عنوان مقدار فیلد responseConstraint ارسال کنید.

در اینجا یک مثال بسیار ابتدایی از JSON Schema آورده شده است که اطمینان حاصل می‌کند مدل در طبقه‌بندی اینکه آیا پیام داده شده مانند این پست Mastodon در مورد سفالگری است یا خیر، با 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'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 معتبر است.

این امر، هوش مصنوعی داخلی را یک قدم به APIهای مبتنی بر ابر نزدیک‌تر می‌کند، و تمام مزایای اجرای هوش مصنوعی محلی و سمت کلاینت را نیز به همراه دارد.