Hvad er en AI Voice Agent? (Teknologien bag Vapi & OpenAI Forklaret)
Indholdsfortegnelse
Hvis du tænker på Siri eller “Tryk 1 for Salg”, når jeg siger “Voice AI”, så skal du nulstille din hjerne.
Det, der er sket de sidste 12 måneder inden for stemmeteknologi, er ikke en evolution. Det er et kvantespring.
Vi er gået fra robotter, der lyder som robotter og ikke forstår kontekst, til agenter, der kan ringe op, forstå sarkasme, afbrydes midt i en sætning og grine på de rigtige tidspunkter.
Men hvordan virker det?
Hvad er forskellen på den “gamle” måde og den “nye” måde (OpenAI Realtime)?
Og kan det faktisk tale dansk?
I denne tekniske deep dive åbner vi motorhjelmen på en moderne AI Voice Agent. Vi kigger på arkitekturen, latency-udfordringen og den kode, der binder det hele sammen.
Del 1: Latency-Problemet (Hvorfor Siri fejlede)¶
For at forstå gennembruddet, skal du forstå fjenden: Latency (Forsinkelse).
I en normal samtale mellem to mennesker er pausen mellem den ene stopper med at tale, og den anden svarer, typisk 200-300 millisekunder.
Hvis pausen bliver 500ms, føles det akavet.
Hvis den bliver 1000ms (1 sekund), tror vi, forbindelsen er røget, eller at modparten er dum.
Den “gamle” AI-arkitektur (før 2024) så sådan ud:
- Lyt (STT): Optag lyd -> Send til server -> Transskriber til tekst. (Tid: 1.5 sekunder)
- Tænk (LLM): Send tekst til GPT-3 -> Vent på komplet svar -> Send tekst tilbage. (Tid: 2.0 sekunder)
- Tal (TTS): Send tekst til lyd-motor -> Generer lydfil -> Stream tilbage. (Tid: 1.5 sekunder)
Total forsinkelse: 5.0 sekunder.
Resultat: En ubrugelig samtale.
Løsningen: Streaming & Vapi¶
I dag bruger vi en Streaming Pipeline.
Lige så snart brugeren siger ét ord, begynder transskriberingen.
Lige så snart AI’en har tænkt det første token, begynder stemmen at blive genereret.
Dette bringer forsinkelsen ned på 500-800ms. Det er stadig ikke menneskeligt (200ms), men det er tæt nok på til, at samtalen flyder naturligt.
Del 2: The Tech Stack (Hjernen, Øret og Munden)¶
En moderne AI Voice Agent (som dem vi bygger i Agent360) består af tre hovedkomponenter, orkestreret af en “Controller” (Vapi.ai).
1. Øret: Transcriber (Speech-to-Text)¶
Vi bruger typisk Deepgram Nova-2.
* Hvorfor? Den er lynhurtig og forstår dansk ekstremt godt - selv jyske dialekter.
* Latency: <300ms.
2. Hjernen: LLM (Large Language Model)¶
Her bruger vi GPT-4o eller Claude 3.5 Sonnet.
* Rolle: Forstår hensigten, slår op i videnbasen (RAG), og formulerer svaret.
* Prompting: Vi giver den en “System Prompt”, der definerer dens personlighed (f.eks. “Du er en hjælpsom receptionist hos Tandlægerne i Vejle”).
3. Munden: Synthesizer (Text-to-Speech)¶
Vi bruger ElevenLabs Turbo v2.5.
* Kvalitet: Det lyder 99% menneskeligt. Den trækker vejret. Den ændrer intonation.
* Dansk: Vi har trænet custom voices på danske stemmeskuespillere for at undgå den klassiske “Google Translate”-accent.
4. Dirigenten: Vapi.ai¶
Dette er hemmeligheden. Vapi er det lag, der binder de tre ovenstående sammen.
Vapi håndterer de sværeste ting ved en samtale:
* Endpointing: Hvornår er brugeren færdig med at tale? (Er pausen en tænkepause eller et punktum?)
* Interruption: Hvis brugeren afbryder AI’en (“Nej vent, jeg mente tirsdag!”), skal AI’en stoppe øjeblikkeligt, cleare sin buffer, og lytte igen. Dette sker på millisekunder.
Del 3: Maskinrummet (Kode-Eksempel)¶
Hvordan ser det ud i kode?
Her er et forenklet eksempel fra vores egen backend (VapiService), der viser, hvordan vi opretter en assistent, der kan ringe ud.
# Agent360 Backend (Python)
async def create_sales_agent(tenant_id: str, company_name: str):
# 1. Konfigurer "Hjernen" (System Prompt)
system_prompt = f"""
Du er en salgsassistent for {company_name}.
Dit mål er at kvalificere leads.
Tal kort og præcist. Vær imødekommende.
Hvis kunden spørger om pris, så sig...
"""
# 2. Definer Værktøjer (Functions)
functions = [
{
"name": "bookMeeting",
"description": "Book et møde i kalenderen",
"parameters": {"type": "object", "properties": {"time": {"type": "string"}}}
},
{
"name": "endCall",
"description": "Afslut samtalen høfligt"
}
]
# 3. Send til Vapi API
payload = {
"name": f"{company_name} Sales Agent",
"transcriber": {"provider": "deepgram", "model": "nova-2", "language": "da"},
"model": {
"provider": "openai",
"model": "gpt-4o",
"systemPrompt": system_prompt,
"functions": functions
},
"voice": {"provider": "11labs", "voiceId": "JESPER_VOICE_ID_V2"},
"serverUrl": "https://api.agent360.dk/vapi/webhook" # Vores webhook til data-logning
}
response = await vapi_client.post("/assistant", json=payload)
return response.id
Når vi har assistant_id, kan vi ringe til en kunde med én linje kode:
await vapi_service.start_call(
customer_number="+4512345678",
assistant_id="asst_123...",
metadata={"lead_score": 85, "name": "Morten"}
)
Det er faktisk så simpelt (når infrastrukturen er på plads).
Del 4: OpenAI Realtime API (Fremtiden)¶
Lige nu er “The Stack” (Transcriber + LLM + Synthesizer) standarden.
Men OpenAI har for nylig lanceret Realtime API (GPT-4o Audio).
Her er forskellen:
* Før: Audio -> Tekst -> LLM -> Tekst -> Audio. (Tab af information).
* Nu (Realtime): Audio -> LLM -> Audio.
Modellen “hører” lyden direkte. Det betyder, at den kan høre tonelag.
* Hvis du lyder vred, ved den det.
* Hvis du hvisker, hvisker den tilbage.
* Den kan grine, synge og lave lydeffekter.
Vi eksperimenterer lige nu med Realtime API i Agent360. Udfordringen er stadig prisen (det er markant dyrere) og kontrollen (det er sværere at styre præcis, hvad den siger), men latency er nede på 300ms. Det er næsten telepatisk.
Del 5: “Kan den tale dansk?”¶
Ja. Og nej.
Hvis du bruger standard-stemmerne fra USA, lyder det som en amerikansk turist, der læser op fra en parlør.
Men med Fine-tuned Voices (som vi bruger hos Agent360), er vi nået dertil, hvor 9 ud af 10 ikke opdager, det er en AI, før efter 2 minutter.
Vi har trænet modellerne på tusindvis af timers dansk tale for at fange de små nuancer - “øh”, “mmh”, og den flade intonation, vi har i Danmark.
Det største problem lige nu er ikke udtalen, men sarkasme.
Danskere bruger meget sarkasme.
* Kunde: “Ja, det lyder da bare super billigt…” (Mener: Det er dyrt).
* AI (Standard): “Det er jeg glad for, du synes! Skal vi gå videre?” (Fail).
* AI (Agent360 Prompted): “Jeg fornemmer, du måske synes prisen er i den høje ende? Lad mig forklare værdien…” (Win).
Dette kræver avanceret prompting og temperatur-styring i LLM’en.
Konklusion: Er teknologien klar?¶
For 12 måneder siden ville jeg have sagt “Måske til simple ting”.
I dag siger jeg: Ja. Ubetinget.
Teknologien er nu så hurtig (Latency), så klog (LLM) og så vellydende (TTS), at den kan overtage 80% af de rutineopkald, jeres medarbejdere hader.
* Mødebooking.
* Kvalificering af leads.
* Kundeservice FAQ.
* Tidsbestilling.
Spørgsmålet er ikke længere, om teknologien virker.
Spørgsmålet er, hvordan I vil integrere den i jeres forretning.
Relaterede artikler
Sådan Bruger Du AI til Salgscoaching: Giv Bedre Feedback i Realtid (2025 Guide)
Traditionel salgscoaching er langsom og sporadisk. Opdag hvordan AI giver dine sælgere objektiv feedback på 100% af deres kald – mens de taler.