Ein Voice AI Agent, der auf echte Telefonanrufe reagiert, natürliche Gespräche führt und Tischreservierungen entgegennimmt. Kein Chatbot, kein IVR-Menü, sondern ein echter Sprachagent auf einer echten Rufnummer, gebaut an einem Wochenende.
Der entscheidende technische Unterschied zu klassischen Sprachassistenten: Speech-to-Speech statt der üblichen Pipeline aus Spracherkennung, Sprachmodell und Sprachsynthese. Bei der klassischen Pipeline addieren sich die Latenzen der einzelnen Schritte auf etwa zwei Sekunden. Am Telefon lange genug, dass Anrufer auflegen. Ultravox als Speech-to-Speech-Modell kollabiert das auf einen einzigen Schritt mit unter 100 Millisekunden Latenz. Erst das macht es als Telefonagent brauchbar.
Die Architektur ist überraschend schlank: Telnyx stellt die Rufnummer und das Audio-Streaming bereit, Ultravox übernimmt die KI-Verarbeitung, Cartesia liefert eine natürlich klingende Stimme. Der eigene Node.js-Server verbindet die drei Dienste und stellt die Tool-Endpunkte bereit, die der Agent während eines Gesprächs aufrufen kann, etwa um Tischverfügbarkeit zu prüfen oder eine Reservierung anzulegen.
Was mich am meisten beschäftigt hat, war nicht das technische Setup, sondern das Prompt Engineering. Sprache verzeiht keine unnatürlichen Muster, die im Text nie auffallen würden. Zu viele Fragen auf einmal, fehlende Übergangsphrasen während Tool-Aufrufen, oder ein zu formeller Ton. Am Telefon merkt man das sofort. Der System-Prompt ist die am meisten überarbeitete Datei im Projekt.
Den vollständigen Artikel mit der Architektur und allen Codebeispielen gibt es auf Medium.