كيف جعلت الذكاء الاصطناعي يتوقف عن الهلوسة في قاعدة الكود الخاصة بنا
تفشل أدوات البرمجة بالذكاء الاصطناعي في مشاريع الإنتاج الحقيقية. فهي تعمل بشكل جيد مع الكود الجديد، لكنها تنهار أمام الكود القديم الذي يمتلك تاريخاً برمجياً.
مشروعنا في مجال التكنولوجيا المالية (fintech) يمتلك تاريخاً يمتد لثلاث سنوات. يتكون من واجهتين أماميتين باستخدام React، ولوحة تحكم للمسؤولين، وخلفية برمجية باستخدام FastAPI. قاعدة البيانات معقدة وتضم العديد من الجداول وعمليات الربط (joins) المكثفة.
حاولنا استخدام الذكاء الاصطناعي لتسريع وتيرة العمل، لكننا فشلنا.
طلبت من الذكاء الاصطناعي إنشاء جدول جهات اتصال (contacts table). فقام بإنشاء أعمدة جديدة للأسماء ورسائل البريد الإلكتروني، ولم يدرك أننا نملك هذه البيانات بالفعل في جدول المستخدمين (users table). لقد قام بتكرار البيانات بدلاً من استخدام مفتاح أجنبي (foreign key).
لم يكن الذكاء الاصطناعي غبياً، بل كان يفتقر إلى السياق. لقد اتخذ قراراً بناءً على معلومات غير مكتملة.
توقفت عن السؤال عن كيفية الحصول على كود أفضل، وبدأت أسأل عن السياق الذي يحتاجه الذكاء الاصطناعي لاتخاذ قرارات جيدة.
قمنا ببناء سير عمل منظم. فالذكاء الاصطناعي لا يكون جيداً إلا بقدر جودة السياق الذي توفره له، لذا جعلنا هذا السياق صريحاً وواضحاً.
إليكم إعداداتنا:
- دليل ADR: أنشأنا مجلداً لسجلات قرارات الهندسة المعمارية (Architecture Decision Records). تشرح هذه الملفات سبب اتخاذنا لخيارات معينة. أحد الملفات يوجه الذكاء الاصطناعي للتحقق من الجداول الموجودة قبل إنشاء جداول جديدة، ويمنعه من تكرار بيانات المستخدمين.
context.md: يشرح هذا الملف مصطلحاتنا الخاصة، ويوضح للذكاء الاصطناعي كيفية ارتباط كلماتنا الفريدة ببعضها البعض.plot.md: يوفر خريطة عالية المستوى للمشروع وكيفية ترابط أجزائه.- الاختبارات الإلزامية: كل مسار API جديد يتطلب حالات اختبار (test cases).
غيّر هذا كل شيء. في إحدى المرات، قام الذكاء الاصطناعي بتغيير دالة مساعدة مشتركة (shared utility function)، مما أدى إلى تعطل ثمانية أجزاء أخرى من النظام. لكن مجموعة الاختبارات (test suite) رصدت ذلك فوراً. رأى الذكاء الاصطناعي الفشل وقام بإصلاح خطئه بنفسه عبر إنشاء نسخة تتعامل مع المتطلبات القديمة والجديدة معاً.
لولا وجود الاختبارات، لكان هذا الخطأ قد وصل إلى بيئة الإنتاج.
تعامل مع الذكاء الاصطناعي كمطور جديد. أنت لا تلوم موظفاً جديداً لأنه لا يعرف قاعدة الكود الخاصة بك، بل توفر له التوثيق والتدريب الأولي (onboarding). لقد فعلنا الشيء نفسه مع الذكاء الاصطناعي.
هيكلنا:
docs/context.md: مصطلحات المشروع وترابطاته.docs/plot.md: خريطة عالية المستوى لقاعدة الكود.docs/adr/: قواعد محددة مثل إنشاء الجداول وهيكلية الـ API.
ثلاث قواعد لفريقك:
- كن محدداً في ملفات ADR. استخدم تعليمات واضحة بدلاً من النصائح الغامضة.
- اجعل التوثيق مرجعاً نهائياً. أخبر الذكاء الاصطناعي أن هذه القواعد لها الأولوية القصوى.
- حوّل الأخطاء إلى قواعد. في كل مرة يفشل فيها الذكاء الاصطناعي، اكتب ملف ADR جديداً.
هذا النظام لا يجعل الذكاء الاصطناعي مثالياً، بل يجعله قابلاً للتنبؤ. نحن نريد قاعدة كود يكون فيها الذكاء الاصطناعي متسقاً حتى يتمكن الفريق من العمل بسرعة أكبر.
