← العودة إلى الملاحظات

بناء روبوت مشورة على بل: فحص GHQ-28 ومطابقة تتعلم ذاتياً واثنتي عشرة حالة حوار

بناء روبوت مشورة على بل: فحص GHQ-28 ومطابقة تتعلم ذاتياً واثنتي عشرة حالة حوار

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

فبنيت العكس: روبوت ينفّذ مقابلة سريرية حقيقية في حوار، ويفحص الشخص، ثم يرتّب المستشارين المناسبين — بمحرك ترتيب داخل الروبوت نفسه، لا خلف واجهة مزوّد.

اختيار المنصّة، ولماذا متوافقة مع تيليغرام

يعمل الروبوت على بل، وهي خدمة مراسلة إيرانية، ومُنفَّذ بـ python-telegram-bot==22.8 موجَّه إلى https://tapi.bale.ai/bot. Это مقصود: توفّر بل واجهة HTTP متوافقة مع تيليغرام، فتعمل منظومة python-telegram-bot كاملةً — المعالِجات وConversationHandler والمرشّحات والمجدول — دون تغيير. المنتج روبوت بل؛ والمكتبة مكتبة تيليغرام.

هذا أهمّ مما يبدو. فـConversationHandler هو القطعة التي تجعل مقابلة متعدّدة الخطوات ممكنة، وهو مكوّن ناضج ومفهوم، لا شيء مبنيّ يدوياً. كما يعني ذلك أن الشيفرة قابلة للنقل: المعالِجات نفسها تعمل على واجهة تيليغرام بتغيير عنوان القاعدة والمفتاح.

اثنتا عشرة حالة، حوار واحد

المقابلة معالج حوار ConversationHandler باثنتي عشرة حالة: الاسم، الهاتف، الجنس، العمر، الموضوع، سوابق العلاج، تفاصيل السابقة، التوقّع، جنس المستشار المفضّل، الفرع، عرض GHQ-28، وسؤال GHQ-28 نفسه. لكل حالة معالِجها وتحقّقها الخاص.

التفصيل التصميمي الذي يستحق الذكر هو مسار الإلغاء. فكل من /cancel والرسالة المطابقة لـشروع مجدد يقطعان الحوار بهدوء، ويعيد معالج الاحتياط المستخدم إلى البداية بدل تركه في حالة نصف منتهية — وهو ما يجعل روبوتات المراسلة غير ودّية حين ينكسر شيء.

الفحص، معروض ومفسر على الخادم

مرحلة GHQ-28 هي الأداة نفسها التي تستخدمها أداة الويب: ٢٨ سؤالاً في أربعة مقاييس — جسدي، قلق، اجتماعي، اكتئاب — تُصحَّح على الخادم وتُفسَّر إلى نطاقات. وينطلق التحذير الرئيسي عند مجموع ٤٣ فأكثر أو مقياس اكتئاب ١٥ فأكثر، ويبدأ تحذير أهدأ من مجموع ٢٢.

وما لا يفعله الروبوت هو التشخيص. تُعرض النتيجة بوصفها إشارة فحص، والتوصية استشارية — والاختيار النهائي للمستخدم. وهذا التمييز في الشيفرة، لا في免责声明 فحسب.

محرّك المطابقة، وكيف يتعلّم

يعمل SpiralMatchEngine على مرحلتين. الأولى مرشّحات صارمة: الجنس والفرع وحدود العمر. والثانية تسجيل مرجّح على تناسب الموضوع والمفاهيم السريرية المستخرجة وعدد المواعيد المتاحة الحيّة. ويعيد قائمة مختصرة، ويأتي كل عنصر مع سطر «لماذا هذا المطابق» — تناسب الموضوع والفئة العمرية وموعد يمكن حجزه فعلاً.

واستخراج المفاهيم يربط النص الحر بأحد عشر مفهوماً سريرياً — القلق، الاكتئاب، وسواس الطهار، العلاقات والخلافات، الزوجية والزواج، الوالد والطفل، الطفل، المراهق والشاب، التطوير الذاتي، القانوني، والطبي النفسي — عبر قاموس مترادفات منقّح يشمل تنوعات فارسية وعربية. والمطابقة بالأسماء ضبابية، فليست كتابة الزائر لاسم المستشار مطلوبة بدقة — فالتشكيل وتنوعات الحروف العربية/الفارسية والألقاب كلها مُعالَجة. وتُستخرج حدود العمر من نص الموضوع الحرّ، فيستقر «لطفل عمره ٧ سنوات» و«مراهق» على الصفوف الصحيحة من القائمة.

