Arkitektur og evaluering af en AI-først søge-API
Opbygning af en skalerbar søge-API, der håndterer 200 millioner daglige forespørgsler ved hjælp af hybrid hentning og intelligent kontekstkuratering til AI-modeller
At opbygge en skalerbar, AI-fokuseret søge-API udgør unikke forskningsmæssige udfordringer i krydsfeltet mellem informationssøgning, AI og systemdesign. I modsætning til traditionelle tjenester, der opererer med afgrænsede data, skal en søge-API løbende indeksere milliarder af dokumenter, forstå forespørgselsintentioner på tværs af sprog og domæner samt levere relevante resultater inden for millisekunder. I en verden af AI-agenter skal en søge-API desuden omhyggeligt kuratere den kontekst, der stilles til rådighed for udvikleres modeller, for at sikre, at disse modeller yder optimalt og inkorporerer maksimalt nøjagtig information. Effektiv kontekstteknik kræver, at API'en ikke blot indfanger relevans på dokumentniveau, men også behandler individuelle afsnit og tekstdele i dokumenterne som ligeværdige enheder i sig selv.
I denne artikel præsenterer vi designet og evalueringen af Perplexity Search API. Vi undersøger først arkitektur- og nøgletekniske beslutninger bag vores produktionssøgeinfrastruktur, som behandler 200 millioner daglige forespørgsler. Vores arkitektur kombinerer hybride hentningsmekanismer, rangordningspipeliner i flere trin, distribueret indeksering og dynamisk parsing gennem et selviscenesættende indholdsforståelsesmodul.
Vi beskriver derefter vores tilgang til empirisk evaluering af søge-API'ens ydeevne gennem et nyt open source-evalueringsrammewerk. Gennem omfattende benchmarking sammen med eksisterende kommercielle API'er demonstrerer vi state-of-the-art ydeevne på både kvalitet og svartid. Perplexity Search API er tilgængelig for udviklere over hele verden fra i dag.
Opbygning af et søgesystem optimeret til AI-modeller
Siden vores grundlæggelse har vi forstået, at robuste søgeevner ville være afgørende for at muliggøre de kategoridefinerede AI-produkter, vi ønskede at lancere. Oprindeligt håbede vi, at disse evner allerede fandtes i en offentligt tilgængelig form. Vi eksperimenterede med porteføljen af søge-API'er, der var tilgængelige i slutningen af 2022, og den allerførste version af Perplexity's svarmotor inkorporerede faktisk nogle af disse tilbud. Helt konkret analyserede vi brugerforespørgsler, formulerede og sendte anmodninger til disse API'er samt indsamlede resultaterne som kontekst til vores efterfølgende genereringspipeline.
Men efterhånden som brugere strømmede til Perplexity, indså vi hurtigt, at disse API'er ikke ville kunne skalere med vores vækst. De priser, vi mødte, var ublu, hvor en førende API-leverandør opkrævede $200 per tusinde forespørgsler. Men endnu mere fatalt var det, at disse ældre API'er simpelthen ikke var designet til de nye hentningsparadigmer, som blev introduceret af avancerede AI-systemer.
Til at begynde med var anmodnings- og svarformaterne for disse ældre API'er designet til en verden, hvor mennesker ville være de eksklusive forbrugere af søgeresultater. Som følge heraf prioriterede disse API'er resultater på dokumentniveau, udelukkende på bekostning af mere finkornede informationer afsløret af underdokumentenheder. En AI-models succes afhænger af kvaliteten og kompaktheden af den leverede kontekst, og vi så på førstehånd, hvordan alt for bred hentning kunne afspore AI-modeller, uanset hvor relevante de hentede dokumenter som helhed måtte fremstå. Vores forsøg på at presse præcision ned over upræcise resultater mødte begrænset succes.
Vi observerede også, at de ældre API'er enten var for forældede eller for langsomme. Uafhængigt udviklede søge-API'er var afhængige af indekser, der var ufuldstændige og alt for sjældent opdaterede. Scrapningsbaserede API'er, såsom de forskellige uofficielle SERP-API'er til Google Search, nød godt af et mere omfattende indeks, men tilbød uacceptabelt høj svartid på grund af den ineffektivitet, der ligger i at forespørge på en tredjepartssøgemaskine. Høj svartid gjorde API'er uegnede til brugerrettede applikationer, mens forældelse gjorde resultatsættene ubrugelige for ethvert AI-system, der håbede på at være nøjagtigt og troværdigt.
Endelig observerede vi, at AI-økosystemet delte sig op i lektikalsk søgning og semantisk søgning, hvor der opstod systemer, som var overoptimeret til den ene modalitet frem for den anden. Vi så fremkomsten af vektordatabaser, der ikke engang kunne understøtte simple booleske filtre på en tilfredsstillende måde. Traditionelle søge-backend'er klarede sig kun lidt bedre med primitiv understøttelse af de muligheder for semantisk rangordning og hentning, der blev muliggjort af AI.
Da vi indså, at det ville kræve opbygning af vores egen dedikerede søgeinfrastruktur at gøre Perplexity endnu bedre, kogte vi vores observationer ned til tre nøglekriterier:
Fuldstændighed, friskhed og hastighed: søgeindekset skal være omfattende, konstant opdateret og designet med henblik på svartid i realtid.
Finkornet indholdsforståelse: AI-modellers skrøbelighed og begrænsede kontekstvinduer kræver, at søgeresultater præsenteres og rangordnes på det mest granulære niveau som muligt.
Hybrid hentning og rangordning: både hentnings- og rangordningspipelinerne skal inkorporere lektikalske og semantiske signaler for at gøre resultaterne nyttige for AI.
Crawl- og indekseringsinfrastruktur
At operere i Perplexity-skala kræver infrastruktur, der kan kortlægge the web i sin helhed og reagere på dets konstante udvikling. Vores søgeindeks sporer over 200 milliarder unikke URL'er med kapacitet til at spore mange hundrede milliarder flere.
Det er en vanskelig bedrift at sikre, at vores indeks dækker en tilstrækkeligt omfattende del af internettet, og at hvert dokument afspejler den nyeste tilstand. Der findes en indbygget spænding mellem fuldstændighed og friskhed: for et fast indekseringsbudget skal opdateringshandlinger for eksisterende sider konkurrere med indekseringshandlinger for nye, ubesøgte sider. Vi balancerer denne spænding gennem en kombination af skalering (som lempet optimeringsbegrænsningen ved at øge indekseringsbudgettet) og ML-drevet prioritering (som sikrer, at hver indekseringshandling er maksimalt værdifuld for indekset som helhed).
Vi har opbygget et indeks og et crawl-apparat i exabyte-skala, der skalerer horisontalt med både størrelse og forespørgselsvolumen. Perplexity's crawler- og indekseringsflåder omfatter tilsammen ti tusindvis af CPU'er og hundreder af terabytes RAM med betydelig margen til yderligere skalering. Vi forener denne beregningsinfrastruktur med en balance mellem kold og varm lagring. Vi bruger både indlærte modeller og finjusterede heuristikker til at afgøre, hvilke dokumenter der skal holdes varme, idet vi prioriterer dokumenter fra autoritative domæner, dokumenter om underbelyste emner og andre kategorier med et enormt potentiale til at berige vores indeks.
Denne infrastruktur sætter Perplexity i stand til at behandle ti tusindvis af indekseringshandlinger i sekundet. Men selv med dette relativt generøse budget er internettets skala alt for stor til at indeksere hver eneste URL på et hyppigt og tilbagevendende grundlag. Det er her, ML kommer ind i billedet. Vi træner en ML-model til at forudsige, om en given kandidat-URL skal indekseres. Træningsmålet er udformet, så vi sikrer, at vi kalibrerer vores indekseringsbeslutning i forhold til både vigtigheden og den sandsynlige opdateringshyppighed for den specifikke URL. Vi er også afhængige af ML til at fortælle os præcist, hvornår indekseringshandlingen skal planlægges. For websteder med rutinemæssige udgivelses- og opdateringsfrekvenser giver dette os mulighed for at udskyde handlinger til det tidspunkt, hvor de sandsynligvis vil være mest nyttige. Gennem løbende finpudsning af disse ML-modeller er vi i stand til at opretholde et indeks, der lever op til målet om både fuldstændighed og friskhed.
Selvom vores crawlinfrastruktur let skalerer horisontalt, er vi opmærksomme på, at webstedsoperatører står over for forskellige tekniske begrænsninger. Vi sørger omhyggeligt for at opretholde en forudsigelig og håndterbar rater af anmodninger til et givet domæne. PerplexityBot, vores søgecrawler, overholder eksplicitte grænser fastsat i robots.txt-filer eller, i mangel af domænespecifikke grænser, industristandarder for anmodningsrater. Vi tilpasser også vores crawl-adfærd, når vi opdager, at et websted ikke er tilgængeligt. Vores distribuerede system er arkitektonisk designet til at håndhæve disse grænser selv på tværs af ti tusindvis af samtidige handlinger.
Selviscenesættende indholdsforståelse i internetskala
Selv med et af de største og friskeste søgeindekser på planeten afhænger resultatkvaliteten af hver forespørgsel af vores systems forståelse af hvert dokuments indhold. Her står vi over for en fundamental udfordring: internettet er et rodet sted. Intet fast sæt af parsningsregler kan håndtere den uendelige variation af layouts, strukturer og stilarter, der findes på tværs af hele internettet.
Vi løste denne udfordring ved at udvikle et indholdsforståelsesmodul, som parser websteder og udtrækker semantisk meningsfuldt indhold ved hjælp af dynamiske regelsæt. Et websted med meget velstruktureret data i form af lister eller tabeller kan drage fordel af mere formelbaserede parsnings- og udtrækningsregler, hvorimod et andet websted, der primært indeholder frit formuleret brugergenereret indhold, kan kræve et løsere regelsæt. Da internettet for det meste er statisk over korte tidsrammer, oplever vi, at levetiden for en given regel er forholdsvis lang. Men i takt med at websteder udvikler sig over tid, og efterhånden som vi lærer mere om de bedste måder at udtrække information på, kræver vores regelsæt også løbende pleje.
For at facilitere denne dynamiske tilpasning vender vi os (naturligvis) mod AI. I Perplexity's skala observerer vi et utroligt rigt tværsnit af internettet i processen med at betjene millioner af brugerforespørgsler i timen. Dette danner grundlag for en iterativ selviscenesættende forbedringssløjfe. Vi observerer parsningsadfærden og de udtrukne resultater fra vores nuværende regelsæt på tværs af vores forespørgselsunivers. Vi bruger derefter avancerede LLM'er til at vurdere ydeevnen på tværs af to primære dimensioner:
Fuldstændighed: vores indeks bør modtage så meget semantisk meningsfuldt indhold som muligt, samtidig med at vi undgår fejlagtig udtrækning af uinformerende eller meningsløst materiale.
Kvalitet: vores indeks er afhængigt af indhold, der er af høj kvalitet i både substans og form. Information bør indfanges på en måde, der bevarer det oprindelige indholds struktur og layout.
Bemærk, at fuldstændighed og kvalitet udgør en anden indbygget spænding: det er muligt manuelt at optimere for kvalitet, men de resulterende parsningsregler formår muligvis ikke at indfange kritisk indhold. På samme måde kunne vi hårdkode tilladende regler, der anvender minimal filtrering på det rå indhold, hvilket kunne forbedre fuldstændigheden, men på bekostning af kvaliteten. Det er derfor, vi vender os mod AI-drevet selviscenesættende forbedring for at udvikle vores regelsæt på en måde, der kan optimere for begge dele på én gang på en domænetilpasset måde.
Konkret formulerer vores system, efter hver LLM-drevet vurdering af parsningsydeevnen, et sæt foreslåede ændringer til regelsættet for at imødegå de mest betydningsfulde fejlklasser. Disse regelsæt undergår yderligere validering, hvorefter vi udruller den nye version til vores indekser. Da forbedringer i parsnings- og udtrækningslogikken kun kan gavne fremtidige indekseringshandlinger, er vores investeringer i ML-optimerede genindekseringer særligt vigtige: kontinuerlig opdatering af højttrafikdokumenter ved hjælp af den nyeste version af denne logik sikrer en tæt selviscenesættende forbedringssløjfe.
Disse regler betyder ikke kun noget for den grundlæggende parsningsydeevne, men også for segmentering i underdokumentenheder. Når det gælder avancerede LLM'er, er hvert token af kontekst dyrebart. Et stort omfang af tidligere arbejde har dokumenteret, hvordan LLM-ydeevnen forringes med øget kontekststørrelse og forurening af konteksten med irrelevant information. At have velstruktureret, omfattende parsing gør det muligt for os at nedbryde dokumenter i selvstændige tekstdele, som hver for sig kan hentes og rangordnes individuelt på forespørgselstidspunktet.
Hentnings- og rangordningspipeline
Moderne søgning kræver, at der sikres både fuldstændighed og relevans inden for et stramt svartidsbudget. Perplexity's hentnings- og rangordningspipeline opnår dette gennem en flertrinsarkitektur, der gradvist finpudser resultater med en række stadigt mere sofistikerede moduler. Vi løser potentielle flaskehalse ved at skalere eventuelle flaskehalse horisontalt i størst mulige omfang.
Pipelinen begynder med hentning fra vores indeks. Vi tvinger ikke et valg igennem mellem lektikalsk og semantisk hentning. I stedet forespørger vi søgeindekset via begge modaliteter og fletter resultaterne sammen til et hybridt kandidatsæt. På dette stadie er prioriteten omstændelighed frem for præcision – efterfølgende stadier i pipelinen vil optimere for præcision.
Pipelinen fortsætter med prefiltreringsstadier, hvor vi anvender grundlæggende heuristikker og indledende filtre til at fjerne tydeligt urelevant eller forældet indhold fra kandidatsættet.
Vi anvender derefter flere stadier af gradvist avanceret rangordning. Tidligere stadier er afhængige af lektikalske og indlejringsbaserede scoremoduler optimeret til hastighed. Efterhånden som kandidatsættet gradvist indskrænkes, bruger vi mere kraftfulde cross-encoder-omrangordningsmodeller til at udføre den endelige udformning af resultatsættet. Tak for vores adskillige investeringer i inferensydeevne er vi i stand til at udnytte state-of-the-art modelarkitekturer til disse senere stadier, samtidig med at vi holder den samlede rangordningssvartid lav.
Gennem hele denne pipeline henter og scorer vi resultater på både dokument- og underdokumentniveau. Som diskuteret ovenfor kræver AI omhyggelig kontekstteknik. Vores pipeline er designet til at præsentere de mest atomare enheder som muligt for modellen, således at efterfølgende forbrugere kan inkorporere disse præcise enheder uden at trække irrelevant kontekst ind andetstedsfra i kildedokumenterne.
Det er kun muligt at sikre høj kvalitet i hvert trin af denne pipeline gennem co-design med Perplexity's portefølje af produkter. Hver eneste detalje i rangordningsstakken er designet til at udnytte det rige signal, der produceres af de millioner af brugeranmodninger, vi betjener hver time på døgnet. Langt størstedelen af dette signal er automatiseret, idet hvert genererede Perplexity-svar leverer et empirisk datapunkt om søgekvalitet, som det anvendes i en live agentisk arbejdsproces. Vi kombinerer AI-drevne evalueringer med live menneskelig feedback for at berige træningsdataene til vores indlejrings- og rangordningsmodeller langt ud over det, som ethvert manuelt konstrueret datasæt kan tilbyde.
Denne synergi mellem søgning og produkt er unik for Perplexity. Ældre søgemaskiner er begrænset til det grove signal fra blå-link-telemetri. Nyere søgetilbud har forsøgt at implementere nogle af disse AI-fokuserede koncepter, men de mangler virkelige miljøer, der kan validere søgekvaliteten og levere den rigdom af signaler, der er nødvendig for hurtige forbedringssløjfer. Vi er heldige at have den manglende ingrediens: en live testarena for søgekvalitet, drevet af avancerede LLM'er og løbende kamptestet af millioner af nysgerrige brugere over hele verden.
Etablering af en ny frontlinje for kvalitet og ydeevne
Efter at have bygget Perplexity Search API og SDK for at stille vores søgeinfrastruktur til rådighed for udviklere over hele verden, ønskede vi at forstå, hvordan de forskellige kommercielle API-tilbud klarede sig i virkelige AI-brugsscenarier. Det er blevet almindeligt at evaluere selve AI-modellerne, men vi havde brug for et tvist på dette mønster: at evaluere kvaliteten af søge-API'er, når de påkaldes af AI-modeller.
Vi kiggede først mod open source-økosystemet for at forstå det tidligere arbejde. Vi fandt mange af de vigtige ingredienser til stringent evaluering, men intet rammewerk, der integrerede disse ingredienser i en plug-and-play-benchmarking-løsning. Vi satte os derfor for at udvikle et evalueringsrammewerk, der ikke kun kunne bruges af Perplexity, men af enhver forsker eller udvikler, der ønsker at benchmarke søge-API'er.
Ved hjælp af dette evalueringsrammewerk benchmarkede vi stringent Perplexity Search API sammen med andre tilbud. Det er komplekst at optimere søgeydeevnen med mange nuancerede afvejninger mellem kvalitet og hastighed. Til fordel for udviklerne fandt vi ud af, at Perplexity Search API sætter en ny state-of-the-art for både kvalitet og svartid. Udviklere behøver ikke længere at vælge mellem at bygge lynhurtige applikationer og sikre resultater af høj kvalitet: med Perplexity kan de få begge dele.
Design af pålidelige evalueringer til agentiske søgearbejdsprocesser
Vi begyndte med at definere tre retningsgivende principper for vores evalueringsrammewerk:
Kompleksitetsspektrum: evalueringsrammeweket bør måle ydeevnen på både ligetil og komplekse agentiske AI-brugsscenarier.
Neutralitet: evalueringsrammeweket bør vurdere alle API'er på lige vilkår.
Enkelhed: selvom visse brugsscenarier kan være komplekse, bør selve rammeweket være så simpelt som muligt, så andre kan forstå det, reproducere resultaterne og udvide rammeweket med minimalt besvær.
Vores letvægts-evalueringsrammewerk, search_evals, opnår disse mål gennem et simpelt modulært design. Vi udviklede to AI-agent-harnisker til at indfange både klassiske single-shot-søgebrugsscenarier og avancerede agentiske arbejdsprocesser (eksemplificeret ved forskellige "deep research"-produkter, der er bredt tilgængelige på forbrugermarkedet). Begge harnisker blev implementeret på en ligetil måde, der efterlader lille plads til skjulte fordele.
For at drive vores evalueringer vedtog vi fire benchmarks: SimpleQA og FRAMES til enkelttrins-søgning sammen med BrowseComp og HLE til dybtgående forskning. Samlet set udgør disse benchmarks velaccepterede målestokke for vidensagenter. I overensstemmelse med etableret konvention graderer vi alle benchmarks ved hjælp af den samme promptede klassifikatormetodologi, der blev brugt i det oprindelige arbejde. De præcise benchmark-implementeringer (herunder klassifikatorlogik) kan gennemgås i vores GitHub-repo.
Vi designede rammeweket med reproducerbarhed og udvidelighed for øje. Både opgaveniveau-scorer og de underliggende agentresultater gemmes ved hver kørsel. Yderligere harnisker, benchmarks og søge-API-tilbud kan let integreres. Forskere og udviklere kan læse vores GitHub-dokumentation for mere information om at udvide rammeweket til at opfylde dine præcise behov.
Evalueringsresultater
Udstyret med dette evalueringsrammewerk satte vi os for at vurdere vores Search API i sammenligning med andre API-tilbud. På tværs af alle testede benchmarks fremstår Perplexity som både den hurtigste og højeste kvalitets-API på markedet.
Vi fandt ud af, at vores ovenfor beskrevne investeringer i indeks-, hentnings- og rangordningseffektivitet bar rigelig frugt. Perplexity's median-svartid ligger på 358ms, over 150ms hurtigere end den næsthurtigste udbyder. Svartiden på 95-percentilet ligger komfortabelt under 800ms. Med nutidens avancerede modellers lange TTFT-målinger (time-to-first-token) tæller hvert millisekund i skabelsen af herlige brugeroplevelser. Vi har brugt de sidste to år på at optimere svartiden for vores egne brugere, og vi er glade for, at de samme investeringer nu også vil gavne udviklerfællesskabet.
Søge-API Svartid
(anmodninger initieret fra AWS us-east-1)
p50 | p75 | p90 | p95 | |
Perplexity | 358ms | 443ms | 604ms | 763ms |
Exa | 1375ms | 1499ms | 1798ms | 2188ms |
Brave | 513ms | 637ms | 728ms | 808ms |
SERP-baseret* | 1342ms | 1586ms | 1743ms | 1790ms |
Søge-API-latenspercentiler for anmodninger initieret fra AWS us-east-1.
* Mange søge-API-leverandører bruger SERP-scrapning som grundlag for deres resultater. For at indfange ydeevnen af sådanne tilgange bruger vi en repræsentativ Google SERP-baseret API udbudt af Tavily.
Denne hastighedsfordel kommer ikke på bekostning af kvaliteten. Perplexity Search API leverer state-of-the-art ydeevne i både enkelttrins-søgning og indstillinger for dybtgående forskning. På hvert testet benchmark fører Perplexity feltet an i at levere resultater af høj kvalitet, der kan drive AI-arbejdsprocesser med varierende kompleksitet. Margenen mellem Perplexity og det bedste alternativ er særligt udtalt på SimpleQA og HLE, hvilket indikerer, at disse resultater er robuste på tværs af kompleksitetsspektret for opgaver.
Ligesom med svartid udspringer vores førerposition inden for søgekvalitet af vores førerposition i at bygge herlige, højt trafikkerede AI-produkter. Vores millioner af brugere bruger Perplexity til at stille deres nysgerrighed om alle tænkelige emner, og de resulterende kvalitets- og relevanssignaler gør det muligt for vores søgemodeller at forbedres for hver time, der går.
Kvalitetsbenchmarks for søge-API
Enkelttrins-søgning | Dybtgående forskning | |||
SimpleQA | FRAMES | BrowseComp | HLE | |
Perplexity | .930 | .453 | .371 | .288 |
Exa | .781 | .399 | .265 | .242 |
Brave | .822 | .320 | .221 | .191 |
SERP-baseret* | .890 | .437 | .348 | .248 |
Søge-API-kvalitetsscorer på SimpleQA, FRAMES, BrowseComp og HLE.
Vi befinder os stadig i de tidlige dage for AI-native søgemaskiner, og kunsten og videnskaben bag måling vil uden tvivl udvikle sig. Vi opfordrer fællesskabet til at bidrage ved at udvikle stringente og kreative metoder til evaluering af søgemaskiner i AI-agenternes tidsalder.
Byggestenen for AI's næste kapitel
Fremtiden for agentiske systemer og intelligente assistenter vil afhænge af tilgængeligheden af rige programmatiske grænseflader til verdens kollektive viden. Nutidens ældre søgemaskiner er mættede i forbrug på ca. 10¹⁰ forespørgsler om dagen, et tal der sandsynligvis har nået sit peak. Næste generation af søge- og hentningssystemer vil betjene anmodninger i størrelsesordener større, i takt med at et stadigt voksende univers af AI-agenter stoler på dem for at få nøjagtig information i realtid.
Vores hidtidige indsats har positioneret os som den hurtigste, mest performante søgemaskine, der er tilgængelig via API. Men der vil være brug for endnu mere ambitiøs innovation for at give næring til AI's næste kapitel. Hvordan skalerer vi disse systemer effektivt over for en stadigt voksende efterspørgsel? Hvordan kan disse søgesystemer optimeres i lyset af nye tilgange til kontekstteknik og eftertræning? Og hvordan navigerer vi i den evigt tilstedeværende spænding mellem fuldstændighed, aktualitet og svartid? Dette er åbne spørgsmål, som Perplexity med vores kombination af produktfodaftryk, skala og tekniske talent er unikt positioneret til at tackle.
Citation
@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}
}