ইউনিট 2 / 12

স্ক্রিপ্টিং এবং স্বয়ংসম্পূর্ণ

লাভ:

  • ইনলাইন সমাপ্তির সাথে টাস্ক টাইপ সংশোধন করতে চ্যাট মোড ম্যাপ করার ক্ষমতা
  • ইনপুট/আউটপুট চুক্তি, প্রান্ত কেস এবং শৈলী সীমাবদ্ধতা অন্তর্ভুক্ত শক্তিশালী উত্পাদন প্রম্পট লেখার ক্ষমতা
  • মার্জ করার আগে জেনারেট করা কোড এবং নতুন প্রস্তাবিত নির্ভরতা যাচাই করার ক্ষমতা

AI এর সাথে একজন ডেভেলপারের প্রথম যোগাযোগ প্রায়ই স্বয়ংসম্পূর্ণ হয় — এমন একটি বৈশিষ্ট্য যা আপনার টাইপ করার সাথে সাথে পরবর্তী লাইনের পরামর্শ দেয় — অথবা একটি চ্যাট উইন্ডোতে "যে ফাংশনটি টাইপ করুন" বলে। তারা উভয়ই একই ইঞ্জিন ব্যবহার করে তবে ভিন্ন শৃঙ্খলার প্রয়োজন। এই ইউনিটে, আমরা কোড জেনারেশনকে একটি এলোমেলো "এটি লিখুন" থেকে একটি ইঞ্জিনিয়ারিং ধাপে রূপান্তর করি যার আউটপুট অনুমানযোগ্য এবং যাচাইযোগ্য।

লক্ষ্য হল AI কে এমন একটি টুল থেকে চালু করা যা আপনার টাইপিং মেশিনের গতি বাড়ে এমন একজন শিক্ষানবিস যা আপনার সেট করা সীমাবদ্ধতার মধ্যে কাজ করে। একজন সু-নির্দেশিত শিক্ষানবিশ সময় বাঁচায়; একজন অনির্দেশিত শিক্ষানবিস একটি জগাখিচুড়ি তৈরি করে যা আপনাকে পরে পরিষ্কার করতে হবে।

দুটি ব্যবহারের মোড: ইনলাইন সমাপ্তি এবং চ্যাট

আপনি আপনার সম্পাদকে টাইপ করার সাথে সাথে ইনলাইন সমাপ্তি কার্যকর হয়; আপনি একটি ফাংশন স্বাক্ষর বা একটি মন্তব্য লাইন টাইপ করুন এবং এটি বাকি সুপারিশ করে। এটি গতির জন্য দুর্দান্ত, তবে এটির একটি সংকীর্ণ প্রসঙ্গ রয়েছে: এটি কেবলমাত্র নিকটবর্তী এলাকায় কোড দেখে। এই কারণেই আপনি যখন একটি মন্তব্যে আপনার উদ্দেশ্য পরিষ্কারভাবে লিখবেন তখন এটি সবচেয়ে ভাল কাজ করে। উদাহরণস্বরূপ, // ব্যবহারকারীর ইমেল যাচাই করুন, যদি অবৈধ মন্তব্যটি নীচের প্রস্তাবনাকে উল্লেখযোগ্যভাবে উন্নত করে তাহলে ValidationError নিক্ষেপ করুন৷

চ্যাট মোড বৃহত্তর এবং কাঠামোগত কাজের জন্য: "এই ক্লাসে পৃষ্ঠা সংখ্যা যোগ করুন", "সেই পরিষেবাটির একটি ইন্টারফেস বের করুন"। এখানে আপনার ভূমিকা, প্রসঙ্গ এবং বিন্যাস দেওয়ার বিলাসিতা রয়েছে। সাধারণ নিয়ম হল: ছোট এবং প্রবাহিত কাজের জন্য সমাপ্তি, চিন্তাভাবনা এবং কাঠামোর প্রয়োজন এমন কাজের জন্য কথোপকথন।

পরামর্শ: "ট্যাব" দিয়ে সমাপ্তির পরামর্শ অন্ধভাবে গ্রহণ করবেন না। এক সেকেন্ডের জন্য প্রস্তাবিত লাইন পড়ুন; একটি ভুল পরিবর্তনশীল নাম বা একটি উল্টানো অবস্থা সাধারণত এখান থেকে লিক হয়।

কোডে উদ্দেশ্য অনুবাদ করার পদক্ষেপ

  1. চুক্তির সংজ্ঞা দাও। ফাংশনের ইনপুট, আউটপুট এবং ত্রুটি আচরণ কি? যেমন "ইমেল পান, বৈধ হলে স্বাভাবিক করুন, অবৈধ হলে ত্রুটি নিক্ষেপ করুন"।
  2. সীমাবদ্ধতাগুলি বর্ণনা করুন। বাহ্যিক নির্ভরতা ব্যবহার করবেন না? একটি নির্দিষ্ট শৈলী গাইড? কর্মক্ষমতা একটি সীমা আছে?
  3. একটা উদাহরণ দাও। একটি ইনপুট–আউটপুট জোড়া (“ali@x.com → বৈধ, ali@ → ত্রুটি”) মডেলের উদ্দেশ্য বোঝাকে ভবিষ্যদ্বাণী থেকে নির্ভুলতার দিকে নিয়ে যায়।
  4. ছোট টুকরা জন্য জিজ্ঞাসা করুন. একটি ফাংশন, একটি দায়িত্ব। তারপর পরেরটিতে যান।
  5. জেনারেটেড কোড পড়ুন এবং চালান। কম্পাইল করা + একটি দ্রুত ম্যানুয়াল চেষ্টা হল সবচেয়ে সস্তা আশ্বাসের পদক্ষেপ।

তিনটি মিনি কেস

কেস 1 — মন্তব্য-চালিত উত্পাদন নির্ভুলতা বাড়ায়। একজন ডেভেলপার প্রথমে একটি খালি বডি সহ একটি তারিখ পার্সিং ফাংশন অনুরোধ করেছিলেন এবং 3 রাউন্ডে সঠিক ফলাফল পেয়েছেন৷ দ্বিতীয় প্রয়াসে, যখন আমি 4-লাইন মন্তব্য (স্বীকৃত ফরম্যাট, সময় অঞ্চল নিয়ম, ত্রুটি শর্ত) দিয়ে ফাংশনটি সংজ্ঞায়িত করেছি এবং এটির জন্য অনুরোধ করেছি, প্রথম রাউন্ডে কাজ করা কোডটি এসেছিল। একই মডেল, একই দিন; পার্থক্য শুধুমাত্র উদ্দেশ্য স্পষ্টতা ছিল.

কেস 2 - একটি সংস্করণ নির্দিষ্ট না করা ব্যয়বহুল। একটি দল Node.js-এর জন্য উত্পাদিত কোডে fs.promises প্রতিস্থাপন করে লিগ্যাসি কলব্যাক-ভিত্তিক API নিয়ে লড়াই করেছে। যখন প্রম্পটে "Use Node 20, ESM, async/await" লাইনটি যোগ করা হয়েছিল, তখন প্রোডাকশনটি প্রথমবার প্রকল্পটি অনুসরণ করে; সংশোধনের জন্য ব্যয় করা 12 মিনিটের গড় রিসেট করা হয়েছে।

কেস 3 — বয়লারপ্লেট কোডে প্রকৃত লাভ। একটি মাইক্রোসার্ভিসের জন্য 6টি নতুন ডিটিও (ডেটা ট্রান্সফার অবজেক্ট - একটি সাধারণ ডেটা ক্লাস যা স্তরগুলির মধ্যে ডেটা বহন করে) এবং তাদের বৈধকরণের নিয়ম প্রয়োজন। AI দ্বারা উত্পাদিত এবং পর্যালোচনা করার সময় যা প্রায় 90 মিনিটের ম্যানুয়াল কাজ হত তা কমিয়ে 35 মিনিট করা হয়েছিল; যেহেতু কোডের পুনরাবৃত্তি বেশি এবং প্যাটার্নটি পরিষ্কার, AI এখানে তার সবচেয়ে কার্যকরী এলাকায় কাজ করেছে।

চারটি অনুলিপিযোগ্য টেমপ্লেট

চুক্তিভিত্তিক ফাংশন জেনারেশন:

ভূমিকা: আপনি একজন পরিশ্রমী {{ভাষা}} ডেভেলপার৷ ফাংশন চুক্তি:- নাম: {{name}}- ইনপুট: {{প্রকার এবং অর্থ}}- আউটপুট: {{প্রকার এবং অর্থ}}- ত্রুটির স্থিতি: {{what is thrown/returned when}}constraints: {{no external dependences/inputes/input}}} {{_amp}> {{output_1}}- {{entry_2}} -> {{error_2}}প্রথমে স্বাক্ষর + সংক্ষিপ্ত পরিকল্পনা, তারপর কোড দিন। লেখার পরীক্ষা, শুধু ফাংশন।

বিদ্যমান শৈলীর সাথে মেলে (কোড বেসের সাথে মানিয়ে নিতে):

নীচে আমাদের প্রকল্প থেকে একটি উদাহরণ ফাংশন; এখানে নামকরণ, ত্রুটি পরিচালনা এবং মন্তব্য করার শৈলী শিখুন। একই স্টাইল দিয়ে {{new_task}}-এর জন্য একটি ফাংশন লিখুন। উদাহরণ: {{current_code}}

কঙ্কাল থেকে ফিলিং পর্যন্ত (স্টাব → বাস্তবায়ন):

মন্তব্যে TODOs অনুযায়ী নীচের ফাংশন কঙ্কালটি পূরণ করুন। স্বাক্ষর এবং রিটার্ন টাইপ পরিবর্তন করুন। এমন একটি সহায়ক ফাংশন তৈরি করবেন না যা বিদ্যমান নেই; যদি প্রয়োজন হয়, আমাকে জানান "এই সাহায্যকারী প্রয়োজন"। {{skelet_kod}}

বিকল্প অ্যাপ তুলনা:

{{task}}-এর জন্য 2টি ভিন্ন বাস্তবায়ন দিন: (a) পঠনযোগ্যতাকে অগ্রাধিকার দেওয়া, (b) কর্মক্ষমতাকে অগ্রাধিকার দেওয়া। প্রতিটির নীচে 1টি বাক্য "যখন পছন্দনীয়" লিখুন।

দুর্বল প্রম্পট / শক্তিশালী প্রম্পট

দুর্বল: "আমাকে একটি ইমেল যাচাইকরণ ফাংশন লিখুন।"
শক্তিশালী: "TypeScript 5, স্ট্যান্ডার্ড লাইব্রেরি শুধুমাত্র। isValidEmail(ইনপুট: স্ট্রিং): বুলিয়ান লিখুন। স্পেস ট্রিম করুন, এটিকে অসংবেদনশীল করুন, a@b.co বৈধ, a@, @b.co, খালি স্ট্রিংটি অবৈধ। আপনি যদি regex ব্যবহার করতে যাচ্ছেন, তাহলে জটিলভাবে মন্তব্য 2 যোগ করবেন না।"

শক্তিশালী সংস্করণ; ভাষা, সংস্করণ, স্বাক্ষর, প্রান্তের ক্ষেত্রে এবং একটি শৈলী সীমাবদ্ধতা প্রদান করে। এইভাবে, উত্পন্ন কোড উভয় কাজ করে এবং আপনার প্রকল্পে ফিট করে।

এপ্রোচ

কখন ব্যবহার করতে হবে

মনোযোগ

ইনলাইন সমাপ্তি

প্রবাহ মধ্যে ছোট সন্নিবেশ

না পড়ে পরামর্শ গ্রহণ করবেন না

আড্ডায় চুক্তিভিত্তিক উৎপাদন

নতুন ফাংশন/ক্লাস

উদাহরণ এবং প্রান্ত কেস দিন

শৈলী নমুনা দ্বারা উত্পাদন

বিদ্যমান কোড যোগ করা হচ্ছে

বর্তমান নমুনা কোড নির্বাচন করুন

কঙ্কাল স্টাফিং

স্বাক্ষর স্থির, শরীর খালি

স্বাক্ষর পরিবর্তন

কোড ডুপ্লিকেশন এবং নির্ভরতা ফাঁদ

AI প্রায়ই তার কাজ সহজ করার জন্য একটি নতুন লাইব্রেরির সুপারিশ করে। কখনও কখনও এটি সঠিক, কখনও কখনও এটি আপনার প্রকল্পে একটি অপ্রয়োজনীয় নির্ভরতা যোগ করে বা এমন একটি প্যাকেজ প্রস্তাব করে যা বিদ্যমান নেই (একটি হ্যালুসিনেশন)। নিয়ম: আপনি প্রতিটি নতুন নির্ভরতা নিশ্চিত করেন। প্যাকেজটি আসলে বিদ্যমান, রক্ষণাবেক্ষণ করা এবং উপযুক্ত লাইসেন্স আছে কিনা যাচাই না করে এটিকে প্রকল্পে যোগ করবেন না। বেশিরভাগ সময়ই একটি নতুন প্যাকেজের চেয়ে প্রকল্পে ইতিমধ্যে থাকা একজন সাহায্যকারী ভাল।

সতর্কতা: AI দ্বারা প্রস্তাবিত আমদানি লাইন পর্যালোচনা করুন। একটি অনুপস্থিত প্যাকেজ নাম (যা "টাইপো-স্কোয়াটিং" নামক জাল প্যাকেজগুলির সাথেও সাদৃশ্যপূর্ণ হতে পারে) উভয়ই সংকলন ভেঙে দেয় এবং নিরাপত্তা ঝুঁকি তৈরি করে।

সাধারণ ভুল

  • মডেল দ্বারা নির্ধারিত স্বাক্ষর থাকার. আপনি যদি ইনপুট/আউটপুট প্রকারগুলি ঠিক না করেন তবে প্রতিটি উত্পাদনের সাথে একটি আলাদা স্বাক্ষর আসে এবং একীকরণ কঠিন হয়ে যায়।
  • প্রান্ত ক্ষেত্রে উল্লেখ না. খালি ইনপুট, নাল, নেতিবাচক সংখ্যা, খুব বড় মান — আপনি যদি এইগুলি নির্দিষ্ট না করেন, মডেলটি "সুখী পথ" লেখে, প্রান্তগুলি এড়িয়ে যায়৷
  • এটি পরীক্ষা না করে পরামর্শ একত্রিত করা. কোড যা কাজ করে বলে মনে হচ্ছে তার মানে এই নয় যে এটি কাজ করে।
  • অপ্রয়োজনীয় নির্ভরতা গ্রহণ করা। একটি ওয়ান-লাইনারের জন্য একটি সম্পূর্ণ লাইব্রেরি যোগ করা প্রযুক্তিগত ঋণ তৈরি করে।
  • শৈলীর অসঙ্গতি। প্রজেক্টের বাকি অংশ থেকে ভিন্ন নামকরণ এবং ত্রুটি হ্যান্ডলিং কোড বেসকে প্যাচি করে তোলে।

সংক্ষেপে

কোড জেনারেশন শক্তিশালী হয় যখন আপনি উদ্দেশ্যকে একটি স্পষ্ট চুক্তিতে অনুবাদ করেন। ছোট, ইন-স্ট্রীম কাজগুলির জন্য এবং কথোপকথনে কাঠামো স্থাপন করে এমন কাজের জন্য ইনলাইন সমাপ্তি ব্যবহার করুন। আপনি ইনপুট/আউটপুট প্রকার, প্রান্ত কেস, সংস্করণ এবং শৈলী নির্দিষ্ট করুন; মডেলের একটি উদাহরণ দাও; প্রতিটি নতুন নির্ভরতা যাচাই করুন; এবং চালানো এবং উত্পাদিত প্রতিটি টুকরা পড়া. AI ফর্মুল্যাক, পুনরাবৃত্তিমূলক কোডে সবচেয়ে ভালো অর্থ প্রদান করে — আপনার সেট করা সীমার মধ্যে এটি ঠিক সেখানে চালান।

আবেদন টাস্ক

আপনার প্রকল্প থেকে একটি প্রকৃত ছোট ফাংশন চয়ন করুন যা আপনাকে লিখতে হবে। প্রথমে এটিকে "চুক্তি-ভিত্তিক ফাংশন জেনারেশন" টেমপ্লেট সহ AI-তে প্রিন্ট করুন, ইনপুট/আউটপুট প্রকার, দুটি প্রান্তের ক্ষেত্রে এবং একটি শৈলীর সীমাবদ্ধতা। জেনারেট করা কোড কম্পাইল করুন এবং দুটি ভিন্ন ইনপুট দিয়ে চেষ্টা করুন। তারপরে একই ফাংশনটিকে আবার জিজ্ঞাসা করুন, এইবার "আমাকে এটি লিখুন" কোন প্রসঙ্গ ছাড়াই, এবং লাইন দ্বারা দুটি আউটপুট লাইন তুলনা করুন: কোন প্রান্তের কেসগুলি মিস হয়েছে, কতগুলি সংশোধনের প্রয়োজন ছিল?

চেকলিস্ট

  • [ ] আমি জানি ইনলাইন সমাপ্তির সাথে চ্যাট মোড কোথায় ব্যবহার করতে হবে।
  • [ ] আমি ফাংশন জেনারেশনে ইনপুট/আউটপুট কন্ট্রাক্ট এবং এজ কেস নির্ধারণ করি।
  • [ ] আমি প্রম্পটে ভাষা এবং সংস্করণের তথ্য যোগ করার অভ্যাস তৈরি করেছি।
  • [ ] আমি প্রতিটি উত্পাদিত টুকরা একত্রিত করার আগে কম্পাইল এবং পরীক্ষা করি।
  • [ ] আমি AI এর অস্তিত্ব এবং প্রয়োজনীয়তা যাচাই করে প্রস্তাবিত প্রতিটি নতুন নির্ভরতা নিশ্চিত করি।
  • [ ] আমি পরীক্ষা করি যে তৈরি করা কোডটি প্রকল্পের শৈলীর সাথে মেলে।