tei-mcp v0.3: ترميز TEI من غير أن يُمَسّ المصدر

حين كتبت عن tei-mcp أول مرة، كان المراد أن نكفّ مساعدي الذكاء الاصطناعي عن هلوسة ترميز TEI. وقد حلّ التأسيس على المخطط (schema grounding) شطرًا من المشكلة: فمع الوصول المباشر، عبر الأدوات، إلى مواصفة P5، لم يعد النموذج مضطرًّا إلى تخمين معنى عنصر أو السمات التي يقبلها، وصارت مخرجاته تجتاز التحقق.
على أن للهلوسة في ترميز TEI وجهين، والمخطط لا يمسك إلا بأحدهما. فالتحقق وفق المواصفة يخبركم بأن الترميز حسن التكوين، ولا يقول حرفًا عن النص الذي يغلّفه ذلك الترميز. وفي النص نفسه تكمن الهلوسات الأشد ضررًا. والتركيب المقفل بالمدى، وهو أبرز ما في الإصدار v0.3، مصمم خصيصًا لدرئها.
فهرس المحتويات
الهلوسة التي يعجز المخطط عن التقاطها
اطلبوا من نموذج أن يرمّز رسالة فرنسية من القرن السادس عشر، فسيعود إليكم في الغالب بوثيقة TEI لا غبار عليها في الظاهر: الترويسة معبّأة، ووسوم <persName> في مواضعها الصحيحة، و<dateline> حسن التكوين. مرّروها على validate_document فتجتاز الاختبار.
ثم قابلوا المتن بالمصدر.
فإذا mesme قد صارت même، وفاصلة قد انتقلت من موضعها، وluy قد حُدِّثت في صمت إلى lui، وجملة عسُرت قراءتها في المخطوطة قد «صُحِّحت» إلى شيء أنظف. لم يُطلب شيء من هذه التغييرات، ولم يُنبَّه إلى شيء منها؛ فالوثيقة صحيحة وفق المخطط، وخاطئة في صمت.
وفي سير العمل الأرشيفي — حيث يصير النص المرمَّز السجل الدائم الذي يعوّل عليه القراء اللاحقون وفهارس البحث والاستشهادات — هذا هو نمط الإخفاق الذي يُحسب له حساب. فالوسم المشوّه مزعج لا أكثر؛ أما الرسم المحدَّث الذي لا يفطن إليه أحد خمس سنين فتحريف.
التركيب المقفل بالمدى
يأتي الإصدار الجديد (v0.3) بآلية لمنع الهلوسة تستهدف نمط الإخفاق هذا بعينه. والغاية من التصميم أن تصير هلوسة نص المتن مستحيلة بحكم البناء، لا مستبعدة فحسب.
والفكرة بسيطة: النموذج لا يكتب نص المتن قط.
وإنما يجري العمل على النحو الآتي:
- يستدعي النموذج
get_source("letter_001")فيتلقى النص المصدري الخام سلسلةً نصية غير قابلة للتغيير. - يستدعي لكل وسم يريد تطبيقه
tag_span("letter_001", start, end, element_path, attrs)— فيسجّل عنصر TEI على مدى من المحارف فوق المصدر. - فإذا فرغ استدعى
compose("letter_001")، فيُدرج الخادم الوسوم المسجّلة في تضاعيف النص الخام الأصلي، ويصيّر الـTEI النهائي، ثم يتحقق بايتًا بايتًا من أن المحتوى النصي المسطّح للوثيقة المصيَّرة يساوي المصدر.
فإن تطابقت البايتات عادت الوثيقة؛ وإن لم تتطابق — إن اقتضت وسوم النموذج على نحو ما متنًا يخالف المصدر ولو بمحرف واحد — رفع compose() استثناءً بدل أن يعيد وثيقة فاسدة.
ليس في سير العمل هذا مسار واحد يُخرج فيه النموذج وثيقة TEI يخالف متنها المصدر. فالثابت (invariant) ميكانيكي لا سلوكي: لستم مطالبين بأن تثقوا في أن النموذج لن يهلوس، بل بأن تثقوا في فحص == بين سلسلتي بايتات.
ما هو، وما ليس هو
التركيب المقفل بالمدى مكمّل للتأسيس على المخطط، لا بديل منه. فأدوات التأسيس على المخطط (validate_document وlookup_element وvalid_children وسائر الأدوات الست عشرة الأصلية) تعين النموذج على إخراج TEI صحيح؛ أما التركيب المقفل بالمدى فيضمن أن نص المتن داخل ذلك الـTEI أمين للمصدر. وسير عمل الترميز الصالح للنشر لا بد أن يستوفي المحورين معًا، وقد صار كلاهما اليوم في عهدة خادم واحد.
ثم إنه ليس عصًا سحرية تحل كل شيء. فـcompose() لا يتحقق بعدُ من أن الوسوم المسجّلة جائزة وفق تخصيص ODD المحمَّل — وذلك عمل لاحق. والوسوم المسجّلة تقيم في ذاكرة العملية ولا تصمد بعد إعادة التشغيل. ولا بد أن تكون الملفات المصدرية مقروءة من حيث يعمل الخادم. وكل ذلك قابل للمعالجة، وليس فيه ما يقوّض الثابت الجوهري.
لماذا يهم الأمر خارج TEI أيضًا
هذا النمط قابل للتعميم. فكلما طُلب من نموذج أن يعلّق على نص أو يحوّله أو يغلّفه — وكانت سلامة النص الأصلي أهم من براعة النموذج في «تحسينه» — صلح الحل نفسه: لا تسألوا النموذج أن يعيد كتابة النص، بل سلوه تعليمات فوق النص، ودعوا مركّبًا حتميًّا يطبّقها في ظل ثابت المساواة.
وفي الطبعات الرقمية على وجه الخصوص، يغيّر هذا حدود ما يمكن أن يُعهد به إلى نموذج بضمير مرتاح. فيغدو الترميز بغتةً مهمة تُفوَّض من غير أن تضطروا إلى مقابلة كل مخرج بالمصدر بأيديكم: تسلك الآلة الطريق الممل، ويراجع المحقّق الترميز لا الرسم.
الحصول على التحديث
إن كان tei-mcp مثبتًا لديكم من قبل:
uvx tei-mcp@latest
أو تثبيتًا من جديد:
pip install tei-mcp
ولاستعمال التركيب المقفل بالمدى، وجّهوا الخادم إلى مجلد يضم ملفات النصوص المصدرية الخام:
export TEI_MCP_SPAN_SOURCE_ROOT=/path/to/sources
uvx tei-mcp
ويصير جذع اسم كل ملف معرّفًا لوثيقته (letter_001.txt → letter_001).
الشيفرة المصدرية والتوثيق الكامل وملاحظات التصميم الخاصة بالثابت: github.com/Pantagrueliste/tei-mcp
