İçeriğe geç
Yazılara dön

~/writing / saha notu

  • ai-agents
  • hermes
  • livekit
  • twilio
  • mcp
  • open-source
  • voice-ai
  • python

LiveKit, Twilio ve Hermes ile Açık Kaynaklı Bir Yapay Zekâ Telefon Ajanı Geliştirdim

Mustafa Ramx pixel avatar Mustafa Ramx5 Eyl 20267 dk okuma
Kapak görseli: LiveKit, Twilio ve Hermes ile Açık Kaynaklı Bir Yapay Zekâ Telefon Ajanı Geliştirdim
Bu sayfada10 bölüm
  1. Sorun sadece telefon açmak değildi
  2. Neden Hermes’i merkeze aldım?
  3. Geliştirdiğim şey: Clauver
  4. Peki gerçekten ne para tutuyor?
  5. Hermes’ten arama yapmasını istediğimde ne oluyor?
  6. Bazı şeyler beklediğimden daha zordu
  7. Güvenlik en başından beri önemliydi
  8. Clauver bugün neler yapabiliyor?
  9. Neden açık kaynak yaptım?
  10. Bu, yapay zekâ araçlarını geliştirme biçimimde bir kalıba dönüşüyor

Yapay zekâ ses teknolojisi havalı göründüğü için bir telefon ajanı geliştirmeye başlamadım.

Neredeyse iki ay boyunca konuşamadığım için başladım.

Her şey beklenmedik bir şekilde oldu. Normal bir şekilde uyudum, ancak sabah uyandığımda sesimi neredeyse hiç kullanamıyordum.

Bir anda iş için arama yapmak, ailemi aramak veya doktordan randevu almak zorlaştı. Yazabiliyordum, yapay zekâ kullanabiliyordum ve kod yazabiliyordum; ama bir kurumun gerçekten telefonu kaldırıp konuşmamı istediği durumda bunların hiçbir faydası yoktu.

Bu da aklıma şu soruyu getirdi:

Bir yapay zekâ ajanı e-posta gönderebiliyor, internette gezinebiliyor, komut çalıştırabiliyor ve API’leri kullanabiliyorsa neden benim için telefon açamasın?

Ben de bir tane geliştirmeye başladım.

Ortaya, Hermes Agent’ı LiveKit ve SIP/Twilio kullanarak gerçek telefon ağına bağlayan açık kaynaklı bir yapay zekâ telefon ajanı olan Clauver çıktı.

Tasarım hedefim basitti: zaten kullandığım yapay zekâ altyapısının mümkün olduğunca büyük bölümünü yeniden kullanmak.


Sorun sadece telefon açmak değildi

Bir yazılımın telefon numarasını aramasını sağlamak özellikle zor değil. Twilio bunu yıllardır yapabiliyor.

Asıl zor kısım, biri telefonu açtıktan sonra ne olacağıydı. Clauver’ın kendini tanıtmasını, benim adıma aradığını açıklamasını, mesajımı iletmesini, cevabı dinlemesini, kısa bir konuşmayı sürdürmesini, uygun olmayan randevu saatleriyle ilgilenmesini, telesekreteri algılamasını ve sonucu bana aktarmasını istiyordum.

Örneğin:

“Diş hekimini ara ve yarın saat 14.00 için randevu al. O saat uygun değilse bir sonraki uygun zamanı sor.”

Bu, önceden kaydedilmiş bir ses dosyasını oynatmaktan çok farklı. Gerçek bir ses ajanı gerekiyor.


Neden Hermes’i merkeze aldım?

Yapay zekâ telefon ajanları için zaten iyi platformlar var ve Hermes’in de isteğe bağlı bir telephony skill’i bulunuyor. Bu yazıyı yazdığım sırada Hermes, temel telefon özellikleri için doğrudan Twilio’yu; konuşmalı aramalar içinse Bland.ai ve Vapi gibi servisleri kullanabiliyor.

Bu pratik bir çözüm, ancak ben zaten LLM sağlayıcısı, kimlik bilgileri, TTS/STT yapılandırması, ajan mantığı, araçları ve yetenekleriyle birlikte Hermes çalıştırıyordum. Başka bir ses platformu eklemek, elimdeki altyapının büyük bölümünü tekrar eden ikinci bir ücretli katman anlamına geliyordu.

Bu yüzden biraz inatçı bir mühendis sorusu sordum:

Hermes ihtiyacım olan zekânın çoğuna zaten sahipken neden başka bir yapay zekâ platformuna para ödüyorum?

Clauver’ın mimarisi bu sorudan doğdu.


Geliştirdiğim şey: Clauver

Clauver, Hermes Agent ile gerçek telefon görüşmeleri arasında açık kaynaklı bir köprü.

Temel mimari şöyle görünüyor:

Hermes Agent’tan LiveKit, SIP/Twilio ve gerçek telefon görüşmesine uzanan Clauver mimarisi

