- Gecikmeyi 400 ms seviyesine indiren, kendi inşa edilmiş bir ses tabanlı yapay zeka sistemi geliştirme örneği tanıtılıyor
- STT, LLM ve TTS gerçek zamanlı bir pipeline içinde bağlanarak mevcut ticari platformlara (Vapi vb.) kıyasla 2 kat daha hızlı yanıt elde edildi
- Deepgram Flux ile konuşma algılama ve geçiş yönetildi, Groq'un llama-3.3-70b modeli kullanılarak ilk token üretim süresi büyük ölçüde kısaltıldı
- Coğrafi yerleşim ve ağ optimizasyonu sayesinde AB bölgesine dağıtımda gecikme yarıdan fazla azaltıldı
- Sesli ajanların özü gerçek zamanlı orkestrasyon ve pipeline tasarımıdır; bunu doğrudan uygulamak performans darboğazlarını net biçimde görmeyi sağlar
Sesli ajanı kurma arka planı
- Tüketim ürünleri alanındaki büyük bir şirket için sesli ajan prototipi geliştirme deneyimine dayanarak, ticari platformların karmaşıklığını doğrudan ele almak için kendi çözümünü kurma denemesi yapıldı
- ElevenLabs ve Vapi gibi platformlar kullanışlı olsa da iç işleyişlerini anlamak zor ve gecikme üzerinde ayrıntılı kontrol mümkün değil
- Hedef, Vapi seviyesinde performansı doğrudan yeniden üretmekti; bu da bir gün ve yaklaşık 100 dolarlık API kredisiyle gerçekleştirildi
Sesli ajanların karmaşıklığı
- Metin tabanlı chatbot'lardan farklı olarak seste gerçek zamanlı sıra yönetimi (turn-taking) gerekir
- Kullanıcı konuşmaya başladığı anda sistemin kendi konuşmasını hemen kesmesi, kullanıcı durunca da hızla yanıt vermeye başlaması gerekir
- Yalnızca basit ses algılama (VAD), konuşmanın bittiği anı doğru belirlemekte yetersiz kalır ve gecikme, çakışan konuşmalar ve gereksiz sessizlikler ortaya çıkar
İlk uygulama: VAD tabanlı test
- FastAPI sunucusu ve Twilio WebSocket kullanılarak μ-law ses akışı alındı
- Silero VAD ile ses varlığı tespit edildi ve konuşma bitince önceden kaydedilmiş bir WAV dosyası çalındı
- Basit olmasına rağmen anlık tepki verebilme ve doğal konuşma akışı doğrulandı
- Bu aşamada gecikmenin alt sınırını ölçmek için bir referans elde edildi
İkinci uygulama: Deepgram Flux ve gerçek zamanlı pipeline
- Deepgram Flux eklenerek streaming transkripsiyon ile sıra algılama birleştirildi
- Flux konuşmanın bittiğini algıladığında süreç şu sırayla ilerledi
- Transkripsiyon sonucu ve konuşma geçmişi LLM'e iletildi
- İlk token üretilir üretilmez TTS (WebSocket) tarafına streaming başlatıldı
- Üretilen ses Twilio'ya gerçek zamanlı olarak gönderildi
- TTS bağlantısı önceden sıcak tutuldu (warm pool) ve böylece yaklaşık 300 ms gecikme tasarrufu sağlandı
- Kullanıcı konuşmaya başladığında LLM, TTS ve ses aktarımı hemen iptal edilerek doğal kesme davranışı uygulandı
Gecikme ölçümü ve bölgesel dağıtım
- Türkiye'de yerel çalıştırmada ortalama 1.6~1.7 saniye gecikme oluştu
- Railway EU bölgesine dağıtım yapılıp Twilio, Deepgram ve ElevenLabs de AB bölgelerine hizalanınca
- Ortalama 690 ms'ye (toplam 790 ms) düştü; bu da Vapi'den yaklaşık 50 ms daha hızlıydı
- Gecikmenin düşmesiyle konuşma tepkiselliği belirgin biçimde arttı, konuşma kesme işlemi de daha akıcı hale geldi
Model seçimi ve performans artışı
- Başlangıçta gpt-4o-mini kullanıldı, ardından Groq llama-3.3-70b ile değiştirildi
- Testlerde Groq modelinin ilk token üretim süresinin (TTFT) OpenAI'ye kıyasla 3 kata kadar daha hızlı olduğu görüldü
- Ortalama uçtan uca 400 ms altı gecikme elde edildi, ilk ses 500 ms içinde ulaştı
- Bu seviyede ajanın insandan daha hızlı tepki verdiği hissediliyor
Başlıca teknik dersler
- Gecikme optimizasyonunda kilit nokta, konuşmanın bitişinden ilk ses çıkışına kadar tüm yolu yönetmektir
- TTFT toplam gecikmenin yarısından fazlasını oluşturduğundan, düşük gecikmeli model seçimi önemlidir
- STT→LLM→TTS sıralı işlem yerine streaming pipeline kurulmalıdır
- Konuşma yarıda kesildiğinde tüm bileşenler hemen iptal edilmelidir ki doğal diyalog korunabilsin
- Servisler arasındaki coğrafi yakınlık gecikme üzerinde belirleyici etkiye sahiptir
Ticari platformlarla karşılaştırma
- Vapi ve ElevenLabs, API, kararlılık, gözlemlenebilirlik gibi ek özellikler sunduğu için çoğu ekip için hâlâ faydalıdır
- Ancak doğrudan kurulum sayesinde gerçek darboğazlar ve parametrelerin anlamı anlaşılabilir ve
belirli ihtiyaçlara göre özelleştirilmiş orkestrasyon mümkün olur
- Ses sistemleri sonuçta bir orkestrasyon problemidir; yapı net görüldüğünde çözülebilir bir mühendislik görevi haline gelir
Kaynak kodu
1 yorum
Hacker News yorumları
Bu yazı gerçekten çok ilginç. Eskiden Amazon Alexa ekibinde bu sorun araştırılmıştı ve bununla ilgili patentler de var.
İnsanlar arasındaki ortalama konuşma gecikmesi 0ms; yani karşı taraf sözünü bitirmeden diğer kişi konuşmaya başlıyor. Bunun nedeni beynin karşı tarafın sözünü öngörmesi ve aynı anda yanıt hazırlaması.
Buna karşılık insanlar sesli asistanlarda gecikme bekliyor. Bunun iki nedeni var — bilgisayarın ‘düşünmesi’ gerektiği algısı ve cep telefonu görüşmelerindeki gecikme.
Alexa yanıtlarının neredeyse hiçbiri 500ms altında değil. Eskiden sadece 300ms sessizlik ‘tur sonu’ kabul ediliyordu ama asıl mesele semantic end-of-turn.
Artık hesaplama kaynakları yeterli olduğuna göre bu alanın ne kadar ilerlediğini merak ediyorum. Coğrafi olarak yakın işleme (edge computing) büyük bir dönüm noktasıydı.
Bence ses işi sonuçta bir turn-taking problemi. Kimsenin el atmadığı kolay bir iyileştirme var — doldurma sözcükleri ve tempo ayarı.
LLM kısa bir sessizlik algıladığında, asıl yanıt üretilirken “ıı”, “evet” gibi bağlama uygun doldurma ifadeleri ekleyebilir. Böylece konuşma çok daha doğal olur.
Harika bir yazı. OpenAI Responses client yakın zamanda WebSocket ekledi ve gecikme azaldı.
Bir başka yöntem de son derece küçük bir LLM’i yerelde doğrudan çalıştırmak. Ben ova projesi ile tamamen yerel bir pipeline kurdum ve streaming olmadan bile 1 saniyenin altında gidiş-dönüş süresi elde ettim.
Yazıdaki streaming pipeline yapısı ve adım adım gecikme analizi çok faydalıydı. Turn-taking döngüsünü doğrudan uygulamış olması etkileyiciydi.
Ancak “Vapi’den 2 kat daha hızlı” karşılaştırması biraz yanıltıcı. Vapi tool calling, webhook, multi-tenant routing gibi çok daha fazla iş yapıyor.
Bu yazının asıl değeri, ‘elle kurulmuş orkestrasyon döngüsünden çıkan içgörüler’de. Sadece “kendim yaparken öğrendiklerim” diye çerçevelense kusursuz olurdu.
Ben de Twilio + Deepgram + ElevenLabs + LLM API kombinasyonuyla ticari bir sesli ajan kuruyorum.
Kilit nokta STT doğruluğu değil, turn-taking UX oldu. Sabit sessizlik eşiği yerine semantic end-of-turn kullanınca hissedilen deneyim tamamen değişti.
Bölgeler arası gecikme de önemli. Hindistan’dan ABD sunucularına bağlanırken yalnızca Twilio edge hop bile 150~250ms ekliyordu. Bunu bölgesel routing ile iyileştirdik.
Barge-in (araya girme) yönetimi de karmaşık. Sadece LLM ve TTS’yi durdurmak yetmiyor, daha önce tetiklenmiş otomasyon iş akışlarını da geri almak gerekiyor. Eskiden rezervasyon onayı sırasında araya girilirse rezervasyonun gerçekten tamamlandığı bir bug vardı.
Soniox Real-time (60 dili destekliyor), endpoint detection işini model seviyesinde yapıyor. VAD’den çok daha doğru.
Teknik dokümanlar, Daily benchmark’ı, demo sayfası incelenebilir.
Eskiden Soniox’ta çalışıyordum. Gerçek zamanlı endpoint detection’ı ilk uygulayan hizmet buydu.
Kişisel olarak STT → LLM → TTS yapısının sınırlı olduğunu düşünüyorum. Gelecek uçtan uca ses modellerinde.
2 yıl önce Chirpy demosunu yapmıştım ama gerçekten kullanılabilir bir seviyeye gelmesi için özel eğitim gerekiyordu. Bir yan proje için bunun altından kalkmak mümkün değildi.
Kurumsal müşteriler denetlenebilirlik (auditability) ve güvenilirliğe önem veriyor. Sağlık ve finans gibi regüle sektörlerde STT ile LLM çıktılarının ayrı ayrı doğrulanması gerekiyor.
Buna karşılık uçtan uca ses modelleri, röportaj veya anket gibi daha anlatısal kullanım alanlarına uygun. Gerçek müşteriler, en yeni modelden çok mühendislik olgunluğu istiyor.
Bu yaklaşım bana oyun motoru ağ kodunun ilk gelişim dönemini hatırlattı. Gecikme bir model sorunu değil, orkestrasyon sorunu.
Carmack’ın 2013 VR makalesi de aynı şeyi savunuyordu — milisaniye seviyesindeki darboğazları bulmak için tüm pipeline’ı izlemek gerekir.
Latency Mitigation Strategies bakmaya değer. TTS WebSocket havuzunu önceden açarak 300ms kazanılması buna mükemmel bir örnek.
Açık kaynak ses tanıma uygulaması Handy’yi tanıtmak isterim. Tamamen çevrimdışı çalışıyor ve genişletilebilir.
Ben bunu her gün Claude ile birlikte kullanıyorum; macOS’in varsayılan diktesinden çok daha iyi çalışıyor.
Güzel bir yazı, ama turn-taking ile konuşmayı tamamen açıklamak fazla indirgemeci.
Gerçek konuşmada üst üste binen konuşmalar, onay sinyalleri, iletişimi sürdürmeye yarayan ifadeler (phatic messages) ve hatta karşı tarafın sözünü tamamlayan işbirlikçi davranışlar da var.
Bu unsurlar basit bir turn-taking modeliyle iyi ifade edilemez; modelin bunları hem üretip hem de anlayabilmesi gerekir.