image for Glem chatbots – den nyeste AI-modellen fra OpenAI kan snakke med kundene dine

Glem chatbots – den nyeste AI-modellen fra OpenAI kan snakke med kundene dine

Hva om ChatGPT ikke bare svarte kundene dine via en chatbot, men faktisk snakket med dem på telefonen? Hva om AI kunne tolke pauser, tonefall og avbrytelser, og svare som en rådgiver?

Vi står ved starten av en ny æra for kunstig intelligens. Den neste bølgen handler ikke bare om større modeller eller flere parametere, men om tempo og tilstedeværelse. Sanntids- eller realtime-AI gjør det mulig å føre samtaler med maskiner som flyter like naturlig som dialogen mellom to mennesker, samtidig som den utfører oppgaver.

Du er ikke alene hvis du er skeptisk etter å ha brukt stemmeassistenter som Siri eller Alexa. I mange år har de vært mer frustrerende enn hjelpsomme, og for mange har de blitt et bevis på at stemmestyring ikke fungerer. Men det som skjer nå, er noe helt annet. Den nyeste generasjonen AI-modeller representerer et teknologisk gjennombrudd som fundamentalt endrer hvordan vi utvikler og bruker kunstig intelligens.

Selv om jeg i tittelen hevder at vi kan «glemme chatbots», er det egentlig bare tull. Det gjøres enorme fremskritt på skriftlige språk-modeller, så poenget er ikke å avskrive skriftlige grensesnitt. De vil fortsatt være viktige. Det avgjørende er å gi brukerne friheten til å velge, noen foretrekker å skrive, andre å snakke. Sanntids-AI handler derfor ikke om å erstatte det ene med det andre, men å utvide opplevelsen. Ikke tvinge mennesker inn i et nytt format, men la AI møte dem der det føles mest naturlig, enten det er via tekst eller tale.

I denne artikkelen ser vi på hvordan de nye modellene fungerer, hvorfor det er så stort, og hvordan du selv kan bygge en fungerende implementasjon med OpenAI GPT-Realtime, WebRTC og Azure Functions.

Hva gjør sanntids-AI annerledes?

For å skjønne hvorfor sanntids-AI føles så annerledes, må vi først se på hvordan språkmodeller tradisjonelt har fungert. ChatGPT følger et ganske forutsigbart mønster: du skriver inn en melding, modellen tenker, og så kommer svaret. Selv når teksten «strømmes» ut linje for linje, er mesteparten av svaret allerede planlagt før det første ordet vises.

Det er effektivt, men også litt mekanisk. Samtalen går én vei om gangen: du spør, modellen svarer. Du kan ikke hoppe inn midt i en setning, endre tema, eller snakke med stemmen din. Interaksjonen er i bunn og grunn tekst inn – tekst ut.

Sanntidsmodeller snur dette på hodet. I stedet for å vente på tur, deltar modellen i samtalen mens den skjer. Du kan snakke naturlig, avbryte, ombestemme deg, og AI-en henger med. Den justerer svarene sine fortløpende, akkurat som et menneske som tenker mens det snakker.

Den store forskjellen ligger i selve infrastrukturen. Der eldre modeller kommuniserer gjennom enkeltstående forespørsler som sendes og mottas over HTTP, bruker sanntidsmodeller en kontinuerlig toveiskanal (ofte basert på WebRTC) som lar lyd, tekst og handlinger flyte begge veier samtidig.

Fra stemmeassistenter til samtalepartnere

Denne utviklingen handler ikke bare om smartere stemmestyring, den handler om å gjøre avansert AI tilgjengelig for alle. Tidligere krevde sanntids-AI spesialiserte datasystemer og dyp ekspertise. I dag kan hvem som helst komme i gang med noen få API-kall, takket være plattformer fra aktører som OpenAI, Microsoft og Google.

For utviklere betyr dette at man nå kan bygge løsninger som svarer umiddelbart, forstår kontekst, og til og med handler på eget initiativ. Resultatet er applikasjoner som oppleves langt mer naturlige og menneskelige, enten det er i kundeservice, undervisning, kreativitet eller intern produktivitet.

