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

ترجمة آلية

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

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

pplx-ask: الاستعلامات التفاعلية

pplx-ask هي نقطة الدخول الثانية لواجهة سطر الأوامر في المشروع: تطرح أسئلة Perplexity بشكل تفاعلي عبر تدفق SSE، ثم تعالج الخيط الناتج — وتنقله إلى مساحة BOT، وترسل إيصال قراءة اختياريًا وبيانات تتبع عرض شبيهة بالبشر، وتؤرشفه تلقائيًا باستخدام نفس خط التصدير الخاص بـ pplx-export. تشارك النواة (النقل / ملفات تعريف الارتباط / الحالة / التسجيل) مع pplx-export، ويتم التحقق من جميع أشكال API مقابل المنصة الحية.

المصدر: pplx_export/ask_cli.py (CLI)، pplx_export/sites/perplexity/ask_api.py (طبقة API).

pplx-ask models                                  # list the authoritative model table
pplx-ask models --refresh                         # refresh + persist the catalog into config.toml [models]
pplx-ask ask "What is the time resolution of an example parameter?"   # search mode (default)
pplx-ask ask "<long prompt>" --mode council      # model council (default three models)
pplx-ask ask "<prompt>" --mode council --models gpt56_sol_thinking,claude50opusthinking
pplx-ask ask "<prompt>" --mode deep-research     # deep research (fixed pplx_alpha)
pplx-ask ask "<prompt>" --space some-space-slug  # create inside a space, then move into BOT
pplx-ask ask "<prompt>" --mark-read              # send a read receipt after completion
pplx-ask mark-read <thread_url|uuid>             # standalone read receipt
pplx-ask space-create "My Space"                 # create a space

a. الأوامر الفرعية

a.1 models

يطبع جدول النماذج الحية والموثوق من GET https://www.perplexity.ai/rest/models/config/v2 (pplx_export/ask_cli.py، cmd_models): النماذج الافتراضية لكل وضع، والنماذج الثلاثة الافتراضية للمجلس، والنماذج القابلة للتحديد في وضع البحث، والأوضاع الخاصة (research / study / agentic_research / studio).

الخيار الافتراضي الوصف
--refresh off الاحتفاظ بالكتالوج الذي تم جلبه في جدول [models] الخاص بالتكوين (إدارة تلقائية): last_refreshed، mode_defaults، council_defaults، search_models، و [models.catalog] الكامل. ثم يقوم pplx-ask ببناء الطلبات من [models]، مع الرجوع إلى الأساس المثبت في pplx_export/sites/perplexity/platform.py. يتطلب تحميل ملف تكوين (قم بتشغيل pplx-export init أولاً). انظر التكوين.

a.2 ask

يطرح سؤالاً (pplx_export/ask_cli.py:86). يقوم ببث SSE للتقدم إلى وحدة التحكم، ويشغل خط المعالجة اللاحقة (انظر تدفق الطلب)، ويطبع كائن JSON قابل للقراءة آليًا على stdout في النهاية.

الخيار الافتراضي الوصف
prompt (موضعي) السؤال. تعمل المطالبات الطويلة وذات المعنى بشكل أفضل.
--mode search search = بحث عادي (نموذج قابل للتحديد)؛ deep-research = بحث عميق (نموذج ثابت)؛ council = مجلس النماذج (2–3 نماذج بالتوازي + توليف)؛ study = دراسة خطوة بخطوة
--models none council: معرفات نماذج مفصولة بفواصل 2–3 (الافتراضي: نماذج المجلس من كتالوج [models]، أو الاحتياطي المثبت platform.py؛ قم بالتحديث باستخدام pplx-ask models --refreshsearch: معرف نموذج واحد؛ يتم تجاهله بواسطة deep-research / study
--space home home = إنشاء من الصفحة الرئيسية، ثم النقل إلى مساحة BOT؛ <slug> = إنشاء مباشرة داخل تلك المساحة، ثم النقل إلى مساحة BOT
--mark-read off إرسال إيصال قراءة (mark_viewed) بعد الاكتمال
--no-telemetry off عدم إرسال بيانات تتبع عرض شبيهة بالبشر (الافتراضي: إرسال — ask context pane viewed / thread viewed / thread entry exited مع توقيت عشوائي)
--no-export off عدم الأرشفة التلقائية في web_archive
--timeout 600 مهلة تدفق SSE بالثواني

حل النموذج غير متصل: يأتي model_preference لكل وضع ونماذج مقارنة المجلس من جدول [models] الخاص بالتكوين عند وجوده، مع الرجوع إلى الأساس المثبت في pplx_export/sites/perplexity/platform.py (تجميع الطلب لا يصل أبدًا إلى الشبكة). عندما يكون [models] مفقودًا أو أقدم من 7 أيام (platform.MODELS_REFRESH_TTL_DAYS)، يحذرك ask لتشغيل pplx-ask models --refresh (الافتراضي) — أو يتم التحديث تلقائيًا عندما تكون علامة [models].auto_refresh بقيمة true.

تلميحات خطأ HTTP التي يصدرها ask (pplx_export/ask_cli.py:124): 401/403 = ملف تعريف الارتباط منتهي الصلاحية أو خاضع للتحكم في المخاطر (قم بتحديث ملف تعريف الارتباط)، 429 = تم تحديد المعدل (أعد المحاولة لاحقًا)، 5xx = خطأ في الخادم (أعد المحاولة لاحقًا). انظر استكشاف الأخطاء وإصلاحها.

a.3 mark-read

يرسل إيصال قراءة لخيط موجود (pplx_export/ask_cli.py:201): يقبل رابط خيط أو UUID مجرد، ويحل context_uuid الخاص بالخيط عبر GET /rest/thread/<uuid>، ثم يستدعي POST /rest/thread/mark_viewed مع {"context_uuids": [ctx]} (pplx_export/sites/perplexity/ask_api.py:190). يتم تبديل علامة غير المقروء على الفور. يطبع {"uuid", "context_uuid", "result"} كـ JSON.

ملاحظة: حدث التحليلات thread viewed لا يبدل غير المقروء — إيصال القراءة الحقيقي هو نقطة النهاية هذه.

a.4 space-create

ينشئ مساحة عبر POST /rest/collections/create_collection (pplx_export/sites/perplexity/ask_api.py:179) مع الحقول الثابتة التي تم التحقق منها (emoji: "1f4c1"، access: 1). يطبع {"uuid", "slug", "url"} كـ JSON.

الخيار الافتراضي الوصف
title (موضعي) عنوان المساحة
--description "" وصف المساحة

لاستخدام المساحة الجديدة كمساحة BOT، سجل uuid/slug الخاص بها تحت [bot_space] في تكوين المستخدم (انظر التكوين).

b. الخيارات المشتركة

مشتركة مع pplx-export (أسماء وقيم افتراضية متطابقة، pplx_export/commands/common.py:232):

الخيار الافتراضي الوصف
--account تكوين default_account الحساب المستهدف؛ عند عدم تطابق ملف تعريف الارتباط/البريد الإلكتروني، يتم تعداد رموز جلسة الحساب لكل متصفح وتبديلها تلقائيًا
--config PATH ~/.config/pplx-export/config.toml تكوين مستوى المستخدم (سجل الحساب / مساحة BOT)؛ الأولوية: --config > متغير البيئة PPLX_EXPORT_CONFIG > المسار الافتراضي
--out ./web_archive جذر إخراج الأرشيف
--cookies-from BROWSER كشف تلقائي استيراد ملفات تعريف الارتباط من المتصفح المسمى (edge/chrome/firefox/safari/brave…)
--cookies FILE ملف تعريف ارتباط بتنسيق Netscape أو ملف تعريف ارتباط JSON
-v / --verbose off إخراج DEBUG (تتبع الطلب / القرارات الداخلية)
--log-file [PATH] off سجل DEBUG كامل إلى ملف؛ بدون قيمة يتم وضعه في <out>/index/logs/<cmd>-<timestamp>.log

أولوية مصدر ملف تعريف الارتباط: --cookies-from / --cookies > ذاكرة تخزين مؤقت جديدة (<out>/index/.cookies.json، 12 ساعة) > كشف المتصفح التلقائي. انظر البدء للإعداد الأولي.

c. تدفق الطلب

flowchart TD
    A["build_envelope(prompt, mode, models, space)"] --> B["SSE stream: POST /rest/sse/perplexity_ask"]
    B --> C{"final status == COMPLETED?"}
    C -- "no" --> X["abort — no move / no telemetry / no export"]
    C -- "yes" --> D["move thread into BOT space (best-effort)"]
    D --> E["read receipt, if --mark-read (best-effort)"]
    E --> F["view telemetry, unless --no-telemetry (best-effort)"]
    F --> G["auto-archive via the export pipeline (core step)"]
    G --> H["stdout: result JSON"]
  1. تجميع المغلفbuild_envelope (pplx_export/sites/perplexity/ask_api.py:71) يملأ قالب المعلمة الذي تم التحقق منه: mode دائمًا "copilot" و query_source هو "home" (كل ask يبدأ محادثة جديدة؛ متابعة الاستمرارية غير معروضة بواسطة CLI). مع --space <slug>، يتم حل slug المساحة إلى uuid أولاً، ويحمل المغلف target_collection_uuid + target_thread_access_level: 1.
  2. تدفق SSEsse_ask (pplx_export/sites/perplexity/ask_api.py:153) يرسل POST إلى https://www.perplexity.ai/rest/sse/perplexity_ask ويستهلك تدفق الأحداث، مسجلاً إنشاء الخيط (https://www.perplexity.ai/search/<uuid>)، وتحولات الحالة، وتقدم التوليد. ينتهي التدفق عند final_sse_message. عندما يصبح التدفق خاملاً لفترة (يمكن أن يكون البحث العميق / المجلس صامتًا لدقائق؛ مهلة الفتح هي 600 ثانية)، يصدر post_stream نبضة قلب INFO "لا يزال ينتظر تدفق الاستجابة" بمستوى الإفتراضي بحيث لا يتم الخلط أبدًا بين التشغيل المباشر والتعليق.
  3. بوابة الاكتمال — يتم تشغيل المعالجة اللاحقة فقط عندما تكون الحالة النهائية COMPLETED (pplx_export/ask_cli.py:134). عند انتهاء تدفق غير طبيعي، يتم تخطي كل شيء بعد هذه النقطة (لا نقل، لا تتبع، لا تصدير) بحيث لا تتسرب حالة نصف مكتملة أبدًا إلى الأرشيف.
  4. النقل إلى مساحة BOT (أفضل جهد) — batch_move_threads مع context_uuid الخاص بالخيط إلى uuid [bot_space] المكون. يتم تخطيه عندما لا تكون مساحة BOT مكونة، أو عندما تم إنشاء الخيط بالفعل داخل مساحة BOT.
  5. إيصال القراءة (أفضل جهد، --mark-read) — POST /rest/thread/mark_viewed؛ يتم تبديل علامة غير المقروء على الفور.
  6. بيانات تتبع عرض شبيهة بالبشر (أفضل جهد، افتراضيًا تشغيل) — send_view_telemetry (pplx_export/sites/perplexity/ask_api.py:234) يحاكي توقيت التصفح الحقيقي: ask context pane viewedthread viewedask context pane viewedthread entry exited (random timeOnEntryMs من 12–45 ثانية، فترات توقف 0.6–2.4 ثانية بين الأحداث، جهاز يتم اختياره عشوائيًا من مجموعة صغيرة).
  7. الأرشفة التلقائية (خطوة أساسية، ما لم يكن --no-export) — يتم تصدير الخيط من خلال نفس خط الأنابيب مثل pplx-export export (وضع القوة)، ويتم وضعه تحت <out>/<account>/<mode>/<date>_<title>_<uuid8>/ — انظر تخطيط الأرشيف و خط أنابيب التصدير. على عكس خطوات أفضل جهد، فإن فشل الأرشفة ينتشر ويفشل الأمر.

عزل الفشل: يتم عزل الخطوات 4–6 كأفضل جهد (pplx_export/ask_cli.py:36): يسجل الفشل تحذيرًا، ويضبط مفتاح JSON للخطوة على false، ويسجل التفاصيل تحت step_errors، ولا يمنع الأرشفة أبدًا. الأرشفة (الخطوة 7) هي الخطوة الأساسية ولا يتم ابتلاع إخفاقاتها أبدًا.

d. الأوضاع واختيار النموذج

جدول النموذج الموثوق للمنصة هو GET /rest/models/config/v2 (ما يطبعه pplx-ask models). التمييز موجود في حقل model_preferencemode للمغلف دائمًا "copilot".

الوضع قيمة --mode model_preference اختيار النموذج
بحث search pplx_pro ("الأفضل" في واجهة المستخدم) افتراضيًا معرف نموذج واحد عبر --models (انظر pplx-ask models للقائمة القابلة للتحديد)
بحث عميق deep-research pplx_alpha ثابت — لا محدد
مجلس النماذج council pplx_agentic_research + compare_model_preferences 2–3 معرفات مفصولة بفواصل عبر --models؛ افتراضيًا من كتالوج [models] (أو الاحتياطي platform.py)، قابل للتحديث عبر pplx-ask models --refresh
دراسة خطوة بخطوة study pplx_study ثابت — لا محدد
الكمبيوتر (غير معروض) عائلة pplx_asi* غير مدعوم بواسطة pplx-ask

ملاحظات:

  • يقوم المجلس بتشغيل النماذج بالتوازي ويقوم بالتوليف؛ يمكن أن يتجاوز زمن الوصول للرمز الأول 3 دقائق، لذا ارفع --timeout لتشغيلات المجلس / البحث العميق.
  • تصنيف الوضع في جانب الأرشيف (كيف يتم تصنيف الخيوط المصدرة، بما في ذلك computer) موثق في الأوضاع؛ تفاصيل مغلف الطلب موجودة في نقاط نهاية REST.

e. استخدام pplx-ask من وكلاء آخرين

تم بناء pplx-ask بحيث يمكن للوكلاء الآخرين جلب المعلومات في الوقت الفعلي: يطرح سؤالاً، وينتظر الاكتمال، ويؤرشف الخيط، ويصدر عقدًا قابلًا للقراءة آليًا.

  • stdout يحمل كائن JSON واحدًا بالضبط (السطر الأخير)؛ تذهب جميع السجلات إلى stderr، لذا يمكن للمتصلين توجيه stdout مباشرة إلى محلل JSON.
  • حالة الخروج: 0 عند النجاح؛ حالات الفشل تخرج بقيمة غير صفرية مع رسالة خطأ على stderr — حالات فشل مرحلة الطلب تنتهي عبر SystemExit مع رسالة [ask][ERROR]، بينما تنتشر حالات فشل الأرشفة كما هي (انظر الخطوة 7).

شكل JSON الناتج (pplx_export/ask_cli.py:194):

المفتاح النوع المعنى
thread_uuid string uuid الخلفي للخيط الذي تم إنشاؤه
thread_url string https://www.perplexity.ai/search/<thread_uuid>
context_uuid string context_uuid الخاص بالخيط (يستخدم للنقل / وضع علامة مقروء / التتبع)
moved_to_bot boolean true = تم تنفيذ النقل إلى مساحة BOT ونجح؛ false = لم يتم تنفيذه أو فشل
mark_read boolean نفس العقد لإيصال القراءة
telemetry boolean نفس العقد لتتبع العرض
step_errors object تفاصيل الفشل لكل خطوة؛ تظهر فقط الخطوات الفاشلة
exported string | null "见上方 [export] 输出" عند تشغيل الأرشفة؛ null مع --no-export

نصائح الأتمتة:

  • تعامل مع القيم المنطقية للخطوات بدقة — الفشل لا يتم تمثيله أبدًا بقيمة صحيحة؛ تحقق من step_errors للحصول على التفاصيل.
  • --no-telemetry يتخطى فترة المكوث الشبيهة بالبشر التي تتراوح بين 12–45 ثانية عندما تكون الإجابة فقط مهمة.
  • بدون مساحة BOT مكونة (وضع متدهور)، يبقى moved_to_bot بقيمة false و كل شيء آخر لا يزال يعمل — انظر استكشاف الأخطاء وإصلاحها.
  • لإعداد الحساب/ملف تعريف الارتباط، يجب على الوكلاء غير المتفاعلين قراءة مصادقة API؛ السلوك متعدد الحسابات موجود في الطلب والحسابات.

f. انظر أيضًا