پرش به محتوای اصلی

JSONSchemaBench: پیچیدگی شمای دنیای واقعی، تضمین‌های خروجی ساختاریافته LLM را می‌شکند

· زمان مطالعه 7 دقیقه
Mike Thrift
Mike Thrift
Marketing Manager

بیشتر تیم‌ها با رمزگشایی محدود شده (constrained decoding) به عنوان یک مسئله حل شده برخورد می‌کنند — یک شمای JSON اضافه کنید و JSON معتبر دریافت کنید. JSONSchemaBench (arXiv:2501.10868) اولین تلاش سیستماتیک برای آزمایش این فرض در برابر ۹,۵۵۸ شمای دنیای واقعی است، و نتایج آن کمتر از آنچه تبلیغات نشان می‌دهند، اطمینان‌بخش است.

مقاله

2026-07-08-jsonschemabench-structured-outputs-language-models

سایبو گنگ، هادسون کوپر، میخال موسکال و همکارانشان در بخش تحقیقات مایکروسافت، JSONSchemaBench را معرفی کردند؛ بنچمارکی شامل ۹,۵۵۸ شما که از منابع واقعی تولیدی استخراج شده‌اند: امضاهای فراخوانی تابع GlaiveAI، مخازن گیت‌هاب که بر اساس پیچیدگی از ساده تا بسیار پیچیده دسته‌بندی شده‌اند، پیکربندی‌های API کوبرنتیز، شماهای تحلیل رویداد Snowplow و مجموعه JSONSchemaStore. آن‌ها شش چارچوب رمزگشایی محدود شده — Guidance، Outlines، Llamacpp، XGrammar، OpenAI Structured Outputs و Gemini — را در سه محور ارزیابی کردند: پوشش (چه بخشی از شماها توسط چارچوب قابل مدیریت است)، کارایی (سربار توکن در ثانیه در مقایسه با تولید نامحدود)، و کیفیت (دقت وظایف پایین‌دستی). جدول ارزیابی همچنین شامل مجموعه تست رسمی JSON Schema است که ۴۵ دسته‌بندی ویژگی را که هر موتور منطبقی باید از آن‌ها پشتیبانی کند، مستند می‌کند.

ادعای اصلی این است که پیچیدگی شِما، متغیر تعیین‌کننده‌ای است که چارچوب‌های توانمند را از چارچوب‌های شکننده جدا می‌کند و هیچ چارچوب واحدی در هر سه محور برتری ندارد.

ایده‌های کلیدی

  • فروپاشی پوشش تحت پیچیدگی شِما. در شماهای ساده GlaiveAI، تمام چارچوب‌ها امتیازی بالای ۸۶٪ کسب کردند. اما در شماهای پیچیده گیت‌هاب (GitHub-Hard) — که شامل تودرتویی چندسطحی، تعاریف بازگشتی و محدودیت‌های الگوی پیچیده هستند — پوشش Guidance به ۴۱٪، Llamacpp به ۳۹٪، XGrammar به ۲۸٪ و Outlines به مقدار فاجعه‌بار ۳٪ سقوط کرد. OpenAI تنها به ۹٪ در GitHub-Hard رسید و Gemini در شماهای با پیچیدگی متوسط یا بالاتر، هیچ خروجی معتبری تولید نکرد.
  • کوبرنتیز ضعف خاصی را در XGrammar آشکار می‌کند. علی‌رغم ادعاهای سرعت XGrammar، این چارچوب تنها به ۷٪ پوشش در شماهای کوبرنتیز دست یافت؛ احتمالاً به این دلیل که این شماها به الگوهای وابسته به متن متکی هستند که پیش‌محاسبات مستقل از متن XGrammar نمی‌تواند آن‌ها را مدیریت کند. پوشش در برابر بنچمارکی که شامل پیکربندی‌های کوبرنتیز است، برای عوامل تولیدی (production agents) اختیاری نیست.
  • محدودیت ناقص خطرناک‌تر از خطای کامپایل است. XGrammar در برابر مجموعه تست JSON Schema، دچار ۳۸ مورد شکست در اعمال محدودیت شد — به این معنی که خروجی JSON تولید کرد که شِمای اعلام شده را نقض می‌کرد، اما وضعیت موفقیت را گزارش داد. Guidance تنها ۱ مورد از این شکست‌ها را داشت. برای یک عامل بازنویسی (write-back agent)، خطای کامپایل در زمان طراحی شناسایی می‌شود؛ اما شکست در اعمال محدودیت باعث فاسد شدن داده‌ها در زمان اجرا بدون هیچ سیگنالی می‌شود.
  • قابلیت fast-forwarding در Guidance بهبود واقعی ۵۰ درصدی سرعت را به همراه دارد. زمانی که توالی‌های قطعی طولانی وجود داشته باشند (مثلاً نام فیلدها در یک ساختار ثابت شیء)، Guidance می‌تواند چندین توکن را در هر مرحله رمزگشایی به جلو ببرد. در مدل Llama-3.1-8B روی کارت A100، اجرای Guidance حدود ۶ تا ۹ میلی‌ثانیه به ازای هر توکن خروجی طول می‌کشد، در حالی که تولید نامحدود ۱۵ تا ۱۶ میلی‌ثانیه زمان می‌برد. Outlines با ۳۰ تا ۴۶ میلی‌ثانیه از تولید نامحدود کندتر است که عمدتاً به دلیل کامپایل اولیه خودکار (automaton compilation) است که ۳ تا ۸ ثانیه برای هر شِما زمان می‌برد.
  • رمزگشایی محدود شده به میزان کمی دقت استدلال را بهبود می‌بخشد. در بنچمارک GSM8K (ریاضی)، Guidance دقت را از ۸۰.۱٪ (نامحدود) به ۸۳.۸٪ افزایش داد. در وظایف Last Letter و Shuffle Objects، بهبودها در محدوده ۱ تا ۳ واحد بود. این موضوع با نگرانی‌های گسترده مبنی بر اینکه اجبار به فرمت JSON کیفیت پاسخ را کاهش می‌دهد، در تضاد است — اما اندازه اثر به قدری کوچک است که انتخاب فرمت نباید عامل اصلی در انتخاب چارچوب باشد.
  • هیچ چارچوبی تمام ۴۵ دسته‌بندی ویژگی JSON Schema را پوشش نمی‌دهد. Guidance تعداد ۱۳ دسته، Llamacpp و XGrammar هر کدام ۱ دسته و Outlines صفر دسته را پوشش می‌دهند. پیامد عملی این است که هر شمایی که از if/then/else ،unevaluatedProperties یا تعاریف بازگشتی $ref استفاده می‌کند، بسته به اینکه چه موتوری در پس‌زمینه است، رفتاری غیرقابل پیش‌بینی خواهد داشت.

چه چیزی درست است و چه چیزی نیست

قوی‌ترین سهم این بنچمارک، تامین منابع شِما است. ارزیابی‌های قبلی از شماهای اسباب‌بازی یا مجموعه‌های تک‌منبعی استفاده می‌کردند. گنجاندن پیکربندی‌های کوبرنتیز در کنار امضاهای فراخوانی تابع، نوع درستی از تنوع تقابلی است. دسته‌بندی پیچیدگی (از بدیهی تا فوق‌پیچیده) همچنین به متخصصان یک منحنی کالیبراسیون می‌دهد: اگر شماهای شما شبیه فراخوانی‌های تابع GlaiveAI هستند، XGrammar یا Guidance هر دو مناسب هستند؛ اما اگر شبیه مانیفست‌های کوبرنتیز هستند، گزینه‌های شما به سرعت محدود می‌شوند.

نقطه ضعف اصلی، ارزیابی حریصانه (greedy) تک‌نمونه‌ای است. اندازه‌گیری پوشش با تنها یک بار تولید به ازای هر شِما، توانایی واقعی را کمتر از حد نشان می‌دهد — یک چارچوب ممکن است ۲۰٪ مواقع شکست بخورد اما در تلاش مجدد موفق شود. مقاله به این موضوع اذعان دارد اما اعداد pass@k نمونه‌برداری شده با دما (temperature-sampled) را گزارش نمی‌دهد، که برای سیستم‌های تولیدی که در صورت شکست دوباره تلاش می‌کنند، اهمیت دارد.

