
ظللت أحاول إصلاح النموذج. المشكلة كانت في الضوء.
أول رقم وضعته على السبورة لهذا البناء كان 97 في المئة. والثاني كان 14.
يصفان النموذج نفسه. في مثال التشكيل من بحثنا، نموذج رؤية تحقّق من دقته عند 97% في المختبر يُنقل إلى مكبس قالب تقدّمي بقوة 200 طن يعمل بمعدل 40 ضربة في الدقيقة ويبدأ برفض 14% من القطع السليمة رفضًا خاطئًا. لم يتغيّر شيء داخل النموذج. ما تغيّر هو المدخلات: وهج أضواء العنبر العلوية الذي ينزاح مع زاوية الضربة، وتجمّع زيت التشحيم بشكل مختلف على القوالب الدافئة عنه على الباردة، والقطع الخمسون الأولى من كل وردية تُصنع قبل أن يبلغ المكبس توازنه الحراري. فيزياء الخط أخرجت الصور من التوزيع الذي تحقّق النموذج عليه، ولا نموذج، بأي دقة كانت، جدير بالثقة هناك.
أمضيت المرحلة الأخيرة من هذا المشروع في بناء عرض توضيحي يأخذ تلك الجملة على محمل الجد. يُدعى بوابة ثقة الفحص (Inspection Trust Gate)، ويمكنك أن تراقبه وهو يقرّر، قطعةً بقطعة، على veriprajna.com/ar/demos/edge-ai-manufacturing-inspection. ليس نموذج عيوب أفضل. إنه طبقة وقت التشغيل بين نموذج الرؤية ومُشغِّل الرفض في وحدة التحكم المنطقية القابلة للبرمجة (PLC)، ومهمته الوحيدة أن يقرّر، لكل قطعة على حدة، ما إذا كان حكم النموذج آمنًا للتنفيذ.
ما يلي هو قصة البناء عبر اللحظات الثلاث التي غيّرت طريقة تفكيري في ذكاء الفحص الاصطناعي: حدث انجراف عند الساعة 06:00 المكتوبة في السكربت، ورقم مرجعي رفضت أن أصدّقه، وقاعدة كدت أحذفها.
الحل ليس نموذجًا أفضل
قاومت تلك الجملة أطول مما ينبغي. عندما يسيء كاشف السلوك، تقول لي كل غريزة لديّ كبانٍ: أعد تدريبه، رقِّ العمود الفقري، اشترِ مزيدًا من التسميات. والبحث ظل يرفض التعاون. أنظمة الفحص البصري الآلي (AOI) الجاهزة ترفض خطأً 5 إلى 15% من القطع السليمة، والمضبوطة جيدًا تصل إلى ما دون 2%، وهو ما تسميه صفحة الحلول لدينا "مشكلة معايرة وبيانات، لا مشكلة بنية نموذج". البحث نفسه يورد أن 84% من مشاريع تكامل الأنظمة تفشل أو تفشل جزئيًا، وأن في نشر فحص نموذجي تشكّل أعمال التكامل 60% من الجدول الزمني للمشروع بينما تدريب النموذج 15%. السطر الذي ظلّيت أعيد قراءته: "العتاد أمر شراء."
ففعلت شيئًا بدا هرطقةً خفيفة: جعلت نموذج العيوب في العرض التوضيحي غير متميّز عمدًا. إنه مسافة kNN إلى نسيج معروف الجودة، بديل خفيف لـ PatchCore، ويحقق AUROC بمقدار 0.845 في فصل القطع السليمة النظيفة عن المعيبة على مجموعة اختبار MVTec AD metal_nut المحجوزة (صور حقيقية لقطع مصنّعة حقيقية، وتسميات عامة). لست أخفي هذا الرقم ولست أبيعه. في الإنتاج يملأ ذلك المكان خط أنابيب NVIDIA Metropolis لديك، أو نظام Cognex، أو نموذجك المخصّص، خلف واجهة ثابتة. المنتج هو الطبقة حول المحرك، لا المحرك.
تبدأ الطبقة بسؤال لا يجيب عنه أي مقياس دقة: هل هذه الصورة داخل ظروف الالتقاط التي تحقّق النموذج عليها؟ يحسب EnvelopeDetector في العرض مسافة ماهالانوبيس في فضاء الإشارات الفيزيائية (التعرّض، التباين، المدى الديناميكي، وكيل للبؤرة، التفاصيل عالية التردد، الصبغة الحرارية، التشبّع، نسبة الوهج)، مُلائَمةً على صور التدريب الـ220 المعروفة الجودة ولا شيء غيرها. عندما تقع قطعة خارج ذلك الظرف المُتحقَّق منه، تتوقف البوابة عن الثقة بمخرج النموذج تمامًا، مهما بلغت ثقة النموذج به.
حتى النموذج المثالي لا يصلح إلا على مدخلات داخل ظرفه المُتحقَّق منه.
تلك هي الجملة التي يقوم عليها البناء كله. الانجراف فشل مدخلات، لا فشل نموذج، وفشل المدخلات لا يظهر أبدًا في لوحة دقةك. يظهر في صندوق خردتك.
ماذا يحدث عند 06:00؟
اللحظة التي أثق بها أكثر في العرض كله هي طابع زمني. يعيد التطبيق تشغيل وردية مكتوبة حتمية على المحطة "Line 3 - metal_nut press،" دافعًا صور MVTec AD metal_nut الحقيقية عبر خط الأنابيب كاملًا. في منتصف الطريق، يعبر شاشةً علامة: "SHIFT CHANGE 06:00 - cold dies, bay lights on." ثم تصل 12 قطعة سليمة مفسودة بالوهج وضباب البؤرة والصبغة الحرارية. أريد أن أكون دقيقًا بشأن ما هذا: الصور حقيقية، والانجراف إفساد صور صادق طُبِّق عليها، والتطبيق يسمّيه كذلك. لم يكن لديّ خط تشكيل لأصوّره، والتظاهر بغير ذلك كان سيسمّم النقطة كلها.
ما يحدث بعد ذلك هو سبب وجود العرض. يتحوّل مراقب الظرف إلى الأحمر. تقرأ البوابة كل قطعة منجرفة على أنها خارج الظرف المُتحقَّق منه وترفض أن يمسّ حكم النموذج المُشغِّل. حكمًا تلو حكم يعود HOLD، موجَّهًا إلى طابور التصعيد لإنسان، بينما اللوحة بجانبه تُظهر ما كان سيفعله فحص بصري آلي ساذج بلا فحص ظرف بالصورة نفسها: REJECT.

