مقالات معمّقة حول التكنولوجيا التي تشكّل المستقبل.

خلاصات بلا توصيات: التنسيق البشري بدلاً من الخوارزميات

كيف تبني خلاصة فيديو بلا توصيات خوارزمية، بالاعتماد على التنسيق البشري والاسترجاع البسيط، مع دروس من مشروع HackerTube.

رسم توضيحي يقارن جدارًا فوضويًا من الصور المصغرة الصاخبة برفّ هادئ ومنظم من مقاطع فيديو مختارة بعناية
الفرق بين خلاصة مُحسّنة لجذب انتباهك ورفّ يُنسّقه أشخاص ليس فرقاً خفياً.

الساعة الحادية عشرة ليلاً يوم جمعة. أنت متعب، تفتح YouTube، فتستقبلك الصفحة الرئيسية بجدار من الصور المصغرة الصارخة، ووجوه مصدومة، ونفس المواضيع الثلاثة التي قرر أنك تحبها في 2019. لا شيء فيها يهمك، لكنك تمرر الشاشة على أي حال، لأن التمرير هو ما صُممت له الواجهة. إن شعرت يوماً بذلك النوع المحدد من الإرهاق، فأنت تدرك سبب اهتمام الناس الآن بـالخلاصات الخالية من التوصيات، ولماذا لفت انتباه الكثيرين مؤخراً استنساخ YouTube بُني من توصيات تعليقات Hacker News، وأُنجز في نحو ساعتين بمساعدة وكيل ذكاء اصطناعي.

المشروع المقصود هو HackerTube: واجهة بأسلوب YouTube فوق نحو 6500 فيديو وردت كتوصيات في تعليقات Hacker News بين عام 2007 وحتى اليوم. لا حسابات، ولا تتبّع، ولا تلاعب بالتشغيل التلقائي. تُحفظ الحالة في التخزين المحلي للمتصفح. وقد أُنجز المشروع كله بجلسة توجيه لنموذج ذكاء اصطناعي في صباح سبت، من استخراج البيانات حتى النشر على خادم VPS. أريد أن أتحدث عن سبب نجاحه بهذا الشكل، لأن الدرس يتجاوز هذا المشروع الجانبي الممتع بكثير. ينجح لأنه لا يملك خوارزمية توصية بالمعنى التقليدي، وهذه الميزة تحديداً يمكنك أن تهندسها عمداً في منتجاتك.

لماذا تُحسّن خوارزميات التوصية الشيء الخطأ

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

هذا قانون Goodhart في ثوب مختلف. فبمجرد أن تصبح مدة المشاهدة هدفاً، تتوقف عن قياس أي شيء يتعلق بالجودة. والأسوأ أن حلقة التغذية الراجعة مغلقة: الخوارزمية تشكّل ما يُنقر عليه، والنقرات تصبح بيانات تدريب، ويزداد النموذج ثقة في صورة تضيق باستمرار عنك. وقد لاحظ عدة أشخاص يتفاعلون مع HackerTube شيئاً شعرت به أنا أيضاً: الخلاصة غير المخصصة من فيديوهات اختارها متخصصون في التقنية حققت نسبة إصابة أعلى من توصيات YouTube شديدة التخصيص. وهذا ليس مستغرباً. فالتخصيص يستنتج ذوقك من أضعف لحظاتك (ما نقرت عليه في 11 ليلاً وأنت متعب)، بينما التنسيق يستنتج الذوق من أقوى لحظات الناس (ما تكلّفوا عناء كتابة توصيته لزملائهم).

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

التنسيق البشري كمجموعة بيانات: التنقيب في تعليقات Hacker News

