نگاهی انتقادی به برنامه نویسی با هوش مصنوعی

کدنویسی با ChatGPT، GitHub Copilot و سایر ابزارهای هوش مصنوعی هم مقاومت ناپذیر و هم خطرناک است.

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

و همه جا، مقیاس، و پیچیدگی همه این کدها همچنان در حال افزایش است و هر ساله میلیاردها خط کد نوشته می شود . برنامه نویسانی که این کد را چکش می کنند معمولاً بیش از حد بارگذاری می شوند و اولین تلاش آنها برای ساختن نرم افزار مورد نیاز تقریباً همیشه شکننده یا باگ است – و همچنین نسخه دوم و حتی گاهی اوقات نهایی آنها. ممکن است به طور غیرمنتظره ای شکست بخورد، عواقب غیرمنتظره ای داشته باشد یا در برابر حمله آسیب پذیر باشد که گاهی منجر به خسارات بسیار زیادی می شود.

تنها چند مورد از خرابی های شناخته شده نرم افزاری در دو دهه گذشته را در نظر بگیرید. در سال ۲۰۰۵، نرم‌افزار معیوب سیستم حمل و نقل ۱۷۶ میلیون دلاری ایالات متحده در فرودگاه بین‌المللی دنور، باعث شد تا کل آن از بین برود. یک اشکال نرم افزاری در سیستم معاملاتی بورس نزدک باعث شد تا معاملات آن در سال ۲۰۱۳ برای چند ساعت متوقف شود و هزینه اقتصادی آن غیرممکن است. و در سال ۲۰۱۹، یک نقص نرم افزاری در پمپ انسولین کشف شد که می توانست به هکرها اجازه دهد آن را از راه دور کنترل کنند و دوزهای نادرست انسولین را به بیماران تحویل دهند. خوشبختانه هیچ کس واقعاً به چنین سرنوشتی دچار نشد.

این وقایع خبرساز شد، اما آنها فقط استثناهای نادری نیستند. خرابی‌های نرم‌افزاری و آسیب‌پذیری‌های امنیتی بسیار رایج هستند. آخرین نظرسنجی Veracode در مورد امنیت نرم‌افزار، که ۱۲ ماه گذشته را پوشش می‌دهد، نشان می‌دهد که حدود سه چهارم از برنامه‌های مورد بررسی حداقل دارای یک نقص امنیتی هستند و نزدیک به یک پنجم حداقل یک نقص دارای شدت بالا است.

برای جلوگیری از چنین مشکلاتی و به طور کلی برای جلوگیری از خرابی نرم افزار چه باید کرد؟ یک مقاله تاثیرگذار در سال ۲۰۰۵ در IEEE Spectrum چندین عامل را شناسایی کرد که هنوز کاملاً مرتبط هستند. تست و اشکال زدایی همچنان عامل اصلی قابلیت اطمینان و نگهداری نرم افزار است. ابزارهایی مانند برنامه نویسی کاربردی ، بررسی کد و روش های رسمی نیز می توانند به حذف اشکالات در منبع کمک کنند. افسوس، هیچ یک از این روش ها کاملاً مؤثر نبوده است، و در هر صورت آنها به طور مداوم استفاده نمی شوند. بنابراین مشکلات همچنان رو به افزایش است.

در همین حال، انقلاب مداوم هوش مصنوعی نوید بهبود توسعه نرم افزار را می دهد و برنامه نویسی، اشکال زدایی و نگهداری کد را برای افراد بسیار آسان تر می کند. GitHub Copilot که بر روی OpenAI Codex ساخته شده است، سیستمی که زبان طبیعی را به کد ترجمه می‌کند، می‌تواند بر اساس اعلان‌های مناسب، کدهایی را در زبان‌های برنامه‌نویسی مختلف توصیه کند. و این تنها سیستمی از این دست نیست: Amazon CodeWhisperer ، CodeGeeX ، GPT-Code-Clippy ، Replit Ghostwriter ، و Tabnine ، در میان سایرین، همچنین کدنویسی و تکمیل کد مبتنی بر هوش مصنوعی را ارائه می‌دهند .

اخیراً، OpenAI ChatGPT را راه‌اندازی کرد ، یک ربات چت با مدل زبان بزرگ که قادر به نوشتن کد با کمی درخواست به صورت مکالمه است. این باعث می شود که برای افرادی که قبلاً در معرض برنامه نویسی قرار نگرفته اند در دسترس باشد.

ChatGPT، به خودی خود، فقط یک رابط زبان طبیعی برای مدل اصلی زبان GPT-3 (و اکنون GPT-4 ) است. اما نکته کلیدی این است که این مدل از نسل GPT-3 است ، همانطور که Codex، مدل هوش مصنوعی OpenAI است که زبان طبیعی را به کد ترجمه می کند. همین مدل GitHub Copilot را تقویت می کند که حتی توسط برنامه نویسان حرفه ای نیز استفاده می شود. این بدان معناست که ChatGPT، یک “برنامه نویس هوش مصنوعی مکالمه”، می تواند کدهای ساده و بسیار پیچیده را در انواع زبان های برنامه نویسی مختلف بنویسد.

این توسعه جرقه چندین سوال مهم را برمی انگیزد. آیا هوش مصنوعی جایگزین برنامه نویسان انسانی می شود؟ (پاسخ کوتاه: نه، یا حداقل، بلافاصله نه.) آیا کدهای نوشته شده با هوش مصنوعی یا به کمک هوش مصنوعی بهتر از کدهایی هستند که مردم بدون چنین ابزارهایی می نویسند؟ (گاهی اوقات بله؛ گاهی خیر.) در سطح مفهومی تر، آیا نگرانی هایی در مورد کدهای نوشته شده با هوش مصنوعی و به ویژه استفاده از سیستم های زبان طبیعی مانند ChatGPT برای این منظور وجود دارد؟ (بله، ماهیت زیادی وجود دارد، برخی آشکار و برخی دیگر ماهیت متافیزیکی دارند، مانند اینکه آیا هوش مصنوعی درگیر واقعاً کدی را که تولید می کند درک می کند یا خیر.)

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

برنامه نویسی با هوش مصنوعی چیست؟

اول، مهم است که درک کنیم، حداقل به طور گسترده، چگونه این سیستم ها کار می کنند. مدل‌های زبان بزرگ، شبکه‌های عصبی پیچیده‌ای هستند که بر روی حجم عظیمی از داده‌ها آموزش دیده‌اند – که اساساً از تمام متن‌های نوشته شده قابل دسترسی از طریق اینترنت انتخاب شده‌اند. آنها معمولاً با تعداد بسیار زیادی پارامتر – میلیاردها یا حتی تریلیون ها – مشخص می شوند که مقادیر آنها با خرد کردن این مجموعه عظیم از داده های آموزشی آموخته می شود. از طریق فرآیندی به نام یادگیری بدون نظارت، مدل‌های زبان بزرگ به‌طور خودکار بازنمایی‌های معنادار (معروف به «جاسازی‌ها») و همچنین روابط معنایی میان بخش‌های کوتاه متن را یاد می‌گیرند. سپس، با توجه به درخواست یک فرد، آنها از یک رویکرد احتمالی برای تولید متن جدید استفاده می کنند.

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

شبکه عصبی هیچ درک واقعی از برنامه نویسی، فراتر از نسخه ای از نحوه تولید آن ندارد.

پس از افزودن کلمه بعدی در دنباله، فقط باید آن را بشویید و تکرار کنید تا دنباله های طولانی تر بسازید. به این ترتیب، مدل‌های زبانی بزرگ می‌توانند خروجی‌هایی شبیه انسان به اشکال مختلف ایجاد کنند: داستان‌ها، شعرها، توییت‌ها، هر چیز دیگری، که همگی می‌توانند از آثاری که مردم تولید می‌کنند غیرقابل تشخیص باشند.

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

با این حال، شبکه عصبی هیچ درک واقعی از برنامه نویسی، فراتر از نسخه ای برای نحوه تولید آن ندارد. بنابراین کدی که خروجی می‌شود می‌تواند در کارها شکست بخورد یا اشکالات ظریفی را منتشر کند. یکی از تکنیک‌هایی که این سیستم‌ها برای به حداقل رساندن چنین مسائلی استفاده می‌کنند، تولید تعداد زیادی برنامه کامل و سپس ارزیابی آن‌ها در برابر مجموعه‌ای از تست‌های خودکار (نوعی که بسیاری از توسعه‌دهندگان نرم‌افزار استفاده می‌کنند) است و برنامه‌ای را به عنوان خروجی ارائه می‌کند که بیشترین تست‌ها را پشت سر می‌گذارد. در هر صورت، این مدل‌های زبان بزرگ، کدی را بر اساس آنچه که قبلاً نوشته شده است تولید می‌کنند – آنها نمی‌توانند به تنهایی راه‌حل‌های برنامه‌نویسی واقعی را ارائه دهند.

