Undervisning i AI til at konfigurere søgning: Et eksperiment i automatisering af Algolia-relevans

Undervisning i AI til at konfigurere søgning: Et eksperiment i automatisering af Algolia-relevans

Denne artikel er maskinoversat fra engelsk og kan indeholde unøjagtigheder. Læs mere
Se original

Hvad hvis vi fortalte dig, at en AI-konfigureret søgning var bedre end jeg gjorde som nyansat hos Algolia?

TL; DR

Vi byggede et eksperimentelt CLI-værktøj, der bruger AI til at analysere dine Algolia-data og generere relevanskonfigurationer. Det producerer næsten ekspertforslag til kvalitet i ~10 sekunder, håndtering af søgbare attributter, brugerdefineret rangering, facettering og sorteringsmuligheder.

Konfigurationsproblemet

Hos Algolia har vi løst de svære dele af søgningen. Overfør dit katalog, og du kan søge i det med det samme med lynhurtige resultater. Stavefejl? Håndteret. Infrastruktur? Skaleres automatisk. Søg undervejs? Det virker bare. Vi har brugt år på at perfektionere de komplekse algoritmer og den infrastruktur, der kræves til avanceret søgning, så du ikke behøver at tænke over det.

Men her er sagen: Selv med al den kompleksitet håndteret, skaber Enestående søgning kræver stadig beslutninger. Hvilke attributter skal være søgbare? Hvordan bør popularitet påvirke placeringen? Hvilke sorteringsmuligheder har brugerne brug for?

Dette er ikke tekniske begrænsninger – de er forskellen mellem generisk søgning og søgning, der forstår din virksomhed. Amazon ved, at de skal prioritere Prime-varer. Netflix og YouTube tager højde for din visningshistorik. Din søgning skal forstå, hvad der betyder noget for dine brugere.

Udfordringen er, at det kan strække sig til dage at sætte disse konfigurationer rigtigt. Du skal forstå begreber, læse dokumentation, eksperimentere og gentage – alt sammen før du kan bygge brugergrænsefladen for at vise dine slutbrugere den faktiske værdi. Og lad os se det i øjnene, relevanskonfiguration er det ikke sjov. Det kan blive kedeligt, udsat for fejl, og det er nemt at skynde sig eller overse.

Almindelige fejl, vi ofte ser:

  • Søgbare attributter: De attributter, der skal matches forespørgsler med. Hvis du glemmer at indstille dem, bliver alt søgbart – inklusive billed-URL'er og interne id'er, hvilket skaber støj. Nogle gange tilføjer du for mange eller medtager irrelevante, der kun er nyttige til visning eller filtrering. Rækkefølgen betyder også noget, men det bliver ofte overset.
  • Brugerdefineret rangering: Kvalitetsmålinger, der gør nogle poster vigtigere end andre. Mange kunder undlader at tilføje nogen forretningssignaler. Uden brugerdefineret rangering kan du ikke beslutte, hvad der skal komme først mellem to varer, der matcher "iPhone-etui" lige meget - bestselleren eller den, ingen køber?
  • Facettering: De kategoriattributter, som brugerne kan indsnævre deres søgning (mærker, typer osv.) Enten for få, og brugerne kan ikke filtrere effektivt, eller for mange, og brugergrænsefladen bliver overvældende. Hvis du glemmer at angive, hvilke der skal være søgbare eller kun filtrerede, får du ufuldstændige forfiningslister eller problemer med ydeevnen.
  • Sorteringsmuligheder: Alternative måder at sortere indekset på (f.eks. faldende popularitet, stigende og faldende pris osv.) Let at se helt bort fra, fordi det kræver forståelse af begrebet replikaindekser. Mange ting kan gå galt – ved at bruge indstillingen customRanking i stedet for sortering efter (første rangkriterium før den indbyggede Algolia-formel), eller tilbyde "Lav til Høj" popularitetssortering, når kun "Mest populær" giver mening.

Søgemønstre er systematiske

Her er en ting, du indser efter at have tilbragt år i Algolia og kigget på mange forskellige indekser og relevanskonfigurationer: mønstre gentager sig. De fleste e-handelswebsteder har brug for lignende sorteringsmuligheder. De fleste medieplatforme rangerer indhold på forudsigelige måder. De bedste fremgangsmåder, vi dokumenterer, er ikke tilfældige – de er den akkumulerede visdom fra tusindvis af implementeringer.

Denne erkendelse førte til et spørgsmål: Hvis disse mønstre er så konsistente, kan AI så lære dem? Kan vi kode vores ekspertise til noget, der analyserer dine data og foreslår den rigtige konfiguration automatisk?