فمن أين تحصل خلاصة خالية من التوصيات على مخزونها؟ إجابة HackerTube ذكية لأنها تعيد استخدام إشارة موجودة وعالية الجودة: عقدان من تعليقات Hacker News. الخط مبسط في وصفه. تُنزَّل كل تعليقات HN العامة (متاحة عبر واجهة البرمجة الرسمية ومجموعات البيانات المجتمعية). تُصفّى التعليقات التي تحتوي على روابط YouTube، وهي نحو 40 ألف تعليق. ثم يُمرَّر كل تعليق عبر نموذج LLM أرخص للإجابة عن سؤال واحد: هل يوصي هذا الشخص فعلاً بهذا الفيديو، أم أنه رابط عابر أو محتوى مزعج أو استشهاد بالفيديو للسخرية منه؟ تُضيّق مرحلة التصفية هذه المجموعة إلى نحو 6500 فيديو موزعة على 150 مجموعة موضوعية.

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

التوصية المكتوبة في تعليق هي شخص يضع سمعته على المحك. أما النقرة فهي منعكس. والخلاصات المبنية على الأول تشعر بطريقة مختلفة لأنها فعلاً مختلفة.

هناك أيضاً بُعد زمني مهم. تمتد هذه التوصيات من 2007 حتى اليوم، ولذلك تهيمن على المجموعة مواد تحتفظ بقيمتها: المحاضرات، والمحاضرات التقنية العميقة، والمقابلات الطويلة، بدلاً من أي شيء يرفعه الخوارزم هذا الأسبوع. تفصيل أحبّه الناس كان تصنيف «Longs» للفيديوهات الطويلة. على YouTube، محاضرة مدتها 90 دقيقة مخاطرة تأخذها التوصية على جلستك. أما على HackerTube فهي ميزة، لأن أحدهم كتب بجانبها «غيّرت طريقة تفكيري في المترجمات».

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

الاسترجاع البسيط يتفوق على الترتيب الذكي

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

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

import math
import time
def score(video, session, now=None):
now = now or time.time()
s = 0.0
# Corpus quality signal: how many distinct humans vouched for it
s += math.log1p(video["recommenders"])
# Gentle recency so the feed isn't frozen in 2014
age_days = max((now - video["recommended_at"]) / 86400, 1)
s += 0.5 / math.log1p(age_days)
# Session-level taste: topics the user finished vs. skipped,
# stored in localStorage — never leaves the browser
for topic in video["topics"]:
s += 1.5 * session["finished"].get(topic, 0)
s -= 1.0 * session["skipped"].get(topic, 0)
# Already watched? Push it down hard, don't hide it
if video["id"] in session["seen"]:
s -= 5.0
return s
def for_you_feed(videos, session, limit=24):
return sorted(videos, key=lambda v: score(v, session), reverse=True)[:limit]

لاحظ ما هو غائب: لا ميزة لزمن التوقف، ولا سرعة تفاعل، ولا خوارزمية متعددة الأذرع تحاول اكتشاف نقطة انهيارك. إشارات التخصيص صريحة (الإكمال والتخطي، بحسب سلوك المستخدم نفسه في هذه الجلسة) ومحدودة (نقطة أو نقطتان لكل منها، وتطغى عليها بسهولة جودة المجموعة). الخوارزمية تستطيع أن توجّهك، لكنها لا تستطيع أن تحبسك. هذه اللا تماثل هي الفلسفة كلها في دالة تسجيل واحدة.

قرار الصورة المصغرة يستحق الذكر أيضاً، لأنه مثال نظيف على إزالة التحسين من الواجهة. يُجري منشئو YouTube اختبارات A/B على الصور المصغرة حتى الإنهاك، فتحولت الصورة نفسها إلى أداة في صراع عدائي. أما HackerTube فيتجاهل الصورة التي رفعها المنشئ ويستخدم الإطار عند منتصف الفيديو (50%). إنه تغيير بسطر واحد يلغي سباق النقر المضلل كله، فالمعاينة تُظهر لك ما الفيديو فعلاً، لا ما يعتقد صانعه أنه سيدفعك إلى النقر.

تصميم الخلاصات من دون حسابات أو تتبّع

