من N نشرة بريدية إلى ملخّص واحد، مبنيّ لمهندسي الذكاء الاصطناعي
TL;DR
بنيتُ خطّ معالجة (pipeline) خاصاً يقرأ أخبار الذكاء الاصطناعي بدلاً عني. يقرأ مجموعة منتقاة من النشرات البريدية، ويجلب المقال الحقيقي خلف كل رابط. ويُلخّص كلّ واحد منها. ثم يستنتج أيّ الأخبار هي في الحقيقة الخبر نفسه بعنوان مختلف، ويرمي التسويق والضجيج، ويسلّمني العشرين أو الثلاثين خبراً التي كانت مهمّة فعلاً في ذلك اليوم. المُخرَج صار متاحاً للجميع الآن: downstream.news. مجاني، بلا حساب، مع RSS وبريد وJSON. مبنيّ لمن يبنون فعلياً بنماذج الذكاء الاصطناعي والوكلاء (agents).
بنيتُ هذا لنفسي
ثماني نشرات بريدية في صندوق الوارد، أتصفّحها كل مساء. تلك كانت الـ N الخاصة بي. كنت أُهدر وقتاً طويلاً في قراءة الخبر نفسه مرات عدة، وفي تجاوز مواد قليلة القيمة. لم تكن هناك لحظة إلهام، ولا قصة خلفية مثيرة (رغم أن الذكاء الاصطناعي الذي حرّر هذا النص حاول أن يجرّني إلى ذلك الاتجاه بالضبط). كانت لديّ مهمة قراءة متكررة، وأنا أعرف البرمجة، وهذه المهمة تصادف أنها حالة استخدام تناسب ما تجيده نماذج اللغة، شرط أن تبني حولها ما يكفي من السقالات لتجعل المُخرَج جديراً بالثقة.
وقد لزم من السقالات أكثر بكثير مما قد تتصوّر. ظننتُ أنها ستكون مهمة سهلة، لكنها امتدّت بضعة أشهر... تباً، ربما خمسة، الآن وأنا أفكر في الأمر. شهران منها رميتُهما، حين اتّكأتُ أكثر من اللازم على "الإحساس" وبنيتُ وحشاً يحوي كل ميزة قد تخطر ببالك. معظم تلك الميزات سقطت عند خط النهاية. اضطررت بعدها أن أبدأ من جديد. أشعر بإحراج حقيقي لأنني وقعتُ في هذا الفخ.
والآن بعد أن صار يعمل فعلاً ويؤدي غرضاً، افترضتُ أن آخرين يؤدّون رقصة النشرات الثماني نفسها التي كنتُ أؤدّيها، فجعلتُ المُخرَج متاحاً للجميع.
ما الذي يفعله فعلاً
أربعة أشياء يُتقنها. هذا ليس قارئ تغذيات (feed reader).
يُلخّص
كل خبر يحصل على إعادة صياغة من جملة أو جملتين، يكتبها نموذج ذهب وقرأ المقال الأصلي فعلاً. لا المقتطف الذي كتبته النشرة عنه. نحو 81% ممّا يحلّله خطّ المعالجة يأتي من وجهة الرابط لا من نصّ الرابط نفسه. النشرة البريدية وسيلة توصيل؛ أما القراءة فتحدث فيما تشير إليه.
الملخّص موجود لتقرّر أنت إن كان يستحق النقر، وكل عنصر يرتبط بالمصدر الأصلي. Downstream مُوجِّه. كل ما يستحق القراءة ما زال يعيش على موقع شخص آخر. ثم إنني أريد التعريف بهذه المصادر؛ فهي ممتازة وأنا ممتنّ لها.
يزيل التكرار عبر المصادر
كان هذا أصعب جزء بفارق يُحرجني. "الخبر نفسه في خمس نشرات" ليس مسألة مقارنة نصوص. إنه مشكلة توحيد صيغة الروابط (URL canonicalization) جالسة فوق مشكلة إزالة معاملات التتبّع، لأن كل منصّة نشرات تغلّف روابطها الخارجة بطريقة مختلفة. مقارنة النصوص لا توصلك إلى شيء. حتى HubSpot لا يستخدم إعادة توجيه HTTP؛ بل يُعيد صفحة JavaScript يخفي فيها الرابط الحقيقي داخل إسناد متغيّر، وعليك أن تستخرجه من متن الصفحة. المطابقة تجري على ثلاث طبقات: رابط مطابق تماماً بعد التوحيد، ثم مطابقة تقريبية للعنوان، ثم تشابه المتجهات (embeddings) مقابل مخزن متجهات، ضمن نافذة متحركة مدتها سبعة أيام.
المكسب الظاهر هو الشارة على كل عنصر التي تُبيّن كم مصدراً مستقلاً تناول الموضوع. هذا الرقم إشارة حقيقية حين تمرّ بعينك على قائمة. وهو يرتّب أيضاً: حين يتساوى عنصران في الدرجة، يفوز الأوسع تغطية.
وهناك طبقة ثانية لإزالة التكرار تتخطّاها معظم المُجمِّعات. أي موضوع ظهر خلال الأيام السبعة الماضية يُكبَح، حتى لا يظهر خبرٌ طويل النَفَس في ملخّصك خمس أمسيات متتالية.
يرمي الضجيج
كل عنصر يُقيَّم على محورين مقابل ملفّ تعريف صريح: الأهمية لمهندس ذكاء اصطناعي ممارِس، والإلحاح، أي هل هناك موعد نهائي لإيقاف دعم شيء ما أو ثغرة أمنية نشطة تحمل اسمك. معايير التقييم مُثبّتة بأمثلة مشروحة لما تبدو عليه الدرجة 8 مقابل الدرجة 2، لأن نموذجاً بلا مرجعية يركن كل شيء عند 6.5 ولا يقول لك شيئاً.
يحمل الملفّ أيضاً إشارات صريحة لما يجب خفض ترتيبه. إعلانات التمويل التي لا زاوية منتج فيها تُقيَّم بدرجة منخفضة عن قصد. وكذلك إعلانات الوظائف، وزوائد التنقّل في الصفحات، والترويج للمؤتمرات، وإعلانات الاشتراك التي تُقحمها النشرات بين محتواها.
ما يتبقّى هو اليوم
يخرج من المصادر نحو 250 عنصراً مرشّحاً في اليوم. ما يُنشر منها عشرون إلى ثلاثون.
في 24 يوليو حوّل خطّ المعالجة 244 عنصراً إلى ملخّص من 30 مدخلاً. وفي 23 يوليو نشر سبعة فقط، لأن 23 يوليو كان يوماً هادئاً. لا توجد حصّة ثابتة تحشو يوماً خفيفاً، لكن يوجد سقف ليوم مزدحم، يتوقف عند 30 عنصراً.
موجَّه لمهندسي الذكاء الاصطناعي تحديداً
ملفّ التقييم هو حرفياً ملفّ اسمه ai-engineering. هذه ليست تغذية تقنية عامة رُكّب عليها قسم للذكاء الاصطناعي.
هكذا يظهر ذلك عملياً:
- وسوم الموضوع على كل عنصر: Models، Agents، On-device، Coding، Research، Robotics، Policy.
- وسوم مستوى القارئ التي تُخبرك بنوع القراءة قبل أن تلتزم بها: Internals، Depth، Product، Any.
- قائمة مصادر منشورة على /sources/، لتحكم أنت على المُدخلات بدل أن تثق بالمُخرجات.
- كل شيء قابل للقراءة آلياً: RSS، وJSON Feed، وMarkdown لكل ملخّص، وملفّ
llms.txt، ونقطة وصول /for-agents/. فإن أراد وكيلك الخاص قراءة الملخّص، فلن يضطر إلى كشط صفحة ويب لفعل ذلك.
ما كنتُ لأودّ معرفته لو كنتُ مكانك
عدّاد التعاضد يعني "N مصادر تناولت هذا الموضوع"، لا "N مصادر نشرت هذا الخبر بعينه". عايرتُ المطابقة الدلالية مقابل 220 زوجاً موسوماً يدوياً، والتدرّج بين هاتين الفكرتين ضعيف فعلاً: زوج حكمتُ بأنه "يجب ألا يُدمج" سجّل 0.796، وزوج كان يجب دمجه سجّل 0.761. لا توجد عتبة تعيش في هذا النطاق. أي شيء يقع في المنطقة الرمادية يُصعَّد الآن إلى نموذج ثانٍ يُجيب عن سؤال "هل هو الخبر نفسه؟" زوجاً بزوج.
نحو خُمس عمليات جلب الروابط تفشل في أي يوم، بفضل جدران الدفع، وحجب الروبوتات، والصفحات التي لا تعمل إلا بـ JavaScript. تلك العناصر تظهر رغم ذلك، موسومة بأنها منقوصة، مع نصّ الرابط كدليل على العنوان.
المُدخل عدائيّ بحكم التصميم، لأن المهاجم يتحكّم في متن أي بريد إلكتروني يبتلعه خطّ المعالجة بالكامل. أمام النموذج خمس طبقات للدفاع ضد حقن التعليمات (prompt injection)، وكل استجابة من النموذج تُتحقَّق مقابل مخطّط، والاستجابة التي لا تطابق العقد لا يُعاد تشكيلها بصمت لتطابقه.
وهو ينشر دون إشراف، وهذا لا ينجح إلا لأن خطّ المعالجة يُقيّم مُخرَجه بنفسه. مُنتَج كل يوم يحمل كتلة حالة صحّية. الموقع ينشر عند اللون الأخضر ويتوقف عند أي حالة أسوأ، عارضاً بدلاً من ذلك إشعار تأخير. ألّا أنشر شيئاً أفضل من أن أنشر شيئاً لا أستطيع أن أضمنه.
اذهب وألقِ نظرة
downstream.news يُحدَّث كل مساء حوالي الساعة 19:15 بتوقيت وسط أوروبا. هناك أرشيف على الويب، وتغذية RSS، وبريد يومي إن أردته أن يصلك. بلا حساب، بلا جدار دفع، ولا نيّة لإضافة أيٍّ منهما.
إن كنت تؤدّي حالياً رقصة النشرات الثماني، فجرّبه أسبوعاً بالتوازي مع قراءتك المعتادة وانظر ماذا يفوته.