Машинный перевод
Эта страница была автоматически переведена ИИ и может содержать ошибки. Если что-то неясно, обращайтесь к английскому источнику.
Режимы бесед¶
Беседы Perplexity бывают пяти режимов: search / deep-research / computer /
council / study. Режим определяется для каждой нити во время экспорта; он определяет, какие ответы API извлекаются, что попадает в каталог нити и какой путь архива получает нить (<account>/<mode>/…). Определённый режим записывается в thread.json (ключ mode) и используется фильтрацией pplx-export batch --mode.
pplx-ask также может создавать новые нити в четырёх из пяти режимов (все, кроме
computer) — см. pplx-ask.
a. Пять режимов кратко¶
| Режим | Имя в UI / модель | Содержимое витка | Цитаты | Продукты | Схематизированные блоки извлекаются |
|---|---|---|---|---|---|
search |
"Best" (pplx_pro; labs STUDIO/pplx_beta также отображаются сюда) |
Запрос + Ответ, текстовые шаги | на уровне витка + всей нити sources.* |
— | Нет (raw_blocks.json отсутствует) |
deep-research |
"Deep research" (pplx_alpha, фиксировано, без селектора) |
шаги исследования, включая RESEARCH_ANSWER |
да | report.md (полный отчёт) |
Да |
computer |
Computer (pplx_asi_opus, pplx_asi_opus_thinking) |
полный workflow_block: повествование, вызовы инструментов, подсказки/шаги субагента, пошаговые цитаты |
пошаговые + виток + нить | версионированные файлы в assets/ + запуски субагентов |
Да |
council |
model council (pplx_agentic_research; по умолчанию три модели) |
шаг COUNCIL_RESEARCH; вложенный рабочий процесс LLM_COUNCIL каждой модели свёрнут в <details> (раунды поиска, все источники, полный ответ каждой модели) |
на модель + агрегированные | ответы каждой модели сравниваются бок о бок | Да |
study |
Study (pplx_study) |
шаги/цитаты через блоки (проверено, что также содержат ресурсы) | да | ресурсы, если присутствуют | Да |
b. Как определяется режим¶
Авторитетом для определения является собственное поле платформы entry.search_mode
(SEARCH_MODE_MAP, normalize.py:50-59), собранное по всем записям
(normalize.py:106-115). Оно было проверено по официальной конфигурации модели
(GET /rest/models/config/v2): default_models.search=pplx_pro (UI "Best"),
default_models.research=pplx_alpha (UI "Deep research"), и значения отображаются один к одному в
режимы бесед:
Значение search_mode |
Режим |
|---|---|
ASI |
computer |
AGENTIC_RESEARCH |
council |
STUDY |
study |
RESEARCH |
deep-research |
SEARCH, STUDIO |
search |
Правила разрешения конфликтов (detect_mode, normalize.py:66-128):
- Переключение режима внутри одной нити (записи расходятся): берётся наивысший по специфичности —
computer > council > study > deep-research > search (
_MODE_SPECIFICITY,normalize.py:63) — иlog.warning. - Конфликт с нижестоящими сигналами (имена шагов /
display_model):search_modeпобеждает,log.warning(normalize.py:120-123). search_modeполностью отсутствует → исходная цепочка: URL содержит/computer/tasks/илиmetadata.mode == '4'или индексный режим ∈ASI/COMPUTER→computer; шагCOUNCIL_RESEARCH→council; шагRESEARCH_ANSWER→deep-research; избыточный сигналdisplay_model(DISPLAY_MODEL_MODE,normalize.py:32-37) побеждает при конфликте; ничего не совпало →searchпо умолчанию.- Отсутствие всех сигналов не означает search: конвейер всё равно извлекает схематизированные
блоки (
adapter.py:83-89), чтобы дрейф поля платформы не мог незаметно отброситьraw_blocks.json.
Почему pplx_alpha не является сигналом для определения
pplx_alpha — это модель, предназначенная для RESEARCH — она является целью, которую должен обнаружить классификатор,
а не свидетельством для обнаружения, поэтому она намеренно исключена из таблицы соответствия
(комментарий normalize.py:15-31).
Полное дерево решений со всеми ветвями: Конвейер экспорта — определение режима.
c. Куда попадают полезные данные субагентов¶
Запуски Computer/council порождают фоновые рабочие процессы субагентов. Каждый фоновый
workflow_payload отображается ровно в одном месте, никогда дважды; на уровне пользователя
три возможных места размещения:
- Привязан — внутри инициирующего витка: виток, запустивший субагента, содержит
соответствующий идентификатор полезных данных, поэтому запуск отображается встроенно в рабочем процессе этого витка
(
turns/turn_NNNN.md), с подсказкой, шагами, ответом и источниками. - Заглушка витка — раздел "子代理工作" (Работа субагента): виток-заглушка
subagent_resultв пределах 10-секундного окна завершения поглощает полезные данные; ответ не добавляется обратно. - Приложение нити — конец
conversation.md: всё оставшееся (прерванные запуски не создают уведомления о завершении, поэтому первые два уровня обязательно пропускают) архивируется дословно под "## 后台任务(未归入轮次)" (Фоновые задачи (не отнесённые к виткам)) — без угадывания привязки ко времени, принимается любой статус.
Правила сопоставления, структуры данных и гарантии однократного потребления: Субагенты и прерывания.
d. Прерывания: незавершённые рабочие процессы¶
Рабочие процессы, которые не завершились, аннотируются встроенно везде, где они отображаются — в заголовках рабочих процессов, заголовках субагентов и вложенных сводках <details>. Три аннотации
(parsers.classify_wf_status, parsers.py:263-284):
| Аннотация | Условие | Значение |
|---|---|---|
⏸ 限额中断(内容截至中断点) (прервано лимитом — содержимое обрывается в точке прерывания) |
WORKFLOW_AWAITING_NEXT_STEPS + locked_reason=spending_limit_exceeded |
исчерпан лимит расходов; рабочий процесс остановлен на середине выполнения |
⏸ 中断待续 (прервано, ожидает продолжения) |
WORKFLOW_AWAITING_NEXT_STEPS без locked_reason |
прервано, может быть продолжено на платформе |
⛔ 已取消 (отменено) |
WORKFLOW_CANCELED |
отменено пользователем или платформой |
COMPLETEDникогда не аннотируется (здоровые нити получают нулевой diff); неизвестные будущие значения статуса остаются безмолвными.- Каждый аннотированный случай также регистрируется в
thread.json.interruptionsкак{location, kind, headline, status}— местоположения выглядят какturn_0007,turn_0011/subagent,turn_0024/subagent_stub,background_unassigned(parsers.py:535-583; ключ отсутствует у здоровых нитей). - Возобновление не требует особого случая: когда вы продолжаете прерванную нить на
платформе, её
lastUpdatedизменяется, следующий инкрементальный экспорт повторно извлекает её, и аннотации просто исчезают после завершения рабочего процесса. См. Инкрементальная синхронизация.
Наблюдаемые значения статусов и распределение: Ответы API и ошибки; конечный автомат: Субагенты и прерывания.
e. Варианты перезаписи ответов (answer_variants)¶
Когда платформа перезаписывает ответ (A/B-эксперименты), заменённый вариант невидим в
API — возвращается только выбранный ответ, в то время как проигравший собрат оставляет след в
entries[].side_by_side_metadata и может быть позже удалён (подтверждены мёртвые ссылки собратьев:
403 VIEW_THREAD_NOT_ALLOWED). Инструмент делает "перезапись произошла" наблюдаемой:
- Регистрация: совпадения по суженным критериям записываются в
thread.json.answer_variants(fs_writer.py:247-252; ключ отсутствует без совпадений) и добавляются в центральный реестрindex/answer_variants_log.jsonl, дедуплицируются по (нить, запись) и идемпотентны (variant_log.py:76). - Оповещения: одна строка WARNING, доступная для grep,
ANSWER_VARIANT_DETECTEDс полными полями местоположения (uuid/uuid8 нити, entry_uuid, sibling_uuid, selection_status, experiment_role) при каждом онлайн-совпадении;re-renderповторно регистрируется офлайн и предупреждает только при добавлении или изменении содержимого, поэтому полные перезапуски библиотеки остаются тихими; сводка пакета добавляет счётчик совпадений ⚠. - Ручной повторный архив: варианты-собратья эмпирически являются мёртвыми ссылками, поэтому альтернативный
ответ обычно не может быть восстановлен через API. При совпадении оперативно подтвердите альтернативный
ответ вручную (UI платформы, ваши собственные записи, скриншоты); если вы его получите, запишите его как
rewritten_answer_variant.mdвнутри каталога нити. Если нет,thread.json.answer_variantsвместе с реестром jsonl являются окончательной отслеживаемой записью.
Цепочка обнаружения и повторная регистрация офлайн: Офлайн-операции; семантика полей и доказательства мёртвых ссылок: Ответы API и ошибки.
f. Принципы точности отображения¶
Независимо от режима, отображение следует одному и тому же контракту точности:
- Ответы полностью, никогда не усекаются — старый лимит
[:4000]был удалён, потому что он обрезал предложения на середине (render.py:645-647). - Таблицы никогда не усекаются —
WORKFLOW_ITEM_TABLEотображает каждую строку и столбец, экранируя|и символы новой строки в заголовках и ячейках, чтобы структура Markdown сохранялась (render.py:211-243). - Полные цитаты — три канала сбора (
entry.sources+FINAL.web_results+WORKFLOW_ITEM_SOURCES), дедуплицированные по URL вsources.*; ни одна процитированная не отбрасывается. - Сырой JSON API является границей содержимого — всё отображаемое берётся из
raw_entries.json/raw_blocks.json; то, что API не возвращает (например, заменённый вариант ответа), не может быть отображено и выводится через реестры вместо того, чтобы быть выдуманным. - Складки UI, архив раскрывает — детали, которые веб-UI скрывает за складками и кликами
(повествование рабочего процесса Computer и ввод/вывод инструментов, запуски каждой модели council, шаги субагентов),
отображаются полностью; блоки
<details>сохраняют читаемость структуры документа без потери информации (render.py:46,render.py:404-413). - Структурная надёжность — размер блоков кода подгоняется под их содержимое (
_fence_for,render.py:28-43), чтобы вывод инструмента, содержащий собственные блоки, не мог нарушить парность, и разделители LaTeX нормализуются до$$/$с защищёнными сегментами кода (normalize_math_delims).
Как сохранённые сырые ответы делают всё это регенерируемым офлайн: Конвейер экспорта и Офлайн-операции.
g. См. также¶
- Структура архива — куда попадают файлы каждого режима
- pplx-ask — создание новых нитей в каждом режиме
- Инкрементальная синхронизация — повторное извлечение продолженных нитей
- Конвейер экспорта — полное дерево решений определения режима
- Субагенты и прерывания — водопад атрибуции и конечный автомат
- Ответы API и ошибки — наблюдаемые значения полей