في المرة الأولى التي رأيت فيها الطابور يمتلئ، نقرت على قطعة محتجزة متوقعًا عذرًا مبهمًا من قبيل "اكتُشفت شذوذية". بدلًا من ذلك فكّك مراقب الظرف إشارة الخرق إشارةً بإشارة، لأنني بنيته من قياسات فيزيائية لا من تضمينات، والقياسات الفيزيائية تستطيع أن تفسّر نفسها. على إحدى القطع المنجرفة، السطوع يجلس عند 7.6 سيغما من الملاءمة المُتحقَّق منها ويحمل 87.1% من مسافة ماهالانوبيس المربعة. ذلك ليس نموذجًا لديه شعور. ذلك قراءة أداة.

بحلول نهاية مرحلة الانجراف تكون لوحة النتائج صارخة. خط الأساس الساذج قد أحال تلقائيًا إلى الخردة 12 قطعة سليمة. بوابة الثقة أحالت تلقائيًا إلى الخردة صفرًا، محتجزةً إياها كلها للمراجعة. الصور نفسها، ونموذج العيوب البديل نفسه، وعتبات درجة العيب نفسها. الفرق الوحيد أن مسارًا واحدًا فحص المدخل قبل أن يثق بالمخرج.
خط الأساس الساذج والبوابة رأيا القطع نفسها والنموذج نفسه. الفرق الوحيد كان إذن التنفيذ.