Ses worker’ının içinde Clauver, kullanıcının mevcut Hermes yapılandırmasını okuyup LiveKit’in kullanabileceği bileşenlere dönüştürüyor. Böylece aynı model, kimlik bilgileri ve ses tercihleri ayrı bir platformda tekrar yapılandırılmak zorunda kalmıyor.

Metinden sese

Hermes’te desteklenen bir TTS sağlayıcısı varsa Clauver onu kullanabiliyor. Ayrıca Microsoft Edge TTS etrafında ekstra maliyet oluşturmayan bir varsayılan adaptör geliştirdim; başka bir ücretli ses API’si zorunlu değil.

Sesten metne

Varsayılan tanıma yolu faster-whisper kullanan yerel Whisper. Ses, Clauver’ın çalıştığı makinede işleniyor; böylece ayrı bir transkripsiyon API’si gerekmiyor. Maliyeti düşürüyor, ancak Deepgram gibi hızlı bir akış servisinden daha fazla CPU kullanıyor.

Bu yaklaşım projenin genelinde tekrar ediyor: en ucuz ve pratik yerel/varsayılan seçenekle başla, ama mimariyi ona kilitleme.


Peki gerçekten ne para tutuyor?

Clauver telefon hizmetlerini sihirli bir şekilde ücretsiz hâle getirmiyor. Benim kurulumumda interneti telefon ağına bağlayan ana harici maliyet SIP üzerinden Twilio.

LiveKit gerçek zamanlı iletişim katmanını yönetiyor. Geliştirme ve düşük yoğunluklu kişisel kullanımda builder kotası faydalı miktarda kullanımı karşılayabilir; telefon bağlantısı ve dakikalar için ise Twilio ücretlendiriyor.

Önemli fark, LLM’i, konuşma tanımayı ve ses üretimini yönetmek için ayrıca özel bir konuşmalı yapay zekâ platformu eklemem gerekmemesi. Büyük ölçüde zaten sahip olduğum altyapıyı yeniden kullanıyorum.


Hermes’ten arama yapmasını istediğimde ne oluyor?

Clauver kullanımının doğal hissettirmesini istedim. Şöyle değil:

python call.py --number ...

Yirmi ayrı yapılandırma alanı da değil. Başka bir kontrol paneli hiç değil. Sadece ajanla konuşmak.

Örneğin:

“Partnerimi ara ve 20 dakika gecikeceğimi söyle.”

Hermes, Clauver skill’ini görüyor ve MCP aracını çağırıyor:

dispatch_clauver_call(
    phone_number,
    task,
    target_name?,
    boss?
)

Bundan sonra altyapıyı Clauver yönetiyor. Worker gerektiğinde başlıyor, LiveKit oturumu oluşturuyor, SIP aramayı Twilio üzerinden bağlıyor ve ajan konuşmaya başlıyor.

Karşıdaki kişi önceden kaydedilmiş bir mesaj duymuyor. Clauver dinleyip cevap verebiliyor.

Bir yapay zekâ ajanına yazdığım cümle MCP, LLM, TTS, LiveKit, SIP ve herkese açık telefon ağı üzerinden ilerledi… ve gerçek bir insan telefonu açtı.

Yazılım benim sesim olmuştu.

Clauver’ın pratikte nasıl çalıştığına kısa bir göz atalım:

İçeride nasıl çalıştığını merak ediyor musunuz?

Clauver’ı GitHub’da inceleyin

Depoda MCP köprüsü, ses worker’ı ve kurulum dosyaları var. Hermes, LiveKit, MCP veya ses ajanlarıyla çalışıyorsanız deneyin; bir sorun görürseniz issue ya da pull request açın. Bir yıldız vermeniz de yardımcı olur.


Bazı şeyler beklediğimden daha zordu

Mimari bir diyagramda temiz görünüyor. Gerçek hayat o kadar kibar değildi. 😅

1. Ses işlem hatları gecikmeye karşı çok hassas

Telefon görüşmesinde iki saniyelik sessizlik bile çok uzun hissettiriyor. LLM gecikmesi, konuşma tanıma, TTS üretimi ve ağ gecikmesi üst üste ekleniyor. Yerel Whisper harici maliyeti azaltıyor ama CPU süresini artırıyor; Edge TTS ise ücretli bir sağlayıcıyı ortadan kaldırırken ses üretimi ve dönüştürme işini dikkatli yönetmeyi gerektiriyor.

Her durumda en iyi olan tek bir yapılandırma yok. Bu bir gecikme, maliyet ve kalite dengesi.

2. Her LLM sağlayıcısı biraz farklı davranıyor

Bazı sağlayıcılar OpenAI uyumlu uç noktalar sunuyor. AWS Bedrock ve Anthropic gibi diğerleri farklı işlem gerektiriyor. Bu nedenle köprünün sağlayıcı algılama, API anahtarı çözümleme, sağlayıcıya özel mantık ve makul geri dönüş seçenekleri sunması gerekiyor.

3. Telefon görüşmeleri temiz sohbetler değil

İnsanlar sözünüzü keser, telesekreter açar, resepsiyonistler sizi beklemeye alır ve biri ajanın hazırlıklı olmadığı bir şey sorabilir. Bazen bir yapay zekâ ajanı için doğru davranış, cevap uydurmak yerine durmaktır.


