انتقل إلى المحتوى

ترجمة آلية

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

المصدر الإنجليزي · الإبلاغ عن مشكلة في الترجمة

هيكل استجابة API ودلالات الأخطاء

جزء من مرجع واجهة برمجة التطبيقات Perplexity — الخريطة الكاملة في فهرس API.

1. أساسيات هيكل الاستجابة (انضباط التحليل)

  • البيانات الأولية المحفوظة في الأرشيفات الناجحة: يتم تخزين raw_entries.json (عادي) و raw_blocks.json (مخطط، عند جلبه) جنبًا إلى جنب مع القطع الأثرية المقدمة؛ يمكن إعادة تشغيل التحليل/العرض دون اتصال (pplx-export re-render) دون إعادة الجلب.
  • استخراج الحقول مركزي في sites/perplexity/parsers.py (انحراف المخطط يحتاج فقط إلى تغيير مكان واحد).
  • كشف الوضع (normalize.detect_mode؛ شجرة القرار في export-pipeline.md): أعلى إشارة أولوية هي حقل search_mode لأي إدخال (التعيين في نهاية §3.9)؛ عندما تفشل جميع الإشارات، الرجوع — computer = URL /computer/tasks/ أو metadata.mode=="4" أو index mode ∈ {ASI,COMPUTER}؛ council = توجد خطوة COUNCIL_RESEARCH؛ deep-research = توجد خطوة RESEARCH_ANSWER (قائم على المحتوى، لا يعتمد على التسميات الصينية)؛ وإلا search.
  • واجهة المستخدم الخاصة بـ computer تطوي كل شيء — اذهب دائمًا بواسطة إدخالات/كتل API؛ لا تستخدم نص واجهة المستخدم أبدًا كحدود للمحتوى.
  • القناة المزدوجة للوكيل الفرعي (اكتُشفت 2026-07-19): المطالبة في workflow_payload.objective_chunks المخطط؛ الخطوات/الاستنتاج في background_entries العادي؛ مرتبطة عبر workflow_payload.id (toolu_X).
  • عناصر WORKFLOW_ITEM_SOURCES غالبًا ما تحمل text_payload (نص استخراج الصفحة للوكيل الفرعي / جداول المقارنة؛ 450 ظهورًا عبر المكتبة، 408 داخل الحمولات المتداخلة في الخلفية) بالإضافة إلى sources_payload.sources (قائمة الروابط)؛ يظهر نفس المحتوى في كل من إدخال الخلفية العادي text JSON الخطوة المضمنة وفي الحمولة المتداخلة المخطط — الوكلاء الفرعيون المرتكزون المقدمون عبر المسار العادي يحافظون بالفعل على النص (فحص المكتبة 2026-07-22: 408/408 موجود، لا شيء مفقود).
  • related_queries / related_query_items (تم التسوية 2026-07-23): كل إدخال يحمل توصيات مطالبة السؤال التالي — اقتراحات متابعة يولدها النظام الأساسي لإجابة مكتملة؛ related_queries هو مصفوفة من نصوص التوصيات، related_query_items العناصر المنظمة (uuid/upsell_type، إلخ). الاستنتاج الجنائي: uuid العنصر ليس uuid سلسلة (0/988 تطابق مع uuids سلسلة المكتبة)، ونصوص التوصيات لا تحتوي على أي تداخل مع استعلامات السلاسل الأخرى — لا يمكن حلها في علاقات بين السلاسل في الوقت الحالي؛ تظل فرضية "uuids سلسلة مخصصة مسبقًا (تتحقق عند النقر)" غير مثبتة. يتم حفظ البيانات بشكل طبيعي في الأرشيف raw_entries.json (ظهور في أكثر من نصف سلاسل مكتبة أرشيف واحدة)؛ لا حاجة لإجراء جمع إضافي؛ لا يبني الرسم البياني للعلاقات أي حواف منه.

2. دلالات الأخطاء والتحكم في المخاطر

الأعراض المعنى / المعالجة
403 (مع صفحة تحدي cf) حظر Cloudflare (بصمة TLS / التحكم في المعدل) — التراجع؛ urllib + ملفات تعريف الارتباط للمتصفح لا تسببه عمومًا
401 / 403 على مستوى API (بدون صفحة تحدي cf) انتهاء صلاحية/عدم صلاحية ملف تعريف ارتباط الجلسة — ترفع الأداة فورًا، لا تراجع؛ يفشل الدفعة بسرعة بعد 3 حالات فشل متتالية في المصادقة (تحديث ملف تعريف الارتباط)
429 تحديد المعدل — التراجع الأسي (مطبق في الأداة)
5xx (500/502/503/504) أخطاء خادم عابرة (504 غالبًا مهلة Cloudflare) — التراجع وإعادة المحاولة (مطبق في الأداة)
ENTRY_EXPIRED تمت إزالته بواسطة النظام الأساسي (~3 أشهر) — نهائي، لا تعاود المحاولة
ENTRY_DELETED تم حذفه بواسطة المستخدم/البعيد (أيضًا HTTP 400، رمز مختلف) — نهائي deleted، لا تعاود المحاولة
_response_type: VIEW_COLLECTION_NOT_ALLOWED (HTTP 200) الحساب الحالي لا يمكنه عرض المساحة — أعد المحاولة بحساب يمكنه ذلك
error_code: VIEW_THREAD_NOT_ALLOWED (HTTP 403) الحساب الحالي لا يمكنه عرض السلسلة (تم اختباره 2026-07-23: استقصاء uuid المتغير الشقيق؛ الكائن موجود ولكن لا يمكن الوصول إليه، ليس "غير موجود")
status:"failed" بيانات فارغة نفس الفئة (شكل فشل get_collection)

انضباط تحديد المعدل (مكافحة الحظر، متطلب مستخدم صريح): عشوائي 10–20 ثانية بين سلاسل الدفعة، لا تزامن، تراجع 429/403، تراجع-إعادة محاولة 5xx؛ الترقيم ≥3 ثوانٍ؛ إعادة الجلب المخطط ≥4 ثوانٍ؛ جلب بيانات المساحة ≥3 ثوانٍ. تصدير سلسلة واحدة = 1–2 طلب ≈ فتح الصفحة مرة واحدة.

2.1 دلالات الانقطاع — القيم المرصودة (2026-07-22؛ مصدر تصنيف الحقيقة: parsers.classify_wf_status)

حقل locked_reason: يظهر في thread_metadata / entries[] / background_entries[] (على الجانبين العادي والمخطط). القيمة الوحيدة المرصودة:

locked_reason المعنى التوزيع المرصود
spending_limit_exceeded انقطاع حد الإنفاق (استنفاد الحصة؛ يتوقف سير العمل عند نقطة الانقطاع) سلسلة واحدة بالضبط عبر المكتبة (علامات في كل من raw_entries و raw_blocks)

حقل حالة سير العمل (workflow_block.status و workflow_payload.status المتداخل يشتركان في نفس التعداد) القيم المرصودة:

الحالة الدلالات تعليق العرض (COMPLETED لا يحصل على شيء)
WORKFLOW_COMPLETED إكمال عادي
WORKFLOW_AWAITING_NEXT_STEPS في انتظار الخطوات التالية؛ مع locked_reason=spending_limit_exceeded هو انقطاع حد الإنفاق (يتوقف المحتوى عند نقطة الانقطاع)؛ بدون locked_reason، متقطع في انتظار الاستمرار ⏸ 限额中断(内容截至中断点) (⏸ مقيد بالحد — يتوقف المحتوى عند نقطة الانقطاع) / ⏸ 中断待续 (⏸ متقطع، في انتظار الاستمرار)
WORKFLOW_CANCELED ملغي (إجهاض المستخدم/النظام الأساسي) ⛔ 已取消 (⛔ ملغي)
  • WORKFLOW_CANCELED لوحظ 19 مرة (16 رئيسية + 3 متداخلة)، عبر 7 سلاسل computer (a5e8f481/cfca382d/f2e5957d/8417b02a/2dc5716d/356f833e/ed3714ff).
  • ملاحظة: قد تتأخر حالة حمولة الارتساء للإدخال الرئيسي (لوحظ ارتساء COMPLETED بينما كانت الخلفية في الواقع CANCELED) — الحالة الحقيقية للوكيل الفرعي هي workflow_block.status جانب الخلفية.
  • المهام الخلفية المتقطعة لا تنتج إشعار إكمال subagent_result؛ الحمولات الخلفية غير المستهلكة تعود إلى ملحق السلسلة (انظر "شلال الإسناد" في subagents-interruptions.md).
  • الإجابات الفارغة في وضع computer (تم التحقق مرتين 2026-07، غير قابلة للاسترداد): في وضع computer، بعض الأدوار تحتوي على إجابة فارغة لأن الخادم ببساطة ليس لديه إجابة — إعادة جلب API ترجع بيانات مطابقة للأرشيف، و توسيع شريط "N steps completed" في واجهة المستخدم لا يطلق أي طلبات بيانات (عرض خالص من جانب العميل؛ واجهة المستخدم و API يشتركان في مصدر واحد)، لذلك لا يمكن لـ API استردادها. فقط مجموعة فرعية من هذه الأدوار مرتبطة بـ locked_reason=spending_limit_exceeded؛ الباقي لا يحمل أي علامة من جانب الخادم.

2.2 side_by_side_metadata: إشارة متغير إعادة كتابة الإجابة (تم التسوية 2026-07-23)

مسار الحقل: entries[].side_by_side_metadata (استجابة /rest/thread/<uuid> العادية). عندما يولد النظام الأساسي إصدارات إجابة متعددة لنفس الاستعلام (تجربة A/B أو إعادة كتابة)، هذا هو الأثر الوحيد المتبقي على الإدخال النشط حاليًا — نص المتغير المستبدل (النص/الخطوات/الاستشهادات) ليس في استجابة API للسلسلة (حالة حقيقية b2d2632b: الاستجابة تحتوي على إدخال واحد فقط، 1 FINAL؛ المتغير 2 غير مرئي تمامًا).

المفاتيح والقيم المرصودة (دليل: b2d2632b خام؛ مسح المكتبة لـ 2442 إدخالًا):

{
  "experiment_role": "override-default-model-class:qwen3_instruct-01f7f",
  "sibling_uuid": "00000000-0000-5000-8000-000000000000",
  "experiment_override": {"override-default-model-class": "qwen3_instruct"},
  "selection_status": "SELECTED",
  "execution_log": {}
}
المفتاح الدلالات (مرصودة/مفترضة)
sibling_uuid يشير إلى متغير الإجابة الشقيق لنفس الاستعلام (معرف إدخال/سياق آخر). 7 سلاسل ظهرت عبر المكتبة؛ التحقيقات عبر الإنترنت (2026-07-23) تؤكد رابطًا ميتًا: حسابات كل من GET /rest/thread/<sibling_uuid> ترجع 403 VIEW_THREAD_NOT_ALLOWED (ليس 404/ENTRY_EXPIRED — يتعرف عليه الخادم ككائن موجود ولكن غير قابل للعرض)، وفتح /search/<sibling_uuid> في المتصفح (حساب المالك) يتم إعادة توجيه SPA إلى الصفحة الرئيسية — لا يمكن استرداد المتغيرات المستبدلة عبر sibling_uuid
selection_status SELECTED = إجابة هذا الإدخال هي الإصدار المختار للعرض؛ جميع حالات المجموعة الضابطة هي SELECTION_STATUS_UNSPECIFIED
experiment_role دور التجربة. المجموعة الضابطة تحمل بادئة [control] (6 حالات عبر المكتبة: [control]default-model-class:gpt41، إلخ.)؛ الحالة الحقيقية ليس لها بادئة (override-default-model-class:qwen3_instruct-01f7f، أي مجموعة المعالجة لتجربة تجاوز النموذج)
experiment_override معلمات تجاوز التجربة (مثل override-default-model-class: qwen3_instruct)؛ لوحظ فقط على حالات مجموعة المعالجة
execution_log لوحظ ككائن فارغ؛ دلالات غير معروفة

معايير التضييق (تمييز "إعادة كتابة حقيقية تحتفظ بكلا الإصدارين" عن "تحكم A/B روتيني"): sibling_uuid غير فارغ و (selection_status غير فارغ وليس SELECTION_STATUS_UNSPECIFIED، أو experiment_role بدون بادئة [control]) → فقط b2d2632b يصيب من بين 2442 إدخالًا عبر المكتبة (الحالة الحقيقية الوحيدة المؤكدة؛ الدقة والاستدعاء كلاهما 1 في هذه المكتبة، لكن n=1 لا يمكن استقراؤه).

سلوك الأداة: parsers.collect_answer_variants يستخرج الإصابات؛ adapter.get_thread يسجل تحذيرًا + يكتب thread.json.answer_variants (المفتاح غائب عند عدم وجود إصابات)؛ re-render --thread-json يضيف/يزيل في المكان (idempotent). دليل الوقت: إدخال الحالة الحقيقية created→updated دلتا هو 53.66 ثانية (تم إنشاؤه في 17:13، ثم إعادة كتابته/اختياره)، وأعادت الكتابة تقدم lastUpdated على مستوى السلسلة (إعادة تصدير تدريجية يمكن أن تؤدي إلى إعادة جلب، لكن الاستجابة المعاد جلبها لا تزال تحتوي فقط على الإجابة النشطة؛ المتغيرات القديمة غير قابلة للاسترداد).

سجل الكشف وسير المعالجة (2026-07-23، sites/perplexity/variant_log.py):

  • علامة السجل: كل إصابة تصدر سطر WARNING واحد مع العلامة القابلة للبحث الموحدة ANSWER_VARIANT_DETECTED، بما في ذلك جميع حقول التحديد وإرشادات المعالجة، بشكل يشبه: ANSWER_VARIANT_DETECTED thread=<full uuid> uuid8=<8 chars> title="…" entry=<entry_uuid> sibling=<sibling_uuid> selection_status=SELECTED experiment_role=… | action: … المسار عبر الإنترنت (adapter.get_thread) يخرج في كل إصابة جلب فعلية؛ دون اتصال re-render يخرج فقط عند إضافة/تغيير المحتوى المسجل (عمليات إعادة التشغيل المتطابقة لا تسبب إزعاجًا)؛ batch يمرر أيضًا تذكيرًا بعدد الإصابات في سطر واحد في الملخص النهائي (دون كسر تنسيق الملخص الحالي).
  • السجل المركزي: <out>/index/answer_variants_log.jsonl (ملف مدقق، ليس تحت logs/ المتجاهل بواسطة git) — JSON واحد لكل سطر (detected_at / source=online|offline / web_uuid / uuid8 / title / entry_uuid / sibling_uuid / selection_status / experiment_role)، مكرر حسب (web_uuid, entry_uuid)؛ عمليات التصدير/إعادة العرض المتكررة لا تضيف بلا نهاية؛ detected_at يحتفظ بوقت الرؤية الأولى.
  • الإجراء الموصى به عند الإصابة: الأشقاء هم روابط ميتة تجريبيًا (انظر الجدول أعلاه)؛ الإجابة البديلة عادةً لا يمكن استردادها عبر API — تحقق يدويًا بسرعة مما إذا كانت الإجابة البديلة لا تزال قابلة للتحصيل (محادثة النظام الأساسي / ذاكرة المستخدم / لقطات الشاشة)؛ إذا كانت قابلة للتحصيل، سجلها يدويًا كملف rewritten_answer_variant.md في دليل السلسلة؛ إذا لم تكن كذلك، thread.json.answer_variants + سجل jsonl يعمل كسجل نهائي قابل للتتبع.