عن ذلك الرقم الدولاري، لأن هنا تبدأ العروض عادة بالكذب: اللوحة تستقرئ معدل الرفض الخاطئ الساذج المقاس إلى وردية كاملة (40 ضربة في الدقيقة لمدة 8 ساعات تساوي 19,200 قطعة) عند 2.42 دولار لكل قطعة مُعدَمة. الـ2.42 دولار هو رتبة حجم مصدريّة، مرسّخة بحالة مصنع بسكويت منشورة حيث وفّر خفض خردة/هدر بنسبة 8.7% مبلغ $94K سنويًا و38,800 كغ من المنتج. ليس رقم عميل، والعدّاد مُسمَّى إسقاطًا في كل موضع يظهر فيه. أنا قست الرفض الخاطئ؛ وأسقطت الدولارات؛ والواجهة تقول أيهما أيهما.
شيء آخر تحقّقت منه قبل أن أصدّق قصة انجرافي: القطع المعيبة المحقونة أثناء مرحلة الانجراف ما زالت تُلتقَط أو تُصعَّد، ولا تُمرَّر تلقائيًا أبدًا. عبر مجموعة الاختبار المحجوزة كلها ذلك الرقم هو 93 من 93. احتجاز القطع السليمة عديم القيمة إن انزلقت القطع السيئة وسط الفوضى.
هل كان فحص الظرف لديّ يصحّح واجبه بنفسه؟
الرقم المرجعي الذي شككت فيه أكثر كان أفضل أرقامي. عندما شغّلت سكربت المقعد أول مرة، فصل كاشف الظرف الصور المنجرفة عن النظيفة بشكل شبه مثالي. ردّ فعلي الفوري لم يكن فخرًا. كان اشتباهًا، لأنني بنيت طرفي الامتحان: كتبت إفسادات الوهج وضباب البؤرة والصبغة الحرارية، واخترت الإشارات الفيزيائية التي يراقبها الكاشف. طبعًا كاشف وهج يلتقط الوهج. مراجع بأي أسنان سيسمّي ذلك دائريًا، وسيكون محقًا.
فحجزت عائلة انجراف واحدة خارج التجربة تمامًا. لم يُضبَط الكاشف قط ضد نقص التعرّض، ولم يره أثناء التطوير. ثم أعدت تشغيل bench.py (آخر مرة في 2026-07-17) على مجموعة اختبار MVTec AD metal_nut المحجوزة: 22 قطعة سليمة، 93 معيبة، ملاءمة التدريب على صور الجودة الـ220 فقط. على عائلة نقص التعرّض المحجوزة، سجّل كاشف الظرف AUROC 1.000. ذلك هو الرقم الذي يحمل الأطروحة، تحديدًا لأنه اكتُسب على نمط فشل لم أصمّمه قط. السكربت يطبع "THESIS HOLDS" فقط إذا كانت الأرقام المقاسة تدعم الادعاء فعلًا؛ كتبته كذلك كي لا ينجرف التسويق بعيدًا عن القياس.
بقية المقياس تستحق نطاقها الدقيق، فها هي دون تقريب لصالحي. على القطع السليمة المنجرفة، خط الأساس الساذج بلا ظرف يرفض خطأً 95.5 إلى 100% لكل عائلة انجراف (وهج 100%، ضباب بؤرة 100%، صبغة حرارية 100%، نقص تعرّض 95.5%، متوسط 98.9%). بوابة الثقة ترفض خطأً 0.0% منها، محتجزةً كل واحدة للمراجعة. والتحفّظ الصادق: الإفسادات بكامل قوتها، فانهيار خط الأساس شبه كلي بحكم التصميم. الادعاء الذي سأدافع عنه هو الاتجاه، أن نموذجًا تحقّق منه نظيفًا ينهار متى غادرت المدخلات ظرفه، لا النسبة المئوية بعينها. هذه قياسات على معيار بحثي تحت انجراف اصطناعي. ليست ضمانات عالم مفتوح، وأي من يقتبسها كأداء إنتاج يسيء استخدامها، وأنا منهم.
القاعدة التي كدت أحذفها
أصعب قرار صدق اتخذته في هذا البناء كان حول قاعدة بالكاد تعمل. مبكرًا أضفت قاعدة منطقة هندسية: تحديد موقع الشذوذية على شبكة خشنة 8 في 8، ومعاملة عيب داخل المنطقة الوظيفية بخلاف لطخة عند الحافة التجميلية. يبدو كقياس أبعاد حقيقي. ثم قسته، والقياسات كانت متواضعة. وكيل الخشونة المحلية يحدّد موقع شذوذية على 33 من 93 عيبًا محجوزًا، نحو 35%. يغيّر نتيجة البوابة بالضبط على 1 من 93. و0 من أصل 18 رفضًا تلقائيًا مدعوم بشذوذية موضعية حقيقية؛ عندما لا يُحدَّد شيء، يقع المركز على وسط الشبكة، فيُقرأ كداخل المنطقة افتراضيًا.
جلست مع ثلاثة خيارات. أحذف القاعدة وأتظاهر أنني لم أجرّب. أبقيها وأدع الواجهة توحي بقياس أبعاد دقيق لا أملكه. أو أبقيها وأجعل الواجهة تعترف. اخترت الاعتراف. عندما يرفض العرض تلقائيًا عيب البطل (القطعة test-flip-264، عيب هيكلي جسيم حقيقي من فئة flip في MVTec)، يقول تفصيل الهندسة صراحةً إنه لم يُحدَّد شيء على هذه القطعة وأن الرفض يستند إلى ثقة النسيج وحدها.

