Basit zincir neden yetmiyor?
Sesli bir asistanın en sade hâli üç adımlık bir zincir: STT (speech-to-text) sesini yazıya çeviriyor, bir LLM cevabı yazıyor, TTS (text-to-speech) o cevabı sese çeviriyor. Bu parçaları ayrı ayrı daha önce yerel dikte ve KittenTTS yazılarında anlattık.
Zincir bir demo için yeterli. Ama gerçek bir konuşmada hemen dağılıyor:
- Gecikme. Her adım bir öncekinin bitmesini beklerse, sen sustuktan sonra cevap birkaç saniye geliyor. Telefonda bu uzun bir sessizlik demek.
- Araya girmek (barge-in). İnsanlar konuşurken birbirinin sözünü keser. Asistan sen konuşmaya başladığında hâlâ cümlesini okuyorsa, konuşma bozuluyor.
- Duraksamalar. “Bir sorum var, şey…” deyip düşündüğünde asistan hemen cevaba atlarsa, yine bozuluyor.
Üç küçük ama kritik parça
Bu sorunları çözen işlerin kendi adları var:
- VAD (voice activity detection): Mikrofonda şu an biri konuşuyor mu? Sadece bunu söylüyor. Gürültüyle konuşmayı ayırması gerekiyor.
- Turn detection (sıra algılama): Konuşan kişi sözünü bitirdi mi, yoksa sadece nefes mi alıyor? TEN’in bu iş için yayımladığı model, kullanıcının cümlesini üç gruptan birine koyuyor: bitti (cevap bekliyor), bitmedi (devam edecek) ve bekle (açıkça “sus” dedi).
- Akış (streaming): LLM cevabın tamamını bitirmeden, ilk cümle hazır olur olmaz TTS’e gönderiliyor. Böylece asistan düşünmeye devam ederken konuşmaya başlayabiliyor.
TEN’in yaklaşımı: Zincir değil, ağ
TEN Framework, gerçek zamanlı sesli ajanlar için bir çatı. Arkasında görüntülü ve sesli iletişim altyapısı sunan Agora şirketi var. Temel fikri şu: Ajanı tek bir boru hattı olarak değil, eklentilerden (extension) oluşan bir graf olarak kuruyorsun. STT, LLM, TTS, VAD, araçlar, avatar; her biri tek bir işi yapan ayrı bir eklenti. Graf, hangi eklentinin çıktısının hangisine gideceğini tanımlıyor.
Eklentiler birbirine komut, veri, ses karesi ve görüntü karesi gönderebiliyor. Python, C++, Go ve TypeScript ile yazılabiliyorlar. Yani ses işleyen hızlı kısmı C++ ile, yapay zekâ kısmını Python ile yazıp aynı grafta birleştirebiliyorsun.
Sözü kesme de bu yapıdan çıkıyor. Örnek sesli asistanın kodunda, konuşma tanıma senden yeni bir metin yakaladığı anda ana eklenti üç yere “dur” sinyali yolluyor: LLM üretmeyi bırakıyor, TTS sırasını boşaltıyor, çalmakta olan ses kesiliyor. Sonra senin yeni cümlen işleniyor.
Grafı TMAN Designer adlı görsel bir araçta görüp düzenleyebiliyorsun. Videoya göre bunun asıl faydası sürükle-bırak değil, hata ayıklama: Gerçek zamanlı ses sistemlerinde verinin nerede takıldığını görmek zor.
Denemek ve dikkat edilecekler
- Çok sayıda hesap gerekiyor. Örnekleri çalıştırmak için Agora (gerçek zamanlı ses), Deepgram (STT), OpenAI (LLM) ve ElevenLabs (TTS) anahtarları isteniyor. Kurulum Docker ile yapılıyor.
- Sözü kesmek çözülüyor, anlamak değil. Videodaki testte araya girme düzgün çalışıyor. Ama asistan “TEN” kelimesini yanlış duyup TensorFlow’u anlatmaya başlıyor. Kalite hâlâ seçtiğin STT ve LLM’e bağlı.
- Lisans tam serbest değil. Kod Apache 2.0 tabanlı, ama ek şartlar var: Çatıyı telefon gibi son kullanıcı cihazlarında çalıştıramıyorsun ve Agora’yla rekabet eden bir hizmet kuramıyorsun. Ürün planlıyorsan bunu baştan oku.
- Daha hızlı başlangıç için video, LiveKit Agents ve Pipecat’i de alternatif olarak anıyor.
Sonra ne oldu?
Proje aktif. Video sonrası birkaç sürüm çıktı. Temmuz sonundaki 0.11.71’de Anthropic’in Claude modelleri için bir LLM eklentisi geldi. Eylül’deki 0.11.72 ve 0.11.73’te yeni konuşma tanıma sağlayıcıları ve düzeltmeler eklendi.
Düşün
- Bir insanla telefonda konuşurken sözünü kesmenin ne zaman kabalık, ne zaman doğal olduğuna nasıl karar veriyorsun? Bir makine bunu nasıl öğrenebilir?
- Sesli bir asistanda iki saniyelik gecikme mi daha rahatsız edici, yanlış anlaşılan bir kelime mi?
Videoyu izle
Kaynaklar (10, İngilizce)
- Better Stack: TEN Framework: Voice AI That Can Actually Be Interrupted (video) (yeni sekmede açılır)
- GitHub: TEN-framework/ten-framework (yeni sekmede açılır)
- TEN Framework documentation (yeni sekmede açılır)
- TEN Framework: Concept overview (yeni sekmede açılır)
- TEN Framework LICENSE (yeni sekmede açılır)
- GitHub: TEN-framework/ten-turn-detection (yeni sekmede açılır)
- GitHub: TEN-framework/ten-vad (yeni sekmede açılır)
- TEN Framework releases (yeni sekmede açılır)
- GitHub: livekit/agents (yeni sekmede açılır)
- GitHub: pipecat-ai/pipecat (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.