تخطَّ إلى المحتوى
kazma.
البحث في كاظمه والتوثيق
EN

البحث على الويب

تستطيع كاظمه البحث في الويب، وجلب الصفحات، وتصفّح الوثائق الطويلة نوافذ، وزحف موقع ضمن حدود، وهضم المستخلصات المحفوظة — كل ذلك من المحادثة العادية، أو /swarm، أو لوحة البحث (/research)، أو /research deep <topic>.

جولة المشغّل على أحدث حزمة بحث + وكيل + جلسات: الميزات الحديثة.

حزمة اكتساب الويب المشتركة

Section titled “حزمة اكتساب الويب المشتركة”

مدخلات/مخرجات البحث والكشط والزحف مركزية تحت kazma_core.web_acquire:

APIالدور
search()‏SERP متعدد الخلفيات (نفس أداة web_search)
fetch_text()HTTP واستخراج محليان، ثم Chromium محلي، ثم استرداد مستضاف مسموح
tools.web_research.crawl_site()زحف متعدد الصفحات محدود مع ملفات تعريف (research_brief، research_deep، kb_site، …)؛ لا يُصدّر باسم web_acquire.crawl()
rank_urls()ترتيب ارشادي (التوثيق/التعليم قبل التواصل الاجتماعي/السبام) للبحث العميق

يستخدم استيعاب مكتبة المعرفة والبحث كلاهما سلم الجلب هذا، فتُطبَّق إصلاحات الصفحات الصعبة مرة واحدة. تبقى مسارات المنتج منفصلة (KB → فهرس؛ بحث → هضم/تقرير). لا تستخدم واجهات LLM API هذه الحزمة أبدًا (إنها تستخدم http_pool).

يعيد fetch_text() نتيجة مصنّفة تتضمن رمز النجاح أو الخطأ والرابط المطلوب والنهائي المرصود والخلفية وحالة HTTP والمحاولات وعدد البايتات المقيس والاقتطاع والجودة. يبقى نص الصفحة الذي يبدأ بـ Error: محتوى صفحة. تعرض قراءات المحادثة وفهارس الزحف إيصالات الخلفيات، بما فيها محاولات الأطراف الخارجية الفاشلة. تميّز القراءات المحفوظة بين إعادة استخدام الصفحة وطلبات بيانات robots الوصفية الجديدة. تحتفظ الخدمات المستضافة التي لا توفر حالة أصل أو رابطًا نهائيًا أو أدلة محاسبية موثوقة بالقيم المجهولة؛ الرصيد غير المتاح لا يعني صفرًا.

تأتي روابط الزحف ونصوصه من وثيقة HTTP واحدة أو لقطة Chromium واحدة. يظهر المحتوى المقتطع كجزئي، ولا يُخزّن مؤقتًا أو يُفهرس في مكتبة المعرفة. ترفضه عمليات حفظ مصادر البحث الآلية؛ ويمكن لـ read_url_to_file حفظ مستخلص موسوم صراحة بأنه جزئي. يُرفض JSON الناقص. تفشل نماذج كلمة المرور المرصودة مع عناوين صفحات دخول صريحة بـ login_required؛ ولا يكشف ذلك جميع شاشات SSO أو حواجز الدفع.

حدود المصدر وفترات الانتظار

Section titled “حدود المصدر وفترات الانتظار”

يشترك جلب HTTPX وطلبات Chromium عبر الوسيط والقراء المستضافون في حدود المصدر بين مهام الخادم: حجزان حيان للمصدر و32 منتظرًا لكل مصدر و512 مصدرًا محفوظًا وحد قبول وتباعد 30 ثانية. تستخدم طلبات الزحف والمعرفة وبياناتها الوصفية حدًا أدنى 300ms بين البدايات؛ ويُطبق تأخير الزحف المطلوب الأكبر أيضًا. يحجز القراء المستضافون مصدر الصفحة والخدمة معًا دون احتساب مصدر مطابق مرتين.

يقبل Retry-After الثواني العشرية وتواريخ HTTP. تُسجّل فترة الانتظار عند وصول الترويسات، وتستمر بعد فشل الجسم أو الإلغاء، ولا يزيلها نجاح طلب أقدم جارٍ. يطبق تأخير إعادة التوجيه على الوجهة أيضًا. يعيد الطلب المعلّق خلال الانتظار origin_throttled مع إرشاد للمحاولة؛ ولا يتجاوزه تغيير العميل أو الوكيل أو القارئ المستضاف. غياب Retry-After أو فساده مع HTTP 429/503 يستخدم تراجعًا أُسّيًا محدودًا.

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

يفرض الزحف الآلي واكتشاف مكتبة المعرفة واستيعابها وحفظ البحث robots.txt لـ KazmaBot افتراضيًا. تسبق الفحوص إعادة استخدام ذاكرة الصفحات وكل إعادة توجيه للمحتوى أو مورد متصفح عبر الوسيط. تعرّف طلبات HTTP نفسها باسم KazmaBot. تسمح القواعد الغائبة بـ 404/410 بالزحف؛ ويمنعه رفض الوصول أو فشل الطلب أو فساد السياسة أو اقتطاعها بصورة ظاهرة. تعيد الصفحات المحظورة robots_disallowed؛ والفحوص الفاشلة robots_unavailable.

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

يعطّل KAZMA_CRAWL_RESPECT_ROBOTS=0 أو respect_robots=False الصريح الفحص؛ وتعرض الإيصالات robots disabled by operator. يتجمّد الإعداد لكل مهمة. تتضمن إيصالات البيانات الوصفية حالة السياسة ووقت الفحص وإعادة استخدام الذاكرة واستخدام الوكيل ورصيده المجهولين. تستمر القواعد والملاحظات غير المتاحة عبر إعادة التشغيل. تبقى الفحوص المنقطعة غير متاحة حتى موعد محاولتها؛ وتأهيل المطابقة الكاملة لـ RFC منفصل. تحتفظ قراءة الصفحة الواحدة اليدوية في المحادثة بسلوكها الحالي.

يفشل الوكيل المختار عند غياب الاعتماد أو تعذر الإعدادات والأسرار أو مجهولية المزوّد أو فساد URI بـ proxy_routing_error. صحح الإعدادات → مزوّد الوكيل، أو اختر none عمدًا للمسار المباشر. لا يغيّر الفشل المسار صامتًا. يستخدم كل حل لقطة حساب حية واحدة؛ وتطبق التغييرات على الحل التالي.

يحترم اختبار الإعدادات سياسة الجلب، ويفحص المسار المحلول مرة واحدة، ويحد التنفيذ بـ 15 ثانية والاستجابة المفكوكة بـ 128 بايت. تمنع السياسة المحلية فقط فحص الوكيل البعيد. يُتخطّى تشعّب DuckDuckGo SDK المعتم بصورة ظاهرة. تعمل خلفيات SearXNG وBing وWikipedia ذات HTTP الثابت في عمليات فرعية مملوكة محدودة، بمهلة خلفية مشتركة 90 ثانية و30 ثانية لكل عملية كحد أقصى. ينتظر الإلغاء تنظيف العمليات قبل العودة. لا تقيس هذه الفحوص رصيد الوكيل؛ ويبقى الاستخدام والرصيد غير المتاحين مجهولين.

جودة خط الأنابيب العميق (R0 / R1 / R2)

Section titled “جودة خط الأنابيب العميق (R0 / R1 / R2)”

run_research_pipeline / /research deep:

  1. خطة تكيفية (research_planner) — أسئلة واستعلامات فرعية عبر LLM (plan.json)؛ قالب احتياطي
  2. بحث متعدد الاستعلامات عبر web_acquire
  3. ترتيب الروابط (rank_urls) قبل الجلب
  4. جلب الصفحة كاملة → بيانات sources.json الوصفية: الخلفية والمحاولات والإخفاقات المصنّفة والمنشأ والحدود والاستخدام والرصيد المجهولان
  5. إغلاق عند الفشل في الوضع العميق إذا قلّت المصادر عن الحد الأدنى (تجاوز: KAZMA_RESEARCH_ALLOW_THIN=1)
  6. هضم وادعاءات أدلة استدلالية (claims.json / claims.md)
  7. توليف LLM مع الاستشهاد بالمواد فقط
  8. ناقد الفجوات — بحث وجلب لاحقان وإعادة توليف (gap_loop_0.json؛ إيقاف: KAZMA_RESEARCH_GAP_LOOP=0)
  9. معيار هيكلي (rubric.json)
متغير البيئةالافتراضيالدور
KAZMA_RESEARCH_LLM_PLANNERمفعّلخطة بحث تكيفية
KAZMA_RESEARCH_GAP_LOOPمفعّل للعميقجولة تحقق
KAZMA_RESEARCH_LLM_CRITICمفعّلنقد فجوات عبر LLM
KAZMA_RESEARCH_ALLOW_THINمعطّلالسماح بالعميق دون الحد الأدنى من المصادر

المواضيع الذهبية / التقييم: kazma_core.tools.research_eval.

يعرض GET /api/research/ready إعداد SearXNG وحزمة DDG والوكيل وخلفيات الصفحات الصعبة وسياسة الجلب وتوافر محاسبة الاستخدام والرصيد. تعاد القيم المجهولة كغير متاحة، لا كصفر. يجري الخط العميق الفحص نفسه عند البدء ويفشل سريعًا عند غياب مسار بحث. البحث الحي المصغّر اختياري عبر ?live=1 أو استدعاء صريح research_readiness(probe_search=True). تحترم القراءات المحفوظة دائمًا probe_search=False؛ ويُتجاهل التجاوز القديم KAZMA_RESEARCH_PREFLIGHT_LIVE. لا تتضمن الجاهزية اعتماد SearXNG.

استخدم kazma acquisition status [--job ID] [--json] [--language en|ar] أو لوحة الحالة المحفوظة اليدوية في إعدادات TUI للفحص المحلي. تعرض هذه الأسطح الإخفاقات المحفوظة والآثار غير المؤكدة والرموز المبلّغ عنها، بما فيها الصفر، وحجوزات الطلبات وحداثة الرصيد. لا تتصل بالمزوّدين ولا تحدّث الرصيد. تشترك مكونات التثبيت في أدلة المهمة والمحاسبة؛ وتخص السعة الحية عملية Python التي تفحصها.

جلسات البحث + تجربة اللوحة (R3)

Section titled “جلسات البحث + تجربة اللوحة (R3)”

يمكن بدء التشغيلات العميقة من صفحة البحث (/research) دون دردشة:

  1. نموذج البدء — الموضوع، العمق (deep / brief)، الحد الأقصى للمصادر
  2. ينشئ POST /api/research/sessions صفًا دائمًا في kazma-data/research_sessions.db ويشغّل run_research_pipeline في مهمة خلفية
  3. يبث SSE‏ GET /api/research/sessions/{id}/stream تقدم المرحلة/الرسائل بينما هذه العملية حية
  4. لا تزال التقارير المكتملة تُسجَّل أوراقًا لخط الأنابيب تحت research/reports/ وتظهر في قائمة النتائج

تنجو الجلسات من إعادة التشغيل لأجل القائمة/التفاصيل؛ بث SSE الحي داخل العملية فقط (إعادة الاتصال بعد إعادة التشغيل تعود إلى استطلاع حالة الجلسة).

الآليةالدور
تلميح توجيه ناعمعند رسائل المستخدم ذات القصد العميق، يتلقى المشرف تلميح نظام لتفضيل run_research_pipeline مرة واحدة (KAZMA_RESEARCH_ROUTE=soft، الافتراضي؛ اضبط 0 للتعطيل)
نحوة تفضيل خط الأنابيبإذا بدأ النموذج web_search / read_url يدويًا في طلب عميق، نحوة واحدة توجهه إلى أداة خط الأنابيب
نحوة عمق المصادرتنطلق أيضًا عند البحث فقط دون اكتسابات كافية (تُتخطى إذا استُدعي خط الأنابيب بالفعل)
معيار هيكلييكتب خط الأنابيب rubric.json؛ الجلسات تخزن rubric_score / rubric_ok؛ بطاقات القائمة تعرض الدرجة
واجهة التقييم‏GET /api/research/eval?path=research/reports/…/report.md أو ?session_id=rs_…. ومثل كل مسار بحث يقرأ تقريرًا يسمّيه الطلب، لا تقرأ إلا ملفًا داخل مجلد research/reports
بوابة /research deepتستخدم جلسات دائمة + رسائل تقدم المرحلة (ليست تعليقًا صامتًا لعدة دقائق)

العلامة العربية: اسم المنتج هو Kazma / كاظمه (أو كاظمة). وليس كازما أبدًا.

ما تريدهماذا تفعل
بحث سريع بمصادرفي الدردشة: «ابحث عن X، استخدم الويب، واقتبس الروابط»
بحث عميق متعدد الصفحاتفي الدردشة: «ازحف https://docs… واهضم الصفحات»
بحث متوازٍ متعدد العمال‏/swarm research … أو «استخدم السرب للبحث عن X»
ورقة عميقة متعددة المصادرلوحة البحث ← ابدأ، أو دردشة «بحث عميق عن X»، أو /research deep X
فرض سلسلة الأدواتسمِّ الأدوات: «web_search، ثم read_url_to_file، ثم digest_research_file»

المشرف يختار الأدوات؛ لا تحتاج إلى تسميتها إلا إذا أردت التحكم.

الأداةالدور
web_searchالبحث (SearXNG → DuckDuckGo → Bing HTML). فضّل KAZMA_SEARXNG_URL.
read_urlرابط واحد، نافذة مُقسّمة صفحات (offset، max_chars). الترويسة تعرض الطول الكامل + الإزاحة التالية.
read_url_to_fileالمستخلص الكامل يُحفظ داخل مساحة العمل (المجلد الافتراضي KAZMA_RESEARCH_DIR، عادة research/).
crawl_pageاسم مستعار أصلي لـ read_url (مهارة advanced-web-crawler).
crawl_siteزحف متعدد الصفحات محدود في نفس النطاق؛ يحفظ الصفحات + يعيد فهرسًا.
list_research_chunksفهرس التجزئات + معاينات لملف محفوظ.
read_research_chunkتجزئة واحدة بالفهرس.
summarize_research_fileمخطط استخراجي خفيف.
digest_research_fileيمر على كل التجزئات داخل الأداة؛ يعيد هضمًا واحدًا محدودًا (آمن للسياق).

تسجّل المهارة الأصلية advanced-web-crawler أيضًا web_search_duckduckgo وcrawl_page وparse_document (تُحمَّل تلقائيًا؛ ليست تثبيتًا من سوق Agent Skills).

عند crawl_site(same_domain_only=True) يحد اسم المضيف الابتدائي اكتشاف الروابط وجلب المحتوى، بما يشمل تنقل Chromium الرئيسي. تستخدم طلبات HTTP في Chromium وسيط HTTP المحدود، الذي يفحص كل قفزة إعادة توجيه فعلية قبل الإرسال ويحافظ على الروابط النهائية والموارد النسبية. تمر موارد CDN العامة بفحوص العنوان العام والطرف المتصل أيضًا. يتجه مسار HTTP/HTTPS/WebSocket الأصلي الاحتياطي إلى وكيل منع مملوك للمهمة. تشترك أتمتة المتصفح الأصلية في المالك المحتوى ووسيط HTTP. ويتطلب العرض الصارم حدود شبكة نظام التشغيل المبينة أدناه. تتجاوز قراءات المحتوى المحددة النطاق ذاكرة النص وتتخطى القراء المستضافين حاليًا، لأن تلك المسارات لا تثبت منشأ إعادة التوجيه المطلوب. يظهر فشل النطاق في فهرس الزحف مع سبب الصفحة.

انظر فهرس الأدوات.

الحدود (مهمة للصفحات الطويلة)

Section titled “الحدود (مهمة للصفحات الطويلة)”
المرحلةالافتراضيمتغير البيئة
نافذة read_url16 000 حرفKAZMA_READ_URL_MAX_CHARS
جسم استجابة HTTP/الخدمة المستضافة5 000 000 بايت؛ سقف صارم 20 000 000KAZMA_FETCH_MAX_BYTES
اقتطاع الرسم (الأدوات العادية)4 000KAZMA_TOOL_RESULT_MAX_CHARS
اقتطاع الرسم (أدوات البحث)16 000KAZMA_TOOL_RESULT_RESEARCH_MAX_CHARS
مخرجات الهضم12 000KAZMA_RESEARCH_DIGEST_MAX

تاريخ الحد المزدوج: استخدمت الإصدارات الأقدم كشطًا صارمًا 8k + اقتطاع رسم 4k. تستخدم أدوات البحث الآن حد الرسم الأعلى الخاص بالبحث ليصبح التقسيم نوافذ مفيدًا.

مثال على التقسيم نوافذ (وكيل أو صريح):

read_url(url, offset=0)
read_url(url, offset=16000) # next window; full text cached in-process ~15 min

للبحث بالصفحة الكاملة:

read_url_to_file(url) → digest_research_file(path) → read_research_chunk for details

الزحف متعدد الصفحات (crawl_site)

Section titled “الزحف متعدد الصفحات (crawl_site)”
الضابطالافتراضيالسقف الصارم
max_pages850 (KAZMA_CRAWL_MAX_PAGES)
max_depth25 (KAZMA_CRAWL_MAX_DEPTH)
same_domain_onlytrueموصى به
delay_ms300للأدب
SSRFكل عنوان URLالخاص/البيانات الوصفية محجوبة

يحفظ داخل مساحة العمل، في مجلد البحث الفرعي افتراضيًا، ويعيد فهرس Markdown. تظل مساحة العمل الابتدائية مرتبطة طوال الزحف حتى بعد تبديل المستودع. تُبلغ المستخلصات الجزئية دون نشر تلقائي. تُزال الروابط المعلقة المكررة، ويُحد عددها بأربعة أمثال سقف الصفحات، وبـ 8192 حرفًا للرابط. يعلن الفهرس نقص التغطية عند بلوغ سقف الصفحات أو الجبهة. تحتفظ إخفاقات DNS بنوع خطئها الحقيقي. تحتاج المهام المنقطعة استئنافًا صريحًا بنطاقها الأصلي؛ راجع قسم استئناف الخط الدائم.

تجرّب web_search SearXNG أولًا، ثم DuckDuckGo → Bing → Wikipedia.

الإعدادالأمر / متغير البيئة
ملف تعريف Composedocker compose --profile search up -d searxng
منفذ المضيفhttp://127.0.0.1:8088 (يوائم الحاوية 8080)
متغير البيئةKAZMA_SEARXNG_URL=http://127.0.0.1:8088
ConfigStoreالمفتاح search.searxng_url (نفس الغرض)
الإعداداتdeploy/searxng/settings.yml يفعّل صيغة JSON (مطلوب)

يستكشف كاشف القواعد المتعددة لدى كاظمه أيضًا localhost:8088 وhost.docker.internal:8088 وsearxng:8080. تُخزَّن القواعد الحية مؤقتًا لفترة قصيرة؛ المضيفات الميتة تبرد ~60 ثانية.

خلفيات جلب أقوى اختيارية

Section titled “خلفيات جلب أقوى اختيارية”

جلب الصفحات محلي فقط افتراضيًا: HTTP واستخراج محليان ثم Chromium محلي عند الحاجة. تظل المواقع العامة بحاجة إلى الشبكة. لمحركات البحث وتوليف LLM والتضمينات إعدادات مزوّدين منفصلة. تبقى بعض المواقع محظورة؛ ويظهر الفشل بدل الانتقال إلى خدمة مستضافة دون إعلان.

يتطلب الاستخراج المستضاف الوضع البعيد وقائمة سماح بأسماء المزوّدين معًا:

متغير البيئةالغرض
KAZMA_ACQUISITION_MODEالافتراضي local_only؛ تفعيل صريح لـ local_first_with_remote_fallback
KAZMA_ACQUISITION_REMOTE_PROVIDERSفارغ افتراضيًا؛ أذونات jina وfirecrawl وproxy مفصولة بفواصل
KAZMA_FETCH_BACKENDاختيار مستضاف قديم: auto | httpx | jina | firecrawl؛ لا يتجاوز السياسة
KAZMA_FETCH_DEADLINE_SECONDSمهلة الجلب النصي الكاملة، 90s افتراضيًا (1–300s)
KAZMA_FIRECRAWL_API_KEYمفتاح Firecrawl اختياري؛ ويلزم إذن السياسة للخدمة المستضافة أيضًا
KAZMA_FIRECRAWL_URLنقطة نهاية عامة متوافقة مع Firecrawl اختيارية؛ تظل النقاط الخاصة المستضافة ذاتيًا غير مدعومة
KAZMA_JINA_READERيمنع 0/off استخدام Jina؛ ولا يمنح 1 إذن السياسة
JINA_API_KEY / KAZMA_JINA_API_KEYمصادقة Jina اختيارية (حدود معدل أعلى)

ترتيب الجلب

  1. httpx وtrafilatura محليان.
  2. استرداد Chromium المحلي لحواجز الروبوتات أو المستخلصات الضعيفة والفارغة.
  3. Firecrawl المسموح ثم Jina المسموح، بعد فشل الاسترداد المحلي فقط.

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

يُحد قبول الجلب المحلي في كل عملية خادم: مهمتا متصفح وست عمليات جلب عادية وعمليتا جلب محجوزتان لمالكي المتصفح. تحمل طوابير الانتظار 8 و24 و8 طلبات على التوالي؛ وتنتهي مهلة القبول بعد 30 ثانية ضمن مهلة الجلب. يعيد امتلاء الطابور خطأ حد موارد ظاهرًا. يشترك Node وChromium في ميزانية ذاكرة نظام تشغيل 2GiB ونحو معالجين منطقيين وعمر مالك 30 دقيقة. يستخدم Windows كائن Job Object بسقف 32 عملية، وLinux مجموعة cgroup v2 مفوّضة بسقف 256 مهمة مع تعطيل swap. لكل من إطارات المشغّل والأوامر المنتظرة سقف 32MiB؛ ولحركة البروتوكول الإجمالية سقف 512MiB. يستطيع المراقب إنهاء المتصفح حتى حين تتعطل حلقة Python. ينهي موت العملية الأم شجرة المتصفح أيضًا. يمنح التنظيف الهادئ خمس ثوانٍ قبل الإنهاء القسري؛ ولا تتحرر السعة إلا بعد تحقق النظام من انتهاء الأبناء. تُظهر الجاهزية السعة المحجوزة عند تعذر التحقق من التنظيف.

يحتاج Linux ضوابط ذاكرة وpids وCPU وقتل مجموعة مفوّضة قابلة للكتابة. قد يختار KAZMA_BROWSER_CGROUP_ROOT التفويض؛ وإلا تحاول كاظمه مجموعتها الحالية. اضبط التفويض في مدير الخدمة؛ لا تغير كاظمه متحكمات المضيف أو ترفع الصلاحيات. تظهر الحدود المفقودة أو غير المدعومة كعدم إتاحة. لأجسام HTTP وDNS وتحليل HTML/XML ملكية محدودة منفصلة. للتقارير والسجلات المحفوظة حصص محدودة؛ لا تشمل كل التثبيت أو ملفات المتجهات أو SQLite WAL والملفات المؤقتة. تستخدم الأدوات الأصلية المالك المحتوى والوسيط نفسيهما. وضع شبكة النظام الصارم مطلوب افتراضيًا: يحتاج Linux مساحة أسماء شبكة معزولة متحققة وضوابط cgroup؛ ويرفض Windows إطلاق المتصفح الصارم حاليًا. يعرض KAZMA_BROWSER_NETWORK_MODE=compatibility الصريح الحدود الأضعف. فشل عرض Windows التوافقي في اختبار دورة الحياة الأطول: تجاوز خروج Node انتظار خمس ثوانٍ، وحُجزت السعة. يظل غير مؤهل؛ راجع تقرير التنفيذ للمحاولات الفاشلة والمسارات المدعومة.

للتحقق من DNS للأهداف العامة عامل محلي مستقل، بما يشمل إعادة التوجيه وموارد HTTP للمتصفح. تشترك أربعة فحوص نشطة و16 طلبًا منتظرًا في مهلة قبول عشر ثوانٍ. لكل محلّل فرعي خمس ثوانٍ و256MiB ذاكرة و16KiB مخرجات؛ وترفض الإجابات الناقصة أو الزائدة الطلب. يمر كل عنوان معاد بفحص العنوان العام الحالي. ينتظر الإلغاء انتهاء العامل وخيط التحقق. يبقى تنظيف غير قابل للتحقق حاجزًا لسعته، ويظهر في الجاهزية، ويُعاد تنظيفه عند الفحص التالي. يستخدم نقل الوكيل المتزامن وغير المتزامن واتصالات الخدمات المستضافة غير المتزامنة المحلّل المحدود نفسه؛ وحده وكيل اختاره المشغّل قد يملك نقطة خاصة. تبقى أسماء Host/CONNECT المنطقية وTLS SNI المتحقق. يستخدم التحقق المتزامن من هدف الجلب ميزانية المحلّل نفسها؛ ويُمرر محتوى المتصفح الأصلي عبر HTTP متحقق بدل DNS المباشر.

ينفذ استخراج HTML وXML لخرائط الموقع وبحث HTTP الثابت في عمليات فرعية مملوكة محدودة، ببيئات خالية من الاعتماد وحدود مدخلات ومخرجات وذاكرة ومهل. تشترك خلفيات البحث في سلسلة ملكية للمهلة والإلغاء. يُرفض بحث وكيل DDGS المعتم لتعذر تحديد عدد طلباته؛ وتحجز بدائل HTTP الثابتة حدها الأعلى المكون من ستة طلبات قبل الإرسال وتحافظ على المسار المختار.

لا تسمح المفاتيح المحفوظة وحدها بطلبات مستضافة. تحتاج وكلاء الكشط proxy في قائمة السماح الصريحة نفسها مع إعداد الوكيل؛ وعند السماح توجّه طلبات HTTP والمتصفح. تُتجاهل HTTP_PROXY/HTTPS_PROXY المحيطة. تحجز الآثار الخارجية الطلبات بصورة دائمة قبل الإرسال: الافتراضي لـ KAZMA_REMOTE_JOB_REQUESTS هو 256 (0–1024)، ولـ KAZMA_REMOTE_DAY_REQUESTS هو 1024 (0–4096، يوم UTC). يمنع الصفر الإرسال. تستهلك إعادات التوجيه والمحاولات والإخفاقات والآثار غير المؤكدة الحصة؛ ولا تمثل الحجوزات استردادًا أو رسوم مزوّد مرصودة. تضيق الحدود النشطة ولا تتوسع أثناء الحصة. يمنع فشل التخزين الإرسال. يستخدم السجل خلفية إعدادات SQLite/PostgreSQL الحالية بكتابات شرطية واحتفاظ محدود. يحجز البحث الثابت الحد الأعلى حتى عند تنفيذ طلبات أقل.