Opbygning af en AI-konfigurationsassistent

Vi byggede et CLI-værktøj, der bruger LLM'er til at analysere dine data og generere Algolia-konfigurationer. Tilgangen er ligetil:

  • Du føder dit datasæt til en AI-model
  • Modellen anvender Algoliets bedste praksis gennem omhyggeligt udformede prompter og genererer konfigurationsforslag med forklaringer
  • Værktøjet validerer outputtet for at afbøde hallucinationer

Artikelindhold

⚠️Bemærkning om beskyttelse af personlige oplysninger: Dette værktøj sender data til OpenAI/Anthropic. Brug kun ikke-følsomme datasæt.

AI-analysen

Her er de anbefalinger, vi fik, da vi analyserede et standard e-handelsdatasæt ved hjælp af Anthropics Claude Haiku 3.5-model:

Søgbare attributter

Artikelindhold

  • Navn
  • mærke
  • beskrivelse
  • kategorier.lvl0
  • kategorier.lvl1
  • kategorier.lvl2
  • farve
  • materiale

Agentens ræsonnement var perfekt. Den identificerede de rigtige attributter, som en bruger ville søge efter (Med navn som den højeste prioritet givet er det den primære identifikator for produkter, brand som meget vigtigt for produktopdagelse osv.)

Det ekskluderede også eksplicit numeriske attributter som pris, bedømmelse, lagerbeholdning, tekniske attributter som objekt-id, produkt_URL, billede_URL-adresse eller booleske attributter som i_værdipapir, som brugerne ikke søger efter med en forespørgsel.

Brugerdefineret rangering

Artikelindhold

  • Desc(Rating_Bayesian)
  • Desc(Rating_tælle)
  • Desc(Lager)

Læg mærke til, hvordan den valgte den bayesianske vurdering frem for den rå vurdering. Den fælles begrundelse var præcis, hvad den blev undervist i:

"Dette er en behandlet metrik, der giver en normaliseret, statistisk justeret vurdering Repræsenterer et mere sofistikeret kvalitetssignal sammenlignet med rå vurdering Hjælper med at vise produkter af høj kvalitet med mere pålidelig scoring Værdierne varierer fra 4,4 til 4,7 i stikprøven, hvilket indikerer meningsfuld differentiering"

Det er præcis, hvad en ekspert ville anbefale - at undgå den almindelige fejl at bruge rå vurderinger, der kan spilles med et par 5-stjernede anmeldelser.

Egenskaber til facettering

Artikelindhold

  • Kategorier
  • søgbar(mærke)
  • farve
  • materiale
  • i_lager
  • Rating
  • pris

Facetter kan gøres søgbare , når de har mange forskellige mulige værdier, som ikke alle kan vises på én gang i brugergrænsefladen. Agenten identificerede korrekt, at mærket skulle være søgbart (høj kardinalitet), mens farve og materiale ikke behøver at være det.

Sortering af muligheder

Artikelindhold

  • Desc(pris)
  • Asc(pris)
  • Desc(Rating_Bayesian)
  • Desc(Rating_tælle)
  • Desc(Lager)

Et andet eksempel på nuanceret ræsonnement, agenten besluttede at give to muligheder for pris (Høj til lav og Lav til høj, som er almindelige sorteringsmuligheder i e-handelssøgning) men kun faldende muligheder for vurdering_Bayesian (Det er nyttigt at se de mest populære produkter først, men ikke omvendt)Rating_tælle (Angivelse af brugerengagement) og inventar (nyttigt til kontrol af produktoverflod).

Teknisk dybdegående dyk

Den tilskyndende strategi

At få gode resultater krævede omhyggelig hurtig konstruktion. Lad os tage et kig på vores søgbare attributprompt:

