LiveKit ve FastAPI ile Gerçek Zamanlı Sesli Yapay Zeka Oluşturma
Sesli yapay zeka demosu yapmak kolaydır. Üretim ortamına (production) sesli yapay zeka sunmak ise zordur.
Bir demo tek bir ideal senaryoya (happy path) sahiptir ve yük altında değildir. Üretim ortamında ise jitter, kullanıcı sözünü kesmeleri, yeniden bağlantılar ve sağlayıcı hataları vardır. Eğer bunlara göre tasarım yapmazsanız, yapay zekanız robotik duyulur.
Bu sistemleri inşa etmek sadece framework hileleri değil, akıllı bir mimari gerektirir. Durumun (state) nerede tutulacağına ve gecikmenin (latency) nasıl birikeceğine karar vermelisiniz.
Sağlam bir sesli yapay zeka yığını (stack) şu katmanlara ihtiyaç duyar:
• İstemci (Client): Mikrofon girişini yakalar ve sesi çalar. • Ses oturumu katmanı: Kimlik doğrulama ve bağlantı yaşam döngüsünü yönetir. • LiveKit odası: Düşük gecikmeli medya iletimini yönetir. • STT hattı (pipeline): Konuşmayı metne dönüştürür. • LLM orkestrasyonu: Prompt'ları ve araç çağrılarını (tool calls) yönetir. • TTS hattı (pipeline): Metni ses olarak geri akış (stream) yapar. • Backend API'leri: Durum ve iş mantığı için FastAPI servisleri. • Gözlemlenebilirlik (Observability): Gecikmeyi takip etmek için metrikler ve günlükler (logs).
Katmanları bağımsız tutun. İstemci çok az mantık (logic) yürütmelidir. Sadece sesi yakalamalı ve kullanıcı arayüzünü (UI) yönetmelidir.
LiveKit için kısa ömürlü token'lar oluşturmak üzere FastAPI kullanın. Bu, oda erişimini güvenli tutar. Oturum kayıtlarını sunucuda sabit bir ID ile saklayın. Kullanıcı ID'sini, oda ID'sini ve mevcut durumu takip edin. Bir kullanıcı yeniden bağlandığında, backend bağlamı (context) anında geri yükler.
Sesli yapay zeka bir gecikme (latency) oyunudur. Eğer bir yanıt gecikirse, kullanıcılar sözünüzü keser.
Her aşama için bir gecikme bütçesi belirleyin:
- STT gecikmesi
- Orkestrasyon gecikmesi
- Araç çağrısı gecikmesi
- TTS başlatma süresi
- İlk ses baytına kadar geçen süre
Söz kesilmelerini (interruptions) temel bir özellik olarak destekleyin. Bir kullanıcı konuştuğunda, istemci bir kesinti olayı (interrupt event) göndermelidir. Sistem mevcut TTS akışını iptal etmeli ve yanıtı kesilmiş olarak işaretlemelidir. Bu, yapay zekanın bir sonraki turda güncelliğini yitirmiş bağlamı (stale context) sızdırmasını önler.
Yeniden denemeleri (retries) güvenli hale getirin. Araç çağrıları için idempotency anahtarları (idempotency keys) kullanın. Bu, bir istek başarısız olup yeniden denendiğinde, bir müşteriden iki kez ücret almak gibi aynı işlemi iki kez yapmamanızı sağlar.
Kullanıcı deneyimi için önemli olan metrikleri takip edin:
- Uçtan uca tur gecikmesi
- İlk ses baytına kadar geçen süre
- Oturum başına kesinti oranı
- Yeniden bağlanma sıklığı
Sesli yapay zeka sadece bir LLM problemi değildir. Bu bir sistem problemidir. Ağ yönetimi, durum, güvenlik ve tasarımı kapsar.
Bir temel oluşturmak için LiveKit ve FastAPI kullanın. Öngörülebilir sözleşmelere (contracts), açık duruma (explicit state) ve sıkı gecikme döngülerine (latency loops) odaklanın. İnsansı hissettiren yazılımlar bu şekilde inşa edilir.
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi
