কীভাবে আমি আমাদের ৩ বছরের পুরনো ফিনটেক কোডবেসে AI-এর হ্যালুসিনেশন (Hallucinating) বন্ধ করলাম
AI কোডিং টুলগুলো বাস্তব প্রোডাকশন প্রজেক্টে ব্যর্থ হয়। এগুলো নতুন কোডের ক্ষেত্রে কাজ করলেও ইতিহাস সমৃদ্ধ পুরনো কোডবেসের ক্ষেত্রে ভেঙে পড়ে।
আমাদের ফিনটেক প্রজেক্টের মাধ্যমে আমি এটি কঠিন উপায়ে শিখেছি। আমাদের দুটি React ফ্রন্টএন্ড, একটি অ্যাডমিন প্যানেল এবং একটি FastAPI ব্যাকএন্ড রয়েছে। আমাদের ডাটাবেসটি বেশ জটিল। এতে সংবেদনশীল আর্থিক এবং ব্যবহারকারীর তথ্য রয়েছে।
আমরা দ্রুত কাজ করার জন্য AI ব্যবহার করার চেষ্টা করেছিলাম। এটি সাথে সাথেই ব্যর্থ হয়েছিল।
আমি AI-কে একটি contacts টেবিল তৈরি করতে বলেছিলাম। এটি নাম এবং ইমেলের জন্য নতুন কলাম তৈরি করেছিল। এই কলামগুলো আমাদের users টেবিলে আগে থেকেই ছিল। AI একটি foreign key ব্যবহার করার পরিবর্তে ডেটা ডুপ্লিকেট করেছিল। আমাদের users টেবিলটি যে আছে, সে সম্পর্কে তার কোনো ধারণা ছিল না।
আমি AI-কে কীভাবে আরও ভালো কোড লেখানো যায় তা জিজ্ঞেস করা বন্ধ করে দিলাম। আমি জিজ্ঞেস করতে শুরু করলাম যে সঠিক সিদ্ধান্ত নেওয়ার জন্য AI-এর কী কী জানা প্রয়োজন।
আপনি AI-কে যে কনটেক্সট (context) দেবেন, এটি ঠিক ততটুকুই ভালো হবে। আমরা আমাদের কনটেক্সটকে সুনির্দিষ্ট এবং কর্তৃত্বপূর্ণ (authoritative) করে তুলেছি। আমরা যে সিস্টেমটি তৈরি করেছি তা নিচে দেওয়া হলো:
• ADR Files: আমরা একটি docs/adrs/ ফোল্ডার তৈরি করেছি। এই ফাইলগুলো কেন আমরা আর্কিটেকচারাল সিদ্ধান্ত নিচ্ছি তা রেকর্ড করে। একটি ফাইল (ADR-001) AI-কে বলে: "প্রথমে বিদ্যমান টেবিলগুলো চেক করো। Foreign keys ব্যবহার করো। কখনোই ব্যবহারকারীর ডেটা ডুপ্লিকেট করো না।"
• context.md: এই ফাইলটি আমাদের নির্দিষ্ট টার্ম বা শব্দগুলো ব্যাখ্যা করে। এটি AI-কে জানায় যে আমাদের সিস্টেমে বিভিন্ন ধারণা একে অপরের সাথে কীভাবে সম্পর্কিত।
• plot.md: এটি একটি হাই-লেভেল ম্যাপ। এটি দেখায় যে আমাদের প্রজেক্টের বিভিন্ন অংশ কীভাবে একে অপরের সাথে যুক্ত।
• Strict Rules: আমরা AI-কে বলেছি যে docs ডিরেক্টরি হলো চূড়ান্ত কর্তৃপক্ষ। এটি অবশ্যই ক্রমানুসারে এই নিয়মগুলো মেনে চলতে হবে।
• Mandatory Tests: প্রতিটি নতুন API রুটে অবশ্যই টেস্ট কেস থাকতে হবে।
এই সিস্টেমটি AI-কে অনুমেয় (predictable) করে তোলে।
একবার, AI একটি শেয়ার্ড ফাংশন পরিবর্তন করেছিল যা অ্যাপের আরও আটটি অংশ নষ্ট করে দিয়েছিল। যেহেতু আমাদের কাছে টেস্ট ছিল, তাই AI ব্যর্থতাগুলো দেখতে পেয়েছিল। এটি ফাংশনটির একটি নতুন ভার্সন তৈরি করে নিজের ভুল সংশোধন করেছিল যা পুরনো এবং নতুন উভয় প্রয়োজনীয়তা সামলাতে পারে। টেস্ট না থাকলে, সেই বাগটি প্রোডাকশনে পৌঁছে যেত।
আপনার কোডবেস না জানার জন্য AI-কে দোষ দেওয়া বন্ধ করুন। এটিকে একজন নতুন কর্মীর মতো বিবেচনা করুন। আপনার নিয়মগুলো না জানার জন্য আপনি একজন নতুন কর্মীকে দোষ দেন না। আপনি তাদের ডকুমেন্টেশন এবং অনবোর্ডিং প্রদান করেন।
আমাদের স্ট্রাকচারটি দেখতে এরকম:
docs/
- context.md (টার্ম এবং সংযোগসমূহ)
- plot.md (হাই-লেভেল ম্যাপ)
- adr/ (টেবিল তৈরি বা API স্ট্রাকচারের মতো নির্দিষ্ট নিয়মাবলী)
আপনার ওয়ার্কফ্লোর জন্য তিনটি টিপস:
- আপনার ADR-এ সুনির্দিষ্ট হোন। অস্পষ্ট উপদেশের পরিবর্তে স্পষ্ট নির্দেশনা ব্যবহার করুন।
- ডকুমেন্টেশনকে কর্তৃত্বপূর্ণ করুন। AI-কে বলুন যে এই নিয়মগুলো সবার আগে কার্যকর হবে।
- ভুলগুলোকে নিয়মে রূপান্তর করুন। প্রতিবার যখন AI ব্যর্থ হয়, এটি প্রতিরোধ করার জন্য একটি নতুন ADR তৈরি করুন।
এটি AI-কে নিখুঁত করে না, বরং এটি একে সামঞ্জস্যপূর্ণ (consistent) করে তোলে।
Optional learning community: https://t.me/GyaanSetuAi
