- Дата публикации
Perplexity превращает поиск в код: что даёт архитектура Search as Code
Что нового
Perplexity перестраивает свой поиск под агентные сценарии и называет это Search as Code (SaC).
Ключевые изменения:
-
Поиск как SDK, а не один чёрный ящик
- Вместо одного фиксированного
/searchтеперь есть набор примитивов в виде Python‑SDK. - Модель управляет отдельными шагами: извлечение документов, ранжирование, фильтрация, фан-аут по вариантам запросов, агрегация, рендеринг.
- Вместо одного фиксированного
-
Всё управление — через сгенерированный код
- Никаких function calling и MCP для поиска внутри SaC.
- Модель пишет Python‑код, который выполняется в защищённом sandbox‑окружении.
- За один прогон LLM можно запустить сотни и тысячи операций поиска вместо десятков последовательных вызовов API.
-
SDK поверх полностью переразобранного поискового стека Perplexity
- Инженеры разрезали прежний монолитный поиск на низкоуровневые модули: субдокументный поиск, комбинирование семантических и лексических сигналов, фильтры, агрегации.
- Высокоуровневые «готовые» пайплайны в SDK остались, но теперь это всего лишь шорткаты, а не единственный вариант.
-
Python как основной язык исполнения
- Рассматривали Python, Rust, TypeScript и Bash.
- После внутренних тестов выбрали Python как лучший вариант для LLM с точки зрения привычности и экосистемы библиотек обработки данных.
- Perplexity оставляет за собой право сменить рантайм, если это улучшит работу агентов.
-
Автоисследование (autoresearch) для улучшения SDK и навыков
- Запущен непрерывный цикл: модель сама предлагает изменения в SDK, проверяет их по трём метрикам — латентность, качество генерируемого кода, итоговая успешность задач.
- За несколько недель такой оптимизации SDK уже сильно поменялся по структуре и «эстетике» (имена функций, сигнатуры, паттерны использования).
- Тот же цикл использован для настройки Agent Skills, которые учат модели правильно пользоваться SDK.
-
Новая архитектура трёх слоёв
- Модели — «мозг» и контрольный план: разбирают задачу, планируют пайплайн поиска, пишут код.
- Sandbox‑окружение — безопасный рантайм для исполнения кода, с доступом к SDK и файловой системе.
- Agentic Search SDK — слой примитивов поверх поисковой инфраструктуры Perplexity.
-
Работа с промежуточным состоянием через файловую систему
- Тестировали два подхода: REPL с сохранением переменных в памяти и файловую систему с явной сериализацией.
- В длинных сценариях лучше показал себя вариант с persistent filesystem + явной сериализацией/десериализацией.
- Модели записывают промежуточное состояние в файлы и читают его в следующих шагах, вместо того чтобы тащить всё через токены.
-
Новый уровень управляемости поиска для агентов
- Модель получает доступ к сигналам ранжирования, спискам кандидатов и другим промежуточным данным, а не только к финальному списку ссылок.
- Можно строить и оптимизировать «на лету» пайплайны из тысяч операций поиска.
-
Практические результаты
- Perplexity заявляет, что SaC сдвигает «фронтир» по соотношению стоимость/качество для агентного поиска на наборе внутренних и публичных бенчмарков.
- Конкретных чисел в описании нет, но подчёркивается, что выигрыш достигается именно за счёт более точного и дешёвого обращения к поисковому стеку.
SaC уже внедряется во все ключевые продукты Perplexity: Search API, Agent API и Perplexity Computer. Внутри Computer отдельные задачи уже запускают сотни и тысячи операций поиска за несколько минут — руками так работать невозможно, но для агентов это нормальный режим.
Как это работает
1. От монолита к программируемому стеку
Классический сценарий выглядел так:
- LLM формирует текстовый запрос.
- Поисковый сервис запускает внутри себя фиксированный пайплайн: парсинг, извлечение, ранжирование, постобработка.
- Модель получает готовый набор документов и использует его как контекст.
LLM мог управлять только параметрами запроса: текст, иногда фильтры, количество документов. Всё, что происходило дальше, оставалось «под капотом» и не поддавалось тонкой настройке.
SaC меняет границу ответственности:
- Модель больше не вызывает «один большой поиск» как функцию.
- Модель пишет код, который шаг за шагом вызывает примитивы SDK: например, сначала быстрый широкоугольный поиск, потом уточняющий семантический, потом агрегацию и фильтр по доменам.
2. Agentic Search SDK
Perplexity не просто обернула существующий API в библиотеку. Поисковый стек заново разложили на модули и открыли их через SDK.
В SDK есть два уровня:
- Высокоуровневые функции — готовые пайплайны «как раньше», когда нужен простой поиск или когда модель не хочет тратить токены на сложное планирование.
- Низкоуровневые примитивы — отдельные шаги:
- извлечение документов по ключевым словам;
- семантический поиск;
- комбинирование сигналов;
- фильтрация по источникам;
- дедупликация;
- агрегация по ключам (например, по сайту или автору);
- рендеринг фрагментов под потребности LLM (субдокументный поиск, компактные сниппеты).
Модель может свободно смешивать эти уровни: где-то использовать готовый пайплайн, где-то вручную собрать кастомный.
3. Python‑sandbox как исполнитель
Сгенерированный моделью код не уходит напрямую на сервер с правами root. Perplexity запускает его в защищённом окружении:
- Изолированный рантайм: модель не может выйти за пределы доступных библиотек и SDK.
- Детерминированность: sandbox контролирует вычисления, чтобы результаты были воспроизводимыми.
- Доступ к SDK и файловой системе: код может вызывать примитивы поиска и читать/писать файлы для хранения промежуточных результатов.
Сценарий работы:
- Модель получает задачу от пользователя или «родительского» агента.
- Планирует, какие шаги поиска и обработки нужны.
- Генерирует Python‑код, используя подсказки из Agent Skills.
- Код выполняется в sandbox, вызывает SDK, сохраняет промежуточные данные при необходимости.
- Результаты (не обязательно сырые документы, а уже отфильтрованный и агрегированный материал) возвращаются модели как контекст для следующего шага рассуждений.
4. Управление состоянием между шагами
Perplexity протестировала два подхода к хранению состояния между шагами агента.
Вариант 1: REPL‑подход
- Sandbox сохраняет весь контекст исполнения: переменные, объекты, состояние.
- В следующем шаге модель просто продолжает писать код, обращаясь к уже существующим переменным.
- Плюс: минимум токенов — не нужно писать код сериализации.
- Минус: со временем пространство имён «засоряется», модель сложнее отслеживает, какие данные актуальны и зачем они нужны.
Вариант 2: файловая система + явная сериализация
- Sandbox предоставляет постоянную файловую систему, доступную между шагами.
- Модель сама решает, какие данные сохранить: пишет код
save_*()иload_*()с помощью утилит SDK. - Плюс: явный контроль над тем, что сохраняется и зачем. Легче отлаживать и отслеживать траекторию агента.
- Минус: дополнительные строки кода и небольшая задержка на сериализацию.
В тестах оба варианта показали схожую производительность на коротких задачах. Но на длинных цепочках действий файловая система с явной сериализацией оказалась надёжнее. Perplexity связывает это с тем, что требование «объявить, что именно ты сохраняешь» дисциплинирует модель и снижает хаос в состоянии.
В итоге SaC использует persistent filesystem + serde как основной вариант, но команда продолжает экспериментировать с подходами.
5. Agent Skills: как научить модель пользоваться SDK
SDK сам по себе — это просто набор функций. Чтобы LLM начала использовать его эффективно, Perplexity настроила специальные Agent Skills.
Особенности этих навыков:
- Написаны по внутренним принципам дизайна Skills Perplexity.
- Оптимизированы через отдельный autoresearch‑цикл с теми же метриками, что и для SDK: латентность, качество кода, итоговый успех задачи.
- Жёсткое ограничение размера: менее 2000 токенов в корневом SKILL.md. Это важно, чтобы не раздувать контекст и не съедать лимит модели.
Содержимое Skills:
- Не просто список функций SDK (его можно получить через рефлексию в рантайме).
- Краткие, но обобщаемые рекомендации: какие паттерны пайплайнов подходят под какие задачи.
- Несколько примеров «как собрать сложный пайплайн из примитивов».
После настройки Skills Perplexity наблюдает, что frontier‑модели уверенно строят пайплайны с тысячами операций поиска в рамках одной задачи.
Что это значит для вас
Для кого вообще SaC
SaC — это не один новый «поисковик» для ручного использования, а архитектура для продуктов Perplexity. Она важна, если вы:
- строите агентные системы, которые должны много читать, сравнивать и проверять информацию;
- используете Perplexity Search API, Agent API или Perplexity Computer;
- разрабатываете сложные пайплайны, где поиск — не один шаг, а постоянный фоновый процесс.
Если вы просто задаёте один вопрос LLM и ждёте один ответ, разницу вы почти не заметите. SaC раскрывается на длинных задачах.
Где SaC помогает
-
Сложные исследовательские запросы
Пример: агенту нужно сравнить десятки отчётов, собрать статистику, проверить противоречия.Что даёт SaC:
- Агент может разнести задачу на этапы: широкий сбор, фильтрация по источникам, проверка дат, поиск уточняющих фактов.
- В каждом этапе он использует разные стратегии поиска и разные примитивы SDK.
- В контекст модели попадает только то, что реально нужно для рассуждений, а не груда сырых документов.
-
Массовые фан-ауты и параллельные запросы
Если нужно:- прогнать сотни вариантов запросов;
- собрать результаты;
- дедуплицировать и отсортировать по важности.
В классическом подходе это сотни вызовов LLM с отдельными поисковыми запросами.
В SaC модель один раз генерирует код, который сам делает параллельные вызовы к поисковому стеку, агрегирует и возвращает уже сжатый результат. -
Задачи с жёстким лимитом контекста
Frontier‑модели хорошо рассуждают по компактному, плотному контексту. SaC позволяет:- не тащить в контекст все промежуточные списки документов;
- оставить тяжёлую фильтрацию, дедупликацию и сортировку внутри кода;
- «кормить» модель уже отфильтрованными, релевантными фрагментами.
-
Доменные сценарии с особыми правилами поиска
Если у вас свой набор источников, свои правила приоритизации и фильтрации, свои способы агрегировать данные, SaC позволяет:- явно зашить эти правила в пайплайны;
- использовать знания модели о домене при выборе стратегии поиска (например, когда сочетать лексический и семантический поиск, какие источники доверять).
-
Длинные агентные сессии (часы и дни)
SaC даёт агенту файловую систему для промежуточных результатов.
Агент может:- собрать большой корпус документов в одном шаге;
- сохранить его;
- в следующих шагах работать уже с этим корпусом, не повторяя поиск и не забивая токены.
Где SaC не особенно нужен
-
Простые одношаговые вопросы
«Кто выиграл матч вчера?» или «объясни, что такое attention в нейросетях» — тут достаточно обычного поиска или даже знаний модели. -
Сценарии без кода и без агентов
Если вы не используете Perplexity как платформу для агентов, а просто задаёте вопросы в интерфейсе, SaC останется «под капотом». -
Системы, где поиск — второстепенен
Если ваш агент в основном работает с внутренними базами данных, API и действиями (например, бронирование, управление CRM), а веб‑поиск — редкий гость, выигрыши от SaC будут ограниченными.
Важные ограничения
- SaC — архитектура внутри Perplexity. Это не отдельный открытый продукт, который можно поставить локально.
- Для доступа к SaC вам нужен доступ к продуктам Perplexity (Search API, Agent API, Computer). В российских сетях такой доступ может потребовать VPN, как и для многих западных AI‑сервисов.
Место на рынке
По сравнению с классическим поиском
Большинство поисковых систем, даже «заточенных под ИИ», продолжают работать по схеме:
- LLM формирует запрос.
- Поиск возвращает готовый SERP или набор фрагментов.
- LLM читает и отвечает.
Даже если под капотом есть векторные индексы, субдокументный поиск и сложные ранжировщики, модель не может ими управлять. SaC сдвигает границу: модель получает прямой доступ к этим шагам через код.
По сравнению с function calling / MCP
Многие агентные фреймворки сейчас опираются на function calling и MCP:
- Модель вызывает «функцию поиска» или MCP‑инструмент.
- Каждый вызов — отдельный шаг диалога с LLM.
- Чтобы сделать сложный пайплайн, нужно много шагов, каждый из которых стоит токены и время.
SaC убирает этот «челнок» между моделью и поиском:
- Модель один раз генерирует код.
- Код сам вызывает нужные примитивы поиска десятки и сотни раз.
- В LLM возвращается уже агрегированный итог.
Это снижает латентность и стоимость сложных сценариев, потому что дорогой ресурс — вызовы LLM — используются реже, а дешёвый ресурс — вычисления в sandbox и обращения к поисковому стеку — чаще.
По сравнению с другими агентными платформами
Многие платформы для агентов дают доступ к поиску в виде одного или нескольких инструментов:
- «web_search(query)»;
- иногда: «web_search_news», «web_search_scholarly» и т.п.
Perplexity делает ставку на более низкий уровень абстракции:
- SDK с примитивами вместо набора крупных инструментов.
- Python‑sandbox как стандартный способ оркестрации.
- Автоисследование для постоянной подстройки SDK под поведение frontier‑моделей.
Точных сравнительных цифр по скорости или стоимости с GPT‑4o, Claude 3.5 или другими стеками Perplexity не приводит. Но из описания архитектуры видно, что ставка сделана на снижение числа LLM‑вызовов в сложных сценариях и на более точное использование поискового индекса.
Как запустить (концептуально)
Исходный текст не содержит готовых фрагментов кода SDK, но по описанию архитектуры рабочий сценарий для разработчика или продуктовой команды, использующей Perplexity Computer / Agent API, выглядит так:
-
Определяете задачу агента
Например: «собрать и сопоставить данные из сотен статей по теме X за последние два года, найти противоречия, подготовить отчёт». -
Подключаете Perplexity Agent API или Computer
- Настраиваете агента с нужной моделью.
- Включаете доступ к SaC (он интегрирован в эти продукты).
-
Определяете стратегию поиска
В промпте или конфигурации агента описываете:- какие источники приоритетны;
- как относиться к новизне/старым данным;
- какие типы документов нужны (статьи, отчёты, документация);
- как проверять противоречивую информацию.
-
Агент сам собирает пайплайн через SDK
- Модель, опираясь на Agent Skills, пишет Python‑код с вызовами примитивов SDK.
- Код запускается в sandbox, делает десятки/сотни поисковых операций, сохраняет промежуточные результаты в файловую систему.
- В контекст модели возвращаются только агрегированные и отфильтрованные данные.
-
Вы получаете результат
Агент формирует отчёт, графики, резюме — в зависимости от задачи и настроек.
Для конечного пользователя это всё выглядит как «агент, который лучше и стабильнее ищет и анализирует», но под капотом именно SaC делает тяжёлую работу по оркестрации поиска.
SaC — это шаг от «поиска как сервиса» к «поиску как программируемому стеку» внутри Perplexity. Если вы строите агентные системы, которые много взаимодействуют с веб‑знаниями, архитектура Perplexity даёт больше контроля над тем, что именно и как попадает в контекст модели, и позволяет экономнее расходовать дорогие вызовы LLM на фоне всё более сложных задач.