Pyison
Pyison هي مصيدة (tarpit) لزواحف الويب الخاصة بالذكاء الاصطناعي
مقدمة
- مثل جميع زواحف الويب، تطلب روبوتات الذكاء الاصطناعي صفحات من خوادم الويب، ثم تتبع الروابط الموجودة في الصفحة إلى صفحات أخرى. وبهذه الطريقة، يمكنها بناء فهرس لموقع ويب بأكمله.
- ولكن على عكس زواحف الويب الأخرى، تطرح روبوتات الذكاء الاصطناعي بعض المشكلات الفريدة
- يمكن لمسؤولي الخوادم تكوين ملف robots.txt، الذي يخبر زواحف الويب بالصفحات التي يجب أن تزحف إليها والتي لا يجب أن تزحف إليها.
- تم اكتشاف أن بعض زواحف الذكاء الاصطناعي تتجاهل هذا الملف. هناك مخاوف تتعلق بالخصوصية وحقوق النشر بشأن السماح لهذه الروبوتات باستخدام بيانات موقع ويب لتدريب نماذج LLM، خاصة عندما يكون المستخدم قد اختار صراحةً عدم السماح بالزحف.
- تتجاهل بعض الزواحف أيضًا تحديد المعدل (ratelimiting). فعندما تطلب الصفحات بأسرع ما يمكن، يمكنها أن تضع حملاً كبيرًا على خادم الويب.
- وهنا يأتي دور Pyison. مثل مصائد زواحف الذكاء الاصطناعي الأخرى (Nepenthes، Iocane)، تقدم Pyison لزواحف الويب قائمة لا نهائية من الروابط لصفحات أخرى على موقعها. وهذا يحبس الزواحف في موقع واحد، حيث ستتنقل بلا نهاية في بحر متزايد من الروابط.
- إن إبقاء زواحف الذكاء الاصطناعي عالقة في مكان واحد يمنعها من فهرسة أجزاء أخرى من الموقع قد لا يرغب المالك في تغذيتها لنماذج LLM.
- في الوقت نفسه، يمكن أن تحتوي هذه الصفحات على الكثير من النصوص عديمة الفائدة. عندما تدمج نماذج LLM هذا النص في نماذجها، يمكن أن يتم "تسميمها" تدريجيًا حيث أن المدخلات العشوائية ستجعل استجاباتها أقل ترابطًا.
الدوافع
- إنشاء برمجيات مفيدة لمواجهة تزايد سرقة المحتوى بواسطة نماذج LLM
- حل المشكلات في مصائد الذكاء الاصطناعي الموجودة:
- توليد نص عشوائي دون استخدام سلسلة ماركوف أو نماذج LLM أو أي عينات كتابة موجودة
- عدم التمييز بين روبوتات الذكاء الاصطناعي بناءً على ترويسة User-Agent، نظرًا لأن الزواحف غالبًا ما تتنكر في هيئة مستخدمين عاديين
- تصميم موقع واقعي يشبه المدونات لمنع اكتشافه
- إنشاء إطار عمل قابل للتخصيص بدرجة كبيرة للسماح بمزيد من الإعدادات
- تقديم حل يمكن دمجه بسهولة في موقع ويب موجود
- يدعم الوكلاء العكسيين/خوادم الويب المحددة دون أن يتطلبها، ويوفر إعداد مسار فرعي مع إعداد جذر المستندات
- العمل ببصمة صغيرة بدلاً من نظام CMS كامل أو خادم ويب غني بالميزات
المواصفات التقنية
- يشغل هذا المشروع خادم ويب ديناميكيًا باستخدام مكتبة HTTPServer الخاصة ببايثون
- يتم إنتاج الجمل من مزيج 50/50 بين كلمات إنجليزية عشوائية و"كلمات التوقف"
- تستخدم Pyison ملحًا عامًا بالإضافة إلى عنوان URL للصفحة لتهيئة مولّد الأرقام العشوائي (RNG) الخاص بها. وهذا يضمن أنه إذا قامت الزواحف بإجراء "فحص سلامة" عن طريق إعادة تحميل صفحة، فستكون مماثلة لآخر مرة فحصتها فيها. وفي الوقت نفسه، يجب أن تستخدم الخوادم المختلفة بذورًا عامة مختلفة بحيث لا تبدو جميع المواقع التي تستخدم Pyison متشابهة.
- من الممكن توليد عدد غير محدود من الصفحات، لأن Pyison لا تنشئ في الواقع أي ملفات دائمة. إنه خادم ويب ديناميكي، لذا فهو يولد html فقط ويرسله إلى العميل.
- استخدام وسوم محتوى HTML وتنسيق CSS والصور يجب أن يجعل الموقع يبدو أكثر واقعية قليلاً بالنسبة للزاحف.
- من الممكن تكوين مخرجات Pyison دون إعادة كتابة البرنامج، عن طريق تغيير ملفات الإعدادات والثابتة والقالب
- تستجيب Pyison لطلبات POST و PUT الخاطئة برمز 404 في حال اختبرت الزواحف ما إذا كانت أفعال HTTP هذه مُهيأة
البدء
-
استنسخ هذا المشروع إلى مجلد محلي
-
غيّر الإعدادات في ملف config/config.json
- اضبط
random-seed على رقم عشوائي!
- اضبط رقم
port الذي سيستخدمه الخادم
- راجع قسم الإعدادات لمزيد من المعلومات
-
(اختياري لكن موصى به) حدّث قالب HTML وCSS والصور وrobots.txt بالطريقة التي تريدها
- يكون هذا المشروع أكثر فعالية إذا بدت الصفحات مختلفة، ويمكن تحقيق ذلك بتنويع بنية HTML وCSS. أعد ترتيب بعض الأشياء وأعد تسميتها، أو أعد كتابتها بالكامل.
-
(اختياري) حرّر ملف robots.txt إذا أردت تغيير الروبوتات المتأثرة
-
جهّز بيئة الخادم بأي من الطرق أدناه
-
ضع الخادم خلف وكيل عكسي
التشغيل محليًا
- ثبّت nltk
- شغّل Pyison
- تحقق من أنه يعمل
- افتح
http://localhost:<your port number> في المتصفح
Docker
باستخدام docker compose
باستخدام docker run
docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
- (اختياري) أزل العلم
--rm للإبقاء على الحاوية
البناء من المصدر
- استنسخ المستودع محليًا
docker build -t pyison:latest .
- شغّل الحاوية باستخدام
docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest
الوكيل العكسي
يُنصح بشدة باستخدام وكيل عكسي لتقديم هذا المحتوى. يمكنه تقليل حمل الخادم عن طريق تخزين الصفحات مؤقتًا وإدخال حدود للمعدل، بالإضافة إلى تقديم المحتوى عبر https والحماية من بعض استغلالات خادم الويب الأساسية.
اعتبارات
- تستخدم هذه الأمثلة Nginx Proxy Manager، ولكن يجب أن يعمل أي برنامج وكيل عكسي
- تدعم Pyison إعدادات SSL الأكثر صرامة في NPM
- من المفترض أن يمرر NPM ترويسة http الخاصة بـ
User-Agent من NPM إلى خادم Pyison دون أي إعداد خاص. استخدم proxy_pass_header User-Agent; إذا لزم الأمر.
إعداد النطاق الفرعي المستقل
إعداد المسار الفرعي
-
لاستخدام Pyison في مسار فرعي، استخدم إعداد الموقع التالي
# Handles the root page ("example.com/tarpit")
location /tarpit {
proxy_pass http://localhost:80;
}
# Handles all sub-pages ("example.com/tarpit/a" and "example.com/tarpit/a/b")
location /tarpit/ {
proxy_pass http://localhost:80;
}