يعرض research_readiness(job_id=...) وحالة المعرفة الأدلة المحفوظة دون الاتصال بالمزوّدين. يمكن لصفحة الويب وresearch_readiness(refresh_credits=True) تحديث رصيد فريق Firecrawl صراحة؛ ويستهلك الاستعلام الحصة. تُحفظ الملاحظة ضمن الحساب وتظل حديثة خمس دقائق، مع تباعد تحديث 60 ثانية. يُسجّل رأس استجابة Jina Reader الصالح X-Usage-Tokens قبل قراءة الجسم ويظهر كاستخدام رموز مبلّغ من المزوّد، بما فيه الصفر. تبقى البيانات الغائبة أو الفاسدة مجهولة. يحافظ فشل الجسم والإلغاء على الملاحظة؛ ولا تنشئ القراءات المحفوظة استخدامًا جديدًا. ليست هذه الملاحظات رسومًا مالية أو رصيد حساب. تبقى أرصدة Jina/الوكيل دون موصل متحقق ورسوم كل طلب غير متاحة. يمنع سقف مالي مضبوط الطلبات الخارجية دون حد أعلى قابل للإثبات. يشترك الفحص المحفوظ بالعربية والإنجليزية في الويب والمحادثة وCLI وTUI في الأخطاء والحجوزات والاستخدام وحداثة الرصيد. تُسجل نتائج الإصدار المقيسة وحدود المنصات في تقرير التنفيذ.

‏Playwright (تثبيت اختياري): pip install -e ".[web]" وplaywright install chromium.

وكيل كشط اختياري (تدوير IP/UA)

Section titled “وكيل كشط اختياري (تدوير IP/UA)”

يملك الجالب مزوّد وكيل قابلًا للإضافة ومفعّلًا اختياريًا (kazma_core/proxy/) لتوجيه الكشط عبر وكيل سكني دوّار لمقاومة حظر IP وحدود المعدل. معطّل افتراضيًا (NullProvider = مباشر)؛ يبقى الجلب مباشرًا لغير مستخدميه. يلزم وضع الجلب وإذن proxy في قائمة السماح بالإضافة إلى الإعدادات أدناه.

  • اضبطه في الإعدادات → النظام → مزوّد الوكيل (مفاتيح ConfigStore هي proxy.*؛ ويُشفّر proxy.password تلقائيًا في الخزنة). الإعداد حي؛ يُحل المزوّد عند كل جلب (proxy/registry.py::get_proxy_provider)، لذلك يطبق التغيير دون إعادة تشغيل.
  • anyIP.io (proxy/anyip.py) أول مزوّد: تدوير سكني ومحمول عبر portal.anyip.io:1080، واسم مستخدم بعلامات (type_residential وcountry_US وsessid_ لكل طلب للتدوير أو جلسة ثابتة). يخرج كل طلب من IP سكني مختلف ما لم يُضبط session_sticky.
  • تطبق المرونة تلقائيًا على مسارات البحث وكشط المعرفة:
    المسارتطبيق الوكيل
    read_url / web_acquire.fetch_text (طبقة httpx)get_scraping_client ومحاولة 429/403
    استرداد Playwright (read_url واستيعاب المعرفة)وسيط HTTP عبر CDP → get_scraping_client؛ تتجه حركة Chromium الأصلية إلى وكيل منع محلي
    متتبع روابط crawl_siteget_scraping_client
    جلب خط البحث العميقسلم الجلب نفسه أعلاه
    استخراج صفحة المعرفةالسلم نفسه
    اكتشاف sitemap/robots للمعرفةget_scraping_client
    SERP بعيد (Bing HTML وWikipedia)عامل HTTP ثابت محدود؛ مسار وكيل مسموح وحصة طلبات محجوزة
    SearXNG محلي أو Dockerمباشر (loopback، دون التفاف عبر الوكيل السكني)
    SearXNG بعيدعامل HTTP ثابت محدود؛ مسار وكيل مسموح عند ضبطه
    DuckDuckGo (ddgs)يُتخطّى بصورة ظاهرة لتعذر فرض سياسة المصادر المشتركة على تشعّبه المعتم
    طلبات API لـ Jina / Firecrawlمباشرة (يجلب الطرف الخارجي الهدف؛ تبقى مفاتيح API خارج الوكيل السكني)
    واجهات LLMأبدًا (http_pool)
    • تدوير IP — يُعاد طلب IP المحظور من IP سكني جديد.
    • تدوير UA — مجموعة منتقاة في proxy/client.py::USER_AGENT_POOL.
    • محاولة 429/403 مع تراجع (1.5 s، 3 s) في مسار httpx لـ read_url.
  • نطاق الكشط فقط. لا يمس الوكيل طلبات LLM API.
  • تراجع سلس — المزوّد غير المضبوط = مباشر؛ لا يفشل الجلب لمجرد تعطيل الوكيل.
  • إضافة مزوّدين مستقبلًا (BrightData وOxylabs) = صنف واحد تحت proxy/ وسطر تسجيل وخيار قائمة إعدادات.

ملاحظة: هذا لا يحل رموز CAPTCHA ‏(تدوير IP/UA + Playwright فقط). قد تكون خدمة حل CAPTCHA نوع مزوّد مستقبلي.

  • آمن ضد SSRF في كل عمليات الجلب وإعادة التوجيه.
  • تبقى الحفظات داخل مساحة العمل النشطة (أي مسار فرعي؛ الدليل التلقائي الافتراضي KAZMA_RESEARCH_DIR).
  • ليس زحفًا غير محدود للإنترنت.
  • ليس منيعًا ضد أنظمة مكافحة البوتات.
  • الأهضم استخراجية (لا LLM متداخل داخل الأداة)؛ نموذج الدردشة يولّف التقرير النهائي.
  • لا يزال HITL ينطبق على أدوات الخطر؛ أدوات بحث الويب عمومًا قراءة/آمنة (الكتابات تذهب إلى ملفات مساحة العمل عبر pathlib).

