واحد 2 / 12

اسکریپت و تکمیل خودکار

سود:

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

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

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

دو حالت استفاده: تکمیل درون خطی و چت

تکمیل درون خطی با تایپ در ویرایشگر خود وارد عمل می شود. شما یک امضای تابع یا یک خط نظر را تایپ می کنید و بقیه موارد را پیشنهاد می کند. برای سرعت عالی است، اما زمینه باریکی دارد: فقط کد را در ناحیه نزدیک می بیند. به همین دلیل است که وقتی قصد خود را به وضوح در یک نظر بنویسید بهترین کار را دارد. به عنوان مثال، ایمیل کاربر //validate، در صورتی که نظر نامعتبر باشد، به طور قابل توجهی پیشنهاد زیر را بهبود می بخشد.

حالت چت برای کارهای بزرگتر و ساختار یافته است: "افزودن صفحه بندی به این کلاس"، "Extract an interface of that service". در اینجا شما این لوکس را دارید که نقش، زمینه و قالب بدهید. قاعده کلی این است: تکمیل برای کارهای کوچک و روان، گفتگو برای کارهایی که نیاز به تفکر و ساختار دارند.

نکته: کورکورانه پیشنهاد تکمیل با "Tab" را نپذیرید. یک ثانیه خط پیشنهادی را بخوانید. نام متغیر نادرست یا شرایط معکوس معمولاً از اینجا درز می کند.

مراحل تبدیل قصد به کد

  1. قرارداد را تعریف کنید ورودی، خروجی و رفتار خطای تابع چیست؟ مانند "دریافت ایمیل، عادی سازی اگر معتبر، پرتاب خطا اگر نامعتبر".
  2. محدودیت ها را بیان کنید. آیا از وابستگی خارجی استفاده نمی کنید؟ یک راهنمای سبک خاص؟ آیا محدودیت عملکردی وجود دارد؟
  3. مثال بزنید. یک جفت ورودی-خروجی ("ali@x.com → معتبر، ali@ → خطا") درک مدل از قصد را از پیش بینی به دقت منتقل می کند.
  4. قطعات کوچک را بخواهید. یک کارکرد، یک مسئولیت. سپس به سراغ بعدی بروید.
  5. کد تولید شده را بخوانید و اجرا کنید. کامپایل + یک امتحان سریع دستی ارزانترین مرحله اطمینان است.

سه کیف کوچک

مورد 1 - تولید نظر محور دقت را افزایش می دهد. یک توسعه دهنده ابتدا یک تابع تجزیه تاریخ با بدنه خالی درخواست کرد و نتیجه صحیح را در 3 دور دریافت کرد. در تلاش دوم، وقتی تابع را با یک نظر 4 خطی (فرمت های پذیرفته شده، قانون منطقه زمانی، شرایط خطا) تعریف کردم و آن را درخواست کردم، کدی که در دور اول کار می کرد آمد. همان مدل، همان روز; تفاوت فقط در وضوح نیت بود.

مورد 2 - عدم تعیین نسخه گران است. یک تیم با API مبتنی بر تماس قدیمی که جایگزین fs.promises در کد تولید شده برای Node.js شده بود، مشکل داشت. هنگامی که خط "استفاده از گره 20، ESM، async/انتظار" به دستور اضافه شد، تولید اولین بار پروژه را دنبال کرد. میانگین 12 دقیقه صرف شده برای اصلاح دوباره تنظیم شد.

مورد 3 - سود واقعی در کد دیگ بخار. یک میکروسرویس به 6 DTO جدید (Data Transfer Object - یک کلاس داده ساده که داده ها را بین لایه ها حمل می کند) و قوانین اعتبارسنجی آنها نیاز دارد. زمانی که تقریباً 90 دقیقه کار دستی بود، زمانی که توسط هوش مصنوعی تولید و بررسی شد، به 35 دقیقه کاهش یافت. از آنجایی که تکرار کد زیاد است و الگوی آن واضح است، هوش مصنوعی در کارآمدترین بخش خود در اینجا کار می کند.

چهار قالب قابل کپی

تولید تابع مبتنی بر قرارداد:

