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

کتابخانه coerce-json خطاهای خروجی JSON مدل‌های زبانی را به‌صورت خودکار ترمیم

·۱۶ مهر ۱۴۰۵۵ دقیقه مطالعه
راهنما
تولید JSON تقریباً صحیح توسط LLM: پایان دادن به ویرایش دستی
تولید JSON تقریباً صحیح توسط LLM: پایان دادن به ویرایش دستی
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی مکانیزم ترمیم JSON آگاه از طرح‌واره (Schema-aware) که به‌جای اصلاح نحو (Syntax)، روی هم‌راستاسازی نوع داده‌ها و حذف متون پیرامونی تمرکز دارد و نرخ موفقیت اعتبارسنجی را از ۱۳.۵٪ به ۸۶.۵٪ می‌رساند.

تصور کنید یک خطای کوچک در قرارگیری علامت‌های Markdown یا تبدیل یک عدد به رشته، کل خط لوله تولیدی هوش مصنوعی شما را به طور کامل متوقف کند. برای حل این مشکل، در ۸ اکتبر ۲۰۲۶ کتابخانه coerce-json منتشر شد؛ ابزاری که خروجی‌های مدل زبانی بزرگ (LLM) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن کتاب‌ها جواب می‌دهد — را بدون نیاز به فراخوانی مجدد مدل، با یک طرح‌واره (Schema) پیش‌فرض هم‌راستا می‌کند.

ادغام مدل‌های زبانی در نرم‌افزارها معمولاً نیازمند داده‌های ساختاریافته است، اما مدل‌ها اغلب خروجی‌هایی «تقریباً معتبر» برمی‌گردانند. آن‌ها ممکن است شیء JSON را در میان متون توضیحی قرار دهند، به‌جای مقدار true از کلمه "yes" استفاده کنند یا عدد را به‌صورت رشته برگردانند. برای مثال، درخواستی برای { id: number, active: boolean } ممکن است خروجی {"id": "42", "active": "true", "role": "admin"} را در یک بلوک کد Markdown برگرداند. این اتفاق باعث می‌شود تابع JSON.parse روی علامت‌های Markdown و کتابخانه Zod روی نوع داده‌ها خطا دهد. همان‌طور که در تحلیل قبلی ما درباره‌ی مهندسی یکپارچه‌سازی و کاهش ۴۰ درصدی هزینه‌های عملیاتی اشاره کردیم، صنعت اکنون از پرامپت‌نویسی ساده به سمت خط لوله‌های پردازش پس‌از-تولید (Post-processing) حرکت می‌کند تا پایداری سیستم‌ها تضمین شود.

شکست روش‌های سنتی

به نقل از مستندات پروژه، توسعه‌دهندگان در حال حاضر از سه روش ناقص برای مدیریت JSONهای معیوب استفاده می‌کنند:

  • اجبار Zod (Zod Coercion): اگرچه z.coerce وجود دارد، اما فیلد به فیلد عمل می‌کند و نمی‌تواند متون توضیحی یا بلوک‌های Markdown را حذف کند. همچنین در مورد مقادیر بولی شکست می‌خورد؛ زیرا z.coerce.boolean() صرفاً تابع Boolean(x) را فراخوانی می‌کند، به این معنی که رشته "false" به مقدار true تبدیل می‌شود. علاوه بر این، این تبدیل‌ها به‌صورت خاموش اتفاق می‌افتند و هیچ گزارشی از تغییرات باقی نمی‌گذارند.
  • ابزارهای ترمیم نحو (Syntax Repair): کتابخانه‌هایی مثل json-repair خطاهای نحوی مثل پرانتزهای بسته نشده، نقل‌قول‌های گمشده یا کاماهای اضافی در انتهای شیء را اصلاح می‌کنند، اما نسبت به طرح‌واره (Schema) کور هستند. اگر ورودی {"id":"42"} باشد، همان را برمی‌گرداند چون از نظر نحوی درست است، حتی اگر طرح‌واره عدد بخواهد.
  • پرامپت مجدد (Re-prompting): ابزارهایی مانند instructor-js خروجی را اعتبارسنجی کرده و در صورت خطا، پیام خطا را به مدل می‌فرستند تا دوباره تلاش کند. این کار یک تبدیل محلی در حد میکروثانیه را به یک درخواست شبکه هزینه‌بر با مصرف توکن بیشتر و نتایج غیرقطعی تبدیل می‌کند.

JSON تقریباً معتبر برگشتی از LLM: پایان دادن به ترمیم دستی

سازوکار عملکرد coerce-json

کتابخانه coerce-json مانند یک پل آگاه از طرح‌واره عمل می‌کند. این ابزار طرح‌واره Zod یا JSON را می‌خواند و مقدار را به سمت آن سوق می‌دهد و هم‌زمان یک گزارش بازرسی (Audit Log) دقیق از هر تغییر ثبت می‌کند.

مکانیزم‌های اصلی

  • استخراج خودکار: بلوک‌های کد Markdown (مانند ```json) و متون پیرامونی را حذف می‌کند. اگر مدل پاسخ دهد: «حتماً! بفرمایید: {"a":"1"}»، کتابخانه ابتدا JSON را استخراج و سپس انواع داده‌ها را اصلاح می‌کند.
  • هم‌راستاسازی نوع: اگر طرح‌واره عدد بخواهد، رشته "42" را به عدد ۴۲ تبدیل می‌کند. همچنین مقادیر بولی را بر اساس نحوه بیان واقعی مدل‌ها مدیریت می‌کند و کلماتی مثل "yes" یا "on" را به true نگاشت می‌کند.
  • Enumهای غیرحساس به حروف: به‌صورت پیش‌فرض، حروف بزرگ و کوچک را اصلاح می‌کند (مثلاً تبدیل "ACTIVE" به "active") تا با تعاریف طرح‌واره مطابقت یابد. این قابلیت به‌صورت پیش‌فرض فعال است.
  • تزریق مقادیر پیش‌فرض: فیلدهای اختیاری گمشده را با استفاده از مقادیر پیش‌فرض مستند شده در طرح‌واره پر می‌کند. برای مثال، اگر فیلد role گمشده باشد اما مقدار پیش‌فرض آن "user" باشد، کتابخانه آن را پر کرده و این اقدام را ثبت می‌نماید.

اجبار پیشرفته (Advanced Coercion)

برای انعطاف بیشتر، این کتابخانه حالت { fuzzy: true } را ارائه می‌دهد. این حالت حدس‌های «کم‌دقت‌تر» یا دارای تلفات را مدیریت می‌کند که پتانسیل تغییر معنا را دارند، مانند:

  • خطاهای نزدیک در Enum: تبدیل "activ" به "active".
  • اصلاح کلیدها: نگاشت first_name به firstName.

برای جلوگیری از تخریب داده‌ها، تطبیق‌های مبهم به‌جای حدس زدن، رد می‌شوند تا از فساد داده‌ها جلوگیری شود.

عملکرد و اعتماد

بر اساس یک محک (Benchmark) روی ۳۷ خطای رایج مدل‌های زبانی — شامل اعداد رشته‌ای، مقادیر بولی "yes" و اشیاء محصور در متن — اعتبارسنجی ساده Zod تنها در ۱۳.۵٪ موارد موفق بود. استفاده از coerce-json با تنظیمات پیش‌فرض، نرخ موفقیت را به ۸۶.۵٪ رساند و فعال‌سازی تطبیق fuzzy این عدد را به ۱۰۰٪ تغییر داد. (این نتایج بر اساس یک مجموعه داده نمونه است که جزئیات آن در فایل BENCHMARKS.md پروژه آمده است). این رویکرد در واقع پاسخی به چالش‌های ارزیابی است که در تحلیل ما درباره ضرورت جایگزینی تست‌های سنتی با ارزیابی‌های معنایی مورد بحث قرار گرفت.

برای تضمین ایمنی در محیط تولید، این کتابخانه چهار اصل تغییرناپذیر را رعایت می‌کند که توسط تست‌های ویژگی (Property Tests) بررسی می‌شوند:
۱. عدم جعل: هرگز داده‌ای خارج از مقادیر پیش‌فرض مستند شده در طرح‌واره اختراع نمی‌کند.
۲. قابلیت بازرسی کامل: هر تغییر در یک آرایه changes ثبت می‌شود. این آرایه تنها زمانی خالی است که خروجی دقیقاً برابر با ورودی باشد.
۳. تکرارپذیری (Idempotency): اصلاح یک مقدارِ از قبل معتبر، هیچ تغییری ایجاد نمی‌کند (no-op). اجرای مجدد عملیات اصلاح روی هر خروجی، چیزی را تغییر نمی‌دهد و به یک نقطه ثابت (Fixpoint) می‌رسد.
۴. امنیت: در برابر حملات Prototype Pollution ایمن است؛ کلیدهایی مثل __proto__ ، constructor و prototype حذف و در گزارش ثبت می‌شوند.

خط لوله استریمینگ

این ابزار برای کار در کنار trickle-json (یک تجزیه‌کننده JSON جزئی و افزایشی) طراحی شده است. این ترکیب یک جریان کامل استریمینگ ایجاد می‌کند: سیستم داده‌ها را از طریق SSE دریافت می‌کند، از StreamingJsonParser برای ارائه بهترین مقدار موجود در هر تکه (Chunk) بدون ایجاد خطا استفاده می‌کند و در نهایت coerce-json را برای ترمیم و اعتبارسنجی شیء نهایی پیش از ذخیره در پایگاه‌داده به کار می‌گیرد.

این رویکرد شکافی را پر می‌کند که خروجی‌های ساختاریافته (Structured Outputs) ارائه‌دهندگان ایجاد کرده‌اند. در حالی که OpenAI با معماری جدید خود برای حذف خطاهای تجزیه JSON محدودیت‌های داخلی ایجاد کرده است، این ویژگی‌ها از مدل‌های وزن‌های باز (Open Weights) — یعنی مدل‌هایی که دستور پختشان علناً منتشر شده — یا نقاط انتهایی قدیمی API و همچنین بخش‌های استریم شده‌ای که در متن محصور شده‌اند، پشتیبانی نمی‌کنند.

پیاده‌سازی و سازگاری

برای توسعه‌دهندگانی که از Zod استفاده نمی‌کنند، این کتابخانه از طریق یک هوک Ajv اختیاری از JSON Schema برای اعتبارسنجی مرجع پشتیبانی می‌کند. این ابزار یک کتابخانه بدون وابستگی (Zero-dependency) است (با Zod و Ajv به‌عنوان وابستگی‌های اختیاری) که از هر دو استاندارد ESM و CJS همراه با تعاریف کامل تایپ (Type Definitions) و منشأ (Provenance) پشتیبانی می‌کند.

با نگاه به خروجی مدل‌های زبانی به‌عنوان یک سیگنال خام که نیاز به اصلاح دارد (و نه یک سند بی‌نقص)، تیم‌ها می‌توانند نرخ خطای گردش‌کارهای عامل‌محور (Agentic) خود را به‌شدت کاهش دهند. این تبدیل خروجی‌های ساختاریافته به داده‌های قابل اعتماد، در واقع همان گامی است که ابزارهایی مانند Jev برای تبدیل خروجی‌ها به موتورهای تصمیم‌گیری کالیبره‌شده دنبال می‌کنند. برای پیاده‌سازی این مورد، توسعه‌دهندگان می‌توانند کتابخانه را از طریق npm نصب کرده و آن را به‌عنوان آخرین مرحله از مدیریت پاسخ LLM پیش از اعتبارسنجی نهایی ادغام کنند.

گام بعدی شما

  • اگر از مدل‌های متن‌باز (Local LLMs) استفاده می‌کنید، این کتابخانه را جایگزین تلاش‌های مکرر برای اصلاح پرامپت کنید.
  • برای سیستم‌های حساس، آرایه changes را مانیتور کنید تا بفهمید مدل در کدام فیلدها بیشترین خطا را دارد.
  • ترکیب این ابزار با trickle-json را برای کاهش تأخیر در رابط کاربری (UI) امتحان کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این ابزار با تکیه بر اعتبار طرح‌واره‌های Zod، پایداری سیستم‌های عامل‌محور را افزایش می‌دهد و وابستگی توسعه‌دهندگان به قابلیت‌های بسته شرکت‌های بزرگ را کم می‌کند. در نتیجه، استقرار مدل‌های متن‌باز در محیط‌های تولیدی (Production) بسیار قابل‌اعتمادتر می‌شود.

تأثیر برای ایران

این کتابخانه به‌دلیل متن‌باز بودن و عدم وابستگی به APIهای خارجی، برای توسعه‌دهندگان ایرانی که از مدل‌های محلی (Local LLMs) استفاده می‌کنند، ابزاری رایگان و کاربردی برای افزایش پایداری اپلیکیشن‌هاست.

·نگاه ما
تحریریه دات‌هوش

انتقال تمرکز از «مهندسی پرامپت» به «مهندسی پس‌پردازش» نشان می‌دهد که صنعت پذیرفته است مدل‌های زبانی هرگز ۱۰۰٪ قابل پیش‌بینی نخواهند بود. coerce-json با تبدیل خروجی مدل به یک سیگنال خام، لایه‌ای از امنیت نوع (Type Safety) را اضافه می‌کند که پیش از این فقط در زبان‌های کامپایلری وجود داشت. این رویکرد عملاً هزینه استنتاج را با حذف درخواست‌های اصلاحی کاهش می‌دهد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.