الأوضاع: سريع مقابل عميق

Section titled “الأوضاع: سريع مقابل عميق”
الوضعكيف تفعّلهالسلوك
سريع«ابحث»، أسئلة قصيرةأدوات حرة؛ 1–2 قفزة مقبولة
عميق / ورقة«ابحث بتعمق»، «تقرير شامل»، /research deep <topic>، أو أداة run_research_pipelineبحث متعدد الاستعلامات → اكتساب الصفحات كاملة → أهضم → توليف LLM → تقرير تحت research/reports/

لدى المشرف أيضًا بوابة عمق ناعمة: الطلبات المصاغة بعمق التي شغّلت web_search فقط تتلقى نحوة نظام واحدة لجلب ≥2 مصدر كامل قبل الاستنتاج.

الأداةالدور
digest_research_fileخريطة استخراجية لملف واحد (بلا LLM متداخل)
synthesize_from_digestsتحليل LLM عبر المصادر
run_research_pipelineخط أنابيب الورقة الكامل (بحث→اكتساب→هضم→توليف→حفظ)
  1. web_search ‏(≥2 استعلام للعمل الشامل)
  2. read_url_to_file على النتائج العليا (≥2 مصدر)
  3. digest_research_file ثم synthesize_from_digests
  4. أجب مع الاقتباسات
  1. crawl_site(start_url, max_pages=12, max_depth=2)
  2. digest_research_file لكل مسار محفوظ (أو تجزئات انتقائية)
  3. تقرير

يتضمن فهرس الزحف معرّف مهمة دائمًا. افحص حالتها المحفوظة عبر research_readiness(job_id="…"). لمواصلة زحف منقطع، استدع crawl_site مع resume_job_id="…" والبذرة ومساحة العمل والخيارات نفسها. يرفض تغير النطاق أو السياسة أو الحدود الاستئناف. لا تُجلب أو تُنشر الصفحات المكتملة وغير المؤكدة مجددًا؛ وتظل التغطية المحدودة وغير المؤكدة جزئية. تبقى الملفات الحالية محفوظة. تشترك زحوف البحث والمعرفة في حدود التثبيت: أربع مهام نشطة و24 مهمة محفوظة وسجل 8MiB. تسجل خطوط البحث العميق ملكية المراحل منفصلة في المخزن المشترك. يعيد resume_job_id الصريح الملفات المكتملة المتحققة ويواصل المراحل المعلقة الآمنة فقط؛ وترفض آثار التخطيط أو البحث أو التوليف أو النشر المطلوبة غير المؤكدة الإعادة. تعرض الجلسات الخلفية حالة الانقطاع وزر استئناف صريحًا بالعقد نفسه.

/research deep <topic>
# or
run_research_pipeline(topic="...", depth="deep", max_sources=8)

يعمل عبر محادثات Web SSE وWebSocket والبوابات. يشغّل الخط البحث والجلب بالتوازي (semaphore 4)، ويكتب research/reports/pipeline-<id>/report.md وDOCX اختياريًا (export_docx=True أو KAZMA_RESEARCH_EXPORT_DOCX=1)، ويسجل التنفيذ للوحة البحث (GET /api/research/papers).

يُبث تقدم المراحل كأحداث أداة/حالة (WS) أو أسطر مراحل مائلة (SSE).

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

يحد max_sources ملفات المصادر المنشورة فعليًا، بما فيها سد الفجوات. يمكن استبدال المرشحين الفاشلين ضمن الميزانية المتبقية. يسجل الخط كل دفعة في sources.json؛ ويوقف فشل الفحص المسبق أو حفظ الإيصالات التنفيذ بخطأ ظاهر. يعيد الخط معرّف مهمة دائمًا. استأنف المهمة المنقطعة صراحة بـ run_research_pipeline(topic="…", resume_job_id="…")، مستخدمًا الموضوع والعمق وحد المصادر واللغة وخيارات التوازي والتصدير ومساحة العمل الأصلية. يمنع تغير نطاق الجلب أو الإعداد الاستئناف. تحتاج المراحل المكتملة بصمات ملفات محفوظة لم تتغير. تُتخطّى المصادر غير المؤكدة وتُبلغ كجزئية؛ وترفض المرحلة المطلوبة الفاشلة أو غير المؤكدة الإعادة. راجع المهمة قبل بدء تشغيل جديد قد يكرر البحث أو الطلبات المدفوعة. تصبح الجلسات ذات المالك الميت منقطعة، وتعرض الاستئناف الصريح في صفحة البحث أو start_deep_research(resume_session_id="…"). يُحد السجل بـ 256 صفًا/128MiB. تُحتسب سجلات البحث بالمحادثة القديمة ضمن حد التخزين، مع استبعادها من تنبيهات الاكتمال. يرفض التثبيت المتجاوز للحد جلسات خلفية جديدة بخطأ سعة ظاهر. راجع وصدّر النتائج قبل حذف السجل المنتهي عمدًا؛ لا تحرر الأرشفة وحدها حصة الصفوف. لا يُحذف شيء تلقائيًا لقبول عمل جديد. لاحتفاظ تقارير الخط حصة منفصلة 2GiB (512MiB محجوزة لكل تشغيل نشط)؛ ولا يعيد حذف صف السجل ضبطها. لا تُحذف الملفات الحالية تلقائيًا. تتجمّد عملاء النموذج المحلي والمفتاح الصريح والبدائل؛ وتُرفض مسارات AWS/Google ADC المحيطة للبحث الدائم حتى يمكن التقاط اعتمادها. يمكن لـ research_readiness(job_id="…") عرض الاستخدام المحفوظ من مهمة بعيدة سابقة بعد التحول إلى المحلي فقط، دون طلب للمزوّد. الرموز المبلّغ عنها لا تثبت رسومًا أو رصيد حساب.