Güvenlik en başından beri önemliydi

Sesli yapay zekâ, sistem insanmış gibi davranmaya başladığında hızla rahatsız edici hâle geliyor. Clauver’ın bunu yapmasını istemedim.

Mevcut skill içinde özellikle belirlediğim kurallar var:

  • Clauver kendisini bir yapay zekâ asistanı olarak tanıtıyor.
  • Kullanıcının yerine arıyor, kullanıcıyı taklit etmiyor.
  • Arama yapılmadan önce kullanıcıdan onay alıyor.
  • Acil durum numaralarına izin verilmiyor.
  • Orijinal görev, anlamı yaratıcı biçimde değiştirilmeden korunuyor.

Son madde önemli. Şunu söylerseniz:

“Bugün gelemeyeceğimi söyle.”

ajanın bunu şöyle değiştirmesini istemezsiniz:

“Mustafa’nın acil bir sağlık sorunu var, yarın sizinle iletişime geçecek.”

Otonom bir telefon görüşmesinde mesajın bütünlüğü yaratıcılıktan daha önemlidir.


Clauver bugün neler yapabiliyor?

Mevcut sürüm öncelikle dışarıya yapılan aramalara odaklanıyor. Şunları yapabiliyor:

  • Gerçek aramalar yapmak ve kısa, iki yönlü konuşmalar yürütmek.
  • Mesaj iletmek, cevap toplamak ve alternatiflerle randevu almak.
  • Telesekreteri algılamak, mesaj bırakmak ve gerektiğinde bir insana aktarmak.
  • Arama sonuçlarını kaydetmek ve worker’ı gerektiğinde otomatik başlatmak.
  • Hermes’in LLM/TTS/STT ayarlarını yeniden kullanmak.
  • Varsayılan olarak ücretsiz veya yerel ses bileşenleriyle çalışmak.

Gelen aramalar, Hermes’e daha iyi yapılandırılmış sonuçlar döndürmek, kayıtlar, transkriptler, özetler ve özel ajan modları doğal sonraki adımlar.

Ama önemli bölüm zaten çalışıyor:

Hermes’e bir istek yazıp bir yapay zekâ ajanının benim adıma gerçek bir telefon görüşmesi yapmasını sağlayabiliyorum.

Çözmek istediğim ilk problem buydu.


Neden açık kaynak yaptım?

Bu proje, geçici olarak kendi sesimi kullanamadığım için başladı. Aynı zamanda kalıcı ses engeli, telefon kaygısı veya günün yarısını beklemede geçirmeyi gerektiren tekrarlayan iş aramaları yaşayan insanları düşündürdü.

Her telefon görüşmesinin otomatikleştirilmesi gerektiğini düşünmüyorum. Geleceğin, diş hekimi randevum hakkında sonsuza kadar birbirini arayan iki robottan oluşmasını da istemiyorum. 😂

Ama bazı durumlarda insanlara iletişim kurmak için başka bir yol vermek gerçekten faydalı olabilir. Clauver’ı bu yüzden açık kaynak yaptım: inceleyebilir, kendiniz çalıştırabilir, değiştirebilir ve üzerine yeni şeyler inşa edebilirsiniz.

Clauver’ı denemek ister misiniz?

Clauver’ı GitHub’da görüntüleyin

İşinize yararsa depoya yıldız vermeyi unutmayın. Bu, projenin başka geliştiriciler tarafından keşfedilmesine yardımcı olur.

Hermes, LiveKit, MCP veya ses ajanlarıyla çalışan birini tanıyorsanız projeyi onlarla da paylaşın.

Hata bildirimleri, fikirler ve pull request’ler memnuniyetle karşılanır.


Bu, yapay zekâ araçlarını geliştirme biçimimde bir kalıba dönüşüyor

Clauver diğer projelerimden çok farklı değil. Bir şeyi genellikle kendim gerçek bir sınıra çarptığımda geliştiriyorum.

FinMCP ile sorun, yapay zekâ asistanlarının piyasalar hakkında akıl yürütebilmesi ama güncel finansal verileri güvenilir şekilde bilememesiydi. OpenClaw VPS denememde ise yapay zekâ ajanlarının pahalı donanıma gerçekten ihtiyaç duyup duymadığını test etmek için sistemi ucuz bir VPS üzerinde çalıştırdım ve darboğazları belgeledim.

Clauver da aynı fikri takip ediyor. Yazılım ile normal bir telefon görüşmesi arasındaki boşluğu geçebilen bir yapay zekâ ajanına ihtiyacım vardı; ben de eksik köprüyü geliştirdim.

En ilginç bulduğum yapay zekâ altyapısı türü bu. Bir chatbot daha değil.

Zaten kullandığımız sistemlerle gerçekten etkileşime girebilen yapay zekâ.

İşi kolaylaştıran araçlar

Her gün yaptığınız küçük işler için basit uygulamalar.

// bu yazıyı paylaş

X’te paylaşLinkedIn