HarnessLLM: Rust Verification Harness Generation with Large Language Models
يُعد HarnessLLM إطار عمل مؤتمتًا يستفيد من النماذج اللغوية الكبيرة لتوليد وتحسين أدوات التحقق من لغة Rust بشكل تكراري من مجموعات الاختبار الحالية، مما ينجح في اكتشاف أخطاء سلامة الذاكرة الواقعية بدقة وكفاءة أعلى بكثير من النهج السابقة.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل عالم برمجة الحاسوب كمدينة صاخبة وعظيمة مبنية من الأكواد. في هذه المدينة، تشتهر لغة "رست" (Rust) بكونها مهندساً صارماً للغاية؛ فلديها قواعد سلامة مدمجة تمنع انهيار المباني أو اختفاء الطرق، مما يضمن عمل المدينة دون أن تصطدم بنفسها. ومع ذلك، حتى في هذه المدينة المخططة جيداً، توجد "مناطق غير آمنة" (unsafe zones)—وهي مناطق خاصة يمكن فيها رفع القواعد الصارمة مؤقتاً للقيام بأشياء قوية. إذا لم يكن البنّاء حذراً في هذه المناطق، أو إذا حدث خلل في إشارة المرور، فقد تعاني المدينة بأكملها من فشل كارثي، مثل تسرب الذاكرة أو حالة ذعر مفاجئة. وللحفاظ على سلامة المدينة، يستخدم المهندسون طريقة تسمى "التحقق الرسمي" (formal verification)، وهي تشبه تشغيل محاكاة شديدة الصرامة لإثبات أنه مهما حدث، فإن المباني لن تنهار. ولكن هنا تكمن المشكلة: لتشغيل المحاكاة، تحتاج أولاً إلى بناء "حزام اختبار" (harness). فكر في حزام الاختبار كمسار اختبار أو دمية تدريب؛ عليك بناء هذا المسار يدوياً، وتخبر المحاكي بالضبط أي السيارات ستسير، وبأي سرعة، وما هي العوائق التي ستلقيها في طريقها. القيام بذلك يدوياً هو أمر بطيء، وممل، ومن السهل الخطأ فيه، خاصة عندما تكون المدينة ضخمة ومعقدة.
هنا يأتي دور فريق جديد من الباحثين الذين قرروا تجربة شيء مختلف: لقد طلبوا من ذكاء اصطناعي فائق الذكاء، يُعرف بنموذج لغوي كبير (LLM)، أن يبني مسارات الاختبار هذه من أجلهم. هذه الأنواع من الذكاء الاصطناعي تشبه العباقرة الرقميين الذين قرأوا كل كتاب وكل قطعة كود موجودة تقريباً، مما يجعلهم ممتازين في فهم التعليمات وكتابة الكود. لكن كانت هناك مشكلة؛ فعندما طلب الباحثون من الذكاء الاصطناعي بناء مسارات الاختبار هذه في البداية، أصابه الارتباك. فقد كان أحياناً يخترع أجزاءً وهمية غير موجودة، أو يخطئ في ترتيب العمليات، أو يفشل في إنشاء السيناريوهات المعقدة والعشوائية اللازمة لاختبار سلامة المدينة حقاً. كان الذكاء الاصطناعي جيداً في كتابة الكود، لكنه لم يكن بارعاً في اتباع القواعد المحددة والصارمة المطلوبة لاختبار السلامة.
وهنا يأتي دور ورقة بحثية بعنوان "HarnessLLM". لم يكتفِ المؤلفون (مينغهوا وانغ، ويوي ليو، ولين هوانغ) بسؤال الذكاء الاصطناه "اذهب وابنِ مسار اختبار"، بل بنوا سير عمل ذكياً وخطوة بخطوة يعمل كمدير مشروع للذكاء الاصطناعي. لقد أدركوا أن قواعد بيانات لغة "رست" تحتوي بالفعل على كنز من المعلومات: حالات الاختبار الموجودة التي كتبها المبرمجون البشريون. هذه الاختبارات تشبه المخططات التي توضح كيف "يُفترض" استخدام الكود. يبدأ HarnessLLM بالنظر في هذه الاختبارات الموجودة للعثم عن "سيناريوهات الاستدعاء" (calling scenarios) المحددة—أي اللحظات الدقيقة التي يتم فيها وضع الكود قيد العمل. ثم يقوم بعزل هذه اللحظات وتحويلها إلى وصفة بسيطة ونظيفة للذكاء الاصطناعي.
السحر الحقيقي يحدث عندما يحتاج الذكاء الاصطناعي إلى إنشاء مدخلات "غير حتمية" (nondeterministic arguments). وباللغة البسيطة، هذا يعني أن على الذكاء الاصطناعي ابتكار مدخلات عشوائية لرميها على الكود ليرى ما إذا كان سينكسر. إذا كان الكود يتوقع رقماً بسيطاً، يمكن للذكاء الاصطناعي تخمين رقم عشوائي بسهولة. ولكن إذا كان الكود يتوقع كائناً معقداً ومخصصاً يحتوي على العديد من الأجزاء المتحركة، فغالباً ما يضيع الذكاء الاصطناعي. ولحل هذه المشكلة، يبني HarnessLLM "رسم بياني للتبعيات" (dependency graph). تخيل هذا كرسم خرائط يوضح كيف يتصل كل جزء من قطع الأحجية ببعضها البعض. بعد ذلك، يقدم النظام للذكاء الاصطناعي تعليمات "سلسلة الأفكار" (Chain-of-Thought)، وهي تشبه بطاقة وصفة خطوة بخطوة. تخبر الذكاء الاصطناعي: "أولاً، ابنِ الطوبة الصغيرة. ثم، استخدم تلك الطوبة لبناء الجدار. وأخيراً، استخدم الجدار لبناء المنزل". هذا يمنع الذكاء الاصطناعي من محاولة بناء السقف قبل وضع الأساس.
علاوة على ذلك، يحتوي النظام على "مدقق حقائق" مدمج. عندما يكتب الذكاء الاصطناعي الكود، يتم تجميعه (ترجمته إلى تنسيق يمكن للحاسوب تشغيله). إذا وجد الحاسوب خطأً، لا يكتفي النظام بقول "أصلحه"، بل يخبر الذكاء الاصطناعي تحديداً: "لقد اخترعت نوعاً (type) غير موجود"، أو "لقد غيرت الجزء الذي كان صحيحاً بالفعل". هذا يمنع الذكاء الاصطناعي من الهلوسة بحلول وهمية ويجبره على التركيز فقط على الأخطاء الفعلية.
اختبر الباحثون هذا النظام على 9 مكتبات "رست" حقيقية، والتي تشبه أحياء مختلفة في المدينة. بدأوا بـ 494 حالة اختبار موجودة وطلبوا من HarnessLLM تحويلها إلى أحزمة تحقق. كانت النتائج مبهرة؛ فقد استخرج النظام بنجاح 294 سيناريو استدعاء متميزاً بدقة بلغت 94.66%. ثم قام بتوليد حزام اختبار يعمل لكل سيناريو من تلك السيناريوهات، محققاً نسبة نجاح بلغت 100%. وفي المتوسط، استغرق الأمر حوالي 145 ثانية لتوليد كل حزام اختبار. وبالمقارنة، تمكنت أداة موجودة تسمى Autoharness من إنشاء أحزمة اختبار لحوالي 41% فقط من نفس السيناريوهات، ويرجع ذلك أساساً لعدم قدرتها على التعامل مع الأنواع المخصدة والمعقدة التي استطاع HarnessLLM التعامل معها.
ولعل الأهم من ذلك هو أن هذا لم يكن مجرد تمرين نظري. فعندما قام الباحثون بتشغيل أحزمة الاختبار المولدة ضد الكود، وجدوا 6 أخطاء حقيقية في سلامة الذاكرة. خمسة من هذه الأخطاء تم إصلاحها بالفعل من قبل المطورين، وواحد منها قيد المراجعة حالياً. وهذا يثبت أن الأداة لا تنتج مجرد كود جميل فحسب، بل إنها تجد بالفعل عيوباً خطيرة كان من الممكن أن تسبب مشاكل حقيقية. تشير الورقة البحثية إلى أنه من خلال الجمع بين المعرفة الموجودة في مجموعات الاختبار وقوة الذكاء الاصطناعي الإبداعية، الموجهة بقواعد صارمة وحلقات تغذية راجعة، يمكننا أتمتة المهمة المملة والصعبة للتحقق من سلامة البرمجيات، مما يجعل مدننا الرقمية أماكن أكثر أماناً للعيش.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.