همچنین این مقایسه مدل‌های غیرقابل مقایسه را با هم ترکیب می‌کند. چارچوب‌های متن‌باز (Guidance, Outlines, Llamacpp, XGrammar) روی Llama-3.2-1B تست شده‌اند، در حالی که OpenAI و Gemini مدل‌های افشا نشده خود را اجرا می‌کنند. پوشش ۹ درصدی OpenAI در GitHub-Hard ممکن است به اندازه معماری رمزگشایی محدود شده، بازتاب‌دهنده توانایی مدل باشد. یک مقایسه منصفانه مستلزم دسترسی کنترل‌شده به مدل است — که نویسندگان بدیهی است نمی‌توانند ارائه‌دهندگان انحصاری را به آن مجبور کنند.

چرا این موضوع برای هوش مصنوعی مالی اهمیت دارد

هر عامل بازنویسی Beancount خروجی ساختاریافته تولید می‌کند. اگر عامل، دستورالعمل‌های Beancount را قبل از تبدیل به نحو .beancount به صورت JSON تولید کند، یا اگر ابزارها را از طریق شماهای JSON فراخوانی کند، قابلیت اطمینان آن تولید JSON یک جزئیات نیست — بلکه تمام ماجراست. مقاله FinTrace نشان داد که مدل‌های پیشرو در استدلال بر روی خروجی ابزارها شکست می‌خورند؛ JSONSchemaBench مشکلی موازی را آشکار می‌کند: حتی قبل از استدلال، لایه قالب‌بندی ممکن است بی‌صدا خروجی غیرمنطبق صادر کند.

نتیجه کوبرنتیز به ویژه برای Beancount گویا است. شِماهای دفتر کل (Ledger schemas) صرفاً مجموعه‌ای از جفت‌کلید-مقدارهای مسطح نیستند. سلسله مراتب حساب‌ها، متادیتای تراکنش‌ها و ساختارهای برچسب، الگوهای بازگشتی تودرتویی ایجاد می‌کنند که مشابه اشیاء API کوبرنتیز هستند. چارچوبی که در کوبرنتیز امتیاز ۷٪ می‌گیرد، برای شماهای پیچیده دفتر کل آماده نیست، صرف‌نظر از اینکه سربار هر توکن آن چقدر سریع باشد.

حالت شکستِ محدودیت ناقص (under-constrained failure) چیزی است که خواب را از چشمان من می‌رباید. یک عامل Beancount که از XGrammar استفاده می‌کند، می‌تواند تراکنشی صادر کند که بررسی اعتبارسنجی داخلی چارچوب را پشت سر بگذارد اما شِمای واقعی را نقض کند — و عامل هیچ دلیلی برای تلاش مجدد نخواهد داشت. فساد بی‌صدا بدتر از شکست آشکار است.

موارد بعدی برای مطالعه

  • XGrammar (arXiv:2411.15100, Dong et al.) — مقاله فنی پشت یکی از سریع‌ترین چارچوب‌های تست شده، که تقسیم توکن‌های مستقل/وابسته به متن و علت فشار شماهای کوبرنتیز بر آن را توضیح می‌دهد.
  • Grammar-Aligned Decoding / ASAp (NeurIPS 2024) — نشان می‌دهد که ماسک کردن توکن در رمزگشایی محدود شده می‌تواند توزیع احتمال مدل را تغییر دهد و یک الگوریتم نمونه‌برداری اصلاح‌شده پیشنهاد می‌کند؛ مبنای تئوریک برای نگرانی‌های کیفی که بنچمارک تنها به طور غیرمستقیم اندازه‌گیری می‌کند.
  • XGrammar-2 (arXiv:2601.04426) — دنباله‌ای که XGrammar را به شماهای پویا در محیط‌های عاملی (agentic) گسترش می‌دهد، جایی که خودِ شِما در طول یک جلسه چندمرحله‌ای تغییر می‌کند؛ موضوعی که مستقیماً برای عوامل Beancount که فرمت خروجی خود را بر اساس نوع حساب‌های فعال تطبیق می‌دهند، مرتبط است.