Perplexity представила Photon: рушій вилучення на Rust, що скорочує p99-затримку з 800 до 65 мс
Perplexity випустила Photon — власний рушій пошуку та ранжування, написаний мовою Rust. Він замінює рушій із відкритим кодом, який Perplexity форкнула для свого пошукового стека з нативною підтримкою ШІ. Тепер Photon обробляє пошук і ранжування всього виробничого трафіку. Він також забезпечує роботу нового режиму Fast Search в API Perplexity Search. Perplexity повідомляє про затримку одного виклику 160 мс на рівні p50 і 230 мс на рівні p95.
Чи можна його розгорнути? Так, як розміщений API. Установіть search_type: "fast" для POST /search і сплачуйте $1 за 1 000 запитів. Сам Photon не має відкритого коду, тому рушій не можна розгорнути на власній інфраструктурі.
Чому Perplexity замінила старий рушій
У міру зростання індексу старий рушій зіткнувся з 3 обмеженнями:
- Затримка в хвості розподілу: У виробничому середовищі p99 наближався до 800 мс. Обсяг даних перевищив обсяг оперативної пам’яті, тому
mlockне був варіантом. Холодне читання спричиняло значні промахи сторінок, які блокували запити. - Стрибки під час об’єднання: Під час злиття дискових індексів p99 зростав приблизно до 1,2 с протягом 10–15 хвилин.
- Повільне відновлення: Розгортання та синхронізація додаткового кластера могли тривати понад тиждень. Відновлення також збільшувало частку неповних відповідей.
Команда Perplexity дійшла висновку, що створити рушій з нуля простіше й дешевше, ніж підтримувати власний форк.
Як працює Photon
Балансувальник навантаження спрямовує кожен запит до брокера Photon. Брокер розподіляє запит між групою шард і стежить за тайм-аутами. Кожен шард виконує пошук, початкове ранжування та ранжування другого етапу. Потім брокер об’єднує кандидатів і отримує ключові поля документів.
- Адаптивні списки публікацій: Короткі списки зберігаються вбудованими в межах однієї сторінки. Довші списки розділяються на блоки з фіксованими діапазонами ідентифікаторів документів. Розріджені блоки зберігають відсортовані масиви зміщень і використовують пошук із пропусками. Щільні блоки використовують бітові карти, тому перевірка належності перетворюється на отримання одного біта.
- Обмежений бюджет обходу: Алгоритм, подібний до WAND, розділяє списки на керувальні та пробні. Спочатку дешеві перевірки наявності обмежують максимальний бал кожного кандидата. Точні частоти термінів зчитуються лише тоді, коли кандидат може подолати поріг.
- Записи docblob: Кожен документ отримує компактний запис із частотами, масками полів і позиціями. Для термінів використовується кодування Elias–Fano, тому під час ранжування декодуються лише знайдені терміни. Для ранжування кандидата потрібен лише 1 пошук на документ.
- Пакетне асинхронне читання: Зміщення записів відомі заздалегідь, тому дискові читання виконуються пакетами через
io_uring. Кеш спочатку перевіряє весь пакет. Читачі не використовують блокування, а для витіснення застосовується CLOCK замість спільного списку LRU. - Окремі побудова та обслуговування: Індексатори створюють версійовані індекси шард із таблиць YTsaurus на виділених вузлах. Контролер по черзі перемикає групи обслуговування та прогріває кеші за допомогою повторно відтворених запитів із журналу пошуку.
Тепер повний вебіндекс створюється за кілька годин — однозначну кількість.
Інтерактивне пояснення: Photon зсередини
Результати у виробничому середовищі
- Затримка пошуку та ранжування на рівні p99 знизилася приблизно з 800 мс до 65 мс. Це охоплює лише етапи Photon.
- Photon працює приблизно на 20% меншій кількості серверів обслуговування, ніж старі вузли вмісту.
- Він зберігає приблизно у 2,5 раза більше даних на документ, що Perplexity використала для покращення якості ранжування.
- Для фіксації того самого набору даних за допомогою
mlockпотрібно було б приблизно у 4,6 раза більше резидентної пам’яті, ніж Photon використовує сьогодні. - Перемикання версій індексу більше не спричиняє стрибків затримки.
Fast Search: швидкість і вартість для агентів
Fast Search поєднує Photon із легшим ранжуванням, оптимізованим для агентних робочих процесів. Perplexity протестувала його на 6 бенчмарках: WideSearch, BrowseComp, DSQA, FRAMES, SEAL-0 і SEAL-Hard. На 3 554 завданнях Fast набрав 64,3% за оцінюваної вартості моделі та пошуку $59,73. Стандартний пресет набрав 64,0% за ціною $187,60, тож Fast був приблизно на 68% дешевшим.
Компроміс помітний у ширшій якості пошуку. На внутрішніх бенчмарках довгого хвоста релевантність (DCG) знизилася з 2,45 до 2,21. Доступність відповідей впала з 0,596 до 0,567 — на 2,9 відсоткового пункта. Perplexity рекомендує Fast для повсякденних агентних циклів, а стандартний режим — для складних неоднозначних запитів.
curl -X POST 'https://api.perplexity.ai/search' \
-H "Authorization: Bearer $PERPLEXITY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"query": "latest stable Rust release", "search_type": "fast", "max_results": 5}'У Python SDK 0.43.4 і 0.43.5 передавайте extra_body={"search_type": "fast"} відповідно до документації.
Fast Search у порівнянні з найближчими конкурентами
| Функція | Perplexity Fast Search | Exa Instant | Parallel Search Turbo | Tavily ultra-fast |
|---|---|---|---|---|
| Параметр запиту | search_type: "fast" | type: "instant" | mode: "turbo" | search_depth: "ultra-fast" |
| Затримка за даними постачальника | 160 мс p50, 230 мс p95 (блог) | ~250 мс у типовому випадку (документація); менше 200 мс на момент запуску | ~200 мс (документація) | Дані не опубліковані; режим із найнижчою затримкою (документація) |
| Ціна за 1 000 запитів | $1 (тарифи) | $4 за до 10 результатів (тарифи) | $1 (документація) | 1 кредит: $8 за оплатою факту використання, від $5 до $7,50 у тарифних планах (кредити) |
| Результатів на запит | Від 1 до 20 | 10 у базовій ціні, $1 за 1 000 за кожен додатковий результат | Не вказано | Не вказано |
| Відомі обмеження | Нижча релевантність, ніж у стандартного пресету | Додаткові результати оплачуються окремо | Лише запити англійською та японською | Нижча релевантність, ніж в інших режимах |
| Запущено | 24 вересня 2026 року | 12 лютого 2026 року | 13 липня 2026 року (блог) | 5 січня 2026 року (блог) |
Усі показники затримки надані постачальниками за різних умов, тому їх не можна безпосередньо порівнювати.
Основні висновки
- Photon — рушій пошуку та ранжування Perplexity на Rust, який тепер обслуговує весь виробничий трафік.
- Затримка p99 у виробничому середовищі знизилася приблизно з 800 мс до 65 мс.
- Fast Search повідомляє про 160 мс p50 і 230 мс p95 за ціною $1 за 1 000 запитів.
- Fast знизив оцінювану вартість агентських завдань приблизно на 68% за зіставної якості виконання завдань.
- Він поступається частиною релевантності пошуку, тому для складних запитів варто залишати стандартний пресет.
Ознайомтеся з технічними деталями та документацією Fast Search. Уся подяка досліднику цього проєкту. Також не забудьте підписатися на нас у Twitter і приєднатися до нашого сабреддіту з понад 150 тисячами учасників про машинне навчання та підписатися на нашу розсилку. Стривайте! Ви є в Telegram? тепер ви також можете приєднатися до нас у Telegram.
Потрібно співпрацювати з нами для просування вашого репозиторію GitHub, сторінки Hugging Face, релізу продукту, вебінару тощо? Зв’яжіться з нами
Перекладено автоматично з англійської. Оригінал статті — за посиланням нижче.