سود:
- توانایی توضیح نحوه عملکرد دستیار کدنویسی به عنوان یک مدل زبان و مفاهیم نشانه، پنجره زمینه، توهم
- توانایی تشخیص وظایف نرم افزاری که در آن هوش مصنوعی قوی و ضعیف با نقشه ذهنی است
- توانایی اعمال چرخه کاری اولیه پیشنهاد-تولید-تأیید بر وظایف خود
روز یک توسعهدهنده نرمافزار به ندرت صرف «نوشتن کد از ابتدا» میشود. زمان واقعی؛ خواندن کد نوشته شده توسط شخص دیگری، تلاش برای بازتولید یک اشکال، اسکن لاگ (خطوط ورود به سیستم تولید شده توسط برنامه در حین اجرا)، نوشتن تست، نوشتن یک PR (درخواست کشش - درخواست ادغام که در آن تغییر کد برای بررسی تیم ارسال می شود) توضیح و به روز رسانی مستندات. هوش مصنوعی (AI) یک ضرب کننده سرعت است که می تواند تقریباً همه این مشاغل دیده نشده را لمس کند. اما اولین شرط برای استفاده ایمن از آن این است که به درستی درک کنید که چیست و چیست.
در این بخش، ابتدا تکنولوژی زیربنایی یک دستیار کدنویسی را به زبان ساده توضیح می دهیم. سپس یک نقشه ذهنی از نقاط قوت و ضعف مدل ایجاد می کنیم. در نهایت، ما نظم کاری اساسی را ایجاد می کنیم که در کل ماژول از آن استفاده خواهیم کرد: پیشنهاد، تولید، تأیید. این سه مرحله ستون فقرات یازده واحد بعدی هستند.
توجه: این ماژول یک آموزش عمومی است. در نرم افزارهای مهم امنیتی (پردازش پرداخت، مراقبت های بهداشتی، احراز هویت، زیرساخت های حیاتی) خروجی هوش مصنوعی جایگزین بررسی و تایید یک مهندس واجد شرایط نیست. هوش مصنوعی یک دستیار است. امضاکننده مهندس است.
یک دستیار کدنویسی در واقع چه کاری انجام می دهد؟
اکثر دستیارهای کدنویسی بر اساس یک مدل زبان بزرگ ساخته شده اند (LLM – هوش مصنوعی آموزش دیده بر روی مقادیر عظیمی از متن و کد که محتمل ترین "تکه" بعدی را پیش بینی می کند). مدل مانند یک انسان رمز را "درک" نمی کند. بر اساس الگوهایی که از مجموعه عظیمی از مثالها میآموزد، محتملترین ادامه متنی را که به آن میدهید ایجاد میکند. این مکانیسم به ظاهر ساده در عمل نتایج شگفت آور ماهری به همراه دارد – زیرا اکثر نرم افزارها از الگوهای تکرار شونده تشکیل شده اند: یک درخواست HTTP، یک حلقه، یک بررسی تهی، یک الگوی آزمایشی.
سه اصطلاح در اینجا حیاتی است. توکن کوچکترین واحدی است که مدل با تقسیم متن پردازش می کند. تقریباً چند حرف یا بخشی از یک کلمه است. پنجره زمینه مقدار نشانه هایی است که مدل می تواند به طور همزمان "دیدن" کند. کد، پیام خطا و دستورالعمل شما باید در این پنجره قرار گیرد. یک اعلان تمام دستورالعمل ها و زمینه هایی است که به مدل می دهید. کیفیت خروجی که به دست می آورید مستقیماً به این دو بستگی دارد: هر چه زمینه بهتر و دستورالعمل های واضح تری به مدل بدهید، نتیجه بهتری خواهید گرفت. ورودی بد خروجی بدی تولید میکند، حتی اگر یک مدل هوشمند باشد - قانون کلاسیک نرمافزار «آشغال در داخل، زبالهها خارج» برای هوش مصنوعی نیز اعمال میشود.
نقشه نقاط قوت و ضعف
برای هدایت هوش مصنوعی به سمت مشاغل مناسب، لازم است بدانید که در کجا می درخشد و کجا تلو تلو می خورد. به خاطر سپردن این نقشه باعث می شود که در هر ماموریت بعدی تعجب کنید که "آیا باید این کار را به هوش مصنوعی برون سپاری کنم یا خودم انجامش دهم؟" به شما امکان می دهد در چند ثانیه به سوال پاسخ دهید.
نقاط قوت آن عبارتند از: تولید کد دیگ بخار، ترجمه از یک زبان به زبان دیگر، نوشتن یک عبارت منظم (regex)، توصیف یک تابع، ایجاد یک اسکلت آزمایشی، تفسیر پیام خطا، تهیه پیش نویس اسناد، پیشنهاد نام متغیر/توابع، و اصلاحات جزئی (بهبود ساختار کد بدون تغییر رفتار آن).
نقاط ضعف: دانستن قوانین تجاری خاص شرکت خود، به خاطر سپردن کل پایگاه کد خود، در واقع اجرا و تأیید کد، دانستن مطمئن آخرین نسخه های کتابخانه، شناسایی آسیب پذیری های امنیتی با تضمین صد درصد. خطرناک ترین چیز توهم است: مدل یک تابع، کتابخانه یا API (رابطی که تبادل داده بین برنامه ها را امکان پذیر می کند) وجود ندارد را به زبانی بسیار قانع کننده اختراع می کند. این خطر در واقع می تواند به نفع شما باشد، زیرا کد، بر خلاف متن ساده، می تواند آزمایش شود تا ببینید آیا "کار می کند" - فقط از مرحله تأیید رد نشوید.
نوع ماموریت
نقش هوش مصنوعی
نقش مرد
دیگ بخار/اسکلت تولید کنید
پیش نویس تولید می کند
تطبیق می دهد، بررسی می کند
توضیحات کد
خلاصه ای سریع می دهد
بخش مهم کد را تأیید می کند
تست های نوشتن
مورد پیشنهاد می کند
پوشش و دقت را تایید می کند
منطق انتقادی امنیت
ایده مفید
تصمیم و مسئولیت کاملاً بر عهده انسان است.
استفاده از API/کتابخانه
نمونه تولید می کند
وجود و نسخه را تأیید می کند
تصمیم معماری
انواع گزینه ها
با دانستن زمینه انتخاب و دفاع می کند
گام به گام: چرخه اصلی کار
- تکلیف را روشن کنید. اگر نمی توانید آنچه را که می خواهید در یک جمله بنویسید، مدل نیز نمی تواند. هرچه عدم قطعیت زودتر به ورودی نفوذ کند، در خروجی بیشتر می شود.
- زمینه بدهید. کد مربوطه، پیام خطای کامل، نسخه زبان/چارچوب و محدودیتها را به درخواست اضافه کنید. نگویید "اصلاح کنید"، بگویید "Python 3.11, FastAPI 0.110؛ این تابع یک خطای 500 می دهد، وقتی بدنه درخواست خالی است منفجر می شود".
- نقش و قالب تحمیلی. چارچوبی مانند «شما یک توسعهدهنده ارشد Go هستید؛ فقط کد و منطق دو جملهای را بدهید» خروجی را متمرکز میکند.
- کوچک بخواهید به جای یک درخواست بزرگ، آن را به مراحل تقسیم کنید. هر مرحله را جداگانه بررسی کنید. تغییرات عمده خطرناک هستند زیرا تأیید آنها دشوار است و مستعد پنهان کردن خطاها هستند.
- تأیید کنید. آن را اجرا کنید، آزمایش کنید، آن را به صورت بصری بخوانید. کد هوش مصنوعی تایید نشده یک "طرح" است، نه یک "راه حل". این غیر قابل مذاکره ترین مرحله چرخه است.
سه کیف کوچک
مورد 1 - صرفه جویی در زمان واقعی اما کم است. هنگامی که یک تیم نقاط پایانی جدید CRUD (ایجاد-خواندن-بهروزرسانی-حذف) را با هوش مصنوعی اسکلت بندی کرد، زمان پیشنویس اول از تقریباً 40 دقیقه به 8 دقیقه کاهش یافت. با این حال، با بررسی و آزمایش، کل زمان 25 دقیقه بود. بنابراین سود واقعی از 40 تا 25، حدود 38٪ است. این نرخ که به جای انتظار "10 برابر شتاب" اندازه گیری می شود، یک سود پایدار است.
مورد 2 - توهم پرهزینه است. یک توسعه دهنده از فراخوانی () requests.get_json پیشنهاد شده توسط هوش مصنوعی بدون اعتبار سنجی استفاده کرد. چنین روشی وجود نداشت (دقیقا answer.json()). وقتی کد کامپایل نشد 20 دقیقه از دست رفت. یک جمله ساده "آیا این روش واقعا وجود دارد؟" تأیید ضرر را بازنشانی می کند.
مورد 3 - زمینه خوب خروجی را دو برابر می کند. برای همان باگ، یکی از توسعهدهندگان به سادگی نوشت «در حال دریافت خطا هستم» و دیگری ردیابی پشته کامل، نسخه و نمونه ورودی را اضافه کرد. دومی در اولین تلاش راه حل درست را دریافت کرد. نفر اول سه نوبت انجام داد. تفاوت در مدل نبود، بلکه در ورودی بود.
چهار قالب قابل کپی
یک اعلان استارتاپی همه منظوره و قدرتمند:
نقش: شما یک توسعهدهنده باتجربه {{زبان}} هستید. وظیفه: {{what_want}}زمینه:- چارچوب/نسخه: {{framework_and_version}}- محدودیتها: {{عملکرد، سبک، قوانین وابستگی}}قوانین:- از کتابخانه/عملکردی که وجود ندارد استفاده نکنید. اگر مطمئن نیستید، آن را به عنوان "تأیید" علامت گذاری کنید. - ابتدا یک طرح کوتاه، سپس کد، سپس 2 جمله توجیهی بدهید. - کد قابل آزمایش و کار تولید کنید.
برای فیلتر کردن عدم قطعیت به مدل:
قبل از حل تکلیف زیر، حداقل 3 نکته را که گم شده یا نامشخص میدانید به عنوان سؤال فهرست کنید. قبل از پاسخ دادن کد ننویسید. وظیفه: {{وظیفه}}
برای اینکه خروجی خود بررسی شود:
شما کد زیر را تولید کرده اید. اکنون نقش خود را تغییر دهید و این کد را نقد کنید: - 3 مورد (موردهای لبه) را فهرست کنید که ممکن است کار نکنند. - آیا API/عملکردی وجود دارد که می توانستید بسازید؟ علامت گذاری کنید.- نسخه اصلاح شده را بدهید. کد:{{code}}
برای تقسیم یک تصمیم به گزینه ها:
2-3 راه حل برای {{مشکل}} پیشنهاد دهید. برای هر کدام: توضیحات کوتاه، مثبت/منهای، زمان انتخاب. به صورت جدولی ارائه دهید. برای من انتخاب نکنید؛ فقط گزینه را روشن کنید
اعلان ضعیف / اعلان قوی
ضعیف: "رفع اشکال در این کد." (کدام خطا؟ کدام زبان؟ رفتار مورد انتظار چیست؟)
Strong: "Python 3.11 / FastAPI 0.110. زمانی که بدنه درخواست خالی می شود، نقطه پایانی زیر 500 را با KeyError برمی گرداند؛ من می خواهم پیام 400 و معنی دار را در متن خالی برگرداند. ابتدا دلیل را توضیح دهید، سپس تابع اصلاح شده را ارائه دهید، سپس برای این سناریو تست بنویسید. [کد]."
نسخه قدرتمند؛ زبان، نسخه، خطای واقعی، رفتار مورد انتظار و فرمت خروجی را می دهد. مدل دیگر نیازی به پیش بینی ندارد.
اشتباهات رایج
- اعتماد بدون تایید رایج ترین و گران ترین اشتباه. تا زمانی که کد کامپایل و تست نشده است نگویید "حل شد".
- سوال پرسیدن بدون متن پاسخ بدون نسخه، متن خطا و محدودیت، عمومی و اغلب اشتباه است.
- یک درخواست بزرگ عدم امکان درخواست و بررسی یک تولید 300 خطی، اشتباهات را نامرئی می کند.
- اشتباه گرفتن اعتماد به نفس مدل به عنوان مدرک. هوش مصنوعی با اطمینان می تواند اشتباهی را بگوید. لحن نشانگر دقت نیست.
- چسباندن تصادفی راز شرکت کلیدهای خصوصی، داده های مشتری یا کد منبع خصوصی نباید در ابزارهای تایید نشده وارد شوند (ما در بخش 10 به این موضوع خواهیم پرداخت).
نکته: با هر خروجی هوش مصنوعی به عنوان "این یک پیش نویس است" رفتار کنید. این عادت ذهنی واحد، بیشتر خطراتی را که در سراسر ماژول خواهید دید، از بین می برد.
به طور خلاصه
دستیار کدنویسی یک مدل زبان است که محتمل ترین قطعه بعدی را پیش بینی می کند. کد را نمی فهمد، الگوها را تولید می کند. به همین دلیل است که او در کارهای تکراری و فرمولی قوی است. باید با احتیاط برای کارهایی که نیاز به تأیید صحت خاص زمینه شما دارد استفاده شود. بزرگترین خطر توهم است و تنها پادزهر آن تایید است. رشته ای که ما در کل ماژول دنبال خواهیم کرد واضح است: تکلیف را روشن کنیم، زمینه را ارائه دهیم، درخواست کوچک کنیم، هر قابل تحویل را تایید کنیم.
وظیفه کاربردی
سه کار نرم افزاری را که در هفته گذشته انجام داده اید (به عنوان مثال رفع اشکال، آزمایش، به روز رسانی README) یادداشت کنید. به "نقشه نقاط قوت و ضعف" برای هر یک نگاه کنید و در یک جمله توضیح دهید که اگر هوش مصنوعی این کار را انجام دهد، نقش شما و هوش مصنوعی چه خواهد بود. سپس یکی از این کارها را با الگوی start prompt در بالا به هوش مصنوعی بدهید و خروجی را اجرا و تأیید کنید. توجه داشته باشید که چند دقیقه ذخیره کرده اید و چند اشتباه باید برطرف کنید.
چک لیست
- [ ] متوجه شدم که LLM الگوها را تولید می کند، نه "درک" کد.
- [ ] می توانم مفاهیم نشانه، پنجره زمینه و دستور را در یک جمله توضیح دهم.
- [ ] من می توانم بین انواع وظایفی که هوش مصنوعی قوی و ضعیف است تمایز قائل شوم.
- [ ] من می دانم توهم چیست و تنها پادزهر آن تأیید است.
- [ ] من چرخه «پیشنهاد، تولید، تأیید» را با وظیفه خودم تطبیق دادم.
- [ ] من می توانم تفاوت بین یک اعلان قوی و یک اعلان ضعیف را در یک مثال عینی نشان دهم.