نقش: شما یک توسعه‌دهنده کوشا هستید. قرارداد عملکرد:- نام: {{name}}- ورودی: {{انواع و معنی آنها}}- خروجی: {{نوع و معنی}}- وضعیت خطا: {{چه زمانی پرتاب می‌شود/بازگردانده می‌شود}}محدودیت‌ها: {{بدون وابستگی خارجی/سبک‌ها/-1-} {{output_1}}- {{entry_2}} -> {{error_2}}اول امضا + طرح کوتاه و سپس کد را بدهید. تست های نوشتن، فقط عملکرد.

برای مطابقت با سبک موجود (تطبیق با پایه کد):

در زیر یک تابع مثال از پروژه ما آمده است. نامگذاری، مدیریت خطا و سبک نظر دادن را اینجا بیاموزید. تابعی برای {{new_task}} با همان سبک بنویسید. مثال: {{current_code}}

از اسکلت تا پر کردن (خرد ← اجرا):

اسکلت تابع زیر را با توجه به TODO ها در نظرات پر کنید. نوع امضا و بازگشت را تغییر دهید. یک تابع کمکی که وجود ندارد ایجاد نکنید. در صورت لزوم، به من اطلاع دهید "این کمک کننده مورد نیاز است". {{skelet_kod}}

مقایسه برنامه های جایگزین:

2 پیاده سازی مختلف برای {{وظیفه}} ارائه دهید: (الف) اولویت بندی خوانایی، (ب) اولویت بندی عملکرد. زیر هر یک 1 جمله "زمانی که ارجح است" بنویسید.

اعلان ضعیف / اعلان قوی

ضعیف: "یک تابع تایید ایمیل برای من بنویس."
Strong: "TypeScript 5، فقط کتابخانه استاندارد. isValidEmail(ورودی: رشته): بولی را بنویسید. فاصله ها را کوتاه کنید، آن را غیرحساس کنید، a@b.co معتبر است، a@، @b.co، رشته خالی نامعتبر است. اگر می خواهید از regex استفاده کنید، 2 خطوط نظرات را بیش از حد پیچیده نکنید.

نسخه قدرتمند؛ زبان، نسخه، امضا، موارد لبه و یک محدودیت سبک را برمی‌گرداند. بنابراین، کد تولید شده هم کار می کند و هم در پروژه شما قرار می گیرد.

رویکرد

زمان استفاده

توجه

تکمیل درون خطی

درج های کوچک در جریان

پیشنهاد را بدون خواندن آن نپذیرید

تولید بر اساس قرارداد در چت

تابع/کلاس جدید

مثال و لبه را بزنید

تولید بر اساس نمونه سبک

افزودن به کد موجود

کد نمونه فعلی را انتخاب کنید

پر کردن اسکلت

امضا ثابت، بدنه خالی

تغییر امضا

تکرار کد و دام وابستگی

AI اغلب یک کتابخانه جدید را توصیه می کند تا کار آن را آسان تر کند. گاهی اوقات این دقیق است، گاهی اوقات یک وابستگی غیر ضروری به پروژه شما اضافه می کند یا بسته ای را پیشنهاد می کند که وجود ندارد (توهم). قانون: هر وابستگی جدید را تأیید می کنید. بدون تأیید اینکه بسته واقعاً وجود دارد، نگهداری می شود و دارای مجوز مناسب است، آن را به پروژه اضافه نکنید. اکثر اوقات یک کمکی که قبلاً در پروژه است بهتر از یک بسته جدید است.

احتیاط: خطوط واردات پیشنهاد شده توسط هوش مصنوعی را مرور کنید. نام بسته‌ای که وجود ندارد (که همچنین می‌تواند شبیه بسته‌های جعلی به نام "squatting تایپی" باشد) هم کامپایل را خراب می‌کند و هم یک خطر امنیتی ایجاد می‌کند.

اشتباهات رایج

  • داشتن امضای تعیین شده توسط مدل. اگر انواع ورودی/خروجی را اصلاح نکنید، امضای متفاوتی با هر تولید می آید و ادغام مشکل می شود.
  • به موارد لبه اشاره نکنیم. ورودی خالی، تهی، عدد منفی، مقدار بسیار بزرگ - اگر اینها را مشخص نکنید، مدل «مسیر شاد» را می‌نویسد، از لبه‌ها عبور می‌کند.
  • ترکیب پیشنهاد بدون آزمایش آن. کدی که به نظر می رسد کار می کند به این معنی نیست که کار می کند.
  • پذیرش وابستگی غیر ضروری افزودن یک کتابخانه کامل برای یک خط یک بدهی فنی ایجاد می کند.
  • ناهماهنگی سبک نامگذاری متفاوت و رسیدگی به خطاها نسبت به بقیه پروژه ها، پایه کد را به صورت تکه تکه می کند.

به طور خلاصه

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

وظیفه کاربردی

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

چک لیست

  • [ ] من می دانم کجا از حالت چت با تکمیل درون خطی استفاده کنم.
  • [ ] من قرارداد ورودی/خروجی و موارد لبه را در تولید تابع تعیین می کنم.
  • [ ] من عادت کرده ام که اطلاعات زبان و نسخه را به درخواست اضافه کنم.
  • [ ] من هر قطعه تولید شده را قبل از مونتاژ آن را گردآوری و آزمایش می کنم.
  • [ ] من هر وابستگی جدیدی را که هوش مصنوعی پیشنهاد می کند با تأیید وجود و ضرورت آن تأیید می کنم.
  • [ ] بررسی می کنم که کد تولید شده با سبک پروژه مطابقت داشته باشد.