چشم ربات

علیرغم مزایای فراوان برنامه نویسی با هوش مصنوعی، استفاده از هوش مصنوعی در اینجا نگرانی های قابل توجهی را ایجاد می کند که بسیاری از آنها اخیراً توسط محققان و حتی خود ارائه دهندگان این ابزارهای مبتنی بر هوش مصنوعی اشاره شده است. اساساً، مشکل این است: برنامه نویسان هوش مصنوعی لزوماً با داده هایی که بر روی آنها آموزش دیده اند محدود می شوند، که شامل کدهای بد زیادی به همراه موارد خوب است. بنابراین کدی که این سیستم ها تولید می کنند ممکن است مشکلاتی نیز داشته باشد.

اولین و مهمترین مسائل مربوط به امنیت و قابلیت اطمینان است. مانند کدهایی که مردم می نویسند، کدهای تولید شده با هوش مصنوعی می توانند شامل انواع آسیب پذیری های امنیتی باشند. در واقع، یک مطالعه تحقیقاتی اخیر به نتیجه توسعه ۸۹ سناریو مختلف برای تکمیل Copilot پرداخت. از ۱۶۸۹ برنامه ای که تولید شد، تقریباً ۴۰ درصد حاوی آسیب پذیری بودند.

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

از سرریزهای بافر می توان از طریق روش های برنامه نویسی دقیق، مانند اعتبارسنجی ورودی کاربر و محدود کردن مقدار داده ای که می تواند در بافر قرار داده شود، و همچنین از طریق حفاظت های معماری جلوگیری کرد. اما بسیاری از آسیب‌پذیری‌های امنیتی دیگر وجود دارد: حملات تزریق SQL، مدیریت نادرست خطا، ذخیره‌سازی رمزنگاری ناامن و استفاده از کتابخانه، اسکریپت‌نویسی متقابل سایت، ارجاعات مستقیم ناامن به اشیا، و احراز هویت شکسته یا مدیریت جلسه، فقط چند حمله رایج را نام می‌بریم. استراتژی ها. تا زمانی که راهی برای بررسی انواع مختلف آسیب‌پذیری‌ها و حذف خودکار آنها وجود نداشته باشد، کد تولید شده توسط یک سیستم هوش مصنوعی احتمالاً حاوی این نقاط ضعف است.

ChatGPT، Codex، و دیگر مدل های زبان بزرگ مانند ضرب المثل جن چراغ جادو هستند که این قدرت را دارند که تقریباً هر چیزی را که می خواهید به شما ارائه دهند.

مشکل اساسی‌تر این است که هنوز راه‌هایی برای مشخص کردن رسمی الزامات و تأیید برآورده شدن این الزامات وجود ندارد. بنابراین در حال حاضر غیرممکن است که بدانیم رفتار یک برنامه تولید شده توسط هوش مصنوعی با آنچه که قرار است انجام دهد مطابقت دارد. یک مسئله مرتبط این است که کدی که این ابزارهای هوش مصنوعی تولید می‌کنند لزوماً برای هیچ ویژگی خاصی مانند مقیاس‌پذیری بهینه‌سازی نشده است. در حالی که ممکن است بتوان با دستورات مناسب به آن دست یافت، اما این سؤال را مطرح می‌کند که چگونه می‌توان چنین دستوراتی را نوشت.

البته بسیاری از این مشکلات با کدهایی که افراد می نویسند نیز وجود دارد. پس چرا باید کدهای تولید شده توسط هوش مصنوعی استاندارد بالاتری داشته باشند؟

سه دلیل وجود دارد. اولاً، به این دلیل که فرآیند آموزش از تمام کدهای قابل دسترس عموم استفاده می کند، و چون معیارهای ساده ای برای قضاوت در مورد کیفیت وجود ندارد، شما فقط نمی دانید کدی که از یک برنامه نویس هوش مصنوعی دریافت می کنید چقدر خوب است. دلیل دوم روانشناسی است. مردم این باور را دارند که کدهای تولید شده توسط کامپیوتر بدون مشکل هستند، بنابراین ممکن است کمتر آن را بررسی کنند. و سوم، چون افرادی که از این ابزارها استفاده می کنند، کد را خودشان ایجاد نکرده اند، ممکن است مهارت هایی برای اشکال زدایی یا بهینه سازی آن نداشته باشند.