Men det vil ta tid før alt er på plass. Teknologien er fortsatt ny, og både verktøy og arbeidsmetoder må modnes. Likevel er én ting sikkert: selskaper som klarer å omstille seg tidlig og ta teknologien i bruk på en gjennomtenkt måte, vil få et enormt forsprang. De vil ikke bare spare tid og penger – de vil bygge opplevelser konkurrentene vil bruke år på å ta igjen.

Hva betyr dette i praksis?

Sanntids-AI handler ikke først og fremst om fart. Det handler om følelse, om hvor naturlig, sømløs og responsiv teknologien oppleves.

Kundeservice uten friksjon: Tenk deg at du ringer kundeservice og får en AI-assistent som faktisk kan hjelpe deg, her og nå. Ingen ventemusikk. Ingen videresending. Du sier:

«Pakken min kom ødelagt. Jeg trenger en ny sendt til en annen adresse, og frakten må krediteres.» AI-en forstår intensjonen, finner ordren, bestiller erstatningen og sender bekreftelsen, alt mens du fortsatt snakker. Ingen venting. Ingen overføring. Bare en naturlig samtale som fikser det du trenger.

Arbeidsflyt som går av seg selv: Tenk deg et møte der AI-en ikke bare tar notater, men faktisk deltar. Når noen sier:

«Hvor mye brukte vi på markedsføring i Q4?»
AI-en henter tallene fra regnearket, viser trenden på skjermen og oppsummerer for deltakerne, i sanntid, uten at noen trenger å lete. Etterpå sender den en kort oppsummering med beslutninger og oppfølgingspunkter.

Trening og læring som føles personlig: I stedet for å følge ferdige leksjoner, snakker du med en AI som lærer deg slik du lærer best. Den hører på uttalen din, justerer vanskelighetsgraden og bygger videre på samtalen fra i går.

«Jeg vil øve på italiensk på kafé i Roma.»
«Greit – la oss bestille kaffe sammen. Vil du ha cappuccino eller espresso?»
Læringen skjer i øyeblikket, med ekte samtale og kontinuerlig tilpasning.

Kreativitet i flyt: Du beskriver en idé, og AI-en visualiserer den mens du snakker.

«Prøv en varmere stemning, med lavere lys og mykere kontraster.»
AI-en oppdaterer designet, foreslår variasjoner og fortsetter dialogen.
Det føles ikke som å bruke et verktøy – det føles som å samarbeide med en kollega som forstår deg.

Hos Snøkam har vi utviklet flere slike sanntidsløsninger. I det neste avsnittet tar vi deg med inn i den tekniske implementasjonen av én konkret opplevelse: en stemmeassistent som hjelper ansatte med å opprette arrangementer like raskt som de kan beskrive behovet.

Hva gjør dette mulig – teknisk sett?

Alt dette kan høres magisk ut, en AI som forstår deg mens du snakker, utfører oppgaver underveis, og holder samtalen flytende uten forsinkelser. Men bak opplevelsen ligger en arkitektur som er overraskende tilgjengelig, så lenge man setter de riktige byggesteinene sammen.

Det handler ikke om eksperimentell forskning eller proprietær magi, men om å kombinere tilgjengelige verktøy som WebRTC, OpenAI GPT-Realtime og et enkelt endepunkt.

For å illustrere hvordan komponentene spiller sammen i praksis, viser diagrammet nedenfor hele flyten, fra brukerens nettleser til OpenAI-modellen som driver samtalen.

La oss gå gjennom det steg for steg:

  1. Frontend (React)
    Brukeren åpner en webapp som gir tilgang til mikrofonen og starter samtalen. Herfra sendes en forespørsel til backend for å hente en sikker, midlertidig tilgangsnøkkel.
  2. Backend (Express)
    Backend håndterer sikkerheten. Den bruker en lagret API-nøkkel for å opprette en ny sesjon hos OpenAI, og mottar en ephemeral (midlertidig) nøkkel tilbake.
  3. Ephemeral nøkkel
    Denne midlertidige nøkkelen er gyldig i kun 60 sekunder og sikrer at frontend kan koble seg direkte til OpenAI – uten å eksponere API-nøkkelen.
  4. WebRTC-forbindelse
    Med nøkkelen i hånd oppretter frontend en WebRTC-tilkobling til OpenAI GPT-Realtime. Over denne forbindelsen strømmer:
    • Lyd i begge retninger (du snakker, AI svarer)
    • Data via en separat kanal (AI kan utføre handlinger, sende meldinger osv.)

Hvorfor har vi en backend?

Selv om kommunikasjonen mellom bruker og AI i stor grad går direkte, er det backend som gir oss kontrollen vi trenger. Den oppretter sikre sesjoner, konfigurerer hvordan assistenten skal oppføre seg, og sørger for at API-nøkler aldri eksponeres. På denne måten kan vi gi frontend den friheten som sanntid krever, uten å gå på kompromiss med sikkerheten.

Backend genererer såkalte ephemeral tokens, midlertidige tilgangsnøkler som bare varer i et minutt, og som brukes til å etablere en direkte forbindelse mellom nettleseren og GPT-Realtime. På den måten kan vi la frontend kommunisere direkte med AI-en, men fortsatt holde all autentisering og sesjonsstyring på serversiden.

I tillegg har vi valgt en struktur der selve "personligheten" til assistenten, altså instruksjonene den følger, og hvilke verktøy den har tilgang til defineres i backend som en enkel JSON-konfigurasjon. Alt som trengs er å opprette en ny agent-definisjon og la frontend be om riktig agent når samtalen starter.

Her er hvordan vi implementerer dette i en Azure Function:

[Function("GetEphemeralToken")]
public async Task<IActionResult> GetEphemeralToken(
[HttpTrigger(AuthorizationLevel.Anonymous, "post",
Route = "v1.0/realtime/get-ephemeral-token")]
HttpRequest req,
string agent = "default",
string voice = "ash")
{
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY")
?? throw new InvalidOperationException("OPENAI_API_KEY is not set.");
// Hent agent-instruksjoner (f.eks. "create-event", "default")
var (instructions, tools, _, _) =
ProtectedRealtimeAgents.AvailableAgents
.GetValueOrDefault(agent, ProtectedRealtimeAgents.AvailableAgents["default"]);
// Opprett en ny sesjon hos OpenAI
var response = await HttpClient
.PostAsJsonAsync("https://api.openai.com/v1/realtime/sessions", new
{
voice,
model = "gpt-realtime",
tool_choice = "auto",
instructions,
tools
});
var result = JsonConvert.DeserializeObject<RealtimeSession>(
await response.Content.ReadAsStringAsync()
);
return new OkObjectResult(result);
}

Funksjonen tar imot en forespørsel med et agent-navn (vi kommer tilbake til hva det betyr), henter den sikre API-nøkkelen fra miljøvariabler, og oppretter en sesjon hos OpenAI. Responsen inneholder den ephemeral tokenen som returneres til frontend. Legg merke til at API-nøkkelen aldri forlater serveren. Den brukes kun til å autentisere forespørselen til OpenAI.

Fleksibilitet – uten å endre koden

En annen viktig del av arkitekturen er hvordan vi håndterer variasjon. I praksis ønsker vi ikke én universell AI-assistent, men flere, hver med sitt formål, sin personlighet og sine verktøy. F.eks én som hjelper med å booke møterom. Én som oppretter arrangementer.

I stedet for å skrive ny kode hver gang vi skal lage en ny assistent, har vi valgt en agent-basert tilnærming. Hver agent defineres som en enkel JSON-konfigurasjon i backend. Der beskriver vi hvordan AI-en skal opptre, hvilke verktøy den har tilgang til, og hvilke instruksjoner den følger.

Når frontend starter en samtale, sendes et agentnavn med i forespørselen. For eksempel "create-event". Backend slår da opp riktig definisjon, og bruker den til å opprette sesjonen hos OpenAI. På den måten kan vi endre hvordan AI-en oppfører seg, hva den sier, og hva den kan gjøre, uten å gjøre endringer i frontend-koden.

Et eksempel: agenten «create-event» er satt opp til å hjelpe ansatte med å fylle ut skjemae. Den har tilgang til to funksjoner: én for å oppdatere skjemafelter, og én for å sende inn skjemaet. Når AI-en bestemmer seg for å bruke et av disse verktøyene, sendes det som en JSON-melding over WebRTC-forbindelsen til frontend, som tolker det og utfører handlingen.

