چگونه باعث شدم هوش مصنوعی در پایگاه کد ما از توهم‌زدگی دست بردارد

ابزارهای کدنویسی هوش مصنوعی در پروژه‌های واقعی و عملیاتی شکست می‌خورند. آن‌ها روی کدهای جدید خوب کار می‌کنند، اما روی کدهای قدیمی که دارای تاریخچه هستند، از هم می‌پاشند.

پروژه فین‌تک ما سه سال سابقه دارد. این پروژه شامل دو فرانت‌اند React، یک پنل مدیریت و یک بک‌اند FastAPI است. پایگاه داده آن با جداول متعدد و Joinهای سنگین، پیچیده است.

ما سعی کردیم از هوش مصنوعی برای سرعت بخشیدن به کار استفاده کنیم، اما شکست خوردیم.

از هوش مصنوعی خواستم یک جدول مخاطبین (contacts) بسازد. او ستون‌های جدیدی برای نام‌ها و ایمیل‌ها ایجاد کرد. او متوجه نشد که ما از قبل این موارد را در جدول کاربران (users) خود داشتیم. او به جای استفاده از یک کلید خارجی (foreign key)، داده‌ها را تکرار کرد.

هوش مصنوعی احمق نبود؛ بلکه فاقد «زمینه» (context) بود. او با اطلاعات ناقص تصمیم‌گیری کرد.

دیگر نپرسیدم که چگونه کد بهتری بگیرم؛ بلکه شروع کردم به پرسیدن اینکه هوش مصنوعی برای تصمیم‌گیری درست، به چه زمینه‌ای نیاز دارد.

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

تنظیمات ما به این صورت است:

  • دایرکتوری ADR: ما پوشه‌ای برای سوابق تصمیمات معماری (Architecture Decision Records) ایجاد کردیم. این فایل‌ها توضیح می‌دهند که چرا تصمیمات خاصی گرفته‌ایم. یک فایل به هوش مصنوعی دستور می‌دهد که قبل از ایجاد جداول جدید، جداول موجود را بررسی کند و از تکرار داده‌های کاربر جلوگیری می‌کند.
  • context.md: این فایل اصطلاحات خاص ما را توضیح می‌دهد و به هوش مصنوعی می‌گوید که کلمات منحصر‌به‌فرد ما چگونه با یکدیگر مرتبط هستند.
  • plot.md: این فایل یک نقشه سطح بالا از پروژه و نحوه اتصال بخش‌های مختلف به یکدیگر ارائه می‌دهد.
  • تست‌های اجباری: هر مسیر (route) جدید در API مستلزم داشتن موارد تست (test cases) است.

این کار همه چیز را تغییر داد. یک بار، هوش مصنوعی یک تابع کمکی (utility function) مشترک را تغییر داد. این تغییر باعث از کار افتادن هشت بخش دیگر سیستم شد. مجموعه تست‌ها بلافاصله آن را شناسایی کردند. هوش مصنوعی خطا را دید و با ایجاد نسخه‌ای که هم الزامات قدیمی و هم جدید را پوشش می‌داد، اشتباه خود را اصلاح کرد.

بدون تست‌ها، آن باگ به مرحله عملیاتی (production) می‌رسید.

با هوش مصنوعی مانند یک توسعه‌دهنده تازه‌کار رفتار کنید. شما یک نیروی جدید را به خاطر ندیدن پایگاه کد خود سرزنش نمی‌کنید، بلکه مستندات و فرآیند آشنایی (onboarding) را در اختیارش می‌گذارید. ما همین کار را برای هوش مصنوعی انجام دادیم.

ساختار ما:

  • docs/context.md: اصطلاحات و ارتباطات پروژه.
  • docs/plot.md: نقشه سطح بالای پایگاه کد.
  • docs/adr/: قوانین خاص مانند ساخت جداول و ساختار API.

سه قانون برای تیم شما:

  • در ADRها دقیق باشید. به جای توصیه‌های مبهم، از دستورالعمل‌های شفاف استفاده کنید.
  • مستندات را مرجع قرار دهید. به هوش مصنوعی بگویید که این قوانین در اولویت هستند.
  • اشتباهات را به قانون تبدیل کنید. هر بار که هوش مصنوعی شکست می‌خورد، یک ADR جدید بنویسید.

این سیستم هوش مصنوعی را بی‌نقص نمی‌کند، بلکه آن را قابل پیش‌بینی می‌کند. ما پایگاه کدی می‌خواهیم که در آن هوش مصنوعی ثابت‌قدم باشد تا تیم بتواند سریع‌تر حرکت کند.

منبع: https://dev.to/jaskiratanand/how-i-made-ai-stop-hallucinating-on-our-3-year-old-fintech-codebase-3g0h