TypeScript + Python: مهندس واحد، منظومتان، وعقد واحد

2026-09-10

يتكوّن عدد متزايد من المنتجات التي أعمل عليها من نصفين. الأول هو ما يتفاعل معه الناس: واجهة Next.js، وAPI على Node.js، والمصادقة والمدفوعات. والثاني هو عمل النماذج: الاستدلال والتضمينات والصوت ومعالجة البيانات. يتحدث النصف الأول TypeScript والثاني Python. إتقان كليهما لا يعني جمع اللغات، بل تحمّل مسؤولية نقطة التقاء المنظومتين؛ ففيها تحديدًا تتعطل منتجات ذكاء اصطناعي كثيرة.

الخبر الجيد أن المنظومتين متشابهتان أكثر مما يظن الناس. يقابل Zodَ إطارُ Pydantic، وtsc أداتا mypy وpyright، وESLint وPrettier أداة Ruff، كما تقابل npm وpnpm أداتا uv وPoetry. ويقابل FastAPI كلًا من Express وNestJS، بل يولّد OpenAPI من النماذج محددة الأنواع تلقائيًا. أطبّق الانضباط نفسه على الجانبين: أنواع صارمة، ومنسّق شيفرة لا خلاف عليه، واعتماديات مثبتة، واختبارات ضمن CI.

العقد بين الجانبين أهم ملف في النظام. أعرّفه مرة واحدة وأولّد الباقي: تنتج نماذج Pydantic في FastAPI مخطط OpenAPI، ومنه يُولّد عميل TypeScript وأنواعه. أعد تسمية حقل في Python، فيفشل بناء Next.js قبل أن يرى المستخدم قيمة undefined. وفي العمل غير المتزامن يكون العقد حمولة مهمة لها مخطط عند الطرفين، لا كتلة JSON حرة يفسرها كل طرف بطريقته.

يبقى توزيع المسؤوليات صارمًا. يتولى TypeScript الهوية والصلاحيات والأموال وواجهة المستخدم. أما Python فيتولى النموذج لا غير: يستقبل مهمة، وينفذ العمل الثقيل — مثل توليد صوت عبر StyleTTS2 أو معالجة دفعة تضمينات أو تحليل مستند — ثم يعيد النتيجة. لا تتواصل خدمة Python مع المتصفح ولا تقرر من يحق له فعل ماذا. تمر الطلبات السريعة عبر HTTP والبطيئة عبر طابور، مع مهلات وإعادة محاولات وضمان عدم تكرار الأثر على الجانبين.

والاختلافات مهمة أيضًا، واحترامها جزء من العمل. تصلح دفاتر Python الأولية للنماذج التجريبية، لكنها ليست بيئة إنتاج؛ ينتقل الكود المكتمل إلى وحدة لها اختبارات. التزامن في Python ليس حلقة أحداث Node: مكان الاستدلال كثيف استهلاك المعالج هو عمليات workers أو خدمة GPU، لا معالج طلب غير متزامن. كما تختلف وحدات النشر — صورة Node خفيفة مقابل صورة Python تتضمن CUDA وأوزان النموذج — ولذلك يختلف التوسع والتخزين المؤقت والتكلفة.

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

امنح المنتج القادم شخصاً يبقى معه.

هل أنت مستعد للبدء؟ أرسل لي رسالة؛ أنا متاح للبدء الآن والبقاء. عقود طويلة الأمد، لا تسليم خلال أسبوعين. لنتحدث عن مشروعك ومتطلباته وأفضل طريقة للمضي قدماً.

اسأل عن الخبرة أو الخدمات