چرا غیرقطعیبودن (Non-Determinism) در هوش مصنوعی مانع توسعه نرمافزار نیست؟ — Non-Determinism Doesn't Matter
خلاصه
این مقاله بررسی میکند که چرا ماهیت غیرقطعی مدلهای زبانی بزرگ (LLM) لزوماً یک محدودیت در مهندسی نرمافزار محسوب نمیشود. نویسنده توضیح میدهد که چگونه میتوان با استفاده از ابزارها و کارهای مهارکننده (Harnesses)، خروجیهای تصادفی را به لایههایی قطعی تبدیل کرد و سیستمهای ایجنتمحور ساخت.
مقدمه و زمینه
یکی از رایجترین ایراداتی که توسعهدهندگان به توسعه نرمافزار مبتنی بر هوش مصنوعی میگیرند، ماهیت «غیرقطعی» یا همان non-deterministic بودن خروجی مدلها است. یعنی اگر یک پرامپت (Prompt) را چندین بار با شرایط یکسان ارسال کنید، لزوماً پاسخهای کاملاً یکسانی دریافت نمیکنید. در نگاه اول، این ویژگی برای مهندسی نرمافزار سنتی که بر پایه دستورات دقیق و کامپایلرهای قطعی بنا شده، یک نقص بزرگ به نظر میرسد.
با این حال، نگاه کردن به LLMها به عنوان ابزارهای تولید کدِ جایگزین کامپایلر، مقداری زاویه دید ما را محدود میکند. نویسنده در این مقاله استدلال میکند که اگرچه نتیجه نهایی نرمافزار باید دقیق (Exact) باشد، اما مسیر رسیدن به آن نیازی ندارد که لزوماً قطعی باشد.
تفاوت نقش کد و LLM در سیستم
ما سالها عادت کردهایم رفتار سیستم را با کدهای دقیق و مجموعهای از دستورالعملها تعریف کنیم که به شکلی قابل پیشبینی کامپایل و اجرا میشوند. اما LLMها نقش کاملاً متفاوتی در یک سیستم نرمافزاری ایفا میکنند:
- کد صرفاً یک خروجی است: کدهایی که توسط هوش مصنوعی تولید میشوند، لزوماً نباید دستنوشته انسان باشند؛ کد ابزاری برای رسیدن به هدف است.
- LLMها به عنوان بازیگر (Actor): مدلهای زبانی و ابزارهای مهارکننده آنها (Harnesses) مانند بازیگرانی در سیستم عمل میکنند که فضای احتمال را به یک محدوده مفید کوچکتر کاهش میدهند.
تاریخ برنامهنویسی نشان داده است که راههای بیشماری برای حل یک مسئله وجود دارد. انتخاب زبانهای برنامهنویسی مختلف یا پشتههای فناوری (Tech Stack) متفاوت توسط تیمهای مختلف، نمونهای از همین مسیرهای متنوع اما با خروجیهای صحیح مشابه است.
مدیریت تصادفی بودن و تبدیل آن به ابزار قطعی
وظیفه ما به عنوان مهندس این است که با استفاده از تکنیکهای مهندسی زمینه (Context Engineering)، پروتکلهای اتصال مانند MCP، حافظهها و گرافها، فضای احتمال مدل را کوچک و قابل کنترل کنیم. اما از آنجا که تصادفی بودن همیشه به شکلی وجود دارد، بهترین راهکار این است که خروجیهای غیرقطعی را به ابزارهای قطعی تبدیل کنیم.
ایده اصلی این است که به ایجنتها (Agents) دستور بدهیم تا ابزارهای تخصصیِ تستشده، مجاز و دقیق بسازند. سپس خودِ ایجنتها از این ابزارها برای انجام عملیات تکرارپذیر استفاده کنند. این الگو باعث میشود با مصرف توکنهای کمتر، نتایج پایدار و قابل اعتمادی در سطح تولید (Production) دریافت کنیم.
نگاه جامعه هکرنیوز به این موضوع
بحثهای پیرامون این مقاله در Hacker News بسیار داغ بود و جنبههای مختلفی را روشن کرد:
- برخی کاربران اشاره کردند که مشکل اصلی خودِ غیرقطعیبودن نیست (چرا که کامپیوترهای چندرشتهای یا حتی توسعهدهندگان انسانی نیز غیرقطعی عمل میکنند)، بلکه مسئله اصلی «نشتی انتکاب» (
Leaky Abstraction) است. یعنی تغییر دادن تنها یک توکن در ورودی پرامپت میتواند کل خروجی را تغییر دهد و این موضوع مدیریت سیستمهای خودمختار در محیط پروداکشن را دشوار میکند. - دیدگاه دیگری مطرح کرد که ساختار فرآیند تولید نرمافزار شبیه به مدیریت سنتی است؛ مدیران دستورالعملهای مبهم به انسانها میدهند و آنها کد تحویل میدهند، حال همان مدیران میتوانند دستورات مشابه را به LLM بدهند تا کد دریافت کنند.
چرا این موضوع برای مهندسین اهمیت دارد؟
پذیرش اینکه ابزارهای هوش مصنوعی ذاتاً تصادفی هستند اما میتوانند سیستمهای قطعی و قابل اتکا خلق کنند، نگاه ما را به معماری نرمافزار تغییر میدهد. به جای جنگیدن با ماهیت probabilistic مدلها، باید به سراغ طراحی الگوهایی برویم که در آنها ماشینها کدهای پایه را بنویسند، ابزارها را توسعه دهند و با سرعتی فراتر از انسانها اتوماسیون را پیش ببرند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل