Slik bygde vi ChatGPTs nye annonseplattform for brukertillit og relevans
Av Ritendra Datta og Karthik Gopalratnam, medlemmer av det tekniske teamet
Tradisjonelle annonsesystemer er bygget for å reagere på enkeltstående uttrykk for brukerens hensikt. En bruker søker etter eller ser på noe på nettet, annonsesystemet mottar søkene og sidevisningene som hendelser, og systemet leter etter passende annonser basert på disse hendelsene. Å bygge en annonseplattform for ChatGPT var annerledes: Brukerens hensikt utvikler seg på tvers av samtaler og endrer seg gjennom flere samtalerunder, noen ganger uten at det oppstår et passende tidspunkt for annonsering. For å støtte denne nye tilnærmingen bygde vi et skreddersydd system for annonselevering. Denne nye typen annonseplattform er basert på en tilpasset, banebrytende LLM som har gjennomgått etterutdannelse. Den gjør verktøykall for innhenting (finne de beste alternativene), rangering (forutsi brukerengasjement), relevans (vurdere annonsens nytte) og gjennomføring av auksjoner for endelig annonsevalg og prissetting.
Tre sentrale designvalg gjør at annonsesystemet vårt kan håndtere nyansene i brukermål som endrer seg: 1) tilstandsbevarende annonseøkter, der informasjon huskes på tvers av samtalerunder og flere samtaler, 2) en tilpasset LLM som har gjennomgått etterutdannelse og bruker en arkitektur med verktøykall til å tolke samtalens kontekst og underliggende hensikt, og deretter effektivt velge, rangere og levere annonser, og 3) en prosess for annonsevalg som kjører atskilt fra ChatGPTs svargenerering, i en egen tjeneste, slik at annonser ikke påvirker svarene og ChatGPT beholder sin nøytrale stemme. Vi bruker LLM-en som har gjennomgått etterutdannelse, til å orkestrere hele annonseprosessen og finne riktig annonse til riktig tidspunkt, basert på både brukerens nåværende samtalerunde og samtalehistorikken. Tidligere tok det flere år å bygge opp et slikt selvforbedrende annonsesystem fra bunnen av. ChatGPT Ads nådde en inntektstakt tilsvarende 1 milliard dollar på årsbasis mindre enn 200 dager etter lansering. Nå har over 100 000 annonsører kjørt annonser på ChatGPT siden lanseringen.
En vanlig annonseforespørsel starter som regel med en klart definert hendelse. En bruker sender inn et søk eller åpner en nettside, og annonsesystemet mottar en forespørsel. Denne typen system er ganske enkel: Det henter mulige annonsekandidater, rangerer dem, gjennomfører en auksjon for å prise annonsemuligheten riktig og viser den valgte annonsen til brukeren. I ChatGPT oppstår ikke et slikt konkret øyeblikk naturlig.
Folk kommer til en ChatGPT‑samtale med mål de vil oppnå, snarere enn et søk som krever ett enkelt svar. De planlegger kanskje en reise, velger programvare til bedriften sin, innreder et hjem eller lærer seg en ny hobby. Alt dette skjer ikke i én enkelt samtalerunde. ChatGPT hjelper ofte brukeren med å avklare hva som er viktig underveis.
Som et eksempel spurte utviklerteamet vårt ChatGPT om hvordan man trener til et løp: Samtalen begynner med et generelt spørsmål om løping. Flere samtalerunder senere spør de om sko til treningen. Samtalens kommersielle betydning endrer seg etter hvert som nye krav kommer til, og denne personlige konteksten utvikler seg over flere økter. Et system som handlet ut fra den første meldingen, kunne ha bommet helt på brukerens hensikt og dermed svekket brukeropplevelsen og stått i veien.
For å bygge annonsesystemet måtte vi gå bort fra en forespørsel–svar-basert annonsearkitektur og bygge en plattform fra bunnen av som kunne finne mulige kommersielle muligheter, samtidig som vi prioriterte brukernes tillit og nytte.
Å gjøre hver melding til en selvstendig forespørsel, som i et tradisjonelt annonsesystem, ville medført flere risikoer i chatten: 1) å feiltolke brukerens mål ved å forenkle det for mye, 2) å starte annonseprosessen for tidlig, før brukerens egentlige behov er klart, 3) å vise annonser som står i veien for brukerreisen i stedet for å støtte den, og 4) å kjøre hele annonseprosessen på nytt hver gang forespørselen endres, noe som skaper støy og unødvendige kostnader. I stedet for å bygge på enkelthendelser opprettholder annonsesystemet, som består av innhenting, rangering og levering, en tilstandsbevarende økt. Det betyr at annonseøkten varer gjennom hele en samtalerunde som er kvalifisert for annonser, og husker og oppdaterer informasjon etter hvert som den utvikler seg. ChatGPT sender den innledende forespørselskonteksten til annonseserveren. Annonsesystemet følger og tilpasser seg samtalen etter hvert som den utvikler seg, i stedet for å basere seg på ett enkelt, forenklet søk.
Prosessen for annonsevalg kjører parallelt med ChatGPTs vanlige svargenerering for å sikre at annonseprosessen ikke påvirker svarene. Annonser filtreres og velges gjennom et separat system som behandler samtalen etter egne krav til kvalifisering, kvalitet og levering. Dette viktige arkitektoniske skillet – ulike tjenester med separate modeller og separat kode – lar ChatGPTs kjerneservere håndtere genereringen av det organiske svaret. Samtidig vurderer annonsesystemet uavhengig om det finnes en passende annonsemulighet, og klargjør i så fall en sponset plassering gjennom en egen visningsprosess.
Annonseringen kjører parallelt med ChatGPTs svarprosess.
I tillegg til å beskytte brukeropplevelsen har dette skillet noen praktiske konsekvenser. ChatGPT er ikke avhengig av annonsesystemet – tjenestene er helt atskilt og deler ingen modell for innholdsgenerering. Hvis systemet for annonselevering er utilgjengelig eller tregt, fortsetter derfor ChatGPTs organiske svar upåvirket. Det betyr at annonsesystemet ikke kan få ChatGPT til å gå ned eller bli tregere. En annen fordel med dette skillet er at det stiller svært høye krav til annonsenes verdi. Å ikke returnere noen annonse er et normalt og vellykket utfall. Systemet leverer bare en annonse hvis den er klart nyttig for brukere og annonsører.
Den andre sentrale arkitekturkomponenten i annonseplattformen vår er en LLM som har gjennomgått etterutdannelse. Den tolker samtaler og driver hele annonseprosessen i en agentisk løkke, med verktøykall til annonsesystemets kjernefunksjoner – fra innhenting via rangering og auksjon til endelig levering. Vi kaller denne LLM-en orkestratoren.
Den første delen av en annonseprosess er å forstå brukerens hensikt for å starte innhentingen: et raskt og bevisst bredt søk etter mulige annonser som senere skal filtreres. Når samtalen mottas gradvis, blir innhentingsgrunnlaget rikere, men også mer tvetydig, fordi annonsesystemet må skille brukerens nåværende hensikt fra utdatert kontekst. Orkestratoren må tolke henvisninger til tidligere meldinger, forstå når en bruker snakker hypotetisk, og unngå å tolke enhver omtale av et produkt eller en tjeneste som et ønske om å kjøpe noe.
Annonseorkestratoren bruker den tilgjengelige samtale- og brukerkonteksten og søker i flere runder etter gode annonser. Den velger fortløpende hvilke verktøy som skal kalles når, med mål om å finne den mest passende annonsen for samtalen og konteksten – en annonse som balanserer høy verdi for brukeren med høy verdi for annonsøren. Hvis brukeren velger persontilpassede annonser, vurderer orkestratoren også tilgjengelig, ikke-sensitiv informasjon om brukerens tidligere samtaler for å finne annonsene som passer best.
Annonseorkestratoren kaller verktøy for annonselevering i flere runder for å finne verdifulle annonser.
Etter hvert som samtalen utvikler seg og annonseorkestratoren får mer oppdatert informasjon, kan den kjøre en ny serie verktøykall med den oppdaterte konteksten for å finne bedre annonser og returnere dem til klienten. Klienten kan da bruke de nye annonsene hvis de kommer frem i tide.
Orkestratoren er utviklet for å balansere verdien for brukere og annonsører, og setter alltid brukerne først.
Annonsesystemet består av enkeltverktøy som orkestratoren kaller i flere runder for å finne de beste annonsene for en samtale. I grove trekk omdanner orkestratoren samtaler til korte tekstsammendrag, som så gjøres om til semantiske innbygginger (lagrede betydningsrepresentasjoner som er enklere for et annonsesystem å søke gjennom). Deretter henter den annonsekandidater ved hjelp av disse innbyggingene, filtrerer kandidatene etter kvalifikasjonskrav (basert på budsjett, brukerinnstillinger og andre innledende kontroller), vurderer kvalitet og relevans og foretar en endelig rangering for å finne verdifulle muligheter for plassering på slutten av et chatsvar. Hver annonse må derfor oppfylle strenge kvalifikasjons- og relevanskrav for å kunne plasseres.
Orkestratorens LLM utarbeider først ett eller flere søk som representerer den relevante kommersielle hensikten. Dette kan innebære å omformulere samtalekonteksten for å utvide de kommersielle mulighetene utover direkte søk, og deretter lage semantiske representasjoner. Orkestratoren sammenfatter da en samtale med flere utvekslinger til en oppsummering for innhentingssystemet, slik at annonser hentes målrettet fra databasen vår.
Annonseplasseringer blir bedre for både brukere og annonsører hvis annonsene bare vises når systemet har en grundig forståelse av brukerens hensikt. Flere søk kan ivareta ulike sider ved hensikten. En samtale om reiseplanlegging kan for eksempel romme ulike behov knyttet til transport, overnatting eller aktiviteter. Innhentingssystemet kan bevare disse forskjellene i stedet for å presse hele samtalen sammen til én bokstavelig tekststreng.
La oss se på en mulig samtalesekvens om tursko som eksempel:
What should I cover on a two-day trip to Yosemite?
Will it be cold next week?
New [insert brand] product lines?
Selv om brukeren ikke har knyttet spørsmålet om skomerket til Yosemite-turen, kan denne samtalen representeres i annonsesystemet vårt med to søk, for eksempel [shoes appropriate for hiking trip] og [new [brand] product lines good for travel]. Dette kan bare være første forsøk. Orkestratoren er utviklet for å bearbeide disse representasjonene i flere runder til den finner annonser i beholdningen vår som er svært verdifulle for brukeren.
Innhenting er prosessen med å sette sammen et bevisst bredt utvalg av annonsealternativer. Kandidatene kan komme fra ulike innhentingsstrategier og senere konkurrere under de samme visningsvilkårene. Vi bygger flere indekser som er optimalisert for ulike system- og produktkrav. Indeksen for annonser fra produktfeeder er for eksempel utformet for å ta hensyn til positive eller negative produktomtaler når den henter de best mulige annonsene. Dette er ikke relevant for andre annonser som kanskje ikke har tilknyttede omtaler. Hver indeks er optimalisert for en variant av tilnærmet nærmeste nabo-søk (ANN), med innbygginger som representerer brukerens hensikt. Dette ANN-søket er en tilnærmingsalgoritme for innhenting fra store semantiske indekser. Det betyr at annonser hentes svært raskt ved å nærme seg en god løsning fremfor å lete etter «den rette», samtidig som de fleste relevante kandidatene beholdes.
Annonsesystemet bruker omformulerte søk til å lage semantiske innbygginger under annonseinnhentingen og sette sammen et bredt utvalg av annonsekandidater.
Målet med filtreringen er å utelukke alle annonsekandidater som ikke oppfyller kravene til plassering når det gjelder relevans, bud og budsjett. Avhengig av kandidat og konfigurasjon kan filtreringen kontrollere tilgjengelighet for annonsemateriell og kampanjer (om kampanjen eller annonsemateriellet er aktivt), kampanjemålretting (for eksempel hvilke språkområder en kampanje kan kjøres i), retningslinjer (krav til hva som kan annonseres), tilgjengelig budsjett (om kampanjen fortsatt har penger å bruke), forbrukstakt (om kampanjen bør bruke budsjett nå eller på et annet tidspunkt på dagen), egnethet for plassering (hvilke typer samtaler annonsen er kvalifisert for) og deduplisering på annonsør- og kampanjenivå (å velge et passende antall annonser per annonsør for å sikre rettferdig deltakelse på tvers av virksomheter).
Kandidater som består kvalifikasjonskontrollene, går videre til en poengsettingsfase. Der gjør orkestratoren verktøykall til ulike poengsettingssystemer for å vurdere forhold som semantisk relevans (er annonsen relevant for brukerens mål?), forventet engasjement (er det sannsynlig at annonsen blir sett, klikket på og fører til resultatet annonsøren ønsker?) og historiske resultater (har annonsen gitt gode resultater når den har blitt vist til brukere så langt?). Orkestratoren filtrerer også annonser for å sikre relevans og sikkerhet før auksjonen. Disse systemene snevrer inn feltet til et mindre kandidatutvalg som er klart for auksjon, men avgjør ennå ikke hvilken annonse som til slutt leveres.
Orkestratoren vurderer de klargjorte kandidatene i lys av samtalen og velger hvilke som er aktuelle nok til å delta i den endelige auksjonen. Orkestratoren avgjør ikke direkte hvilken annonse som skal vises, og fastsetter heller ingen pris. Den nominerer kandidater som passer til konteksten, og som auksjonsverktøyet skal vurdere.
Auksjonen utfører de siste trinnene før visning: adgang til auksjonen (å oppfylle et minstekrav til relevans og verdi), styring av forbrukstakt (å bruke annonsebudsjettet jevnere), beregning av bud og auksjonsvariabler, kvalitetsjustert rangering, prissetting og endelig utvelgelse.
Etter auksjonen er det to grunner til at en annonse likevel ikke blir levert, og begge er særegne for ChatGPT som samtalemedium.
Annonsen kan oppleves som upassende i chatten: Selv om samtalen i seg selv ble vurdert som trygg for annonseplassering av integritetsmodeller (modellene som avgjør når det er passende å vise en annonse), og annonsen ble vurdert å være i tråd med retningslinjene, kan den likevel oppleves som upassende i enkelte samtaler. Orkestratoren hindrer at disse annonsene vises.
Annonseforespørselen kan komme for sent: Hvis ChatGPT‑modellen er klar til å svare, men annonsen ennå ikke er klar til plassering, blir tidsavbrudd utløst for annonseforespørselen, og annonsen blir ikke levert. Et av målene for annonsesystemet er derfor å kjøre så raskt som mulig. Svartiden til ChatGPT‑modellen varierer, og vi forsinker ikke chatsvar for å vente på at annonser skal lastes inn.
Hvis alle kontrollene ovenfor er bestått, sender vi annonsen til klientgrensesnittet for gjengivelse. Vi regner dette som en annonselevering på serversiden, men det er fortsatt mulig at vi ikke viser annonsen til brukeren – og slik er systemet ment å fungere.
I et samtalebasert produkt som ChatGPT er levering av annonsemateriell på serversiden ingen garanti for at annonsen blir vist. Den må også komme frem i tide til å bli med i den aktuelle samtalerunden. Annonsemateriellet omfatter tittel, beskrivelse, destinasjonslenke og eventuell handlingsoppfordring. I tillegg returnerer annonsesystemet en modellgenerert innledning: en kort, nøytral introduksjon som forklarer hvordan annonsen henger sammen med samtalen. Ved å holde innledningen atskilt fra annonsemateriellet bevarer vi annonsørens budskap samtidig som ChatGPTs stemme forblir nøytral.
ChatGPTs klientgrensesnitt mottar innledningen og annonsemateriellet som én pakke. Hvis pakken kommer før ChatGPTs svar er ferdig generert, viser klientgrensesnittet annonsen under svaret, tydelig merket som sponset. Hvis den kommer for sent, vises ikke annonsen i den samtalerunden. Dette er forskjellen mellom annonselevering på serversiden og en annonsevisning for brukeren.
Valg av vinner og levering er separate hendelser. En valgt annonse regnes først som levert når ChatGPT har godkjent og vist plasseringen, og leveringen er bekreftet.
Annonseplattformen vår bruker tradisjonell logging og datapipelines, noe som gir tre hovedfordeler: Annonsører kan enklere integrere sine eksisterende systemer med plattformen vår, de kan forbedre strategiene sine ved hjelp av rapporteringsdata, og teamet vårt kan finne deler av systemet som bør forbedres. I tillegg til disse rapporterings- og optimaliseringsverktøyene bruker vi en modell av høy kvalitet til å evaluere leveringen og trene andre annonsemodeller. Dette skaper en kraftfull løkke for selvforbedring.
Detaljerte oversikter over hva som skjedde, hjelper oss med å forstå og forbedre hver del av annonsesystemet for seg. Systemet for loggbehandling registrerer også detaljerte utfall, for eksempel:
Samtalerunden var ikke kvalifisert for annonsering.
En annonseøkt startet, men ingen innhenting ble forespurt.
Innhentingen returnerte ingen kandidater.
Kandidater ble hentet, men utfylling av tilleggsdata eller kvalifisering mislyktes.
En annonse ble levert og senere interagert med.
Disse detaljerte oversiktene hjelper oss med å forbedre hver del av annonsevisningssystemet for seg. Å bli bedre til å oppdage annonsemuligheter krever et annet datagrunnlag enn å forbedre innhenting, kandidatkvalitet, auksjonsdeltakelse eller leveringspålitelighet.
Systemene for levering, visning og kvalitet følger hver sin del av livssyklusen. Behandling underlagt personvernkontroller avgjør hva som kan brukes til måling og modellforbedring.
Tanken bak modellbasert evaluering er at de sterkeste modellene våre, med best evne til resonnering, observerer og vurderer systemets resultater. Deretter forbedrer de LLM-en som har gjennomgått etterutdannelse, ved å trene den til å prestere bedre. Vi kan for eksempel bruke mindre, mer effektive modeller eller modeller med mindre kapasitet til resonnering til orkestrering eller innhenting, hvis den kraftigste modellen vår samler inn tilbakemeldinger og trener disse små hjelperne til å gjøre en best mulig jobb.
Vi samler inn og følger opp menneskelige tilbakemeldinger (brukernes klikk og skjuling av annonser), brukerundersøkelser og direkte tilbakemeldinger fra annonsører gjennom Ads Manager. Teamet vårt er også tilgjengelig for tilbakemeldinger mens vi utvikler systemet, og lytter direkte til hva både ChatGPT‑brukere og annonsører ønsker. Disse tilbakemeldingene påvirker retningen vår enda mer enn modellens observasjoner, og har bidratt til at vi raskt kunne prøve oss frem til de riktige produktbeslutningene. Modellen kan kanskje forstå brukerens hensikt og tenke kritisk for å levere noe verdifullt, men det er mennesker som former forståelsen av hva som passer.
For et år siden hadde vi ikke noe annonsesystem, og bare noen få personer jobbet med denne problemstillingen. Nå har vi et robust annonsesystem som genererer over 1 milliard dollar i inntekter på årsbasis, beregnet ut fra dagens inntektstakt, med en LLM-basert orkestrator som driver annonseprosessen. Codex økte gjennomføringsevnen vår dramatisk og var avgjørende for at vi kunne bygge opp systemet fra bunnen av og nå denne viktige milepælen i bruk med enestående hastighet. Helt fra starten organiserte vi teamet og utviklingsarbeidet slik at vi kunne bruke Codex til å bygge og skalere systemet raskt. Vi bygde sikkerhetsmekanismer slik at Codex kunne levere kode trygt og pålitelig. Parallelt satte vi opp programtillegg for datainfrastruktur i Codex for å korte kraftig ned veien fra innsikt til gjennomførte systemforbedringer, blant annet nye produktfunksjoner, kvalitetsforbedringer og bedre systemytelse.
Kombinasjonen av systemets rammer (forankret i annonseringsprinsippene våre) og den LLM-baserte orkestratoren gjør det mulig å gjøre annonsering nyttig uten å behandle hver samtale som en annonseforespørsel. Fremover vil vi fortsette å eksperimentere med mer dynamiske annonseformater for å øke verdien for brukere og annonsører, for eksempel ved å la brukere snakke direkte med bedrifter gjennom annonser. Plattformens selvforbedrende arkitektur, som er bygget på OpenAI-modeller med kontinuerlige tilbakemeldingssløyfer, vil gjøre oss i stand til å forbedre relevans og persontilpasning stadig raskere over tid.