مسائل برجسته دیگری نیز وجود دارد که باید در نظر گرفت. یکی تعصب است که موذیانه است: چرا برنامه نویس هوش مصنوعی راه حل خاصی را در حالی که احتمالات متعدد وجود داشت اتخاذ کرد؟ و اگر رویکرد اتخاذ شده برای برنامه شما بهترین نباشد چه؟

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

جعبه سیاه پاندورا

واضح است که استفاده از هر نوع برنامه نویسی خودکار خطرات خود را دارد. اما وقتی این ابزارها با یک رابط مکالمه مانند ChatGPT ترکیب می شوند، مشکلات بسیار حادتر می شوند. برخلاف ابزارهای هوش مصنوعی که در درجه اول توسط برنامه نویسان حرفه ای استفاده می شود و باید از محدودیت های خود آگاه باشند، ChatGPT برای همه قابل دسترسی است. حتی برنامه نویسان مبتدی نیز می توانند از آن به عنوان نقطه شروع استفاده کنند و کارهای زیادی را انجام دهند.

برای درک بهتر آنچه ممکن است، ما، همراه با بسیاری دیگر، از ChatGPT خواسته ایم تا به برخی از سوالات رایج کدنویسی مطرح شده در مصاحبه استخدام پاسخ دهد. کسانی که چنین تمرینی را انجام می دهند به طیف وسیعی از نتایج رسیده اند ، اما به طور کلی نتایج نشان می دهد که ChatGPT یک نامزد شغلی کاملاً چشمگیر است.

و حتی اگر ChatGPT نتواند مشکلی را به روشی که می خواهید در اولین بار حل کند، می توانید از دستورات اضافی برای رسیدن به راه حل مورد نظر استفاده کنید. دلیلش این است که ChatGPT مکالمه است و تاریخچه چت را به خاطر می آورد. این یک ویژگی فوق العاده جذاب است که نشان می دهد ChatGPT و جانشینان آن دیر یا زود بخشی از زنجیره تامین نرم افزار خواهند شد. تا حدودی، این ابزارها در حال حاضر به بخشی از آموزش تبدیل شده‌اند، که ظاهراً مزایایی برای دانش‌آموزان در یادگیری برنامه‌نویسی دارد.

با این وجود ما نگران هستیم که افزایش اتکا به چنین فناوری‌هایی مانع از یادگیری جزئیات مهم در مورد نحوه عملکرد کدشان شود. به نظر می رسد که اجتناب ناپذیر است. از این گذشته، بیشتر برنامه نویسان، حتی متخصصان باتجربه، به تغییر بیت یا آنچه در رجیسترهای یک CPU یا GPU می گذرد فکر نمی کنند. آنها در سطوح بسیار بالاتری از انتزاع استدلال می کنند. در حالی که این به طور کلی چیز خوبی است، این خطر وجود دارد که برنامه هایی که آنها با کمک هوش مصنوعی می نویسند برای آنها به جعبه سیاه تبدیل شوند.

و همانطور که اشاره کردیم، کدی که ChatGPT و سایر ابزارهای برنامه نویسی مبتنی بر هوش مصنوعی تولید می کنند، اغلب حاوی آسیب پذیری های امنیتی است. جالب اینجاست که خود ChatGPT گاهی از این موضوع آگاه است و در صورت درخواست می‌تواند چنین آسیب‌پذیری‌هایی را حذف کند. اما باید بپرسی. در غیر این صورت ممکن است ساده ترین کد ممکن را ارائه دهد، که اگر بدون فکر بیشتر استفاده شود می تواند مشکل ساز باشد.

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

از یک جهت، این مدل‌ها ما را به یاد سخنی می‌اندازند که اغلب برای توصیف کار با رایانه استفاده می‌شود: زباله‌ها، زباله‌ها بیرون. و در مجموعه‌های آموزشی که این مدل‌ها از آن‌ها ساخته شده‌اند، زباله‌های زیادی وجود دارد. با این حال آنها همچنین فوق العاده توانمند هستند. ChatGPT، Codex، و دیگر مدل های زبان بزرگ مانند جن ضرب المثل لامپ هستند که این قدرت را دارند که تقریباً هر چیزی را که می خواهید به شما ارائه دهند. فقط مواظب باش چه آرزویی داری

منبع

یک پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *