خروجی ساختاریافته (مثلا JSON)
جواب کوتاه
خروجی ساختاریافته یعنی جوابی که دقیقا یه شکل از پیش معلوم داره، مثلا JSON با فیلدهای مشخص، تا یه برنامه بتونه بی خطا بخونتش. دو راه داره: یا توی پرامپت قالب رو با نمونه بخواید و جواب رو چک کنید، که گاهی هنوز خراب میاد؛ یا قالب رو بهصورت یه نقشه (اسکیما) به مدل بدید تا موقع ساختن جواب، تکههایی که از قالب بیرون میزنن اصلا انتخاب نشن. دومی شکل رو تقریبا همیشه تضمین میکنه، ولی درستی محتوا رو نه.
یعنی چی
آدم یه جواب نامرتب رو هم میفهمه. برنامه نه.
فرض کنید نونوایی یه برنامه داره که سفارشها رو توی یه جدول مینویسه. مشتری پیام میده «سه تا سنگک برای ساعت ۷ کنار بذارید» و مدل زبانی باید از این پیام، سه تا چیز دربیاره: چه نونی، چند تا، چه ساعتی.
جواب «برای آدم» عالیه، ولی برنامه نمیدونه «سه» کجاشه. جواب «برای برنامه» به قالب JSON نوشته شده: یه قالب متنی ساده برای داده، که هر چیزی اسم خودش رو داره و مقدارش جلوش میاد. برنامه دقیقا میدونه «count» رو کجا پیدا کنه. به جوابی که اینطوری یه شکل از پیش معلوم داره، میگن خروجی ساختاریافته.
چرا لازمه
خب میشه به مدل گفت «جوابت JSON باشه». مشکل چیه؟ راهنمای Claude میگه حتی با پرامپت دقیق، ممکنه اینها پیش بیاد:
یادتون باشه مدل جواب رو تکه به تکه و از روی احتمال میسازه. JSON هم برای مدل فقط یه متنه. اگه یه بار از صد بار، یه آکولاد جا بیفته یا بهجای عدد ۳ بنویسه «سه تا»، آدم متوجه نمیشه، ولی برنامه همونجا گیر میکنه. وقتی روزی هزار تا پیام دارید، «یه بار از صد بار» یعنی ده تا خرابی در روز.
راه اول: پرامپت
سادهترین راه همونیه که توی ایستگاه پرامپت دیدیم. قالب رو دقیق بگید: چه فیلدهایی، هر کدوم چه نوعی، کدوم لازمه. یه یا چند نمونه بدید، چون راهنمای Claude میگه نمونه یکی از مطمئنترین راهها برای گرفتن قالب دلخواهه. و بگید قالب چی باشه، نه چی نباشه؛ مثلا «فقط JSON، بی هیچ متن دیگه».
بعد، توی برنامهتون، جواب رو بخونید و چک کنید: خونده میشه؟ همهی فیلدها هستن؟ نوعها درستن؟ اگه نه، دوباره بپرسید. این راه با هر مدلی کار میکنه، ولی تضمین نیست؛ فقط احتمال خطا رو کم میکنه.
راه دوم: محدود کردن
راه دوم یه قدم جلوتره. بهجای اینکه فقط خواهش کنیم، قالب رو بهصورت یه نقشهی دقیق، که بهش میگن اسکیما، به مدل میدیم. راهنمای Claude میگه این اسکیما به یه «دستور زبان» تبدیل میشه که خروجی مدل رو محدود میکنه. اسمش رمزگشایی محدودشدهست.
توی درس نمونهبرداری top-k و top-p دیدیم میشه پیش از انتخاب، بعضی گزینهها رو کنار گذاشت و احتمال بقیه رو دوباره تقسیم کرد. اینجا هم همین فکره، فقط معیارش قالبه. فرض کنید اسکیما میگه «type» فقط میتونه سوال، گلایه یا تشکر باشه. وقتی مدل به اونجا میرسه، «سلام» و «این» هر چقدر هم محتمل باشن، خط میخورن؛ و گلایه و سوال سهمشون رو بین خودشون تقسیم میکنن. عددهای تصویر ساختگیان، ولی حساب همینه.
نتیجه به گفتهی همون راهنما: جواب همیشه خونده میشه، فیلدهای لازم و نوعهاشون تضمینشدهان، و دیگه برای خراب شدن قالب لازم نیست دوباره بپرسید.
چی تضمین نمیشه
«همیشه» یه کم زیاده. خود راهنمای Claude چند تا استثنا رو میگه.
اگه مدل به دلیل ایمنی جواب نده، جواب ممکنه با قالب نخونه. اگه جواب به سقف طولی که تعیین کردید برسه، نصفه میمونه. و توی مقدارهای فهرستی، حرف بزرگ و کوچیک انگلیسی تضمین نیست؛ برای همین بهتره موقع مقایسه، بزرگی و کوچیکی حرفها رو نادیده بگیرید.
و مهمتر از همه، چیزی که هیچ قالبی تضمین نمیکنه: درستی محتوا. اسکیما میگه «count» باید عدد باشه؛ نمیگه باید ۳ باشه. اگه مدل اشتباه بخونه، یه عدد غلط رو توی قالب کاملا درست تحویلتون میده. درس بعد، توهم، دقیقا همین رو باز میکنه.
قالب خوب
اسم فیلدها روشن باشه، طوری که یه آدم هم بدون توضیح بفهمه چیه. جایی که جواب فقط چند حالت داره، مثل دستهی پیام، فهرست حالتها رو توی اسکیما بدید تا مدل چیز دیگهای نسازه. و قالب رو ساده نگه دارید؛ راهنمای Claude میگه اسکیمای پیچیدهتر دیرتر آماده میشه و برای پیچیدگی سقف داره.
یه نکتهی جالب هم داره: اگه توی قالب یه فیلد بذارید که از مدل «فکر قدمبهقدم» بخواد، ممکنه رد بشه؛ بهجاش یه توضیح کوتاه بخواید. پس اگه برای کارتون فکر کردن قدم به قدم لازمه، اون رو از خود جواب ساختاریافته جدا نگه دارید.
قالب سفت، فکر کمتر
قالب دادن به جواب یه هزینهی پنهان هم داره، که یه پژوهش ۲۰۲۴ اندازهش گرفت.
اون پژوهش جوابهای آزاد مدلها رو با جوابهایی مقایسه کرد که مجبور بودن توی قالبهایی مثل JSON بیان. وقتی قالب اجباری بود، توانایی استدلال به طور محسوسی افت کرد، و هر چی محدودیت سفتتر بود، افت بیشتر. یه راه ساده برای دور زدنش اینه که بذارید مدل اول آزاد فکر کنه، مثلا توی یه بخش جدا، و فقط جواب آخر رو توی قالب بنویسه؛ همون ترکیبی که توی درس فکر کردن قدم به قدم دیدیم.
چند نکته
- جواب برای برنامه، قالب دقیق. JSON با فیلدهای مشخص.
- پرامپت با نمونه، بعد بررسی. با هر مدلی کار میکنه.
- اسکیما، اگه هست. تکههای بیرون از قالب خط میخورن.
- شکل درست، محتوا شاید نه. مقدارها رو هم بسنجید.
با این درس ایستگاه پرامپت تموم شد. ایستگاه بعد سراغ یکی از مهمترین ضعفهای مدلها میره: توهم هوش مصنوعی.
جمعبندی. آنچه از این درس با خودتان میبرید.
- آدم جواب نامرتب رو میفهمه؛ برنامه نه.
- پرامپت با نمونه، و بعد بررسی.
- یا محدود کردن: تکههای بیرون از قالب خط میخورن.
- شکل تضمین میشه، محتوا نه.
- قالب ساده، با فیلدهای روشن.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.