نقل الحالة إلى العميل لا يغيّر وضعك في الخصوصية فقط، بل يغيّر هيكل تكلفتك ومساحة تعرضك القانوني. من دون حسابات مستخدمين لا يوجد نظام مصادقة، ولا استعادة كلمات مرور، ولا آلية طلب الوصول إلى البيانات وفق GDPR، ولا مسؤولية عن تسريب ملفات السلوك. يصبح الخادم الخلفي مجرد خادم ملفات ثابتة، وربما واجهة برمجية صغيرة واحدة. ويمكن أن يكون الموقع كله ناتج بناء ثابتاً. وعندما لا تستطيع بنيتك تراكم بيانات المستخدمين، تصبح معظم الأنماط المظلمة مستحيلة فعلياً وليس مجرد مخالفة لسياسة. أجد هذا النوع من الضمان أكثر موثوقية من أي سياسة خصوصية.

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

البيانات كواجهة: إطلاق مجموعة قابلة للتفريع

الجزء الذي أجده مبتكراً فعلاً في HackerTube ليس واجهة المستخدم، بل أن مجموعة البيانات كاملة خلف الموقع متاحة للتحميل كملف مضغوط يتضمن DATA.md مكتوباً خصيصاً لوكلاء الذكاء الاصطناعي. يوثّق الملف كيف تترابط الملفات، والمحاذير، وأمثلة للسجلات، وكيفية جلب بيانات وصفية محدثة. سير العمل المقصود: تسلّم الملف المضغوط لوكيل البرمجة وتقول له «ابنِ لي رسالة بريد أسبوعية بالمحاضرات في اهتماماتي» أو «ابنِ لي عميل طرفية لهذا». المنتج ليس الموقع. المنتج هو المجموعة المنسقة، والموقع مجرد عارض مرجعي لها.

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

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

رسم توضيحي لصندوق أرشيف واحد يتفرع إلى أجهزة وصيغ كثيرة مختلفة
انشر المجموعة مرة واحدة، ودع مئة واجهة تزدهر.

القيود الصادقة للخلاصات المنسقة

وعدتك بالواقعية بدلاً من الضجيج، لذا إليك الحواف الحادة. أولاً: المجموعة المنسقة ترث تحيزات منسقيها. Hacker News جمهور محدد بذوق محدد، والنتيجة هي «محتوى تقني خالص 100%»، وهذا ممتع إن كنت الجمهور المستهدف وغير مرئي إن لم تكن. هذا النهج لا يتوسع إلى «الجميع»، ولا يحاول ذلك. إنه حانة، لا أداة خدمية.

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

هذه النقطة الأخيرة هي التي تبقيني صادقاً في هذا النهج كله. خلاصات التفاعل والخلاصات المنسقة ليست أعداء، بل محسّنة لأفق زمني مختلف. التنسيق يخبرك بما ثبتت قيمته. أما ترتيب التفاعل، في أفضل حالاته، فيُظهر ما قد يصبح قيّماً. النسخة الصحية من نظام توصية YouTube ستشبه كثيراً مجموعة HackerTube مع مسار صغير وواضح الوسم باسم «جديد وغير مثبت». المأساة ليست أن خوارزميات التوصية موجودة، بل أن نموذج العمل يفرض أن تكون الواجهة كلها.

متى يجب أن تبني ذلك بنفسك

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

إذن هذا رأيي، وألتزم به: إن كنت تدير أي منتج فيه خلاصة، سواء كانت قاعدة معرفة داخلية أو منتدى مجتمعي أو منتج محتوى، فينبغي أن تجرب النسخة المنسقة قبل بناء النسخة الخوارزمية. ابدأ بتوصيات بشرية صريحة، وصفِّها بمرحلة LLM رخيصة، ورتّبها بدالة تسجيل بسيطة بما يكفي لشرحها في اجتماع سريع، وأبقِ الحالة على العميل ما استطعت. ستعرف إن كانت مشكلتك في المخزون أم في الترتيب، وفي تجربتي تكون دائماً تقريباً مشكلة مخزون. الخلاصة المُحسّنة للتفاعل أداة لتعظيم مقياس. أما الخلاصة المنسقة فأداة لاحترام إنسان. ابنِ الثانية أولاً، ولا تلجأ إلى الأولى إلا حين تستطيع أن تحدد بدقة لماذا تستحق وجودها، ولمن.