چگونه باعث شدم هوش مصنوعی در پایگاه کد ۳ ساله فینتک ما دیگر دچار توهم نشود
ابزارهای کدنویسی هوش مصنوعی در پروژههای واقعیِ عملیاتی شکست میخورند. آنها روی کدهای جدید خوب کار میکنند، اما در پایگاههای کد قدیمی که دارای تاریخچه هستند، از هم میپاشند.
من این موضوع را با تجربه تلخ در پروژه فینتک خودمان یاد گرفتم. ما دو فرانتاند React، یک پنل مدیریت و یک بکاند FastAPI داریم. پایگاه داده ما پیچیده است و دادههای حساس مالی و کاربری را در خود نگه میدارد.
ما سعی کردیم برای سرعت بخشیدن به کار از هوش مصنوعی استفاده کنیم، اما بلافاصله شکست خورد.
از هوش مصنوعی خواستم یک جدول contacts بسازد. او ستونهای جدیدی برای نامها و ایمیلها ایجاد کرد؛ در حالی که این ستونها از قبل در جدول users ما وجود داشتند. هوش مصنوعی به جای استفاده از یک foreign key (کلید خارجی)، دادهها را تکرار کرد. او اصلاً نمیدانست که جدول users ما وجود دارد.
من دیگر نپرسیدم که چطور میتوانم از هوش مصنوعی بخواهم کد بهتری بنویسد؛ بلکه شروع کردم به پرسیدن اینکه هوش مصنوعی برای گرفتن تصمیمات درست، چه چیزهایی را باید بداند.
هوش مصنوعی فقط به اندازه همان زمینهای (context) که به آن میدهید خوب است. ما زمینه خود را صریح و مرجع کردیم. در اینجا سیستمی که ساختیم آمده است:
• فایلهای ADR: ما یک پوشه docs/adrs/ ایجاد کردیم. این فایلها ثبت میکنند که چرا تصمیمات معماری خاصی را میگیریم. یک فایل (ADR-001) به هوش مصنوعی میگوید: «ابتدا جداول موجود را بررسی کن. از foreign keyها استفاده کن. هرگز دادههای کاربر را تکرار نکن.»
• context.md: این فایل اصطلاحات خاص ما را توضیح میدهد. به هوش مصنوعی میگوید که مفاهیم مختلف در سیستم ما چگونه با هم در ارتباط هستند.
• plot.md: این یک نقشه سطح بالا است. نشان میدهد که بخشهای مختلف پروژه ما چگونه به هم متصل میشوند.
• قوانین سختگیرانه: ما به هوش مصنوعی گفتیم که دایرکتوری docs مرجع نهایی است و باید این قوانین را به ترتیب رعایت کند.
• تستهای اجباری: هر مسیر API جدید باید دارای موارد تست (test cases) باشد.
این سیستم باعث میشود هوش مصنوعی قابل پیشبینی باشد.
یک بار، هوش مصنوعی یک تابع مشترک را تغییر داد که باعث از کار افتادن هشت بخش دیگر اپلیکیشن شد. چون ما تست داشتیم، هوش مصنوعی خطاها را دید. او با ایجاد نسخه جدیدی از تابع که هم الزامات قدیمی و هم جدید را پوشش میداد، اشتباه خود را اصلاح کرد. بدون تستها، آن باگ به محیط تولید (production) میرسید.
از سرزنش کردن هوش مصنوعی به دلیل ندیدن پایگاه کدتان دست بردارید. با آن مثل یک نیروی تازهاستخدام شده رفتار کنید. شما یک نیروی جدید را به خاطر بلد نبودن قوانین خود سرزنش نمیکنید، بلکه به او مستندات و فرآیند آشنایی (onboarding) میدهید.
ساختار ما به این شکل است:
docs/
context.md(اصطلاحات و ارتباطات)plot.md(نقشه سطح بالا)adr/(قوانین خاص مانند ساخت جدول یا ساختار API)
سه نکته برای جریان کاری (workflow) شما:
- در ADRهای خود دقیق باشید. به جای توصیههای مبهم، از دستورالعملهای شفاف استفاده کنید.
- مستندات را مرجع قرار دهید. به هوش مصنوعی بگویید که این قوانین در اولویت هستند.
- اشتباهات را به قانون تبدیل کنید. هر بار که هوش مصنوعی شکست میخورد، یک ADR جدید برای جلوگیری از تکرار آن ایجاد کنید.
این کار هوش مصنوعی را بینقص نمیکند، بلکه آن را باثبات میکند.
Optional learning community: https://t.me/GyaanSetuAi
