كيف جعلت الذكاء الاصطناعي يتوقف عن "الهلوسة" في قاعدة برمجية لشركة تقنية مالية (Fintech) عمرها 3 سنوات
تفشل أدوات البرمجة المدعومة بالذكاء الاصطناعي في مشاريع الإنتاج الحقيقية. فهي تعمل بشكل جيد مع الأكواد الجديدة، لكنها تنهار أمام قواعد برمجية قديمة ذات تاريخ طويل.
تعلمت هذا بالطريقة الصعبة من خلال مشروعنا في التقنية المالية (fintech). لدينا واجهتان أماميتان باستخدام React، ولوحة تحكم للمسؤولين، وخلفية برمجية (backend) باستخدام FastAPI. قاعدة بياناتنا معقدة، فهي تحتوي على بيانات مالية وبيانات مستخدمين حساسة.
حاولنا استخدام الذكاء الاصطناعي لتسريع العمل، لكنه فشل على الفور.
طلبت من الذكاء الاصطناعي إنشاء جدول جهات اتصال (contacts table). فقام بإنشاء أعمدة جديدة للأسماء ورسائل البريد الإلكتروني، رغم أن هذه الأعمدة كانت موجودة بالفعل في جدول المستخدمين (users table) لدينا. قام الذكاء الاصطناعي بتكرار البيانات بدلاً من استخدام مفتاح أجنبي (foreign key)، حيث لم يكن لديه أي فكرة عن وجود جدول المستخدمين الخاص بنا.
توقفت عن السؤال عن كيفية جعل الذكاء الاصطناعي يكتب كوداً أفضل، وبدأت أسأل عما يحتاج الذكاء الاصطناعي لمعرفته لاتخاذ قرارات جيدة.
الذكاء الاصطناعي جيد بقدر جودة السياق الذي تقدمه له. لقد جعلنا سياقنا صريحاً ومرجعياً. إليكم النظام الذي بنيناه:
• ملفات ADR: أنشأنا مجلداً باسم docs/adrs/. تسجل هذه الملفات الأسباب الكامنة وراء قراراتنا المعمارية. أحد الملفات (ADR-001) يخبر الذكاء الاصطناعي: "تحقق من الجداول الموجودة أولاً. استخدم المفاتيح الأجنبية (foreign keys). لا تكرر بيانات المستخدمين أبداً."
• context.md: يشرح هذا الملف مصطلحاتنا الخاصة، ويخبر الذكاء الاصطناعي بكيفية ارتباط المفاهيم المختلفة ببعضها البعض في نظامنا.
• plot.md: هذه خريطة رفيعة المستوى، توضح كيفية اتصال الأجزاء المختلفة من مشروعنا.
• قواعد صارمة: أخبرنا الذكاء الاصطناعي أن دليل docs هو المرجع النهائي، ويجب عليه اتباع هذه القواعد بالترتيب.
• اختبارات إلزامية: يجب أن يحتوي كل مسار API جديد على حالات اختبار (test cases).
هذا النظام يجعل الذكاء الاصطناعي قابلاً للتوقع.
في إحدى المرات، قام الذكاء الاصطناعي بتغيير دالة مشتركة (shared function) مما أدى إلى تعطل ثمانية أجزاء أخرى من التطبيق. وبفضل وجود الاختبارات، رصد الذكاء الاصطناعي حالات الفشل، وقام بإصلاح خطئه عبر إنشاء نسخة جديدة من الدالة تتعامل مع المتطلبات القديمة والجديدة معاً. لولا وجود الاختبارات، لكان هذا الخطأ قد وصل إلى مرحلة الإنتاج.
توقف عن لوم الذكاء الاصطناعي لأنه لا يعرف قاعدة برمجتك. عامله كموظف جديد؛ فأنت لا تلوم موظفاً جديداً لأنه لا يعرف قواعدك، بل تقدم له الوثائق والتدريب اللازم (onboarding).
يبدو هيكلنا كالتالي:
docs/
context.md(المصطلحات والارتباطات)plot.md(خريطة رفيعة المستوى)adr/(قواعد محددة مثل إنشاء الجداول أو هيكل الـ API)
ثلاث نصائح لسير عملك:
- كن محدداً في ملفات ADR الخاصة بك. استخدم تعليمات واضحة بدلاً من النصائح الغامضة.
- اجعل الوثائق مرجعية. أخبر الذكاء الاصطناعي أن هذه القواعد لها الأولوية.
- حوّل الأخطاء إلى قواعد. في كل مرة يفشل فيها الذكاء الاصطناعي، أنشئ ملف ADR جديداً لمنع تكرار ذلك.
هذا لا يجعل الذكاء الاصطناعي مثالياً، لكنه يجعله متسقاً.
Optional learning community: https://t.me/GyaanSetuAi