الباحث التلقائي في /swarm research … / dispatch_swarm يشمل أدوات الحفظ/الهضم/خط الأنابيب.

تشخيصات وإصلاحات ينبغي أن يعرفها المشغّلون (2026-08-27)

Section titled “تشخيصات وإصلاحات ينبغي أن يعرفها المشغّلون (2026-08-27)”
  • ملاحظات حالة SearXNG أصبحت صادقة الآن. عندما يبلغ بحث عن searxng:empty@…، تحمل ملاحظة السجل قائمة unresponsive_engines الخاصة بـ SearXNG نفسه (مثل brave: suspended، duckduckgo: CAPTCHA) — القصة الحقيقية خلف «كل الخلفيات فارغة» للاستعلامات الغامضة. الإيقافات تلتئم ذاتيًا؛ الملاحظة تخبرك أي المحركات تنتظرها. المثيل القابل للوصول الذي يعيد 0 نتيجة لم يعد يستدعي تبريد الموت 60 ثانية الذي كان يجعل الاستعلام التالي يتخطى SearXNG كليًا.
  • JSON لواجهات السجل أُزيل حجبه. يقبل read_url أنواع محتوى RFC 6839 ‏+json/+xml ‏(application/rdap+json، ld+json، …) — فحوصات RDAP للنطاقات المأخوذة (HTTP 200 + rdap+json) كانت تموت سابقًا عند بوابة نوع المحتوى بينما فحوصات النطاقات الحرة (404) تعمل. مسوحات توافر النطاقات تعمل الآن من البداية للنهاية عبر read_url.

تنبيهات التقدم والنتائج

Section titled “تنبيهات التقدم والنتائج”

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

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

تحت الإعدادات → النظام → جلب الويب يعرض قراءة إعدادات التنبيهات المراقبة وإشعارات الاكتمال وعتبة انقطاع التقدم (30–3600 ثانية) وعتبة الرصيد المنخفض (100 افتراضيًا). تُحفظ الإعدادات محليًا. تنتج الأرصدة المدعومة الحديثة عند العتبة أو دونها تنبيهًا؛ ولا تثبت القيم القديمة أو المجهولة التعافي. لأخطاء HTTP 402 و429 والاعتماد والخدمة الفعلية تنبيهات مستقلة. نفاد حصة الطلبات الخارجية المحلية مختلف عن إنفاق الرصيد المفوتر. لا تتصل المراقبة بالمزوّدين أو تحدّث الأرصدة أو تغيّر سياسة الجلب أو تستأنف العمل المنقطع. يظل تحديث الرصيد الصريح المسموح مطلوبًا للحصول على رصيد أحدث.

يقرأ جرس الإشعارات والشريط العام السجل المحلي الدائم. تستخدم الرسائل الخارجية مسارات التشغيل الحالية في الإعدادات → المحوّلات والمسارات. يسجّل قبول المنصة تم التسليم؛ ولا يثبت مطلوب وغير مؤكد التسليم. يبقى رفض التسليم ظاهرًا في الإشعار. لا يُعاد التسليم غير المؤكد تلقائيًا بعد الانهيار. يحتفظ السجل بآخر 128 ملاحظة لمدة 30 يومًا مع تحذيرات التوقف النشطة؛ وتعرض الواجهة آخر 50 مع التحذيرات النشطة. يظهر فشل المراقب أو الفحوص الفائتة بدل تفسيره كتقدم سليم.

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

تدخل جلسة البحث العميق الحية جارٍ الإلغاء عند طلب الإلغاء، وتصبح ملغاة بعد إتمام تنظيف عمل الخط المملوك. تبقي لوحة الويب اتصال التقدم مفتوحًا أثناء الانتظار وتعيده عند فتح جلسة جارٍ إلغاؤها. يطلب حذف جلسة نشطة الإلغاء ويعيد HTTP 409 (research_session_busy)؛ أعد الحذف بعد التنظيف. لا تعيد أحداث التقدم المتأخرة جلسة ملغاة إلى العمل. لا يسمح العقد بإعادة آلية بعد إعادة التشغيل؛ يستخدم الاستئناف الصريح للجلسة أو المهمة عقد الاسترداد الدائم أعلاه.

لنشر المستخلصات ولقطات الشاشة المستقلة حصة عمر مشتركة محافظة: 256 ملفًا/512MiB و24MiB لكل ملف. تسبق الحجوزات الكتابة وتبقى عند الفشل؛ لا يوجد رد تلقائي للحصة أو تنظيف حذفي. تبقى المخرجات المستقلة الحالية محفوظة ولا تُحصى بأثر رجعي في هذا السجل. لملف SQLite لنصوص المعرفة وFTS والسجل سقف 1GiB؛ وترفض قاعدة ممتلئة الكتابة. لا تحد هذه الضوابط كل ملفات متجهات Chroma أو مساحة SQLite المؤقتة وWAL أو ملفات المستخدم الأخرى.