Проєктування та оцінка пошукового API зі штучним інтелектом
Створення масштабованого пошукового API, що обробляє 200 мільйонів запитів щодня за допомогою гібридного пошуку та інтелектуального курування контексту для моделей ШІ
Створення масштабованого пошукового API зі штучним інтелектом створює унікальні дослідницькі проблеми на стику інформаційного пошуку, штучного інтелекту та проєктування систем. На відміну від традиційних служб, які працюють із чітко визначеними даними, пошуковий API мусить безперервно індексувати мільярди документів, розуміти наміри запитів різними мовами та в різних доменах, а також видавати релевантні результати за мілісекунди. У світі агентів зі штучним інтелектом пошуковий API також повинен ретельно відбирати контекст, який надається моделям розробників, щоб гарантувати, що ці моделі працюють оптимально та містять максимально точну інформацію. Ефективна робота з контекстом вимагає від API не лише фіксації релевантності на рівні документа, але й розгляду окремих розділів та фрагментів документів як першокласних одиниць самих по собі.
У цій статті ми представляємо дизайн та оцінку Perplexity Search API. Спершу ми досліджуємо архітектуру та ключові технічні рішення, що лежать в основі нашої робочої пошукової інфраструктури, яка обробляє 200 мільйонів запитів щодня. Наша архітектура поєднує гібридні механізми пошуку, багаторівневі конвеєри ранжування, розподілене індексування та динамічний розбір за допомогою модуля самовдосконалення для розуміння вмісту.
Потім ми описуємо наш підхід до емпіричної оцінки продуктивності пошукового API за допомогою нещодавно відкритої платформи оцінювання. Завдяки всебічному бенчмаркінгу разом із наявними комерційними API ми демонструємо передову продуктивність як за якістю, так і за затримкою. Perplexity Search API доступний для розробників по всьому світу починаючи відсьогодні.
[Знайти search_evals на GitHub]
Створення пошукової системи, оптимізованої для моделей штучного інтелекту
З моменту заснування ми розуміли, що надійні пошукові можливості матимуть вирішальне значення для створення визначних продуктів на основі штучного інтелекту, які ми хотіли випустити. Спочатку ми сподівалися, що ці можливості вже існують у загальнодоступній формі. Ми експериментували з портфоліо пошукових API, доступних наприкінці 2022 року, і найперша версія пошукового двигуна Perplexity фактично включала деякі з цих пропозицій. Зокрема, ми аналізували запити користувачів, формулювали та надсилали запити до цих API, а також збирали результати як контекст для нашого подальшого конвеєра генерації.
Однак, оскільки користувачі масово приходили до Perplexity, ми швидко зрозуміли, że ці API не будуть масштабуватися разом із нашим зростанням. Ціни, з якими ми зіткнулися, були завищеними: один із провідних постачальників API стягував $200 за тисячу запитів. Але, що ще більш фатально, ці застарілі API просто не були розроблені для нових парадигм пошуку, запроваджених передовими системами штучного інтелекту.
По-перше, формати запитів і відповідей цих застарілих API були розроблені для світу, в якому люди були б єдиними споживачами результатів пошуку. У результаті ці API надавали пріоритет результатам на рівні документа, виключаючи більш деталізовану інформацію, виявлену підрозділами документів. Успіх моделі штучного інтелекту залежить від якості та компактності наданого контексту, і ми на власному досвіді побачили, як надто широкий пошук може завадити моделям штучного інтелекту, незалежно від того, наскільки релевантними загалом можуть здаватися отримані документи. Наші спроби нав'язати точність неточним результатам мали обмежений успіх.
Ми також помітили, що застарілі API були або занадто застарілими, або занадто повільними. Незалежно розроблені пошукові API спиралися на індекси, які були неповними та оновлювалися занадто рідко. API на основі скрапінгу, такі як різні неофіційні API SERP для Google Пошуку, вигравали від більш вичерпного індексу, але мали неприйнятно високу затримку через неефективність, притаманну запитам до сторонньої пошукової системи. Висока затримка робила API непридатними для додатків, орієнтованих на користувача, тоді як застарілість робила набори результатів непридатними для будь-якої системи штучного інтелекту, яка сподівається бути точною та надійною.
Нарешті, ми помітили розкол екосистеми штучного інтелекту між лексичним пошуком і семантичним пошуком, причому з'явилися системи, які були надмірно оптимізовані для однієї модальності на шкоду іншій. Ми стали свідками появи векторних баз даних, які не могли адекватно підтримувати навіть прості логічні фільтри. Традиційні пошукові бекенди виглядали не краще, маючи примітивну підтримку можливостей семантичного ранжування та пошуку, розблокованих штучним інтелектом.
Коли ми зрозуміли, що для подальшого вдосконалення Perplexity знадобиться створення власної спеціалізованої пошукової інфраструктури, ми звели наші спостереження до трьох ключових критеріїв:
Повнота, актуальність і швидкість: пошуковий індекс має бути всеосяжним, постійно оновлюваним і розробленим для затримки в реальному часі.
Деталізоване розуміння вмісту: крихкість моделей штучного інтелекту та обмежені контекстні вікна вимагають, щоб результати пошуку подавалися та ранжувалися на максимально детальному рівні.
Гібридний пошук і ранжування: як конвеєри пошуку, так і ранжування повинні включати лексичні та семантичні сигнали, щоб результати були корисними для штучного інтелекту.
Інфраструктура сканування та індексування
Робота в масштабі Perplexity вимагає інфраструктури, яка може всебічно відображати веб і реагувати на його постійну еволюцію. Наш пошуковий індекс відстежує понад 200 мільярдів унікальних URL-адрес із ємністю відстежувати ще багато сотень мільярдів.
Забезпечення того, щоб наш індекс охоплював достатньо повний спектр інтернету та щоб кожен документ відображав найновіший стан, є складним завданням. Існує внутрішня напруга між повнотою та актуальністю: для фіксованого бюджету індексування операції оновлення для існуючих сторінок повинні конкурувати з операціями індексування для нових невідвіданих сторінок. Ми балансуємо цю напругу за допомогою поєднання масштабування (яке послаблює обмеження оптимізації шляхом збільшення бюджету індексування) та пріоритезації на основі машинного навчання (яка гарантує, що кожна операція індексування є максимально цінною для індексу в цілому).
Ми створили індекс екзабайтного масштабу та апаратне забезпечення для сканування, яке масштабується горизонтально як за розміром, так і за обсягом запитів. Парки сканерів та індексування Perplexity разом нараховують десятки тисяч ЦП і сотні терабайт оперативної пам'яті зі значним запасом для подальшого масштабування. Ми поєднуємо цю обчислювальну інфраструктуру з балансом холодного та теплого зберігання. Ми використовуємо як навчені моделі, так і налаштовані евристики, щоб визначити, які документи слід зберігати гарячими, надаючи пріоритет документам із авторитетних доменів, документам щодо недостатньо висвітлених тем та іншим категоріям із надзвичайно високим потенціалом для збагачення нашого індексу.
Ця інфраструктура дозволяє Perplexity обробляти десятки тисяч операцій індексування на секунду. Але навіть за такого відносно щедрого бюджету масштаб інтернету є занадто великим, щоб індексувати кожну окрему URL-адресу на регулярній основі. Тут у гру вступає машинне навчання. Ми тренуємо модель машинного навчання, щоб прогнозувати, чи потрібно індексувати певну кандидату-URL. Мета навчання розроблена так, щоб гарантувати калібрування наших рішень щодо індексування як до важливості, так і до ймовірної частоти оновлення конкретної URL-адреси. Ми також покладаємося на машинне навчання, щоб точно вказати, коли планувати операцію індексування. Для сайтів із рутинними циклами публікації та оновлення це дозволяє нам відкладати операції до того моменту часу, коли вони будуть найкориснішими. Завдяки постійному вдосконаленню цих моделей машинного навчання ми можемо підтримувати індекс, який відповідає критеріям як повноти, так і актуальності.
Хоча наша інфраструктура сканування легко масштабується горизонтально, ми розуміємо, що оператори вебсайтів стикаються з різними технічними обмеженнями. Ми ретельно підтримуємо передбачувану та керовану частоту запитів до будь-якого заданого домену. PerplexityBot, наш пошуковий сканер, дотримується чітких лімітів, викладених у файлах robots.txt, або, за відсутності встановлених для домену лімітів, стандартних галузевих норм щодо частоти запитів. Ми також коригуємо нашу поведінку під час сканування, коли виявляємо недоступність сайту. Наша розподілена система розроблена для дотримання цих лімітів навіть за десятків тисяч одночасних операцій.
Самовдосконалення розуміння вмісту в масштабі інтернету
Навіть маючи один із найбільших і найсвіжіших пошукових індексів на планеті, якість результатів кожного запиту залежить від розуміння нашою системою вмісту кожного документа. Тут ми стикаємося з фундаментальною проблемою: інтернет є складним середовищем. Жоден фіксований набір правил синтаксичного аналізу не може впоратися з нескінченною різноманітністю макетів, структур і стилів по всьому інтернету.
Ми вирішили цю проблему, розробивши модуль розуміння вмісту, який аналізує вебсайти та витягує семантично значущий вміст за допомогою динамічних наборів правил. Вебсайт із великою кількістю добре структурованих даних у формі списків або таблиць може отримати вигоду від більш формалізованих правил синтаксичного аналізу та вилучення, тоді как інший вебсайт, що містить переважно неструктурований користувацький контент, може вимагати більш гнучкого набору правил. Оскільки інтернет є здебільшого статичним протягом коротких проміжків часу, ми виявляємо, що життєвий цикл певного правила є відносно довгим. Але оскільки сайти еволюціонують з часом і в міру того, як ми дізнаємося більше про найкращі способи вилучення інформації, наші набори правил також потребують постійного догляду.
Щоб полегшити цю динамічну адаптацію, ми (звісно) звертаємося до штучного інтелекту. У масштабі Perplexity ми спостерігаємо неймовірно багатий зріз інтернету в процесі обслуговування мільйонів користувацьких запитів щогодини. Це є основою для ітеративного циклу самовдосконалення. Ми спостерігаємо за поведінкою синтаксичного аналізу та витягнутими результатами наших поточних наборів правил у всій нашій множині запитів. Потім ми використовуємо передові мовні моделі (LLM), щоб оцінити продуктивність за двома основними вимірами:
Повнота: наш індекс повинен отримувати якомога більше семантично значущого вмісту, уникаючи при цьому надмірного вилучення інформативних чи безглуздих матеріалів.
Якість: наш індекс спирається на вміст високої якості як за змістом, так і за формою. Інформація має збиратися таким чином, щоб зберігати оригінальну структуру та макет вмісту.
Зауважте, що повнота та якість створюють ще одну внутрішню напругу: вручну оптимізувати якість можливо, але отримані правила синтаксичного аналізу можуть не вловити критично важливий контент. Подібним чином ми могли б вручну закодувати дозволені правила, які застосовують мінімальну фільтрацію до сирого вмісту, що може покращити повноту, але за рахунок якості. Саме тому ми звертаємося до самовдосконалення на основі штучного інтелекту, щоб розвивати наш набір правил таким чином, щоб оптимізувати обидва показники одночасно та адаптивно до домену.
Конкретно, після кожної оцінки ефективності синтаксичного аналізу на основі LLM наша система формулює набір запропонованих змін до набору правил для вирішення найважливіших класів помилок. Ці набори правил проходять подальшу перевірку, після чого ми розгортаємо нову версію в нашому індексаторі. З огляду на те, що вдосконалення логіки синтаксичного аналізу та вилучення може принести користь лише майбутнім операціям індексування, наші інвестиції в переіндексування, оптимізоване за допомогою машинного навчання, є особливо важливими: постійне оновлення документів із високим трафіком за допомогою найновішої версії цієї логіки забезпечує тісний цикл самовдосконалення.
Ці правила важливі не лише для базової продуктивності синтаксичного аналізу, а й для сегментації на підрозділи документів. Коли йдеться про передові LLM, кожен токен контексту є цінним. Величезний обсяг попередніх робіт задокументував, як продуктивність LLM погіршується зі збільшенням розміру контексту та забрудненням контексту нерелевантною інформацією. Наявність добре структурованого та всебічного синтаксичного аналізу дозволяє нам розкладати документи на автономні фрагменти, кожен з яких можна індивідуально отримувати та ранжувати під час виконання запиту.
Конвеєр пошуку та ранжування
Сучасний пошук вимагає забезпечення як повноти, так і релевантності в умовах жорсткого обмеження затримки. Конвеєр пошуку та ранжування Perplexity досягає цього завдяки багаторівневій архітектурі, яка поступово вдосконалює результати за допомогою серії дедалі складніших модулів. Ми вирішуємо проблему потенційних вузьких місць шляхом горизонтального масштабування будь-яких потенційних «пляшок із вузьким горлечком» до максимального можливого ступеня.
Конвеєр починається з отримання даних із нашого індексу. Ми не нав'язуємо вибір між лексичним та семантичним пошуком. Натомість ми робимо запит до пошукового індексу через обидві модальності та об'єднуємо результати в гібридний набір кандидатів. На цьому етапі пріоритетом є повнота, а не точність — наступні етапи конвеєра будуть оптимізовані для точності.
Конвеєр продовжується етапами попередньої фільтрації, на яких ми застосовуємо базову евристику та початкові фільтри, щоб видалити з набору кандидатів явно нерелевантний або застарілий вміст.
Потім ми використовуємо кілька етапі прогресивно вдосконаленого ранжування. Попередні етапи спираються на лексичні та вбудовані оцінювачі, оптимізовані для швидкості. У міру того як набір кандидатів поступово скорочується, ми використовуємо більш потужні перехресні кодери-реранкери для остаточного формування набору результатів. Завдяки нашим численним інвестиціям у продуктивність висновування ми можемо використовувати передові архітектури моделей для цих пізніших етапів, зберігаючи при цьому загальну затримку ранжування низькою.
Протягом цього конвеєра ми отримуємо та оцінюємо результати як на рівні документа, так і на підрівні документів. Як зазначалося вище, штучний інтелект вимагає ретельної розробки контексту. Наш конвеєр розроблений так, щоб виводити на поверхню моделі найбільш атомарні одиниці, щоб нижчі споживачі могли включати ці точні одиниці, не залучаючи нерелевантний контекст з інших місць у вихідних документах.
Забезпечення високої якості на кожному етапі цього конвеєра можливе лише завдяки спільному проєктуванню з портфоліо продуктів Perplexity. Кожна деталь стека ранжування розроблена так, щоб використовувати багатий сигнал, що створюється мільйонами запитів користувачів, які ми обслуговуємо щогодини. Переважна більшість цього сигналу є автоматизованою, причому кожна згенерована відповідь Perplexity надає емпіричну точку даних про якість пошуку, яка використовується в реальному агентному робочому процесі. Ми поєднуємо оцінки на основі штучного інтелекту з відгуками реальних людей, щоб збагатити дані навчання для наших моделей вбудовування та ранжування далеко за межі того, що може запропонувати будь-який створений вручну набір даних.
Ця синергія між пошуком і продуктом є унікальною для Perplexity. Застарілі пошукові системи обмежені грубим сигналом, що надається телеметрією синіх посилань. Новіші пошукові пропозиції намагалися впровадити деякі з цих концепцій зі штучним інтелектом, але їм бракує реальних середовищ, які можуть перевірити якість пошуку та забезпечити багатство сигналу, необхідне для швидких циклів вдосконалення. Нам пощастило мати відсутній інгредієнт: живу випробувальну площадку для якості пошуку на базі передових LLM, яка постійно перевіряється в бойових умовах мільйонами допитливих користувачів по всьому світу.
Встановлення нового рубежу якості та продуктивності
Створивши Perplexity Search API та SDK, щоб зробити нашу пошукову інфраструктуру доступною для розробників по всьому світу, ми хотіли зрозуміти, як різні комерційні пропозиції API проявляють себе в реальних варіантах використання штучного інтелекту. Оцінювати самі моделі штучного інтелекту стало звичною справою, але нам знадобився новий погляд на цей шаблон: оцінити якість пошукових API при їх виклику моделями штучного інтелекту.
Спочатку ми звернулися до екосистеми з відкритим кодом, щоб зрозуміти попередні розробки. Ми знайшли багато ключових інгредієнтів для ретельної оцінки, але жодної платформи, яка б інтегрувала ці інгредієнти в готовє рішення для бенчмаркінгу. Тому ми вирушили розробляти платформу оцінювання, яку міг би використовувати не лише Perplexity, але й будь-який дослідник чи розробник, який прагне протестувати пошукові API.
Використовуючи цю платформу оцінювання, ми ретельно протестували Perplexity Search API разом з іншими пропозиціями. Оптимізація продуктивності пошуку є складною справою з багатьма нюансами компромісів між якістю та швидкістю. На радість розробникам, ми виявили, що Perplexity Search API встановлює новий стандарт якості та затримки. Розробникам більше не потрібно вибирати між створенням блискавично швидких додатків і забезпеченням високоякісних результатів: з Perplexity вони можуть мати і те, і інше.
Розробка надійних оцінок для агентних пошукових робочих процесів
Ми почали з визначення трьох керівних принципів для нашої платформи оцінювання:
Спектр складності: платформа оцінювання повинна вимірювати продуктивність як для простих, так і для складних варіантів використання агентного штучного інтелекту.
Нейтральність: платформа оцінювання повинна оцінювати всі API на рівних умовах.
Простота: хоча деякі варіанти використання можуть бути складними, сама платформа повинна бути якомога простішою, щоб інші могли її зрозуміти, відтворити результати та розширити платформу з мінімальними зусиллями.
Наша легка платформа оцінювання, search_evals, досягає цих цілей завдяки простому модульному дизайну. Ми розробили дві обгортки для агентів зі штучним інтелектом, щоб охопити як класичні варіанти використання одноразового пошуку, так і вдосконалені агентні робочі процеси (ілюстровані різними продуктами «Глибоке дослідження», широко доступними на споживчому ринку). Обидві обгортки були реалізовані у простий спосіб, який залишає мало простору для прихованих переваг.
Для проведення оцінювання ми прийняли чотири бенчмарки: SimpleQA та FRAMES для однокрокового пошуку, а також BrowseComp і HLE для глибокого дослідження. Разом ці бенчмарки забезпечують загальноприйняті еталони для агентів знань. Дотримуючись встановлених умовностей, ми оцінюємо всі бенчмарки за допомогою тієї ж методології класифікатора з підказками, яка використовувалася в початковій роботі. Точні реалізації бенчмарків (включаючи логіку оцінювача) можна переглянути у нашому репозиторії GitHub.
Ми розробили платформу з урахуванням можливості відтворення та розширюваності. Оцінки на рівні завдань і базові вихідні дані агентів зберігаються під час кожного запуск. Додаткові обгортки, бенчмарки та пропозиції пошукових API можна легко інтегрувати. Дослідники та розробники можуть прочитати наші документи на GitHub для отримання додаткової інформації про розширення платформи відповідно до ваших точних потреб.
Результати оцінки
Озброївшись цією платформою оцінювання, ми вирушили оцінити наш Search API в порівнянні з іншими пропозиціями API. У всіх протестованих бенчмарках Perplexity виступає як найшвидший і найякісніший API на ринку.
Ми виявили, що наші вищезгадані інвестиції в індекс, пошук та ефективність ранжування окупилися сторицею. Медіанна затримка Perplexity становить 358 мс, що більш ніж на 150 мс випереджає другого за швидкістю провайдера. Затримка на 95-му перцентилі залишається комфортно нижче 800 мс. Зважаючи на довгі показники TTFT (час до першого токена) сучасних передових моделей, кожна мілісекунда має значення для створення чудового користувацького досвіду. Ми витратили останні два роки на оптимізацію затримки для власних користувачів, і ми раді, що ці ж інвестиції тепер принесуть користь і спільноті розробників.
Затримка пошукового API
(запити ініційовані з AWS us-east-1)
p50 | p75 | p90 | p95 | |
Perplexity | 358 мс | 443 мс | 604 мс | 763 мс |
Exa | 1375 мс | 1499 мс | 1798 мс | 2188 мс |
Brave | 513 мс | 637 мс | 728 мс | 808 мс |
На основі SERP* | 1342 мс | 1586 мс | 1743 мс | 1790 мс |
Перцентилі затримки Search API для запитів, ініційованих з AWS us-east-1.
* Багато постачальників пошукових API використовують скрапінг SERP як основу для своїх результатів. Щоб відобразити продуктивність таких підходів, ми використовуємо представницький API на базі Google SERP, який пропонує Tavily.
Ця перевага в швидкості не досягається за рахунок якості. Perplexity Search API забезпечує передову продуктивність як в умовах однокрокового пошуку, так і в глибокому дослідженні. У кожному протестованому бенчмарку Perplexity лідирує в наданні високоякісних результатів, які можуть живити робочі процеси штучного інтелекту різної складності. Розмах між Perplexity та найкращою альтернативою є особливо вираженим на SimpleQA та HLE, що вказує на те, що ці результати є надійними у всьому спектрі складності завдань.
Як і у випадку з затримкою, наше лідерство в якості пошуку випливає з нашого лідерства у створенні чудових, високо затребуваних продуктів штучного інтелекту. Наші мільйони користувачів використовують Perplexity, щоб задовольнити свою допитливість щодо будь-якої мислимої теми, а отримані сигнали якості та релевантності дозволяють нашим пошуковим моделям покращуватися з кожною годиною.
Бенчмарки якості пошукового API
Однокроковий пошук | Глибоке дослідження | |||
SimpleQA | FRAMES | BrowseComp | HLE | |
Perplexity | .930 | .453 | .371 | .288 |
Exa | .781 | .399 | .265 | .242 |
Brave | .822 | .320 | .221 | .191 |
На основі SERP* | .890 | .437 | .348 | .248 |
Показники якості Search API на SimpleQA, FRAMES, BrowseComp і HLE.
Ми все ще перебуваємо на початковому етапі розвитку пошукових систем на базі штучного інтелекту, і мистецтво та наука вимірювання, безсумнівно, будуть розвиватися. Ми запрошуємо спільноту зробити свій внесок, розробляючи суворі та творчі методи оцінки пошукових систем в епоху агентів зі штучним інтелектом.
Будівельний блок для наступного розділу штучного інтелекту
Майбутнє агентних систем та інтелектуальних помічників залежатиме від доступності багатих програмних інтерфейсів до колективних знань світу. Сучасні застарілі пошукові системи досягли насичення у використанні на рівні приблизно 10¹⁰ запитів на день — показник, який, ймовірно, досяг свого піку. Наступне покоління систем пошуку та вилучення обслуговуватиме на порядки більше запитів, оскільки все зростаюче суспільство агентів зі штучного інтелекту покладається на них для отримання точної інформації в реальному часі.
Наші зусилля на сьогоднішній день позиціонують нас як найшвидшу, найбільш продуктивну пошукову систему, доступну через API. Але для того, щоб підживити наступний розділ штучного інтелекту, знадобляться ще більш амбітні інновації. Як нам ефективно масштабувати ці системи в умовах постійно зростаючого попиту? Як можна оптимізувати ці пошукові системи у світлі нових підходів до розробки контексту та післянавчання? І як нам орієнтуватися у вічній напрузі між повнотою, актуальністю та затримкою? Це відкриті питання, які Perplexity з нашою комбінацією присутності продуктів, масштабу та технічних талантів має унікальні можливості вирішити.
Цитування
@online{perplexity2025ArchitectingAndEvaluatingAnAiFirstSearchApi,
author = {{Perplexity} and Aleksandr Bogutskii and Aleksandr Nikolenko and Aleksei Bykov and Alexander Pecheny and Alexandr Yarats and Arsenii Shevchenko and Denis Bykov and Dmitry Pervukhin and Ismail Gadzhiev and James Liounis and Kevin Hu and Kirill Priemko and Maksim Gaiduk and Maksim Morozov and Marko Kevac and Michael Liang and Mikhail Galanin and Nandor Licker and Nataliya Pevgova and Nikita Kireev and Nikolai Tretiak and Paul Schofield and Saif Ali Raja and Saleh Alghusson and Sebastian Sepulveda and Sergei Miller and Svyatoslav Feldsherov and Vitalii Polshkov and Vladimir Zaytsev and Denis Yarats},
title = {{Architecting and evaluating an AI-first Search API}},
date = {2025-09-25},
url = {https://www.perplexity.ai/hub/blog/architecting-and-evaluating-an-ai-first-search-api}
}