از «حتماً درست» تا «شاید درست باشه!» : یه نگاه رفاقتی به روش‌های ساخت برنامه با هوش مصنوعی

Fall Back

خب بیا با هم یه موضوع خیلی باحال رو بررسی کنیم؛ ساختن برنامه با هوش مصنوعی! کلاً یه چیزی داریم به اسم «Program Synthesis»، که یعنی کامپیوتر خودش بتونه از یه توضیح یا نمونه، برنامه بنویسه. خیال کن یه روز بشینی و به کامپیوتر بگی: «برنامه‌ای بنویس که جمع اعداد رو بزنه»، اونم خودش کدشو بنویسه برات! این ایده از حدود پنجاه سال پیش مطرح بوده و کلی دانشمند و برنامه‌نویس برایش روش‌های جور واجور ابداع کردن.

حالا تو این مقاله، پنج تا روش مختلف برای ساخت برنامه (Program Synthesis یا همون تولید خودکار برنامه) رو بررسی کردن و مقایسه کردن که هر کدومشون چجوری کار می‌کنن و چه خوبی و بدی هایی دارن. میخوام خیلی راحت‌ و دوستانه هرکدوم رو واست توضیح بدم:

۱. روش منطقی یا استنتاجی (Logic-based/deductive)— یعنی با منطق و ریاضی سعی می‌کنن برنامه درست رو خودشون پیدا کنن. اینجوریه که همه چیز باید مشخص و دقیق باشه. مثلا یه نرم‌افزاری به اسم KIDS یا Coq هست که این کارو میکنه. اینها از قبل براشون معلومه کد دقیقاً چی باید باشه و تضمین میدن برنامه‌ت هیچ ایراد منطقی نداره. فقط مشکلش اینه که نوشتن اون مشخصات دقیق خیلی سخت و وقت‌گیره!

۲. روش مثال‌محور یا استقرایی (Inductive/example-based)— اینجا دیگه به جای اینکه فرمول دقیق بدی، چندتا نمونه ورودی و خروجی بهش نشون میدی. بعد هوش مصنوعی سعی میکنه قانون کلی رو حدس بزنه و برنامه رو بسازه. یه جوری مثل آموزش با مثال! اما خب تضمین صد در صدی وجود نداره که همیشه درست باشه.

۳. روش با اسکچ یا شِما (Sketch/schema-based)— یه جور راه‌میانی! تو به سیستم چندتا بخش نصفه و نیمه میدی، مثلاً اسکلت کلی تابع رو خودت مینویسی و جاهای خالی رو هوش مصنوعی حدس میزنه و پر میکنه. این یعنی هم یکم کنترل دست خودته، هم کامپیوتر تو جزئیات کمک میکنه.

۴. روش مدل‌های زبانی بزرگ (Large Language Model-based)— اینجا دیگه وارد بحث مدل‌های خیلی گنده مثل Codex میشیم. اینها با کلی کد و متن آموزش دیدن و میتونن از روی توضیح زبان انسانی (مثلاً انگلیسی) خودشون کد تولید کنن. یعنی میری تو GitHub Copilot و میگی: “برام یه الگوریتم مرتب‌سازی بنویس” و خودش کدش رو واست مینویسه! اما خب این مدل‌ها همیشه درست کار نمیکنن و خروجیشون یه جور حالت احتمالی داره. برای مثال، Generative AI یعنی همون هوش مصنوعی‌هایی که خودشون میتونن محتوا بسازن (مثلاً متن، کد، عکس).

۵. ترکیبی نوروسیمبولیک (Neuro-symbolic hybrids)— این روشا سعی کردن بهترینای دو دنیا رو با هم قاطی کنن! یعنی هم از منطق نمادین یا Symbolic استفاده میکنن (مثل همون فرمولا و منطق)، هم از مدل‌های عصبی یا Neural (یعنی مدل‌هایی که شبیه مغز آدم کار میکنن و با داده زیاد آموزش می‌بینن). این ترکیب باعث میشه هم دقت مدل بالا بره، هم راحت‌تر بتونن با توضیحات انسانی کنار بیان.

حالا چرا این موضوع مهمه؟ آخه هرکدوم از این روشا یه خوبی‌هایی دارن، یه سختی‌هایی! مثلاً روش منطقی تضمین صد در صدی میده، اما خیلی پیچیده‌س و مشخصات دقیقی میخواد که نوشتنش واقعا کار هَر کی نیست. اون طرف قضیه، روش مدلسازی زبان‌های بزرگ (مثل Codex) خیلی سریع و راحت از توضیح انسانی کد تولید میکنه، ولی نمیشه صد در صد مطمئن بود همیشه درست درمیاد. تازه، پیدا کردن جواب درست تو این مدل‌ها گاهی خیلی زمان میبره…

یعنی مسئله فقط این نیست که کامپیوتر کد بنویسه؛ مهمه که این کدها واقعا درست باشن، کار کنن، و براشون بتونیم دلیل منطقی بیاریم. اینجا بحث trade-off یا همون بده‌بستان مطرح میشه – باید بین درست بودن، راحتی کاربر، پیچیدگی جستجو و قدرت نمایش ایده‌ها یه تعادلی پیدا کنیم.

در کل، پیشرفت‌ها باعث شدن از روش‌های خشک و منطقی (که میشه بهشون گفت Symbolic یعنی مبتنی بر نماد و منطق)، یواش یواش بریم به سمت روش‌های ترکیبی و مدل‌های عصبی (Neural) که الان خیلی پرطرفدارن. هنوزم به دنبال این هستن که روش‌هایی بسازن هم قابل اطمینان باشه، هم راحت بشه باهاش کار کرد و اسکیل بزرگ رو پشتیبانی کنه (یعنی تو پروژه‌های عظیم هم جواب بده).

در واقع آینده ساخت برنامه با هوش مصنوعی خیلی هیجان‌انگیزه، چون روز به روز داره به جایی میرسه که دیگه لازم نیست خودمون همه جزئیات رو بنویسیم! امیدواریم بتونیم ترکیبی از دقت و راحتی رو پیدا کنیم تا همه بتونن از این تکنولوژی استفاده کنن.

منبع: +