const prompt = `
  Analyze these sample records and determine which attributes should be searchable in an Algolia search index.

  Sample records:
  ${JSON.stringify(sampleRecords, null, 2)}
  
  Step 1: Identify potential searchable attributes from the sample records
  Step 2: Order attributes by search importance and user intent
  Step 3: Determine modifier configuration (ordered vs unordered)
  Step 4: Format final result with appropriate modifiers
  
  CRITICAL RULES:
  - Only suggest attributes that actually exist in the provided sample records, don't invent ones
  - Only suggest attributes truly suitable for search. If no attributes are clearly searchable, return an empty array.

  Rules for selecting searchable attributes:
      
  INCLUDE text attributes that users search for:
  - Names, titles, descriptions, summaries
  - Brands, manufacturers, creators, authors
  - Categories, types, genres
  - Features, ingredients, cast, tags
  - Locations, addresses
  - Any text users might query
  
  EXCLUDE attributes that are:
  - URLs, IDs, dates, timestamps, booleans
  - Numeric values for ranking/sorting
  - Display-only or internal metadata
  
  Rules for ordering attributes by search importance:
  Order matters - first attributes have higher search relevance.
  1. Primary identifiers (name, title) rank highest
  2. Secondary identifiers (brand, creator) come next
  3. Content attributes (description, features) follow
  4. Consider user search patterns for this data type
  
  Rules for equal ranking attributes:
  To make matches in multiple attributes rank equally, combine them in comma-separated strings:
  - "title,alternate_title" - treats both title fields equally
  - "name,display_name" - treats both name fields equally
  - "brand,manufacturer" - treats both brand fields equally
  
  Rules for modifier configuration:
  - Use "unordered(attribute)" for most cases (position doesn't matter)
  - Use "ordered(attribute)" only when early words are more important
  - For array attributes: ordered may make sense when early entries are more important (cast of actors) but not for equal importance (tags)
  - Default to unordered unless position specifically matters
  - Note: ordered modifier cannot be used with comma-separated attributes
  
  Explain your answer step-by-step.
`;
        

Nogle vigtige indsigter fra udarbejdelse og finpudsning af denne opfordring:

  • Vær eksplicit: Du skal være præcis, når du fortæller agenten, hvad der skal inkluderes og ekskluderes. At give eksempler rækker langt, men du skal sørge for at udtrække principperne for at holde dine direktiver generiske og undgå at overtilpasse til det specifikke datasæt, du analyserer.
  • Anmod om begrundelse: Trin-for-trin forklaringer forbedrer outputkvaliteten. I deres dokumentation forklarer Anthropic, at "At give Claude plads til at tænke kan forbedre dens præstationer dramatisk. Denne teknik, kendt som tankekæde (Barneseng) tilskynder, opfordrer Claude til at nedbryde problemer trin for trin, hvilket fører til mere præcise og nuancerede resultater.". Bemærk, at CoT ikke er specifik for Claude, men dit kilometertal kan variere afhængigt af hver LLM.
  • Sæt grænser: At være klar over, hvad man ikke skal gøre, og at lade sin model sige "jeg ved det ikke" er nogle af de essentielle måder at reducere hallucinationer på.

Håndtering af hallucinationer

Selv med omhyggelig tilskyndelse foreslår LLM'er nogle gange ikke-eksisterende attributter.

Vi tilføjer en valideringsfase for at fjerne alle attributter, der ikke findes i datasættet.

const { object, usage } = await generateObject({
  model,
  maxTokens: 1000,
  temperature: 0.1,
  schema,
  prompt,
});

// Validate that all suggested attributes actually exist in the records
const searchableAttributes = validateAttributes(
  object.searchableAttributes,
  sampleRecords,
);
        

CLI vil stadig fortælle dig, hvilke attributter der er blevet filtreret fra, hvilket er nyttigt til at genkende mønstre i hallucinationer: datasæt af dårlig kvalitet, knapt antal attributter eller utilstrækkelig modelkraft.

Administration af kontekstvindue

Kontekstvinduet for en LLM er mængden af indhold (Oversat i tokens) som en given model kan overveje med det samme. Jo længere prompten er, jo tættere kommer du på grænsen.

I eksperimentet sender vi altid hele poster, ikke kun attributnavne. Dette er vigtigt, fordi attributnavne alene ikke altid giver nok kontekst. Men det skaber udfordringer med hurtig størrelse:

Artikelindhold

Selvom dette kan håndteres i batches, er indsigten her, at du faktisk ikke har brug for alle poster, kun en repræsentativ prøve. Selv 10 plader producerede konsekvent kvalitetsforslag, samtidig med at de kontrollerede tokenforbruget.

Sammenligning af modeller

Selvom vi oprindeligt byggede CLI med Claude 3.5 Haiku som standardmodel, var det vigtigt at sammenligne, hvordan forskellige modeller klarer sig, når de fik den samme opgave.

Vi prøvede:

  • Claude Haiku, Anthropics hurtigste model den dag i dag
  • Claude Sonnet, Anthropics højtydende, men alligevel overkommelige model
  • GPT-4.1 nano, OpenAI's hurtigste og mest omkostningseffektive GPT-4.1-model

Artikelindhold

Claude Haiku dukkede op som det bedste sted – næsten lige så god som Sonnet, til 27 % af prisen.

Der var ingen mærkbare kvalitetsforskelle mellem 10 og 100 plader.

Når AI kæmper: Erfaringer fra fiaskoer

Problemet med hallucinationer

AI elsker at være hjælpsom, men det kommer nogle gange i vejen for nøjagtighed. I en test foreslog GPT-4.1 nano f.eks. faceting på kategori, når datasættet ikke indeholdt en sådan attribut.

Jeg bemærkede, at sådanne hallucinationer skete hyppigere med hastighedsoptimerede modeller og forværredes med data af dårlig kvalitet.

Valideringstrinnet er her for at fange sådanne fejl, men det viser, at AI ikke kan stole blindt på: den har brug for edge case-håndtering og forfining over tid.

Datakvalitet er vigtig

Inkonsekvente skemaer og tvetydighed kan føre til mærkelige forslag:

  • Poster med forskellige attributter forvirrer helpdesk-medarbejderen, især fordi den kun får et undersæt af datasættet
  • Duplikerede attributter (f.eks. vurdering og vurdering_Normaliseret) Kræv eksplicit prompt, så kun én bliver afhentet

Da vi testede med datasæt med inkonsistente skemaer, steg hallucinationerne dramatisk. Dette beviser behovet for sundhedstjek før analyse – AI kan ikke løse grundlæggende dataproblemer.

Nuancen udfordring

Nogle mønstre håndteres bedre med kode eller menneskelig indgriben:

  • Hierarkiske facetter: Mønstermatchning af beats, der forklarer categories.lvl0, categories.lvl1 til en agent
  • Komplekse forretningsregler: Nogle gange fremstår der ingen åbenlyse mønstre som universelt korrekte for brugerdefineret rangering
  • Kantede sager: Booleske facetter er gode kandidater til at blive markeret som filterOnly, men dette fungerer dårligt, hvis det er beregnet til at blive brugt med til/fra-widgets

En anden interessant brugssag var, når agenten skulle håndtere flere, lignende attributter til brugerdefineret rangering. I produktdatasættet har vi tilføjet en bedømmelse_Bayesiansk attribut for at nuancere vurderingsattributten, som var et gennemsnit af alle bedømmelser, ved hjælp af vurderingen_tælle. Dette er , hvad vi anbefaler i Algolia-dokumentationen, fordi rangeringsalgoritmen bruger tie-breaking: den sammenligner poster på hvert kriterium i deres angivne rækkefølge, men går kun videre til det næste, hvis den ikke kan bryde uafgjort.

Men hagen er, at vi forlod vurdering og vurdering_Tæl i posterne for at holde sig til det, vi normalt ser i kundedatasæt – det er ikke ualmindeligt at efterlade flere data, end du har brug for. Og afhængigt af modellen og præcisionen af prompten er det her, forslagskvaliteten vil variere drastisk.

Når du har gentagne data, skal du være ekstremt eksplicit i din befordring til at undgå, at agenten inkluderer begge dele – og selv da er det svært at garantere, at den vil overholde reglerne. Dette indikerer yderligere, at det kun er vigtigt at opbevare søgerelevante data i dine optegnelser, når du behandler dem med et systematisk værktøj som en AI-assistent.

Sammenligning af kunstig intelligens med menneskelig konfiguration

For at teste effektiviteten besluttede jeg at køre værktøjet – denne gang ved hjælp af Claude Sonnet for optimal nøjagtighed – på et indeks, jeg oprettede, da jeg var nyansat hos Algolia. Det var i 2018, og da VM i fodbold skulle til at starte, indekserede jeg hver kamp med oplysninger om, hvilke hold der spillede, på hvilken dag, på hvilket stadion, hvilke tv-kanaler der sendte det, hvilken fase af turneringen det var, og jeg opdaterede resultaterne live, da kampene sluttede.

Artikelindhold

Dette var min første "rigtige" produktions Algolia-implementering, og jeg konfigurerede den, som jeg forventer, at enhver kunde ville: følge dokumentationen, teste indstillingerne, indtil tingene "så godt ud".

AI'en klarede sig faktisk bedre end mig.

Søgbare attributter

Artikelindhold

Brugerdefineret rangering

Artikelindhold

Egenskaber til faceting

Artikelindhold

Sorteringsmuligheder

Artikelindhold

Min konfiguration var fyldt med begynderfejl:

  • Jeg lavede resultatattributten (den endelige score) søgbar – men hvem søger efter "5-0"?
  • Jeg havde en mærkelig brugerdefineret rangeringsindstilling på færdig (boolesk, hvilket indikerer, at kampen var slut) og datetime (streng, som er forkert til brugerdefineret rangering) hvilket er et rationale, jeg ikke engang kan forklare i dag
  • Jeg havde ingen facetmodifikatorer, så ingen af mine facetter var søgbare, mens der var 32 landshold, der spillede, 15 tv-stationer og 12 stadioner – meget for at få plads til en mobilskærm!
  • Jeg glemte helt at tilføje sorteringsmuligheder

Sådan forbedrede AI det:

  • Det ekskluderede korrekt resultat fra søgbare attributter
  • Det undgik klogt at undgå brugerdefineret rangering på grund af fraværet af en levedygtig attribut i datasættet, idet de regnede med, at de ville være mere velegnede til søgning eller filtrering/facettering.
  • Det tilføjede ordentlige facetmodifikatorer (Søgbar til Hjem_hold, ude_hold, kanaler og stadioner)
  • Den foreslog dato- og klokkeslætssortering for "Kommende spil" og "Kronologisk rækkefølge" og navn til organisering af spil efter gruppe (som den udledte baseret på attributværdierne)

Alt, hvad der var rigtigt ved min manuelle konfiguration, blev også opfanget af agenten, bare bedre, ved at rette mine begynderfejl.

Bemærk, at der kan foretages mange forbedringer yderligere på datasætniveau (f.eks. at give en liste over alle hold i stedet for hjemmebane_hold og ude_hold for bedre facettering, lagring af score som tal osv.), hvilket ville resultere i endnu bedre relevansindstillinger. Også her gør AI sit bedste med de data, den har.

Prøv det selv

Koden er tilgængelig på GitHub, så du kan prøve: https://github.com/algolia/generative-relevance

# Install and setup
npm install
echo "ANTHROPIC_API_KEY=your_key" > .env

# Analyze your data
npm start -- analyze your-data.json --verbose

# Compare with existing index
npm start -- compare YOUR_APP_ID YOUR_API_KEY your_index --verbose

# Try different models
npm start -- analyze data.json --compare-models claude-3-5-haiku-latest,gpt-4.1-nano
        

  • Prøv flere datasæt - Se, hvordan AI håndterer forskellige datastrukturer
  • Sammenlign med dine eksisterende indeks - Foreslår AI relevante forbedringer?
  • Test flere modeller - PR'er er velkomne til at tilføje flere OpenAI-modeller, Mistral, Gemini osv.

Endnu vigtigere er det, at vi vil have din feedback! Vi er især interesserede i:

  • Kvaliteten af forslag til dine rigtige data
  • Edge-sager, hvor AI kæmper
  • Idéer til forbedringer

Kan du se noget, vi kan forbedre? Åbn et problem, og fortæl os det.

Om menneskelig ekspertise

Selvom AI håndterer systematiske mønstre godt, er menneskelig dømmekraft stadig afgørende for:

  • Virksomhedsspecifikke regler: Der er signaler, som kun du forstår i din forretningsstrategi
  • Brancheregler: Overholdelseskrav, der ikke er tydelige ud fra data
  • Kulturelle overvejelser: Søgeadfærd kan variere afhængigt af markedet
  • Strategiske beslutninger: Skal du optimere til konvertering eller opdagelse?

AI er ikke magi – den gør, hvad du beder om. Brug dette som et fundament, der bringer dig tæt på målstregen, så du kan fokusere din indsats på det, som kun du kan gøre.

Det større billede

Dette eksperiment lærte mig, at AI udmærker sig ved systematisk viden. Når bedste praksis er konsistent og veldokumenteret, kan AI anvende dem effektivt. Det fanger ikke alle nuancer af din specifikke brugssituation, men det giver et solidt fundament til at forfine i stedet for at starte fra bunden.

Fremtiden erstatter ikke AI-søgeeksperter, men hjælper enhver Algolia-bruger med at konfigurere søgning som en ekspert. Ved at kommodificere de rutinemæssige dele af konfigurationen kan vi frigøre tid fra udviklere til at fokusere på det, der gør deres søgning unik: at forstå deres brugere og skabe enestående oplevelser.

Gabriela Alvarado

Data Analyst for Tech Startups | Driving Growth through Analytics & Optimization | SQL • Python • BigQuery • Looker Studio | Remote

3md

The AI’s ability to spot rookie mistakes (like searchable ‘5-0’ scores 😅) shows how systematic patterns can be automated. 

Hvis du vil se eller tilføje en kommentar, skal du logge ind

Flere artikler fra Algolia

Andre kiggede også på