القاعدة تكسب بقاءها مرة واحدة بالضبط، وجعلت التطبيق يثبتها بدل أن يمثّلها. عند الإقلاع، يبحث العرض في كل عيوب الاختبار المحجوزة الـ93 عن قطعة ذات شذوذية موضعية حقيقية خارج المنطقة الوظيفية على قطعة واثقة بخلاف ذلك. في التقسيم المُشحَن يجد ذلك البحث test-flip-251، مركز عند الصف 2، العمود 6، وتوجّهها البوابة إلى HOLD بدل إطلاق المُشغِّل. إن تغيّرت البيانات ولم تتأهل أي قطعة، فذلك الإيقاع ببساطة لن يظهر. حتى اختبرت عتبة سيغما للقاعدة باختبار أ/ب مع تحقق متقاطع من 5 طيات؛ القيمة المُلائَمة لم تُظهر تحسنًا على الـ2.5 المضبوطة يدويًا، فأبقيت 2.5 وسجّلت النتيجة السلبية في المستودع بـ "shipped": false. في مشروع إنتاج تُستبدَل هذه القاعدة بقياس أبعاد دقيق على مستوى البكسل ومؤسَّس على CAD. في العرض هي بديل صادق، والواجهة تقول ذلك على كل قطعة.
طبقة ثقة تبالغ في بيع نفسها تناقض في المصطلحات.
صار ذلك السطر قاعدة تصميم. إن كان وعد المنتج كله معرفة متى لا تثق بنموذج، فلا يمكنه في الوقت نفسه أن يخادع بشأن أضعف مكوّناته.
الوكلاء ينصحون، والشفرة تقرّر
القرار الذي أرفض تفويضه هو الذي يحرّك المعدن. البوابة نفسها شفرة حتمية صريحة، خارج أي نموذج لغة كبير وخارج نموذج الرؤية أيضًا. عتباتها مُلائَمة من بيانات العرض نفسه، لا تلويحًا باليد: تمرير تلقائي دون 0.948 ورفض تلقائي فوق 1.30 على مقياس الثقة المعايَر، وكل ما بينهما، وكل ما خارج الظرف، يذهب إلى HOLD. تعمل ضمن ميزانية نافذة ضربة صلبة 750 مللي ثانية، وفي سجل التدقيق المُشحَن تصل القرارات في عشرات المللي ثانية: test-good-288 مُرِّرت تلقائيًا في 37.7 مللي ثانية، وtest-good-289 في 24.4 مللي ثانية، وسجل مُشغِّل الرفض لـ test-flip-264 يقرأ "REJECT actuated in 25ms (budget 750ms)."
ينبغي أن أكون صريحًا بشأن ما يُنفَّذ: لا شيء بعد. مسار EtherNet/IP إلى مُشغِّل رفض Allen-Bradley ControlLogix هو مُحاكٍ يسجّل بالضبط ما كان سيفعله، ووجهة MES هي stub يكتب سطر التتبّع الذي كان سيكتبه. كلاهما مُسمَّى stub في التطبيق. هما مشكَّلان كالمحوّلات الحقيقية لأن واقع التقنية التشغيلية (مصانع مختلطة Siemens وAllen-Bradley، ونافذة رفض تُقاس بالمللي ثانية) هو سطح المنتج الفعلي، لكن عرضًا يوحي بخط حي سيفشل في اختبار ثقته ذاته.
هناك وكلاء في النظام، وقيّدتهم عمدًا. عندما تتراكم القطع في طابور التصعيد، يشرع زوج Drift Triage في العمل: وكيل تشخيص يقرأ انحرافات الإشارات الفيزيائية المرتبة عبر القطع المحتجزة ويقترح فرضية سبب جذري مع إجراء موصى به، ثم يتحقق وكيل ناقد من تلك الفرضية مقابل الأدلة الرقمية، خافضًا إياها إلى "تحقيق يدوي" إن لم تكن الإشارة المستشهد بها فعلًا الانحراف المهيمن. مبنيان على Pydantic AI وقابلان لتبديل المزوّد، ومع عدم تهيئة مفتاح واجهة برمجة تطبيقات ينحدر الكل إلى فرز حتمي مُنمَّط، فيعمل العرض دون اتصال بالكامل. ما لا يستطيع الوكلاء فعله، بحكم التصميم، هو لمس المُشغِّل. بحلول وقت حديثهم، تكون البوابة قد قرّرت بالفعل.
الوكلاء ينصحون، والشفرة تقرّر.
كل واحد من تلك القرارات يترك إيصالًا. كل قطعة تكتب سجل نسب JSONL: معرّف القطعة، المحطة، معرّف النموذج metalnut-defect-knn الإصدار v7، تجزئة مجموعة البيانات ae95b5b533c8، ثقة العيب، درجة خارج التوزيع، الإشارات الفيزيائية، أي قواعد بوابة أُطلقت، الكمون مقابل ميزانية 750 مللي ثانية، سطور التنفيذ وMES، ما كان سيفعله خط الأساس الساذج، ووسم المخاطر high-risk:quality-gate (EU AI Act Annex III، نافذ 2026-08-02). نقرة واحدة تصدّر الوردية كـ inspection_audit.jsonl.

