← Radar

Konu: Ajanlar3 dk okuma

Sözü kesilebilen sesli asistan: TEN Framework ve konuşmanın zor kısımları

Bu neden önemli?

Sesli asistanlar müşteri hizmetlerinden araç içi sistemlere kadar her yere giriyor. Bir konuşmanın neden 'robot gibi' hissettirdiğini anlamak, iyi bir sesli ürünün asıl zorluğunun model değil zamanlama olduğunu gösteriyor.

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

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (10, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Ajanlar3 dk

Ajanlar için Next.js anı: Vercel'in ajan framework'ü eve

Vercel, açık kaynak ajan framework'ü eve'i tanıttı. Next.js'in sayfalar için yaptığını ajanlar için yapmayı hedefliyor: Her ekibin sıfırdan yazdığı tekrar başlatma, kum havuzu, onay ve kayıt gibi altyapıyı hazır vermek. Syntax, eve'i Astro ekibinin Flue'suyla birlikte konuştu.