وإنّ حلقة التعلّم هي ما يحوّل دالة ترتيب إلى منتج. فكل توصية، وكل تقييم من المشرف عبر /feedback، يُكتب في ai_knowledge.db كإشارة موجبة أو سالبة، وتعيد تلك الإشارات ضبط أوزان المطابقات القادمة. ويطبع /learning الأوزان الحالية، فيصبح التدريب قابلاً للفحص لا صندوقاً أسود.

التوفّر دون كشط الصفحة يدوياً

يعيد زاحف مجدول تحديث أعداد المواعيد المتاحة كل ساعتين بقراءة صفحة الفريق العامة، مع بديل عبر الوسيط ومنطق إعادة المحاولة وملف قفل يمنع تشغيلات متداخلة. وتدخل هذه الأعداد في الترتيب، فيفضّل المحرّك من يمكن للمستخدم حجزه. ويشغّل /crawl ذلك عند الطلب.

لوحة الإدارة داخل المحادثة

هذا هو الجزء الذي أحبّه أكثر، لأنه يلغي تطبيق ويب كاملاً من النشر. يدخل المشرف بـ/admin مع كلمة مرور فيحصل على قائمة: /stats للإحصاءات الحيّة، و/export لتصدير Excel من ورقتين للمستخدمين وسجل الطلبات، و/upload لاستبدال ملف المستشارين — الذي يعيد تحميل المحرّك بلا إعادة تشغيل —، و/broadcast لمراسلة كل المستخدمين مع خطوة تأكيد، و/crawl لتشغيل الزاحف فوراً، و/feedback و/learning لتدريب المحرّك وفحصه، و/myid للحصول على معرّف المستخدم في بل، و/logout لإنهاء الجلسة.

ولأن سطح الإدارة روبوت، فإن البصمة التشغيلية كلها عملية واحدة ومجموعة ملفات SQLite واحدة ومجموعة متغيّرات بيئة واحدة. ويُقيَّد الوصول عبر ADMIN_USER_IDS — قائمة بمعرّفات مستخدمي بل مفصولة بفواصل — مع ADMIN_PANEL_PASSWORD وBOT_TOKEN منفصلين. ولا يُخزَّن أي سرّ في الشيفرة؛ الثلاثة تُقرأ من البيئة.

التخزين، بصدق

ستة جداول في ثلاث قواعد SQLite: users وuser_requests وconsultants وupload_history في قاعدة المستخدمين، وappointments لتوفّر المواعيد، وconcept_feedback لأوزان التعلّم. وتُحمَّل قائمة المستشارين من جدول بيانات ثم تُحوَّل إلى JSON، ويمكن إعادة بنائها من Excel في أي وقت.

ما الذي سأبنيه تالياً

الخطوة التالية الصادقة هي التقييم أيضاً، وهنا كذلك. يمكن الجدال في المحرّك؛ ما يحتاجه مجموعة حالات موسومة من المقابلات مع الترتيب الذي كان مستشار جيد سيقدّمه، ليقيس تغيير الأوزان بدل افتراضه. وإضافة مفيدة أخرى مسار تذكير لمن أُجري لهم الفحص ثم سكتوا —بياناته متاحة أصلاً.

الوثائق التقنية الكاملة منشورة كويكي: البنية، ومحرّك المطابقة، وفحص GHQ، ولوحة الإدارة، والإعداد والنشر، والمساهمة، واستكشاف الأخطاء. والمصدر على GitHub برخصة MIT.

ذو صلة: المحرّك نفسه يصدر أيضاً كأداة ويب مدمجة بلوحة إدارة متعدّدة المستأجرين — وهذه المقالة موجودة في هذا الموقع أيضاً.

تواصل
الملاحظة التالية

بناء مترجم سطح مكتب لفحات PDF وEPUB: تقسيم المقاطع، وسياق متحرك، وبنية خاصة لكل كتاب

→