Denne strukturen gjør det enkelt å legge til nye assistenter etter behov – uten å endre resten av systemet. Vi kan tilpasse både oppførsel, stemme og funksjonalitet ved å justere én konfigurasjonsfil. Det betyr at vi raskt kan eksperimentere, utvikle og utvide, uten tung implementasjon i bunn.

public static class ProtectedRealtimeAgents
{
public static readonly Dictionary<string, (string Instructions, object[] Tools, string? AddApiTools, string Description)> AvailableAgents = new()
{
["create-event"] = CreateContext(
description: "Hjelper til med å fylle ut skjemaer for å opprette arrangementer",
addApiTools: "internal",
baseInstructions: """
Du er en intern assistent for IT-konsulentselskapet Snøkam som skal svare på norsk.
Hovedoppgaven din er å hjelpe til med å fylle ut skjemaer for å opprette arrangementer.
🎭 Du skal etterligne karakteren Olaf fra Disney-filmen Frozen.
""",
extraTools: [
new {
type = "function",
name = "submit_form",
description = "Send inn skjema"
},
new {
type = "function",
name = "change_form_fields",
description = "Oppdater verdier for skjemafelter"
}
]
),
["default"] = CreateContext(
description: "Standard assistent for Snøkam",
addApiTools: "internal",
baseInstructions: """
Du er en vennlig assistent som hjelper ansatte i Snøkam.
Svar alltid på norsk, og vær hjelpsom og profesjonell.
""",
extraTools: []
)
};
}

Å koble det sammen: Frontend

Frontend-applikasjonen er bygget i React, og vi har samlet kompleksiteten i en gjenbrukbar hook som håndterer alt som trengs for å snakke med GPT-Realtime: tilgang til mikrofon, oppsett av WebRTC-forbindelse, sending av lyd, mottak av svar og oppfølging av eventuelle handlinger. Alt dette skjer i løpet av sekunder, og for brukeren fremstår det hele som én enkel opplevelse, trykk på en knapp, og samtalen er i gang.

export function useRealtimeSessionManager({ onToolCall }) {
const startSession = useCallback(async (props = {}) => {
// 1. Få mikrofontilgang
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
// 2. Hent ephemeral token fra vår backend
const data = await chatGptClient.getEphemeralToken({
agent: props.agent,
voice: props.voice,
});
const token = data.clientSecret?.value;
// 3. Sett opp WebRTC peer connection
const pc = new RTCPeerConnection();
const dataChannel = pc.createDataChannel("oai-events");
// 4. Koble til mikrofonen
const audioTransceiver = pc.addTransceiver("audio", {
direction: "sendrecv",
});
await audioTransceiver.sender.replaceTrack(stream.getAudioTracks()[0]);
// 5. Håndter verktøykall fra AI
dataChannel.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "response.function_call_arguments.done") {
const { name } = msg;
const args = JSON.parse(msg.arguments);
if (name === "change_form_fields") {
onToolCall?.({
toolName: name,
payload: args,
});
}
}
};
// 6. Spill av lyd fra AI
const audioEl = document.createElement("audio");
audioEl.autoplay = true;
pc.ontrack = (e) => (audioEl.srcObject = e.streams[0]);
// 7. Start WebRTC-handshake med OpenAI
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const response = await fetch(
`https://api.openai.com/v1/realtime?model=${data.model}`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/sdp",
},
body: offer.sdp,
}
);
await pc.setRemoteDescription({
type: "answer",
sdp: await response.text()
});
return sessionId;
}, [chatGptClient, onToolCall]);
return { startSession, stopSession };
}

Det som skjer under panseret, er at vi først henter en ephemeral token fra backend. Med denne nøkkelen etablerer vi en WebRTC-tilkobling til OpenAI, som gjør det mulig å strømme lyd i begge retninger og sende meldinger over en separat data channel. På denne kanalen mottar frontend signaler fra AI-en. For eksempel når den ønsker å oppdatere et skjemafelt, sende inn et skjema, eller gi visuell tilbakemelding i UI-et.

For å gjøre det så enkelt som mulig å integrere denne funksjonaliteten i ulike deler av appen, er samtaleopplevelsen kapslet inn i én komponent. Den kan settes inn hvor som helst, med ulike agenter og ulike funksjonskall, uten å måtte skrive logikken på nytt. Det betyr at vi kan ha én AI-assistent i et skjema, en annen i et dashbord, og en tredje i en chatboble, der alle er bygget på samme arkitektur, men med ulik personlighet og rolle.

Fra kode til opplevelse: Murder Mystery

For å vise en litt morsom demo av hvordan teknologien kan brukes, har vi laget noe mer ambisiøst enn en chatbot: et interaktivt murder mystery-spill der hver karakter er en egen AI-agent med sin egen personlighet, sitt eget alibi, og sine egne observasjoner fra kvelden.

Scenariet er enkelt: Det har skjedd et drap på Snøkam-kontoret. Du må snakke med de ansatte (AI-agenter), stille spørsmål, følge opp svar, og til slutt peke ut morderen. Det som gjør det interessant er at hver samtale er unik. AI-en improviserer detaljer, reagerer på hvordan du stiller spørsmål, og kan til og med bli defensiv hvis du presser for hardt.

Teknisk sett bruker vi samme arkitektur som beskrevet over. Hver karakter er definert som en egen agent med instruksjoner som beskriver deres personlighet og hva de vet. For eksempel har én agent instruksjoner om at hen var i møterommet klokken 21:30 og hørte rare lyder fra kjøkkenet. En annen var hjemme hele kvelden. En tredje vet noe, men vil ikke si det med en gang. AI-en holder seg konsistent til disse instruksjonene mens den improviserer dialogen.

Det interessante er ikke bare at spillet fungerer, men hvordan det føles. Fordi kommunikasjonen skjer i sanntid med naturlig stemme, blir interaksjonen langt mer engasjerende enn et tekstbasert avhørsspill ville vært. Du kan avbryte hvis du får en idé, du kan utforske tankeganger spontant, og du kan registrere nyanser i hvordan karakterene svarer. Det er nærmere en samtale med et menneske enn med en maskin.

Spillet er tilgjengelig på ai.snokam.no. Hvis du løser mysteriet før 31. oktober, kan du vinne 5 000 kroner. Men det egentlige premiet er å oppleve hvor langt sanntids-AI har kommet, og kanskje få noen ideer til hva du selv kan bygge med teknologien.

Oppsummering og veien videre

Sanntids-AI representerer et paradigmeskifte i hvordan vi samhandler med kunstig intelligens. Vi går fra å bruke AI til å samhandle med den i sanntid, naturlig og intuitivt.

Hvis du skal ta med deg noe fra denne artikkelen, er det at sanntids-AI representerer noe fundamentalt annet enn bare "raskere chat".

Sanntids-AI er fortsatt i en tidlig fase, og vi ser allerede konturene av neste generasjon. Multimodale modeller som kan se, høre og forstå kontekst samtidig er på vei. Responstiden vil fortsette å synke under 100 millisekunder. Støtten for flere språk og dialekter blir stadig bedre. Integrasjon med AR og VR vil åpne for helt nye typer opplevelser der AI blir en naturlig del av omgivelsene rundt oss.

Den kanskje mest interessante utviklingen er bedre personalisering over tid. I dag starter hver samtale på nytt. Fremtidige systemer vil kunne bygge opp en forståelse av deg og dine preferanser, samtidig som de opprettholder den umiddelbarheten som gjør sanntids-AI så kraftfull.

Hos Snøkam fortsetter vi å eksperimentere med AI, både internt og ute hos kundene våre. Vi har noen ideer til bruksområder vi ikke har sett andre gjøre ennå. Hvis du jobber med noe lignende, eller bare er nysgjerrig på hvordan vi har løst enkelte utfordringer teknisk, ta gjerne kontakt. Vi deler gjerne erfaringer.

Om forfatteren
Som AI Tech Lead i Storebrand bygger Morten AI-drevne kundeopplevelser som gjør en reell forskjell når de trenger det, på den måten de foretrekker.

Send gjerne en mail til hei@snokam.no hvis du vil diskutere et konkret prosjekt.