İki insan arasındaki doğal bir telefon konuşmasında, bir kişinin cümlesini bitirmesi ile karşı tarafın yanıt vermeye başlaması arasındaki süre ortalama 250 ila 400 milisaniyedir. Eğer kurduğunuz sesli yapay zeka asistanı 2-3 saniye bekledikten sonra konuşmaya başlıyorsa, kullanıcı hattın koptuğunu düşünür ve konuşma doğallığı tamamen kaybolur. Bu kapsamlı mimari rehberde, açık kaynaklı livekit/agents çerçevesiyle 300 ms altında yanıt veren ve söz kesmeleri (Barge-in / Interruption) anında algılayan profesyonel bir sesli ajanın nasıl kurulduğunu adım adım inceliyoruz.
Neden WebSocket Değil de WebRTC Zorunludur?
Geliştiricilerin yaptığı en yaygın hata ses paketlerini standart TCP/WebSocket üzerinden taşımaktır. TCP protokolü yolda tek bir ses paketi kaybolduğunda (Packet Loss) arkadan gelen tüm paketleri bekletir (Head-of-Line Blocking) ve seste saniyelik donmalar yaratır. WebRTC (UDP) ise kaybolan milisaniyelik ses paketini atlayarak konuşmanın sıfır gecikmeyle akmasını, yankı engellemeyi (Acoustic Echo Cancellation) ve gürültü bastırmayı donanım seviyesinde çözer.
300 Milisaniye Gecikme Bütçesi (Latency Budget) Kırılım Tablosu
| Boru Hattı (Pipeline) Katmanı | Geleneksel Yavaş Mimari | Optimize Gerçek Zamanlı Mimari | Hedef Gecikme Süresi |
|---|---|---|---|
| 1. Ağ Taşıma Katmanı | HTTP / REST veya TCP WebSocket (~250 ms) | LiveKit WebRTC (UDP Edge Ağı) | ~25 ms |
| 2. Ses Etkinliği ve Sıra Algılama (VAD) | Sabit 1.5 saniye sessizlik bekleme | Silero VAD + Anlamsal Sıra Algılayıcı (Turn Detector) | ~40 ms |
| 3. Sesten Metne (STT - Transkripsiyon) | Ses bittikten sonra toplu Whisper çağrısı (~900 ms) | Akışlı (Streaming) Faster-Whisper / Deepgram Nova-3 | ~65 ms |
| 4. LLM İlk Token Süresi (TTFT) | Standart büyük model (~800 ms) | SGLang / Gemini 2.0 Flash / Groq | ~90 ms |
| 5. Metinden Sese İlk Bayt (TTS TTFB) | Tam cümle bitince ses üretme (~1.200 ms) | Kokoro-82M (ONNX) / ElevenLabs Flash | ~75 ms |
| TOPLAM UÇTAN UCA GECİKME | 3.500 – 4.500 ms (3.5 – 4.5 Saniye) | Tam Akışlı (Streaming) Boru Hattı | ~295 ms (İnsan Hızı) |
Kritik Mühendislik Problemi: Söz Kesme (Barge-in) ve Sıra Algılama
Kullanıcı konuşurken nefes almak için yarım saniye duraksadığında yapay zekanın hemen araya girmemesi; ancak yapay zeka uzun bir açıklama yaparken kullanıcı "Tamam, anladım ama..." dediğinde yapay zekanın 50 milisaniye içinde susup dinlemeye geçmesi gerekir. LiveKit Agents bu sorunu Silero VAD ile küçük bir Transformer Sıra Algılama Modelini (End-of-Turn Model) birleştirerek çözer: Kullanıcının son kelimesi "ve..." veya "çünkü..." ise cümlenin bitmediğini anlar ve bekler.
Adım 1: LiveKit Agents Python Kurulumu
pip install "livekit-agents[openai,silero,deepgram,elevenlabs]"
Adım 2: Tam Çalışan Gerçek Zamanlı Sesli Ajan Kodu (`agent.py`)
import logging
from livekit.agents import AutoSubscribe, JobContext, WorkerOptions, cli, llm
from livekit.agents.pipeline import VoicePipelineAgent
from livekit.plugins import openai, silero
logger = logging.getLogger("sesli-asistan")
async def entrypoint(ctx: JobContext):
# Başlangıç sistem talimatı (Sesli okunacağı için kısa ve doğal cümle kuralı zorunludur)
initial_ctx = llm.ChatContext().append(
role="system",
text=(
"Sen Yapay Zeka Evreni'nin gerçek zamanlı sesli asistanısın. "
"Yanıtların telefonda okunacağı için madde imi veya tablo kullanma; "
"en fazla 2 cümlelik doğal, akıcı ve sıcak bir Türkçeyle konuş."
),
)
await ctx.connect(auto_subscribe=AutoSubscribe.AUDIO_ONLY)
# Ses Boru Hattı Ajanını Tanımlama (VAD + STT + LLM + TTS)
agent = VoicePipelineAgent(
vad=silero.VAD.load(),
stt=openai.STT(model="whisper-1", language="tr"),
llm=openai.LLM(model="gpt-4o-mini"),
tts=openai.TTS(voice="nova"),
chat_ctx=initial_ctx,
allow_interruptions=True, # Kullanıcı araya girdiğinde anında sus
interrupt_speech_duration=0.4, # 400ms konuşma algılanırsa kesmeyi tetikle
)
agent.start(ctx.room)
await agent.say("Merhaba! Yapay Zeka Evreni sesli hattına hoş geldiniz, size nasıl yardımcı olabilirim?", allow_interruptions=True)
if __name__ == "__main__":
cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))
Tamamen çevrimdışı ve yerel donanımda sestan sese (Speech-to-Speech) tek bir modelle çalışmak isterseniz Mini-Omni 2 aracımızı inceleyebilirsiniz.