الساعة التنظيمية تهم هنا. التزامات المخاطر العالية في EU AI Act تصبح قابلة للتطبيق بالكامل في 2 أغسطس 2026، وقرارات الجودة الحرجة للسلامة تقع في Annex III، والغرامة القصوى تبلغ €35M أو 7% من رقم الأعمال العالمي لأشد انتهاكات الممارسات المحظورة. أريد أن أكون حذرًا بألفاظي، لأن هنا بالضبط تهم الألفاظ الحذرة: العرض ليس معتمدًا وفق EU AI Act، ولا يمكن لأي عرض أن يكون. ما يُظهره هو نسب جاهزة لـ EU AI Act، سجل لكل قرار مصمَّم ليكون دليلًا قابلًا للإيداع في ملف مطابقة عالي المخاطر، يُولَّد بسرعة الخط بدل أن يُعاد بناؤه بعد حادث.
ما الذي يصمد أمام ترقية النموذج التالية؟
السؤال الذي ظلّيت أسأله نفسي أثناء البناء كان قاسيًا على صانع عروض: إن كان نموذج عيوب العميل التالي أفضل بكثير من بديلي، هل يظل أي من هذا مهمًا؟ أعتقد الآن أن ذلك معكوس تمامًا. تتوقع Deloitte ارتفاع تبنّي الذكاء الاصطناعي الوكيلي (agentic AI) في التصنيع من 6% إلى 24% في 2026 (Deloitte)، ما يعني مزيدًا من النماذج ومزيدًا من الاستقلالية تصل إلى مزيد من المُشغِّلات. كل واحد من تلك النماذج سيكون له ظرف مُتحقَّق منه، وفيزياء خط المكبس (الوهج، القوالب الباردة، التوازن الحراري) ستظل تُخرج المدخلات منه. نموذج مثالي لا يغيّر شيئًا من ذلك، لأن الفشل الذي تمنعه البوابة هو فشل مدخلات، والتزام التدقيق الذي يخدمه قانوني، لا نمذجة. بوابة الانجراف، وسلسلة النسب، والتنفيذ المحكوم تصمد عند أي دقة للنموذج. تلك هي الخاصية التي أقنعتني أن هذه الطبقة، لا نموذجًا آخر، هي ما يستحق البناء؛ الوردية المكتوبة على veriprajna.com/ar/demos/edge-ai-manufacturing-inspection هي محاولتي أن أدعك تراقبه وهو يكسب ذلك الادعاء قطعةً بقطعة.
وإن كنت تفضّل أن تراه على أن تقرأ وصفي، فها هو مقطع المؤسس من طرف إلى طرف.
لذا السؤال الذي أطرحه عن أي نموذج فحص على خطك، بما فيه نموذج بدقة 97%، ليس "ما مدى دقته؟" بل: للقطعة التي عبرت الكاميرا للتو، هل تعرف ما إذا كانت تلك الصورة داخل الظرف الذي تحقّق النموذج عليه؟ إن لم تستطع الإجابة لكل قطعة، في مللي ثوانٍ، بسجل تستطيع تسليمه لمدقّق، فلا أظن أن لديك مشكلة دقة. أظن أن لديك مشكلة ظرف، وأودّ حقًا أن أعرف أيهما لدى خطك.


