Data Talk #160: Martin Čermák & Vojtěch Mádr (Vocalls/CallMiner)
epizoda#160 | vyšlo | délka | poslechů | permalink | mp3
V této epizodě Data Talk podcastu jsou hosty Martin Čermák, zakladatel Vocalls a dnes VP of Automation and Engineering společnosti CallMiner, a jeho kolega Vojta Mádr, Senior Backend Developer.
Společně s moderátorem Jirkou Vicherkem se ponořili do startupového příběhu Vocalls zakončeného úspěšným exitem firmě CallMiner. Dozvíte se vše o vývoji jejich voicebota, od prvního řádku kódu až po produktovou a obchodní strategii. Martin s Vojtou vysvětlují, jak se konverzační design posunul od stromových struktur a detekce intencí k LLM modelům a jak tuto technologickou změnu reflektovali ve Vocalls. Martin přiblížil výzvy spojené s trénováním vlastního LLM i to, jak se firmě daří kombinovat vlastní know-how s moderními nástroji jako OpenAI nebo ElevenLabs. Vojta nabídl pohled zkušeného MS vývojáře, který do rozjetého startupu přináší čerstvý pohled na práci s daty, architekturu platformy a řešení latence v real-time telefonii. Společně otevřeně sdílejí radosti i slepé uličky globální expanze, důvody prodeje a detaily technologického vývoje voicebotů v éře demokratizace AI modelů.
Strojový přepis
Dobrý den, moje jméno je Jirka Vicherek a vítám vás u dalšího dílu Datatalk podcastu. Mými dnešními hosty jsou Martin Čermák, zakladatel Vokls a dnes VP of Automation and Engineering ve společnosti Callminer. Ahoj, Martine.
Dobrý den, ahoj, děkuji za pozvání.
A jeho kolega Vojta Mádr, který dnes působí jako senior backend developer také ve společnosti Callminer, ale můžete ho znát jako MVP a z jeho vlastních podcastů. Ahoj, Vojto.
Ahoj, Jirko, ahoj posluchači.
V dnešním díle se budeme bavit o voicebotech, o tom, jak trh s voiceboty vypadá, co klienti vlastně chtějí, kde jsou možnosti a jak se voiceboti vyvíjeli – od rule-based přístupů až po dnešní GenAI a velké jazykové modely (LLM). Díky Vojtovi se podíváme i trochu hlouběji pod kapotu a povíme si, jak dnes vypadá architektura a stack ve společnosti Callminer (dříve Vokls).
Než se dostaneme k našemu tématu, pojďme si udělat kontext a začít úplně od začátku. Martine, jak ses dostal do startupového světa, než ses stal startupistou a založil Vokls? Co tomu předcházelo?
Jo, hezká otázka, díky. No, já bych řekl, že jsem začínal jako klasický freelancer a mám zkušenost i se založením malé firmy už zhruba před 20 lety. Klasika – tahali jsme internet, dělali webové stránky, takže to bylo takové full service. Měl jsem starou dodávku, Boxera Peugeota, ve které jsem vozil krabice s UTP kabely. Samozřejmě jsem si říkal, že by to chtělo uchopit jiný konec, a tak po pár letech, kdy jsem pracoval pro různé firmy, jsem kromě toho „garážového punku“ poznal i svět enterprise. Pak jsem se potkal s co-founderem Artemem, kterého tímto zdravím, a zjistili jsme, že máme podobnou vizi. Tak to začalo – už to bude nějaký pátek, ne úplně deset let, ale už dobrých pár let.
A jaká byla ta vize?
Potkali jsme se a celá ta vize začala vtipně – úplně prvotní myšlenkou bylo automatizovat kontaktní centra. To byla Artemova myšlenka, on věděl, že já jsem vývojář a že mi nevadí pustit se do takového projektu. V tu dobu ještě nebyla kvalitní technologie speech-to-text, takže naše první voiceboti byli schopni realizovat telefonní hovory, ale zpětná vazba byla klasická – klávesnice...
Snice. Zmáčněte jedničku, jestli chcete slevu, dvojku, jestli chcete odhlásit. Takže na tom jsme se vlastně naučili telefony a od začátku Vokals, že od roku 2017 byla naše vize vždycky voice first. Začínat s hlasem je to, jako nejslužitější, a toho se držíme celou dobu.
Byl jsi technický co-founder, ty jsi do toho přinášel technickou stránku?
Určitě, určitě jo. Jaký je můj background? Tak vlastně já jsem možná trochu vývojář už 25 let, začínal jsem s QBasicem, pak Pascal klasika, teďka C#, .NET, takže já jsem tam nesel ten směr, na čem to postavíme. Netajím se tím, že jsem vždycky byl fanoušek Microsoftu, vyrůstal jsem na MS-DOSu, takže od začátku jsem měl v té platformě jasno. No a .NET je hezká nahrávka pro Vojtu.
Vojto, pro ty, kteří tě neznají, jaká byla tvoje cesta před Vokals?
Moje cesta před Vokals – dělal jsem pár startupů, zkoušel, co šlo a co nešlo. Plus tím, že mě Microsoft technologie bavily, tak jsem s kamarádem dělal podcast dotnet.cz, s Martinem Šimečkem, toho taky zdravím. A vlastně víceméně bych řekl, že mám takovou hezkou historii.
Zvokal jsem vám to, protože my se známe s Martinem daleko dřív, než spolu pracujeme. Já jsem byl zrovna na sabatikalu a hledal jsem novou práci. Jelikož jsem na vysoké škole dělal rozpoznávání řeči na diplomce – bylo to v roce 2014, když jsem diplomku končil – a Martin asi narozený v roce 1990, tak mě to zaujalo. Ale dostal jsem nabídku od firmy, která sídlila doslova o kancelář vedle, a která dělala personalizovaná videa. Takže jsem zvažoval, co vzít. Měl jsem to 50 na 50, pak mě přitáhla moje láska k videím, ale co čert nechtěl, po letech jsme se opět potkali na chodbě. Martinovi jsem ukazoval nové hezké věci, o kterých teď budeme mluvit, třeba designer, říkal jsem mu: "Musíš to nahrát do kanceláře, mám novýho designera." To bylo takové…
Ty jsi tehdy trochu váhal, že jo, nevěřil jsi, že to funguje?
Spíš nefungovalo moje investiční rozhodnutí do startupu, když chcete investovat do své budoucnosti, můžete si vybrat. Já jsem si vybral blbě, no to je normální. Ale co čert nechtěl, Motion Lab se posunul někam jinam a naše cesty se časem opět propojily. Obě firmy byly .NETové, tak jsem zůstal u své oblíbené platformy.
My jsme se hlavně potkávali na chodbě. Když jsme začínali, první kanceláře Vokals byly na Prague Startup Marketu, takže tam bylo hodně startupů, které možná známe všichni, jak rostly. A vlastně jsme po letech zjistili, kromě toho potkávání se na chodbě, že jsme vlastně dělali pro stejné klienty.
Kdo byl první klient?
Prvním klientem byla Europe Assistance. Enterprise klient. Samozřejmě na začátku jsme měli i menší klienty, které nikdo neznal. Na těch jsme si přirozeně – což je normální – vyzkoušeli technologii ne tak, že by nám hledali bugy, většinou to nefungovalo úplně ideálně.
Bylo to tak. Ona i ta první verze fungovala, ale prostě nebyla „Enterprise ready“. Byla ready pro nějakou menší firmu, která ty služby využila a byla s nimi spokojená, ukázalo nám to zpětnou vazbu: hele, funguje to. Ale samozřejmě náš cíl logicky byly Enterprise společnosti, přes které jsme se chtěli dostat do dalších zemí. Takže cílem bylo dostat se do českých Enterprise, nějak tam etablovat tu technologii, zlepšit bezpečnost a vše ostatní, a pak pokračovat v růstu.
Když se podíváme na produkt a na to, jak to vypadalo u prvního Enterprise klienta, vypadalo to skvěle. První zákazník, kterému moc děkujeme, nás trochu technologií vyzval k výzvě – já neříkám, že jsme byli první voicebot na světě, to ne. Už nějaké firmy tu technologie měly o pár let dříve, ale my jsme chtěli být kvalitou jinde. Když nám ukazovali jejich současné řešení a my jsme jim pak předvedli to naše, poznali, že jsme někde jinde, což nám zase ukázalo, že jdeme správnou cestou.
Hned poté se ukázalo výběrové řízení u dalšího velkého klienta, kterému také děkujeme za příležitost. Během REFY, později RFP jsme ukázali, že to, co hledali, jsme schopni dodat funkčně, zatímco ostatní konkurenti říkali, že to dodají v budoucnu. My byli jedni z mála, kteří přišli s funkčním řešením – a přestože jsme byli nejmenší ze všech, do toho šli.
Tomu všemu těm společnostem na začátku moc děkujeme. Bůh ví, jak by to dopadlo, kdyby nám nevěřili. To řešení pak rozebereme podrobněji v další části, ale stačí říct, že v té době všechno běželo na „rule-based“ přístupu. Představme si to jako dialogový strom, kde se rozhoduje nějakým přístupem if-else nebo if-then-else.
Je úplně jedno, jestli to bylo založené na klíčových slovech (keyword spotting), nebo na pokročilejším machine learningu s tzv. intenty, které buď trénuji v nějakém modelu, nebo jsou tam vektory či jednodušší metody – zkrátka to tak fungovalo. Jinými slovy, pokud měl robot rozpoznat tři témata a reagovat na ně, musely být všechny tři témata explicitně definované – buď pomocí klíčových slov, nebo příkladových vět. Pokud člověk řekl „přepoj mě na operátora“ a v praxi řekne „předej mě na živého člověka“, mělo jít o podobný vektor, který systém rozeznal.
Samozřejmě všichni víme, co pak přišlo dál, ale o tom se dostaneme později, společně s pokročilými jazykovými modely.
A teď pojďme k velké události. Velká gratulace! Díky. Podařilo se vám najít partnera, kterému se vaše firma líbila natolik, že za ni podle médií zaplatil stovky milionů korun. To je krásný exit. Jak na tom vypadaly vocals před akvizicí?
Izicí? Jaký typ zvířátek se teda prodával? Jo, tak se trochu rozpovídám, jestli to nevadí. Hele, my jsme vlastně celou tu dobu až do současného roku fungovali. Ta akvizice proběhla letos na přelomu Q1 a Q2, takže náš cíl byl být ziskový. Samozřejmě máme za sebou i nějaké investory z České republiky, kterým tímto děkujeme za podporu. Vždycky jsme se snažili nepálit peníze úplně extrémně, spíš investovat chytře. Ono to pak člověka strašně motivuje. Když člověk spojuje hodně peněz, tak samozřejmě jich hodně spálí, ale my jsme se furt snažili mít nějaký balans, aby to dávalo ekonomický smysl.
No a samozřejmě náš obchodní cíl byl celkem logický. Jsme český startup, takže ta česká garáž byla první. Pracovali jsme na technologii, nabírali jsme lidi, zpočátku to byli spíš kamarádi a kolegové. Nemohli jsme je moc motivovat penězi, tak jsme je motivovali tím cílem. A ukázalo se, že když jsem někomu řekl: „Hele, dělám projekt na automatizaci kontaktních center, kde bude robot mluvit s lidmi a snaží se pomoci oběma stranám – lidem, aby nemuseli čekat při poslouchání písničky, a firmám, protože je tendence, že do kontaktních center nastupují spíše mladí lidé,“ tak lidi cítili smysl. My jsme nechtěli někoho z kontaktních center vyhodit, ale trend je, že je tam čím dál míň agentů. Někdo je v tom samozřejmě skvělý a baví ho to, ale trend jde postupně dolů.
Takže to byl náš cíl. Když jsem někomu řekl tuhle vizi, někteří se přidávali i za podmínek, které nebyly úplně nejlepší, protože to nebyla jen další miliontá webová stránka nebo nějaký formulář.
Kolik vás bylo na konci roku 2024? My jsme vlastně pořád oscilovali, učili jsme se to správně dělat. Historicky nás bylo nejvíce v jednu chvíli asi 50 lidí, pak jsme došli k počtu mezi 35 a 40, což se ukázalo jako ideální.
Z České republiky jsme měli cíl dostat se do všech enterprise firem. Říkám to trochu tvrdě, ale zároveň jsme podnikali férově. I když zde byla konkurence, která rostla s námi, pořád jsme se nesnažili nikoho hejtovat, účastnili jsme se různých eventů, prezentovali jsme, co umíme a jak chceme dělat věci. To se nám povedlo a máme klienty jako Toče Sobe, Alzu, zásilkovnu alias Paketu, portfolio zahrnuje i Innoji, což je úplně jiný typ zákazníka. Europ Assistance jsem už zmínil.
Pak jsme logicky expandovali na Slovensko, takže zahraniční expanze. Ano, pro český startup znamená prodávat na Slovensku, ale pořád je to jiná země, s vlastní legislativou a náležitostmi.
No a samozřejmě jsme dál rostli, máme byznys v UK, v Belgii, vlastně v celém Beneluxu, s mnoha klienty rosteme organicky, což je super.
Tyto hráči mají po Evropě, řekněme, dost poboček, a asi nejdál jsme se dostali do Mexika, kde to funguje jako mexická zásilkovna.
Je tam společnost Schopna, která s nimi nemá nic společného kromě červené barvy. Jmenuje se Stafeta a představuje pro nás poměrně zajímavou část příjmů. Takže takhle jsme se postupně dostávali od startu v garáži, nabírání lidí, zlepšování technologie — naším cílem vždycky bylo mít dobrou technologii a na tom stavět. Všechny ty zkoušky a RFPčka končily tím, že jsme dostávali zpětnou vazbu, třeba i „super, ale...“. Samozřejmě jsem nikdy neukazoval funkce, které nefungují, neklikal jsem na tlačítka, na která klikat nemám, to je logické. Neustále jsme startupovali a věděli, co ještě je potřeba dodělat. Takže i s trochou obchodního umu se to nakonec podařilo a teď je platforma už poměrně robustní.
Vojta na to teď kouká zpětně a přiznává, že určitý malý technický dluh tam je, ale k tomu se ještě dostane. Martin však jednu věc nezmínil — největší je samozřejmě voice, ale i z toho voiceu se systém rozrostl na další a další aplikace. Společně architektonicky pracujeme na platformě, ale musím také zmínit, že máme i chatbot, což je přirozený vývoj podle požadavků zákazníků. Dále máme specifické RPA, což je Martinův proof of concept, které už teď vstupuje do produkce a vzbuzuje zájem i ze strany callminerů.
Řešíme taky různé další věci, jako živý překlad a podobně, takže už to není jen čistý voicebot. Lidé buď provolávají, nebo volají nám, ale je to komplexní platformní řešení, které v kontaktním centru řeší víc věcí. Například umožňuje zapisování, kdy fyzický člověk vidí, co si s klientem zapsal, a podobně. Aby si to diváci dokázali představit — není to jen voicebot, ale opravdu komplexní platforma pro odbavování různých úkonů.
Než řekneme, jaký typ zvířátka je callminer, tak mě zajímá, jak jste k té platformě přistupovali. Kdo zná Vocus? Má to frontend? Je to nějaká aplikace? Kdo ji používá? Manažeři, agenti, nebo široké spektrum lidí? To je na tom hezké.
Aplikaci, respektive celou platformu, jsem vždy označoval za platformu, protože před pár lety bylo všechno platforma, ale ano, tady to odpovídá. Vocus otvírají konverzační designéři, kteří tvoří dialogy, ať už na straně klienta, tak i u nás, protože máme vlastní produkt. Otvírají ji i další role, které vyhodnocují, jak systém funguje, nebo generují reporty. Takže ji používá široká škála lidí. Když to mám shrnout, kromě našich interních vývojářů ji používají i...
Řešení nebo dodavatele na straně klienta zastupují víceméně lidé spojené s kontaktním centrem. Prostě ten zákazník je vždycky kontaktní centrum, ať už je tam technický člověk, byznysový člověk, analytik nebo někdo z marketingu. Všichni tito lidé u různých klientů napříč celým portfoliem s tím nějak pracují. Takže i design, aby to hezky vypadalo, byl důležitý.
U klienta jsme zapojeni skrz několik oddělení. Jedna věc je kontaktní centrum, které pracuje hodně s integrátory a řeší, jak má vypadat hovor – zda my navoláváme, nebo naopak přijímáme hovory. Musíme se také podívat na CRM tým, který spravuje data o zákaznících. Dále je zde technický background – někteří zákazníci mají on-premise řešení. Je to tedy opravdu komplexní řešení od A do Z. Není to tak, že si dneska jednoduše pořídím voicebota a jedno oddělení to vyřeší, není to jedna aplikace.
Přesně tak, jde o integrace, kde musíme mít připravený například od toho oddělení API endpointy do jejich databáze a podobně. Teď je to opravdu skrz více oddělení, protože trvá, než vás vůbec pustí do CRM databáze. Na všechno máme lidi, kteří každý do řetězce něco přispívají, ať už u nás, nebo u klienta. Klient si může sám naklikat řešení, nebo to můžeme udělat my, záleží na dohodě a nastavení.
Teď uděláme úkrok stranou za velkou louži. Vy jste hledali kupce a byli osloveni, jaká byla situace?
To souvisí s naší strategií a vizí, jak firmu posouvat dál. Jsem opravdu rád a vážím si toho, že jsme byli schopni vybudovat firmu, která byla stabilní. Podpora investorů samozřejmě byla zásadní a pomohla nám, ale snažili jsme se být efektivní, bez jejich pomoci by to nešlo. Říkám tomu garážový začátek. Dostali jsme se na 80 milionů obratu...
Jsem spíše skromný, ale ano, tak to bylo. Jsem hrdý, že žiju tady v Čechách. Všichni znají Prahu na světě, což je skvělé, ale když si na Google Earth odzoomuju mapu, je to pořád jen špendlík. Když chceš dělat byznys, můžeš mít strategii a scénář, nebo být oportunistický – potkáš někoho, ten zná někoho dalšího, a najednou dodáváš třeba do Mexika. Ale je těžké tlačit byznys jenom z Evropy.
Proto, logicky, většina startupů hledá partnery v zahraničí. My jsme neříkali, že to musí být Amerika, ale dává to smysl kvůli jazyku a obrovskému trhu. Když jsme zjistili, že se nám podařilo dostat za hranice vlastním úsilím, tak...
Silím a vlastníme kapitál díky tomu produktu, protože paradoxně i v Mexiku, když jsme tam něco ukazovali jedné společnosti, říkali, že tohle neviděli, a že to funguje skvěle. Přitom i tam mají chytré a dobré vývojáře, ale stejně jsme jim nabízeli něco, co neviděli, takže rozhodla opět technologie.
Teď si říkáme, kolik musíš do firmy a firmamentu zainvestovat, aby se ten byznys dělal na světové úrovni. Ulovili jsme organicky několik klientů, nebo byla kampaň, že jsme někoho znali, nebo byla strategie – obyčejně takové ty přísně dané strategie typu: „teď oslavíme toto, z toho vypadne tamto, pak z dalších procent bude tamto", což funguje úplně nejhůř. Nebo je možná nebudeme dělat pořád, ale vlastně ten zlom… Podle mě fungují ve škále. Asi jsme málo škálovali. Ale víš, že tam musíš mít tu munici. To je podle mě trochu naivita českých startupů: „Beru baťůžek a jedu do New Yorku." To nefunguje. A jsme v Americe, takže ta hra je trochu dražší.
Spočítali jsme, že i když máme skvělou technologii, skvěle naladěný tým, namotivované lidi, všichni ready – jdeme, pořád říkáme „jedeme ty bomby“, tak teď už ta energie občas není a je to někdy hodně složité. Řekli jsme si, že potřebujeme partnera. Říkám na rovinu, cest může být víc: můžeš být akvírován někým jiným, může tě někdo investičně podpořit, nebo může být partner, který nestupuje, ale máte partnerství.
Z těch firem, co jsou schopné nás akvírovat, jsou to buď koncové firmy, které třeba mají společný úchop technologie nebo klientskou bázi, nebo jsou to naopak takzvaní „zběrači firem“. Potkali jsme například lidi, kteří skupovali spoustu firem – private equity třeba. Ale to taky nebylo ono.
Proto jsme řekli, abychom udělali ten krok a dostali technologii dál, a říkali jsme si, že v Čechách jsme vybudovali něco, co běží ve fúzovkách po celém světě, ale prostě to nezvládneme sami. Potřebujeme někoho.
Začala tak etapa, kterou jsme nazvali „hledání strategického partnera“. O tom si můžete představit cokoli z toho, co jsem už zmínil. Neříkám, že primárním cílem je vyexitovat a druhý den si dát nohy na stůl. Takhle to nefunguje. Možná to někdo tak dělá a má to své plusy a mínusy.
Naší strategií bylo najít někoho, kdo s námi ten byznys logicky povede, zná klienty, orientuje se na trhu a vezme naši technologii za vlastní, aby ji dál rozvíjel.
A tak se dostáváme k Callmineru. Já osobně jsem tuto společnost znal jen z internetu, protože mě zajímá, co se děje. Callminer je totiž jedna z nejlepších…
Neli je nejlepší firma, která se zaměřuje už posledních 25 let na analytiku kontaktních center. To je prostě super. Co ale taková firma nemá, je automatizace. Což je taky super.
V rámci naší strategie jsme se s nimi nějak spojili. Upřímně řečeno, oni nás úplně neznali a nenapsali nám, ale my jsme je znali. Nějak jsme si začali psát, nevím, kde to bylo. Samozřejmě nedělal to všechno jenom já, řešil to hodně Artem. Bavili jsme se i s dalšími firmami po celém světě, občas jsme někam zaletěli a potkali se osobně.
Ukázalo se, že i CallMiner má svou strategii, do které jejich řešení zapadá. A teď přichází ten zajímavý moment.
Proč americká firma kupuje český startup? Paradoxně je největší jazykovou bariérou asi právě já. Už jsem několikrát prezentoval na konferencích v USA nebo ve Velké Británii a vždycky jsem byl označen za člověka s jedním z nejhorších přízvuků v angličtině, ale kompenzuji to entuziasmem, takže všichni jsou nakonec spokojení.
Proč tedy americká společnost kupuje český startup? Protože v Americe také existují startupy, které se zabývají voice AI, ale většina z nich vznikla z chatbotů, a přidat hlasovou složku není jednoduché. Chatbot totiž vždy pracuje s textem – přijde mu nějaký text, který má svoje vlastnosti, někdo ho vědomě napsal a stisknul enter, a on mu na něj odpoví. Když se zeptám na e-mail, chatbot mi ho napíše na klávesnici, bez přerušování řeči. Je tam spousta věcí, které fungují jinak.
My jsme s hlasovou technologií začínali už v roce 2017. První řešení bylo, že jsme někam volali a systém mluvil. V další verzi už i rozpoznával řeč. To je unikátní technologie, kterou moc firem nemá. Neříkáme, že jsme jediní na světě, ale málo kdo začíná s přístupem voice-first a má technologii, kterou my máme. To bylo něco, po čem oni šli, protože to nikde jinde nenašli.
Za druhé chtějí expandovat do dalších zemí, což je jejich současná strategie, a my to máme taky na naší roadmapě. Pro ně bylo zajímavé i to, že CallMiner působí v Evropě a má tam pobočku v UK. V našich diskuzích, ať už u večeře nebo piva, jsme si začali uvědomovat, jak moc se technologie doplňuje.
Důvody, proč americká společnost akvírovala nás, byly tedy především ty, že jim dávala smysl naše technologie. Zároveň jsme měli prokazatelné zkušenosti s dodáváním řešení na mezinárodní úrovni, což bez toho nešlo. Nemluvím teď o Slovensku, ale o projektech v UK, Beneluxu nebo v Mexiku, takže jsme tuto "fajfku" měli splněnou.
Myslím, že jsme také byli lidé, se kterými se dá v pohodě spolupracovat, což je také důležité.
Ta chemie. Prostě jsem měl schůzku třeba s někým a říkal jsem: „Ale prostě já tam něco necítím, tak to nedělejte, prosím vás.“ Takže jsme to taky profiltrovali. My vlastně celý ten byznys děláme dost pocitově. Prostě pokud tam i ten klient, tady český, nebo to RFPčko, nebo cokoliv, nebo ti lidi, s kterými jednáme, pokud cítíme tu chemii, jdeme do toho. A takhle jsme to měli i s nimi.
Poslední věc, než tomu budu chtít říct, je, že vlastně to bylo tak, že my jsme vlastně hledali strategického partnera. Začali jsme stavět vztah na těchto diskuzích. No ale pak se tak trochu ukázalo, že jim to sakra dává smysl jinak. Oni totiž úplně nehledají strategického partnera. Oni prostě hledají někoho, koho fakt akvírují. To znamená, že se to pak v rámci těch diskuzí skutečně změnilo na diskuzi o 100% akvizici. Protože jedině tak by to dávalo smysl jim, jejich investorům a klientům.
Takže když to shrnu, nakonec ze všech jednání a možností tohle byla jediná správná cesta. A jsem za to strašně rád, že jsme si počkali a zvážili to všechno. Byli jsme tam xkrát. Nic neprodáš, když tam nezaletíš, že jo? Já už tam nějaké lety mám, ale už mě z toho bolí záda, jak tam člověk sedí. Na začátku jsem lítal v levné třídě, pak jsme si mohli koupit i business premium, ale stejně mě z toho bolí záda.
Takže takhle se to stalo. Vojto, kdy to bylo? Kdy byl ten červen, kdy to podepisovali? Jo, s kým mám samozřejmě brutálně vtipnou historii, ale tak dlouhou, že o ní řekneme jenom zájemcům. Long story short, bylo to hrozně napínavé – podepisovat něco online a posílat si samozřejmě... logicky tam jsou nějaké peníze, transfery, právníci řešili, jestli někdo nepřešmykne mořský kabel a peníze se neztratí. Takže pěkný příběh. Ale to je spíš na jiný podcast.
Ještě poslední věc pro někoho, kdo nás poslouchá a uvažuje o exitu – jak dlouhá to byla perióda? Nějaké hledání a tak. Neznamená to, že jsme to já a Arťom dělali na fulltime. Dám ti příklad: když se říká, že domluvit investiční kolo trvá 4 až 6 měsíců fulltime jednoho co-foundera – dá se to i rozdělit – ale fakt je to taková investice do dalšího kroku. Tady to bylo asi trochu delší. Právě proto, že jsme k tomu nebyli nucení – my sami jsme to chtěli.
A říkám, ten cíl, ta mrkev nebyla, že odevzdám klíčky od auta a půjdu pěšky domů. To ani nejde samozřejmě. Ten cíl byl dostat tu technologii, kterou máme, do světa. Kdyby to zůstalo jenom tady, bylo by to sakra škoda. To, co se nám tady povedlo a funguje, jsme se fakt chtěli podělit.
Takže jsme to plánovali, řešili. Trufnu si říct, možná rok a čtvrt, něco takového. Docela dlouho to trvalo, ale jenom proto, že jsme voťukávali, zjišťovali, zaletěli, popovídali, změnili strategii.
V jednu chvíli jsme třeba vysloveně oslovovali ty firmy, pak jsme spíš sledovali, že o nás třeba vycházely články, tak jsme koukali, co se děje na trhu. A mezi tím jsme rostli, až pak samozřejmě přišel ten break-even, díky Bohu za to, že to pak i sedělo, pozice byla jiná, proto i vyjednávání bylo velice, velice jiné. Jasně, když generujete cash.
Ale promiň, ještě poslední věta – to samotné akvírování, když už najdeš tu firmu a zjistíš, že tam je ta synergie, tak to bylo sakra rychlé. A to je dobře. Takže, jestli můžu – nechci rozdávat rady, zatím jsem prodal jenom jeden startup, vlastně dva – tu mojí původní firmu, ve které jsem taky byl, ale tu nikdo nechtěl. Takže to bylo vlastně znamení, že jsme na dobré cestě, protože ten zájem tam fakt byl, a pak se veškerá vyjednávání podmínek řeší úplně jinak. Když se to táhne, máš z toho blbej pocit, a my zase sázíme na pocit, že tam něco nehraje, tak radši zvolíme jiný přístup. Ale tady to prostě dávalo smysl.
Často se stává, že když už to je, tak americké firmy mají proces, jsou zvyklé akvírovat firmy a jakmile tomu dají zelenou, jde to ráz na ráz – jsou to spíš týdny, nižší měsíce. A potom na konci jsou ještě nějaké činnosti, protože americký obchodní smysl říká, že se v poslední chvíli snaží vytěžit co nejvíc. Ale vše sedí a je to super, znovu gratuluju.
Díky moc. Vojto, ty jsi ještě naskočil do Vokles.
Ano, do Vokles jsem naskočil asi tak tři měsíce před akvizicí.
Promiň, nejsi možná poslední žijící, kdo naskakoval do Vokles?
Velmi pravděpodobně ano. Pravděpodobně ano, protože jsem tam ještě s jedním odcházel – byl jsem poslední člověk, který mě nastěhoval do Cloudmineru, takže jsem vlastně nahrazoval jednoho kolegu v týmu, protože já už více méně ukončoval život bývalého startupu, nebo se to posunulo jiným směrem, takže jsme se dohodli, že půjdu dál. A Martin mě oslovil hned druhý den...
Na chodbě?
Ne, na chodbě už ne, už to byla restaurace, rozumíme. Je fakt, že Vokles brali mojí juniorku, kterou jsem měl v týmu – nabírali pár měsíců předtím – a ona hned napsala a Martin mi hned psal, takže šířka kontaktů funguje. Více méně jsem naskakoval, ale už to šlo vidět, že to někam směřuje jinam. Ne, že bych samozřejmě něco věděl, ale už bylo vidět, že celá firma je připravená na další skok a člověk neví, jestli to bude investice nebo akvizice, to jsme ještě neměli úplně jasno. Samozřejmě, investice byla další varianta, ale už bylo vidět, že tam je apetit škálovat, dostat to dál. A dávalo mi to absolutní smysl, protože produkt je fakt hezký, jak to zmiňoval Martin. Díky.
No a já jsem na začátku zmiňoval, že jsem v rámci globálního Callmineru senior backend developer, ale tvou roli v rámci Vokles vnímám jako seniorní.
Takže, co máš vlastně na starosti? Jaká je tvoje role, když se podíváme na Vokles jako produktovou platformu?
Jo, já jsem součástí dev týmu. Nade mnou je určitě Adam, musím zmínit Adama Hladíka, který byl vlastně CTO, bývalý CTO Vokles, ještě když tam ty role takhle byly definované. Je to opravdu borec, to je dobré dát na vědomí. V podstatě jsem v Adamově týmu a všechno, co souvisí s vývojem, do toho zasahuju. Za tu dobu, co jsem tam, pracoval jsem na VoiceBotu, backendu, našich chatbotech, RPA a podobně. Kooperuju také s integrátory, jak jsme už zmínili, kteří jsou často JavaScriptaři, ale i další vývojáři, kteří nastavují procesy, co má VoiceBot dělat, jaké má mít chování a podobně. To je tedy moje role – být nějakým způsobem ve všem zapojený.
Říkáš, že integrátoři jsou JavaScriptaři, ale core je napsané v .NETu, že?
Ano, core je v .NETu, a myslím, že tam je stále dost kódu od Martina. Některé věci fungují opravdu dobře, ale nemůžu říct, že všechno je dokonalé. Vždycky je to trochu „quick and dirty“, ale jinak to nešlo. Některé věci mě ale pořád těší, třeba v oblasti STT (speech-to-text), TTS (text-to-speech) a LLM. O těch budeme ještě mluvit. Zatím si pořád stojím za tím, že tam není moc lidí, kteří měli odvahu tam šáhnout, kromě mého „vyratela“.
Takže core je .NET aplikace?
Ano, core je .NET. Celý systém je rozdělený do více aplikací. Hlavní backend je core, do kterého všechno spadá. Okolo něj máme samostatné aplikace – VoiceBot, ChatBot a také API pro RPA zpracování (to Martin možná rozvede). A pak tu máme ještě Designer, který je také samostatná aplikace. Designer je takovým propojením celé firmy. Na jednu stranu tam vstupujeme my jako vývojáři, aby Designer fungoval a propojoval to, co má VoiceBot, ChatBot a další dělat. Na druhou stranu, jak jsem zmiňoval, v Designeru se píše JavaScriptová logika, protože je to JavaScriptová aplikace. Máme tam rozhraní mezi JavaScriptem a naším .NETem. Právě tam vznikají scénáře, kde integrátoři definují, co má jak fungovat a jak na co má VoiceBot odpovídat. To souvisí i s prací Martina na LLM, který taky vzniká v rámci Designeru. Takže Designer je takovým srdcem celé firmy.
Myslím, že je to unikátní věc, kterou třeba ani CallMiner v jejich platformě nemá. Je to velká výzva, aby se to celé propojilo.
Proč je tedy Designer v JavaScriptu a ne v .NETu?
Tam jsou vlastně dva JavaScripty. Jeden je frontend, protože celá ta platforma má nějaký frontend a v něm je poměrně hodně logiky...
Takže vlastně je to pattern oddělený frontend a backend. Kromě toho Designeru – v něm je dost logiky napsané v JavaScriptu. On je trochu starší z hlediska technologie, a pak je tu ještě druhý JavaScript, který mohou používat flowbuildeři. Flowbuilder je člověk, který učí bota mluvit a nastavuje dialog. Jsou schopní napsat jednoduchou podmínku, zavolat nějakou funkci v JavaScriptu, převést string – například změnit velká písmena na malá, udělat nějakou transformaci jména. Dneska dokážeme také volat GPT promptů z JavaScriptu a pracovat s jejich výsledky. Umíme tam teď také volat API.
To je třeba jedna z věcí, která se klientům hodně líbila – že integrace umíme přímo v designéru dělat formou jednoduchých kostiček. Pokud je integrace opravdu jednoduchá, stačí napsat jeden jednoduchý JavaScriptový řádek pro volání API. Pokud jde ale o enterprise řešení, kde nechceme psát API requesty přímo do designéru, máme propojení na backend extensions – to jsou pluginy, které do systému instalujeme.
To mě přivádí k jedné důležité věci: i když každý zákazník je pro nás důležitý a má svá specifická přání, vždy jsme chtěli, aby systém byl jako krabicové řešení a přitom aby customizace probíhala buď přímo v designéru (proto je designér poměrně výkonný), nebo pokud jde o enterprise integrace – například napojení na ESB sběrnici, zpracování SOAP nebo XML, řešení certifikátů – tak to už z jednoduchého JavaScriptového HTTP requestu přímo v designéru neuděláte. Proto máme pluginy – systém pluginů napsaný v .NETu s vlastním repozitářem, který si může obsluhovat i klient. Na to jsem docela hrdý.
Rád bych to ještě upřesnil potenciálním zákazníkům i posluchačům. Potenciálním zákazníkům: klidně si to kupte, stále to máme k dispozici, a zatím za české ceny.
Abychom si to představili – jak jsem zmínil backend, tak je tam konzole, kde si naklikáte nastavení, čtete výsledky hovorů a můžete přejít přímo do designéru, kterému říkáme “flow”. V tom flow máte různé kostičky, které nastavujete. Když zavoláte voicebota, máte možnost nastavit, co má říct (kostička odpovědi), co má čekat na odpověď uživatele, a další kostičky – například co udělat, když uživatel řekne něco konkrétního, když neřekne, co má zpracovat nějaké API, přečíst telefonní číslo atd. Jedná se o low-code nebo no-code automation. Ano, více méně no-code.
To je přesně ten přístup, který jsem vždycky označoval – takový no-code, kde se nastavuje, co má systém dělat.
Dříve jsme to označovali jako cool low-code řešení. Teď už to paradoxně tolik neříkáme, teď říkáme jen „powered by LLM“.
Užíváme takzvané kampaně. Když potřebujeme právě navolat třeba 10 000 klientů, jsou tam ty kampaně, které jsou propojené. Vybereš si pro to flow, které bude v rámci té kampaně fungovat. Což je poměrně mocný nástroj – ty kampaně. To vlastně taky chci zmínit, díky, Vojto, že jsi na to narazil.
Vlastně málo kdo z konkurentů, ať už lokálních nebo světových, to má. Takže opravdu náš kampaněvej manažer používá dost klientů. Sice kontaktní centra to taky umějí, ale jsou pořád laděné na to, že kampaně navolávají nějakí fyzický lidé – úplně jiná konfigurace. Ono to jde použít, ale protože my máme náš vlastní systém, taky se tomu říká třeba prediktivní dialer – voláme, víme kdy, jaké časy, kolikrát za sebou, handlujeme vojsmejlí, umíme namluvit hlasovku. Takže tohle je taky mocná věc.
A podle mě taky hrálo roli, že v té platformě byla jak pro klienty, tak i pro ten co-minor.
No, ještě než se dostaneme ke STT (Speech to Text) a Text to Speech a celé té AI magii, která dělá to, že mi zavolá virtuální agent – ty jsi ještě říkal, že to provozujete i on-premise u zákazníků?
Jo, jo, jo. Co tady máme s cloudem a on-prem, jak to máte zabalené? Já bych řekl, že v jedné věci jsme úplně unikátní. My podporujeme snad všechny možné databáze, jak SQL, tak NoSQL, co si zákazník najde. Takže opravdu neexistuje zákazník, který by měl něco, co by naše konektory neumožňovaly. Myslím si, že je to velice unikátní.
A to je třeba kvůli tomu CRM?
Ano, kvůli těmto datům.
Nebo kvůli tomu, co mají povolené interně?
Ano.
Mimochodem, malá vzpomínka, Vojto, promiň, pak tě nechám dokončit. Jen jsem chtěl říct, že přesně díky tomuto se postupně se mnou všichni přestali kamarádit, protože jsme to prodávali a klient říkal: "My to chceme on-premise." Dobře, OK. My máme jenom Oracle. A já říkám: "To není problém." A pak to naši vývojáři museli dodělat. Takže postupně se tímto rozvázalo několik přátelství, protože teď je to podle Vojty skvělá věc a výhoda.
Ano, aspoň to jde kamkoliv.
Takže kluci, promiňte, ale opravdu tam byl ten byznysový záměr. V tomhle bych dal ještě kudos do týmu, protože Entity Framework je napojitelný minimálně na ty čtyři základní databáze, o kterých mluvíme: Microsoft SQL Server, Postgres, MySQL a Oracle umí nějak zpracovat. Takže jsme vděční, že to máme odlehčené. Pak další databáze jako Mongo a tak dále máme udělané skrze další služby v rámci systému.
Takže tohle je unikátní. A také si hrajeme různě s pravidly, někde je něco povolené, někde není, takže systém je v tomhle neuvěřitelně rozsáhlý.
A pozor, možná se pletu, nevím přesně, jeden kolega Michal Vodnáz by věděl, ale ten tady není. Mám pocit, že máme ještě jednoho klienta, kde voice bot a backendová servis běží ještě na Windows Serveru, protože dotnet, že jo, prostě dotnet díky b...
Ono to bylo díky tomu, že se stal multiplatformní někdy po verzi 3.4 nebo kdy to bylo. Vlastně máme klienta, který už běží v produkci, ten bot běží na Windows. Tam bylo potřeba udělat pár věcí, aby ten proces opravdu běžel jako v reálném čase, ale to byl fakt masakr. Navíc ještě bez Dockeru, bacha. Internet Explorer, no, ten tam je taky. Chápu.
A co pro vás znamená cloudová versus on-prem implementace? Pro nás to znamená, když to vezmu třeba z pohledu call minerů, že ti jsou hodně cloudoví, ale když jsme on-prem, tak máme přímo tým infrastruktury, který to nasazení klienta řeší. V týmu máme to fakt striktně rozdělené – já to vyvíjím, posílám a integrátoři mi jednak hlásí problémy s klientem, a zároveň všechno nasazují. Samozřejmě jsme Docker-based, takže většinu máme v Dockeru. Prostředí je tak dneska hodně podobné. A pak normálně pracujeme v GitLabu, takže máme celý proces přes GitLab, což mimochodem s call minerem máme stejně.
Jo, ano, to jsem chtěl zmínit. Jeden z důvodů, i když neříkám, že hlavní, bylo, že když jsme měli první technické diskuze, myslím, že jsme se potkali i fyzicky, což je super, kudos pánům, kteří to zorganizovali…
Jako de facto je to taky vývojář, rozumí tomu, i když už posledních dvacet let asi neprogramuje, ale my máme stejný technologický stack a to je prostě úžasné. Oni mají hodně věcí v .NET, používají, jak jsi zmínil, GitLab, my zase Atlassian, Jira a tak, ale oni taky. To prostě hraje velkou roli, za mě to hraje velkou roli, protože teď jsme schopní společně s jejich vývojáři rozvíjet nějakou feature, nebo se k tomu chystáme. Jak to ale chceš dělat, když tam budou samí javisti? Nic proti Javě, ale mám s ní trochu problém, protože kvůli ní jsem musel na vysoké škole vstávat brzo ráno na kurzy… takže proto .NET. Jinak Java je fajn. .NET přišel v lepší čas. To podle mě také hrálo roli. Takže bych řekl, že jsme měli štěstí. Odbourává to bariéry, snižuje tření a při onboardingu nového týmu je to super.
No, tak pojďme do vašeho „šelmostroje“, do té magie, do toho, co dělá, že se mnou volá virtuální agent nebo agentka. Pojďme se podívat na komponentu VoiceBot, co v ní vlastně běží, jak to funguje a jak jste dokázali sfouknout konkurenci na globální úrovni.
Jasně, jasně. Asi je to správné označení – „šelmostroj“. Logicky, jak to může fungovat – základ je stejný, ale v detailech je hodně rozdílů a hodně „ale“. Víceméně ať chcete nebo ne, vždycky tam je nějaký speech-to-text, pak logika, která s transkripcí pracuje. V případě rulebase jde o klíčová slova nebo natrénované věty, jestli je tam na pozadí vektorová vzdálenost, nebo jiný jazykový…
Model nebo LLM, ke kterému se dostaneme, a pak na konci nějaký text-to-speech, speech-to-text, LLM nebo nějaký processing, teda NLP vlastně. Dřív to bylo vlastně vtipné, protože se říkalo: „Máme to NLPčko.“ Teď už taky říkáme, že máme LLM. Takže to je taková zajímavá geneze: dříve jsme říkali STT, NLP a TTS.
Ještě ke komentáři Martinovi – úplně základ je SIP, řekl bych. Jinak bychom ten hlas vůbec nedostali. Fungujeme samozřejmě v rámci .NETu a napojujeme se na ústředny přes SIP protokol. Myslím, že většina zákazníků už SIP používá. A co je SIP protokol? Je to protokol, kterým si vlastně povídáte s telefonní linkou, víceméně jde o to, propojit internet a telefonní linku, abychom vůbec dostali hlas k nám do bota.
To je tedy takový základ a pak už přichází ta "chytrá" část. Díky, přesně tak.
Předtím než se vůbec uslyšíme přes telefon, je tam přesně ten protokol SIP – Session Initiation Protocol – a ještě je tam audioprotokol RTP (Real-time Transport Protocol), který přenáší audio v reálném čase. Může to být taky něco, co Si Vimal zmiňoval, ale to jsem už zapomněl.
Je zajímavé se ohlédnout zpět, že třeba před několika lety se vůbec řešilo, zda voiceboty napojené na telefony mají smysl. Nepoužívat spíš boty v mobilech nebo aplikacích, což je mnohem jednodušší. Ale voiceboty, co se napojují na skutečná kontaktní centra, která řeší reálné problémy lidí, je jasné, že to je správná cesta. Hodně lidí se mě ptalo, zda to děláme přes SIP, nebo jestli používáme nějaký jiný protokol nebo metodu. Já jsem byl přesvědčený o SIPu a ukázalo se, že ta cesta byla správná.
Kdybych se tehdy spletl a řekl, že to bude jiný protokol, asi by to dopadlo hůř. Díky tomu SIPu jsme byli schopni spolupracovat téměř se všemi našimi klienty, protože většina z nich už SIP používá. Jedna konkrétní velká banka měla jiný typ ústředny – to byla výjimka a RFP jsme jim proto neposlali, protože tam fundamentální protokol chyběl a předělávat to na něco jiného bylo nereálné.
Ukazuje se, že i teď v CallMineru a v rámci amerických firem je SIP pořád určitým „zlatým standardem“. Takže za to jsem vděčný.
A teď k tomu „šelmstroji“ (tedy systému). Ze SIPu nebo jiného protokolu dostanete audio, to teče dál. Následuje speech-to-text, který to přepisuje, potom samozřejmě NLP, neboli dnes už spíš LLM, který to zpracuje, a nakonec, aby bot mluvil, je tam text-to-speech. Zní to jednoduše, ale ve skutečnosti, aby to fungovalo, je to mnohem složitější – a to je vlastně to, co mě na tom baví a čím se zabývám od začátku.
A vtipné je, že nejenom já, ale vlastně...
Jaký ty – já nevím, jestli to byla bakalářská nebo inženýrská práce, ta finální. Vlastně jsem se věnoval stavbě autonomního robota, který jezdil a měl voice recognition. A ty jsi vlastně, Vojto… Já jsem dělal ten, jak to říct, speech-to-text, teda porovnávání, jestli někdo řekl dané slovo správně. Myslím, že ani ta fakulta si to pořádně neuvědomovala, ale nikomu nenapadlo, že by se to mohl později prodat za stovky milionů. Myslím, že by to pro spoustu učitelů bylo úplně šílené. Jen jsem jim trochu rýpnul, ale nikdy nenapadlo, že to má takovou hodnotu.
Potom to nebylo moc možné aplikovat, takže je to trochu smutné. Takže po deseti letech to pořád děláš? Ano, stále. Učím, není to úplně vesmírná záležitost, ale bohužel tam pak chybí možnost se k tomu skutečně dostat, pokud lidi s tím skutečným zájmem nepřijdou. Radši napíšeme na LinkedIn. Konečně.
Takže jak to funguje? Na světě je dnes spousta firem, které nabízejí tyhle technologie. Všichni známe Microsoft a jejich platformu Azure, která má v rámci služby Cognitive Services všechno potřebné – speech to text, text to speech – a můžeš si vybrat mezi několika základními hlasy. Pokud ti základní hlasy nevyhovují, můžeš si vytrénovat vlastní – mají technologie jako Custom Voice, nově Personal Voice, a to hezky funguje, teď je adaptujeme.
Dále všichni pravděpodobně známe ElevenLabs, kteří převálcovali trh právě díky hlasovým technologiím. Nabízejí i chatboty – možná zatím spíš pro menší a střední firmy než velké korporace, ale začínají i tam.
Co chci říct, je tohle: vůbec se nestydím, že my sami nemáme úplně vlastní tajné modely. Používáme to, co je dostupné na trhu, co někdo vyvíjí a stará se o to a posouvá dál. My děláme spíš adaptace a drobné doladění (fine tuning). To hlavní, že to funguje dobře, tvoří detaily.
Dám jednoduchý příklad: speech to text nám funguje v mnoha jazycích díky tomu, že to mají vyvinuté Microsoft, Google, Deepgram a další. Máme jich integrovaných hned několik. Starají se o to oni, my jsme třetí strana, která jejich službu využívá. Naší úlohou je zajistit, aby to přepisovalo správně, aby v případech podobných slov rozhodovalo, které slovo to opravdu bylo.
Pracujeme s něčím, co se jmenuje alternativa – třeba když někdo řekne nějakou větu, systém si ji domýšlí. Já třeba dnes tady trochu drmolem – za to se omlouvám, to dělám vždycky – přitom si říkám, Martine, zpomal. Ale stejně pak dopadnu takhle. Vy, co posloucháte, jste asi podobně naladění a v hlavě si ta slova taky domýšlíte.
No ale ten spíš ten text, ten džin, ten nemá ten kontext. My tady máme všichni kontext. Martin mluví o nějakých šlomostrojích, takže my vlastně pracujeme s kontextem té řeči. Případně, když nám přijde replika – nebo jak se tomu říká – často jich přijde víc, ale my vyhodnotíme nějakým super rychlým NLPčkem, že až ta třetí je vlastně v kontextu toho dialogu, protože ta první… Dám příklad: slovo třeba „5 z 5“ nebo „10 z 10“. Jednou řeknu číslo, jednou nějaký příkaz. To je strašně moc a platí to pro všechny jazyky na světě. V Americe je to ještě komplikovanější tím, že jsou některá slova úplně stejná, ale záleží na kontextu – například „order“ může znamenat pořadí nebo příkaz. To je hrozně zajímavé.
Další opravdu velká výzva – a to jsme teprve na začátku – teď řešíme spíš ten text. Ukázalo se, že třeba v Čechách a na Slovensku dostupné globální enginy logicky nemají tak velký datový model. Tím pádem nejsou tak kvalitní jako angličtina, to víme všichni. Co s tím? Změnit vendora? Ano, někteří vendoři tu jsou, spolupracovali jsme s nimi, posunuli jsme se, moc jim za to děkujeme. Nicméně když vám Enterprise client řekne: „Můžeme používat pouze Microsoft Azure a datové centrum West Europe kvůli právním a bezpečnostním požadavkům“, co s tím uděláte? OK.
Takže my jsme nad tím standardním modelem, který Microsoft každý rok vydává i v češtině jako upgrade, udělali vlastní přetrénování a fine tuning, aby lépe rozuměl například číslům. Vím, že Microsoft někdy nerozlišuje „šestku“ a „set“, takže z toho udělá „100“, což jsou chyby. Takových znalostí máme mraky, protože jsme je získali díky velkému množství klientů a hovorů. Možná je zajímavé říct, že jsme dosud udělali nějakých v součtu asi 70... možná už stovky milionů hovorů voice botem. Takže řekněme, že od úplného začátku do teď bych si troufl říct, že jsme automatizovali kolem 100 milionů hovorů, což je super cool.
No a právě tato data jsme nazbírali a díky nim se stává, že si model občas plete „šestku“ a „sto“. Je důležité zmínit, že máme v týmu i lingvisty z Karlovy Univerzity, takže ti nám s tím pomáhají. Není to tým jenom techniků, velká, dost významná část týmu jsou i lingvisti, kteří vylepšují češtinu, aby to lépe znělo. A nejen češtinu – máme také problémy s dalšími jazyky, například španělštinou a tak dál. Nedávno jsme ladili nějaký slovinský model, myslím.
Vrátím se k tomu, co jste říkali, že jste spíš engineering, ne R&D. Pro mě je to určitě rozdělení – existují R&D firmy, které vytvářejí zcela nové modely. Naše R&D spočívá spíš v exploraci a vylepšování komerčně dostupných modelů, což je ten náš uhao. Určitě tam nějaké R&D je, ale je to víc blízko klientskému kontextu, je to aplikovaný výzkum, ne základní.
Je to už aplikace a implementace engineeringu, což za mě oceňuji, protože mám pořád pocit, že jsme fixovaní na tu core technologii. Stále si říkáme, že abychom prodávali auta, musíme vyvinout nejlepší motor. Ale možná, když poskládáme super motory, budeme mít nejlepší auto, ale vevnitř to outsourcujeme. Tenhle přístup se mi líbí a podle mě vám čas dal za pravdu, protože spousta věcí, hlavně v AI oblasti, která se posouvá nejrychleji, ukazuje, že mnoho skvělých datových a AI startupů muselo zahodit velkou část úsilí a kódu, protože najednou je to out of the box – jeden API call. Zrovna jak jsi zmínil NLP – to bylo dost komplikované vzhledem k tomu, že čeština je malý jazyk. Tady byl vlastně center of excellence na NLP, silná doména, ale myslím, že se to díky pokroku v generativní AI hodně zúžilo. Takže to kvituju.
Pojďme se podívat možná na ty škatulky. Teď jsem zmínil STT. Poslední věc, která mi přijde zajímavá, co jsem chtěl k tomu říct, je, že největší výzvou u STT je detekce, jestli už mluvčí přestal mluvit. Klasicky to engine řeší tak, že řekne, že někdo chvíli mlčel, takže přestal mluvit. Ale jedna z výzev, která je na pomezí engineu a toho, co děláme my, je takzvaná semantic voice activity detection. Týká se to situací, kdy například bot položí otázku: „Jaké je vaše číslo objednávky?“ A já odpovím: „Jo, vydržte, to číslo je...“ A bot si myslí, že jsem skončil, a začne reagovat, přitom já jen potřebuju víc času, abych číslo řekl celé. Nebo jiný scénář: Robot se zeptá: „Mohu vám to poslat SMS?“ A já řeknu: „Jo, pošlete.“ Robot čeká, protože neví, jestli budu pokračovat v mluvení. Na jednu stranu chceš, aby to bylo rychlé, ale zároveň nechceš být přerušený. Tohle je ta expertíza.
Pro mě je v pořádku použít STT engine a doladit ho nějakým modelem, ale ta správná expertíza je právě ve správném použití toho engine. Když pak přijde nová verze nebo migrace z engine A na engine B, mělo by to fungovat stejně. To bylo k STT.
A jakou máme dál škatulku? Máme tam LLM, který pro nás nahrazuje ty klasické NLP techniky – kde se trénovaly intenty s nějakými vzorovými větami, keyword spotting, nebo obyčejné klíčová slova. My jsme byli oceněni za to, že jsme umožňovali opravdu natvrdo rule-based systém – například definovat v nástroji pravidla, že když ve větě zazní slovo „objednávka“ a ve vzdálenosti do pěti slov je sloveso „změnit“, poznali jsme, že uživatel chce změnit objednávku. Zajímavé bylo, že jsme tam měli něco jako lematizaci, takže nebylo třeba vypisovat všechny tvary slov...
Měli jsme všechny ty varianty, stačilo napsat slovo „změnit objednávku“, a když někdo řekl například „objednávku“ nebo použil synonyma jako „změnit“, „upravit“, tak nám to fungovalo. Problém ale byl, že pak musíš strávit dost času tím, abys to vytvořil. Výhoda je, že pak to funguje úplně super přesně. Od toho jsme se ale nakonec vzdálili, takže pojďme k těm LLM-kům, které jsou podle mě nejlepší.
Zajímavější. Vojto, máš rád LLM? Já se mezitím napiju, víš? Ty LLM jsou tvoje doména především, protože jak to máme rozdělené, tak LLM jsou doména Martina a lidí okolo něj, a my se spíš snažíme, aby se právě LLM co nejlépe dostaly do produkce v rámci toho už xkrát zmiňovaného designéru. Ty to tam nějak používáš, ne? Viděl jsem něco o pilotech a podobně. Jo, jo, jo. Martin je dneska na webcodingu, ale já vás vrátím zpátky do Shellmostroje. Dobře, chceš Shellmostroje, ok. Klidně se napij.
Rozšířím otázku: Jaká byla geneze LLM ve Focus? Měli jste rule-based systémy, nějaké NLP, strojové učení, takže to nějak fungovalo, a teď tam dáváte GPT-3. Hodně lidí vnímá, že s příchodem LLM, které datují cca dva roky zpátky, přišla ta „umělá inteligence“. A to je hezké. Samozřejmě i zde na českých univerzitách bylo zmíněno, že se pracovalo na systémech, kde jedna sekvence čísel generuje jinou sekvenci čísel. Přesně tak to můžeme říct.
My jsme začali experimentovat s LLM v době, kdy ještě nebyly použitelné pro produkci, ale ukazovaly se jako zajímavá cesta. Dokonce si pamatuju, jak jedna kolegyně o tom mluvila ještě dřív, než jsem se já začal zajímat. To je fajn. A co se pak stalo? V době, kdy už bylo jasné, že to je správná cesta, protože LLM nabízí novou abstrakci. Dříve, abys postavil dialog, musel jsi psát to, co robot říká, do nějakých předpřipravených políček a to, co rozpoznává robot z řeči klienta, zase do dalších políček s tzv. intentami – například „asi řekl toto“, „asi řekl tamto“. Když tedy klient řekl tohle, tak se šlo dál tamtéž, na to se reagovalo a výstup se znova psal do políčka, co robot říká. Prostě jsi psal přesně, co lidé řeknou a jak to řeknou, a pak to dával robotovi. Popisoval jsi celý svět a všechny scénáře.
LLM nám přidává novou úroveň abstrakce: teď můžeme říct, že třeba celá část dialogu, která se jmenuje „ověření klienta“ nebo „verifikace klienta“, dříve byla obrovský rozsáhlý strom možností. Jedna z nich byla třeba „moment, to je zaregistrované na manžela, přijde k telefonu, vydržte chvilku“, další byla „počkejte, přizvu tady syna“, nebo „nemám to číslo, řekněte mi, kde ho najdu na smlouvě“ – milion variant. Prostě dialog ověření klienta...
Klient a způsob, jakým se ověřujeme, je prostě strašně rozsáhlý, i v Elzu. Dneska v LLM nahradíme nějakou malou součástku, které říkáme dialogový uzel (dialog node), a v ní člověk stráví třeba minutu výměnou dialogu – například: "Jo, jo, vy takhle, já počkám" a tak dále. Tím nám vlastně umožní stavět dialogy řádově větší a zároveň to zlepšuje jejich čitelnost. Jsem za to strašně rád. I zpětná vazba, kterou dostáváme – ať už od klientů, nebo od společnosti Callminer – říká, že jsme zvládli přechod (transition) díkybohu moc dobře, protože designer přežil.
Mnoho firem dnes dělá to, že někde mají vokno, do kterého napíšete prompt a systém na něj reaguje. Vypadá to dobře: "Když mu řeknu tohle, on reaguje takhle." Jasně, to proto, že využíváš, jak se LLM chová. My jsme taky ladili nějaká LLM, dostaneme se k tomu, ale i kdyby to byl úplně základní model, který vydalo třeba OpenAI třeba včera, já ho dokážu použít, mám ho nakonfigurovaný tak, abych dosáhl opravdu komplexního enterprise dialogu. A to je ten rozdíl.
Neděláme jen nějakou krátkou konverzaci „pojď si popovídat“. Ne, u nás je to ověření klienta, pak řešíme problém, následuje integrace, oznámení výsledku, pak se vracíme na začátek "chcete ještě něco?", FAQ, RAGy, takže jsme schopni všechno toto realizovat v old-school designéru. To, co dnes říkáme jako AI agenti, je pro nás jen ta malá kostička, ten dialogový uzel. Dá se tedy říct, že jsme schopni vytvořit jakkoliv robustní dialog, který pokryje vše, co kontaktní centrum řeší – ať už je integrovaný do systému, nebo napojený na nějakou knowledge base, což jsou právě ty RAGy. K tomu se také můžeme dostat a nyní to jako high-level dokážeme pokrýt.
Kostičky jsou růžové, modré a fialové. V těch fialových kostičkách, které jsme používali dřív a stále používáme a máme je rádi, jsou klienti, u kterých LLM ani nejde použít. Dřív by to bylo obrovské "šelmestroji" z modrých a zelených kostiček. Největší výhoda je, že umíme dělat hybridní řešení. Dám příklad: peníze jsou vždy na prvním místě, takže když třeba voláte klientům, nebo oni volají vám, nemusí první interakce vždy probíhat přes LLM.
Není problém, když první interakce nebo část sítě je jednoduchá: „Jsem se dovolal...“ U nás tak kombinujeme první část dialogu například: "Dobrý den, volám správně panu Vojtovi? Volám z vaší banky, potřebuji něco vyřešit." V takovém případě nám skvěle funguje klasické rozpoznání záměru (intent recognition) v NLP, postavené na embedding modelu, ke kterému stačí napsat tři vzorové věty pro ano a tři vzorové věty pro ne.
Když řekne „moment, vydržte,“ nebo „předám to někomu z rodiny,“ tak tady jsem fakt ušetřil strašně moc peněz. My netlačíme to LLMko úplně všude. Jakmile už Vojta pokračuje ve svých problémech, tak samozřejmě ano, tam už dnes stavíme na LLMku, ale zároveň to dokážeme hezky zkombinovat s rule-based přístupem, který pořád dává velký smysl a ještě nějakou dobu bude, protože cena je vždy důležitá. Vždy totiž záleží na tom, kolik to stojí. Takže to je…
To je super, to měníme, protože máme velkou chytrou strategii právě v oblasti ceny. Každý klient má totiž nastaveno něco jiného a dá se tam fakt hodně ušetřit, někde víc, někde míň. Třeba mě napadá, že jsem teď dělal rychlé překlady z nahrávek, a můžete je udělat buď online, nebo ex post. Tam může být velká úspora díky právě kešování – něco se předkešuje ještě před startem hovoru, něco na základě scénáře. Některé části tedy dávají LLM, některé ne. Díky tomu se opravdu dají dělat velké úspory jak na naší straně, tak na klientově.
Takže tahle chytrá optimalizace podle mě není nahraditelná modely, protože za tokeny vždycky platíme. Hrozně se chci k detailům tohohle dostat, takže pojďme to dojet…
Teď myslíš ten šelmostroj, že? Jo, tu třetí část, text-to-speech, kde nevím, jak jste to měli v minulosti, něco jsem předpokládal, že jste vždycky měli third parties, že jste nevytvářeli vlastní syntetické hlasy a tohle bylo out of the box. A mám pocit, že generování hlasu se posunulo fakt brutálně. Když poslouchám Mama AI, je to skvělé, ale pro mě je to čím dál těžší byznys.
Je to tak, a tady možná stojí za zmínku, že pro mě jsou tyhle služby jako speech-to-text, LLM a text-to-speech všechny služby třetích stran. Já v nich nevidím žádný velký rozdíl. Každá poskytuje něco – jedna přepisuje řeč, druhá mi vyhodnotí dialog nebo se mnou diskutuje na základě parametrů, které jí zadávám, a třetí generuje řeč.
Jestli použiji pro všechno OpenAI real-time, tak ano, je to jeden vendor, ale i tak je pipelina na pozadí úplně stejná – speech-to-text, pak zpracování a text-to-speech. Tyto služby mají i separátní komponenty, takže když je konfrontuji, tak i dnes máš real-time řešení, s tím jsme také experimentovali. Máme mnoho důvodů, proč to tak neděláme, proč raději držíme tuhle pipeline – třeba kvůli vyměnitelnosti různých enginů, možnosti vytvářet s klienty custom hlasy, používat jejich modely nebo jiné providery.
De facto jsme vendor agnostici ve všech těchto oblastech a povědomí o těchto možnostech je zásadní.
Stojí to za to a jsme schopní to ve finále nakombinovat tak, aby to třeba bylo i stejně rychlé jako real-time OpenAI, nebo ještě rychlejší a třeba i levnější. Takže samozřejmě stále držíme tu starou koncepci, která nám pořád dává smysl. Poslední kostička je text-to-speech, který se samozřejmě také vyvinul. Stejně jako jsme si u speech-to-text dělali nějaký fine tuning modelů, i u LLM jsme si dělali nějaký fine tuning. Nakonec jsem ale u něj trochu rezignoval, nebylo to úplně ono. Čistý text-to-speech s nějakou fonetikou – ty služby se posunuly mnohem dál a...
Tam jste asi řešili hodně češtinu, ne?
Přesně tak, ale je skvělé, že jsme to dokázali založit na cíli...
Koneckonců, s kým je public? Když jsme pokořili všechny jazykové problémy, různé lematizace, stylizace, lingvistiku, přechod do angličtiny je vlastně mnohem jednodušší. Je to vlastně to samé, jak tady zmiňoval Vojta na začátku. My jsme začali jako voice-first, jako vokální voice-first. Přidání chatbota pro nás znamenalo vlastně vypnout ten voice. Takže pro nás to bylo jednoduché. Vidím stejně... Chápou, proč se chatbota stát voicebotem? Je to složité, ale naopak je to easy peasy – datový toky jsou menší, logika úplně stejná.
Response time je ale úplně jiný – při hovoru očekávám interaktivitu a chci „skákat do řeči“. Při klasickém chatbotu je to prostě já něco řeknu, ty něco odpovíš, vždy je to sekvenční. A u text-to-speech je „skákaní do řeči“ také krásná kapitola, možná ji jen rychle zmíním.
U text-to-speech jsme si vlastně prošli tím, co asi znáte: ten klasický Microsoftí hlas, který se jmenuje Antonín nebo Vlastička. „Dobrý den, vítám vás...“ Fungovalo to, což bylo zajímavé, protože v našich začátcích to klienti díky bohu přijali. Měli to i v IVR. Používali standardní hlasy – ať už googlí voice v navigaci, nebo Microsoftí někde na webu. Používali je i pro nahrávání statických hlášek – když se dovoláte, buď tam byla paní či pán, který to nahrál, nebo tam byl Microsoftí hlas Vlastička nebo Antonín. Takže vlastně to byl brand, měli to všichni. Už byla doba, kdy říkali: „Hele, máte taky toho Antonína?“ My říkali: „My? Máme ho trošku zvýšenýho v pitchi, on zní trochu výš, to je jiný Antonín.“ My jsme ho trochu zpomalili, ale pořád to bylo hodně omezené.
To byla doba, kdy vznikaly české firmy, které měly krásné výsledky. Víme, jak na to, víme, na co si dát pozor, jak to třeba ‚ohekovať‘ – stačí pár minut audia, pár vteřin... A tohle všechno je ta expertíza: ať už funguje, nebo funguje jenom trochu.
Máme to tak, že ElevenLabs v češtině v některých případech neumí dobře vyslovovat čísla. Jak na to máme workaround? No, nějaký musíme vymyslet, jinak klient řekne, že ať to děláme někam. Například. Ale teď je problém zjistit, v jakém pádu to mělo být, prostě. Říkáš „patnáct“, „patnáctý“, „patnáct tý“ – byla tam ta věta, nekončila teďkou. To je všechno takové vyvážení mezi vývojáři, R&D a lingvistikou, a právě to mě na tom strašně baví. U všeho to děláme, ale řeknu to na rovinu – nikdy to nedostaneš pod stoprocentní kontrolu. Jsou to pořád nějaké nedeterministické systémy a čím víc jich spojíš za sebou, tím větší je entropie nebo jak se to jmenuje, jo. Jak všichni víme, od chvilky se to násobí. Třeba když děláš nějakou dřevostavbu nebo zahradní domek. Takže se to všude snažíme nějak kompenzovat a u toho text-to-speech jsme našli docela pěkné řešení. Umíme to dodat přes všechny providery, žádný z nich není náš, jsou to third-party poskytovatelé, přičemž máme vložené know-how, které jsme sbírali řadu let. Něco jsme zahodili, protože už to neplatilo, něco je nové. Takže takový je náš přístup a nelituj to.
A možná poslední věc, kterou bych chtěl zmínit, když mluvíme o modelech a zmínilo se to od tebe k těm autům – vůbec nelituju toho, že stále používáme third-party vendory pro tyhle věci. Naše know-how je v tom, jak je používat. Vít ví, jak to transformovat, korigovat, řešit latence a chyby. Ty věci řešíme na naší straně. Trochu mi to připomíná, co se teď děje v Americe kolem bezpečnosti – otázky typu „na čem jste trénovali data“. Myslím si, že kdybych tam šel s nějakým super vlastním LLM modelem vytvořeným tady v Praze – který jsem měl možnost vytrénovat, lidé mu dali souhlasy – tak si troufnu tvrdit, že by mě to mohlo i paralyzovat, když bych vyplňoval všechny ty legální náležitosti a dotazníky o tom, jak to bylo trénované a jak to funguje. Proto raději sázím na služby jako Microsoft Azure, které mají certifikáty a podobné věci, a lidé jim začínají věřit.
Paradoxně tedy jsem rád, že jsme nezačali trénovat vlastní super engine, ať už jazykový model nebo LLM. Na to potřebuješ úplně jinou infrastrukturu, zkoušel jsem si to spustit, ale po pár dnech jsem to vypnul. Možná je to výhoda, že jsou to komerčně dostupné engine. Tak to vidím já. Omlouvám se všem, kteří teď ladí své vlastní modely nebo systémy.
Já vlastním tajný AI black box. Třeba to ve vašem businessu dává smysl, ale my jsme to prostě… Podle mě se ty měřítka rozevírají – že je tady pár malých promile, jednotky procent, kde dává smysl základní výzkum, jako je software v AI, třeba Tomáš Mikolov a další… Prostě lidem by to nikdy nešlo. Děkujeme všem za tuto snahu, to je potřeba zmínit. Ale ta enterprise sféra, to AI, které tam děláme, tam si musíme počkat, až to takový nějaký Tomáš a další vyvinou… Právě, díky nim, jo. A ten trh, co já vidím, se právě posouvá – ta abstrakce se posunula, najednou se AI demokratizuje, už nepotřebuješ být data scientist, abys měl v kapse nejmodernější AI model, takže to je pecka.
A o to důležitější je to, o čem mluvíš: krev, pot a slzy, a to je ta doménová znalost, ten kontext použití, to, že už máš za sebou 100 milionů hovorů – tam je ta síla. Protože právě OpenAI bude vyvíjet model, ale nejspíš žádná konkrétní malá implementace pro ně nebude dost velká a zajímavá, a to je ten sekundární, nebo ten trh, který je tady pro nás obrovský, pro americké firmy obrovský, a je tam příležitost, a přitom můžeš stát na ramenech obrů.
Takže možná před deseti lety bych se s tebou trochu víc hádal a říkal: "Hele, co je na tomhle unikátní, co je IP, co je ten secret sauce a kde je konkurenční výhoda?" A tím, jak se to demokratizuje a posouvá out of the box, tak v tu chvíli ten zákazník, ta platforma, ten vztah s ním a doménová znalost rostou na hodnotě, protože postavit kód, udělat základního chatbota už zvládne dneska v Azure vlastně každý – ale to těžké, to, co jste si vydřeli a vychodili, je vědět, kdy mlčet a kdy skákat do řeči.
Já bych to popravdě posunul ještě teďka trošku od toho Hoxbota, i když u těch LLM je to strašně zajímavé, ale když si vzpomenu na první věc, s čím přišel vlastně Callminer, tak to byly dvě věci. Redukce dat, protože v enterprise máme různé certifikáty, ISA a podobně, takže jak třeba dostat nahrávky bez telefonního čísla, to je zajímalo a zajímá to zákazníky – co s těmi daty bude? To byla první věc, kterou jsme implementovali. A druhá věc je, co když uděláme kolik milionů zákazníků? Vydrží to, bude nám stačit paměť, nebo co tam můžeme?
Paradoxně to jsou problémy, které přišly hned po akvizici a okamžitě se muselo začít řešit a posouvat se právě v této oblasti. Takže poslední týdny trávíme fakt hodně času nad výkonem a nad redukcí dat, kde máme přímo nastavené, co jde do jejich systému a do našeho, a tam Callminer vidí hodnotu, kterou pak bude prodávat enterprise zákazníkům. Takže říkám, tyhle služby jsou strašně zajímavé, strašně důležité, ale v reálu řešíš přesně tohle. Je to malá část, ale důležitá. A pro korporáty je tohle něco úplně jiného...
Hned přišel první požadavek…
Ek. Takže tam si myslím, že i pro ty zákazníky a pro ty technologie, koho tahle oblast baví, je tam ještě spousta věcí k objevování. Když neberu ty LMK a další. No a když se na to teda podíváme, co znamená redukce dat, co konkrétně jste vyvíjeli, udělali? Pro mě, když jste o tom mluvili, tak první bylo, jak k vám přijde ten hovor. Je to metrika celého hovoru, anebo už se to tehdy redukuje? Protože audio soubor je nadsazeně větší než textový soubor, takže i u chatbotů versus voicebotů musí být datový přenos šílený, ne?
No, tak šílený zas ne. Přece jenom to není video, takže pořád jsme v nějakých rozumných hodnotách. Jo, ty jsi přišel z videa. Ty jsi přišel z videa a my jsme tam u toho byli v klidu. Není to nic, tohle je pro Vojtu. Vlastně jsou to megabajty, ale to známe třeba i z podcastů. Já jsem chtěl říct, že co se týče voicebota, který funguje jako samostatná část, tak vygenerujeme nahrávku. A co s tou nahrávkou dál? Buď ji necháme úplně zahodit, což můžeme, ale většinou se nám hodí pro další zpracování. My teď v rámci redukce dat využíváme například systém CallMiner, který z té nahrávky umí vyhodit určité části. Pošleme jim nahrávku, oni ji projedou, zredukují a vyhodí například soukromé údaje. To jsou technologie, které používáme my.
Takže to je jedna věc. Třeba číslo karty – to by tam úplně nemělo být. Jo, přesně, to tam nesmí být. V podstatě je potom otázka, co s tou nahrávkou dál. Zda ji někam poslat, jestli ji zpracovat v nějaké story, je to správné místo, nebo ji poslat přes API třeba do CallMineru. Nebo jestli ji vůbec nepřepisovat, protože z pohledu dat to někdy není úplně potřeba. Když mám bota odděleného v rámci dokru, tak se k němu v té chvíli, když voláme, nikdo nedostane. Ale co s tím dál, to jsme řešili a teď máme fakt nastavení, jestli to má vůbec brát, nebo nemá. A to je vlastně redukce na vstupu.
Jsou tam ještě nějaké další redukce, které architektonicky řešíte a mohli by se jimi inspirovat naši posluchači?
No vlastně ta redukce spočívá právě v tom, že jak jsme si popisovali, číslo kreditní karty se například v nahrávce vypípá. V přepisu se pak místo toho objeví hvězdičky. Tyhle citlivé údaje, které se týkají soukromí, prostě vyřazujeme.
No, tak to je bezpečnost. Když to spojím s výkonem, co řešíte z pohledu výkonu? Jde čistě o škálovatelnost – jestli máme deset, sto milionů lidí – nebo o rychlost?
Spíše o obojí. Dříve jsme byli propojeni v jednom modulu, ten modul byl jedna konzolová aplikace – dřív byl jeden modul na jeden hovor, což bylo neškálovatelné. Teď už umíme zpracovávat více hovorů najednou, na více linkách. Funguje to o poznání lépe.
Martin se tady kroutí, protože to prý děláme jinak než dřív.
Al já, ale víš, proč to bylo? Protože my jsme totiž neřekli, pro Vojtu, ale jednu super hustou věc úplně z začátku Vocals. My jsme totiž na tom SIPu nezačali od nuly, ještě před SIPem jsme používali... Jestli někdo znáte Arduino, je to taková krabička s USB, naprogramujete ji v C, a já do ní strkal SIM kartu, a ještě z ní vedl kabel s jackem, který jsem strkal do počítače. A první boti byly GSM hovory se SIM kartou. To je skvělý. Takže pro Vítu jsem to teď řekl, takže proto, Vojto. Vojto, nebojí se farem v Indonésii.
Takže proto, Vojto, že vlastně vidí, že jsme pokročili jako de facto single aplikace, která obhospodařuje jeden hovor. Ten důvod byl, že seděla na nějakém COM portu, měla alokovanou zvukovou kartu a vlastně to byl proces. Když jsem ty aplikace na tehdejším Windows serveru pustil dvě, tak jsem měl dva paralelní hovory. Měli jsme takovou serverovnu, kde jsme měli na policích Arduino, SIM karty a z nich vedlo hromadu těch zvukovek, USB hub s deseti zvukovkami, kabely, to celé topilo, a měl jsem deset paralelních hovorů. Takže, Vojto, proto to takhle vzniklo. Jak byste to nechtěli vidět, teď to má v kanceláři, jo? Takže... volá to ženě, že přijdu později.
No a abych na to navázal, tak teď už umíme mít v jedné aplikaci více linek. Myslím, že tam není nějaké omezení, ale omezení nastává ve chvíli, kdy zvládne paměť a průchody, jak zmiňoval Martin. A tam právě teď máme oblast, jak tohle co nejvíc škálovat, protože řeknu třeba věc, co se vám může stát – máte skvěle udělaného voicebota, ale začne koktat. Začne vám koktat, protože jsme třeba přepálili množství úkonů, které zvládneme. On fakt začne koktat, protože nestíhá paměť, nestíhá tolik vláken a tak dále.
A tohle se právě snažíme vymyslet, jak s tím průchodem pracovat – například nějakou keši, zkoumáním částí, jestli tam můžeme něco zredukovat, nebo naopak fine-tuningovat, aby nám třeba přišla rychlejší odpověď nebo předkešovaná. To všechno ladíme. Takové charakteristiky se nedají dělat na koleně, fakt jedeme postupně krok po kroku, aby to fungovalo, protože může nastat situace, kdy se vám hromadí třeba nahrávky, že už toho máte tolik, že se všechny možný procesy zpomalí a nahrávku už nenahrajete.
Právě ta nahrávka může jít přes backend jako Alminu nebo náš backend, kde vždycky zpracováváme dialogy, abychom zajistili, že se tam něco nezasekne a nevypadne komunikace. Řešíme, aby opravdu ta nahrávka dorazila, protože bez nahrávek už zpětně nic neuděláte.
Tohle všechno je taková velká výzva, kterou sice neřešíme přímo technologie jako ElevenLabs a tak dále, ale v tom množství se to opravdu děje v reálném čase.
Mě komunikace, kdy klient volá a potřebuje okamžitou odpověď, přijde jako něco unikátního, protože při takovém hovoru se může skutečně pokazit desítky věcí. Nevím, jestli chceš k výkonu (performance) říct ještě něco víc, ale pro mě je real-time tou hlavní výzvou. Já teď jsem na telefonu s agentem a na straně datově a technologicky spousta věcí může být nakešovaná, nepotřebuji real-time zpracování. Například jestli vám přepis nahrávky skončí v databázi za minutu nebo za pět, tak to můžu zpracovat batchem. Jak k tomu vy přistupujete? Co jsou podle vás věci, které musí být real-time, a co může být mírně real-time?
Hele, podle mě musí být core opravdu ve všech aspektech real-time. Pokud rozpoznávám řeč, musí to být fakt real-time. Všechny ty engine mají nějakou latenci – když řeknu „ahoj“ nebo třeba „dobrý den, jak se máš“, tak mi to přijde za půl vteřiny „dobrý“, za tři čtvrtě vteřiny „dobrý den“ a za vteřinu „dobrý den, jak se…“ a pak teprve celá věta. Takže tam ta latence je.
Jsou ale věci, které se můžou pokazit – například mi může přijít pomaleji nebo vypadnou příchozí RTP pakety obsahující zvuk, který pak zpracovávám v STT (Speech to Text). Občas mi jich přijde najednou pět rychle, pak chvíli žádný, takže dělám kompenzaci, aby je engine dostal správně a ve správném pořadí. Zkrátka musím řešit TCP, UDP a další protokoly.
Všude, kde se něco může pokazit, jsme postupně přišli na problém a vyřešili ho. Když mi třeba nefunguje jeden engine pro převod řeči na text, jsem schopen v reálném čase přepnout na jiný. Všichni známe Microsoft, Google – rozpoznávání řeči Googlem – a najednou se stane, že se služba na pár vteřin vyhodí. A v tu chvíli je klient na telefonu, což je hodně špatný pro jeho zkušenost. Ten bot mu prostě nerozumí, což je problém, který řešíme – musí vždycky rozumět.
Když například někdo řekne „dobrý den, chci řešit hypotéku“, a převod řeči selže, jsme schopni na pozadí přepnout engine, a jediná věc, která se stane, je, že bot řekne: „Promiňte, nerozuměl jsem vám, můžete to prosím zopakovat?“ Kdyby bot zůstal ticho, bylo by to horší. A tohle všechno musí být napříč celým systémem. Když dojdou threaddy v threadpoolu (v tom „bazénku“), tak je to problém, kterému se ale snažíme předcházet.
Tyto věci se týkají hlavně služeb třetích stran, které podle mě všechny musí být real-time, nebo alespoň near real-time. Já jsem s tím tvrzením near real-time celkem OK, otázka ale je, co přesně považujeme za latenci a za čas zpoždění. Všichni víme, že pokud bot odpoví do dvou vteřin, tak je to ještě přijatelné, což je jakási hraniční doba. My se vždy snažíme být pod ní, máme na to různé fígle a například kompenzujeme ten dialog.
Když třeba LLM chvilku přemýšlí, co s tím uděláš, když člověk řekne, že by chtěl řešit konkrétní problém? Máme tam například předkešované odpovědi a semanticky je pak vyhodnotíme.
V angličtině to zní trošku lépe – tam třeba řekneš „so“. Nejednou jsem tím získal dvě vteřiny navíc, což je skvělé. Možná i víc, protože tam třeba zaťukám na klávesnici atd. Prostě různé věci, aby to působilo jako v reálném čase. To je právě to know-how, na které jsme přišli, a každý to řeší jinak. Nevím přesně, jak to dělají jinde, ale pokud jsem něco zjistil z YouTube nebo veřejných zdrojů, všichni na to koukají podobně. My jsme na většinu těch věcí přišli sami praxí.
Líbí se mi, že je to přirozenější – používám úplňková slova, jak jsi říkal, když mluvíš přirozeně do mikrofonu. Cílem je téměř nerozeznat, zda mi volá bot nebo člověk. Protože zákaznická zkušenost a job to be done je stejný. Líbí se mi, že „vyplynková“ slova jako „jo“, „slyšel jsem vás“, „nechte mě chvilku“ – to všechno dělá tu interakci člověk-stroj zajímavou. Je to vlastně lingvistika. To je úplně jiná disciplína než klasický vývojář, co píše čistý kód.
Díky Bohu mám v týmu lidi, kteří mají namixované různé dovednosti, takže všichni chápeme, jak to funguje.
Takže, Vojto, kde jsou ta úzká hrdla v takovém systému? Jeden kritický bod je vstup – tedy audio, real-timovost a třetí strany, což znamená nějaký pingy na služby třetích stran. Určitě vstup a všechny služby, které zpracovávají data, jsou místem s úzkými hrdly. I na výstupech, když všechno do nás přijde, tam taky bývá spousta problémů – pamatuju si „fuckupy“ s různou ztrátou nahrávek.
Pak, neříkám, že to je úplné úzké hrdlo, ale i finance – musíme hlídat, aby se nespotřebovalo víc, než je potřeba. Díky designerovi scénářů lze dobře navrhnout napojení vedlejších služeb – například když máš číslo karty, musí se ověřit validita někde externě, aby služba běžela a nezhroutila se uprostřed hovoru.
Také je důležitá komunikace mezi designerem a systémem. V reálném čase, když designer vytvoří hovor, vidíš, co dělá, a můžeš to debugovat. Je taky důležité dobře přilepit JavaScript, o kterém mluvil Martin, který máme v systému – aby to spolu s dotnetovým kódem fungovalo správně. Protože tam se dá také snadno něco pokazit.
A teď máme spoustu dalších módů, které se dají dělat s designery...
Máme klienty, kteří třeba vůbec nepoužívají design na naší API, ale přesto si scénáře provozují přes naši API. Takže tam máme různé druhy použití. Tohle je takový real-time přístup, na naší API musíme být pořád ready. Ten systém totiž umí opravdu spoustu věcí pro spoustu klientů. Vždy se musíme synchronizovat, aby vše fungovalo dobře naráz, což není jednoduché.
Tím, že jsme globální, a nyní dokonce dvojnásobně, protože máme různé servisní komponenty v různých regionech, je škálování a distribuce systému vlastně velká výzva. Musí to fungovat stejně dobře v Praze jako v Mexico City.
Určitě to tak je. Ta doba, kdy jsme používali jeden API endpoint v jednom datacentru, je už dávno pryč. Všechny služby jsou nyní load balancované, což je třeba hezký příklad u LLM. Za Azure load balancerem, který se jmenuje APM, může být na pozadí třeba několik datových center. Víme, že služby mohou mít občas výpadky. Nikdo vám negarantuje 100% SLA, ale pokud je to 99,999 %, tak pár výpadků prostě nastane.
Load balancing LLM funguje jak pro řeč, tak pro text i jiné věci – na pozadí je spousta datových center, kde jsou modely nasazeny ve stejných verzích.
Moje otázka tedy je – rozumím tomuto konceptu, ale zajímá mě, jestli je to dnes práce na pár kliknutí přes webové rozhraní, nebo jestli jde o velkou devops práci a přepisování celé logiky platformy?
Myslím si, že na začátku, když tu platformu budujete (a to je mimochodem problém, který jsem sám zažil – vytvořit systém tak, aby šel vytáhnout do on-premise prostředí), je potřeba si to dobře rozmodulovat. Kdybych šel stavět systém znovu, udělám to přesně takhle, protože člověk nikdy neví, kam se to bude posouvat. I když se třeba zdá, že to bude „malý projekt“, je dobré ho rozdělit na části: tady mám databáze, tady logiku, tady další části. Čím více modularizace, tím lépe.
Samozřejmě se to v průběhu vývoje lehce mění, ale měnit architekturu je drahé a komplikované. Když máš systém dobře rozdělený, je to pak jedno. Když to umíš nasadit na hardware, jde to pak nasadit i kdekoli jinde.
Přesně tak. Pokud je systém dobře navržen, nezáleží na tom, zda jej dodáváš zákazníkům. Jen je potřeba mít správné lidi, kteří umí s infrastrukturou pracovat – například ti, kteří se starají o infrastrukturu zákazníků a umí si jednoduše zapnout portál v Azure. Azure už také nabízí APIčka, takže vlastně funguje jako klasické servery. Zároveň je možné klientovi pomoci a hrát si s jeho hardwarem.
Chtěl jsem ještě něco říct k performance...
Teď pro mě je vývojářská práce docela výzva, protože začínáme hodně pracovat s různými performance frameworky, které jsou dostupné na trhu, abychom je pořádně využili. Například s Lokustem je zajímavé, že můžete v jednu chvíli poslat třeba 500 uživatelů, kteří provádějí nějakou akci současně, a to generuje obrovské množství dat. To je další výzva firmy, jak s těmito daty pracovat, protože je potřebujeme zapojit do reálného workflow, ale těch 500 uživatelů zaplní databáze, takže je potřeba rychle data mazat a vůbec celý performance proces správně nastavit. To je u nás teď velká výzva, především co se týká testování, a práce s daty se upravuje i jinde. Předpokládám, že spousta lidí z datové komunity tohle řeší, protože to je náš každodenní chleba.
Ještě mám jedno téma, které jste nastínili – hudba budoucnosti, další Martinova programátorská práce, RPA, tedy Robot Process Automation. V rámci Vokles jste napsali i vlastní UI Path. Je to teď docela vtipné, protože dneska tady působím tak, že na jednu stranu mám poměrně hluboké znalosti, jak tyto engine použít a jak je „prodat“, ale zároveň jsem si upřímně přiznal, že na začátku startupu je potřeba některé věci udělat rychle, aby vůbec bylo možné získat zpětnou vazbu z trhu. Chtěl bych působit seniorněji, ale když se mě ptáš na RPA, tak musím říct, že ač jsme to nazvali RPA, ve skutečnosti jde spíš o Digital Process Automation, a to ještě v takové fázi, kdy je to spíš modelářský nástroj a low-code platforma, ale funguje to skvěle.
Jsem na to hrdý a odstartovali jsme to proto, že jsme tu a tam zjistili, že v rámci klientských integrací potřebujeme udělat nějakou akci, kde jedno API pošle data někam, další API něco vrátí a pak to zase někde použijeme. Ukázalo se, že nechceme tyto úkoly řešit našimi vývojáři produktového týmu, protože by tyto procesy byly drahé a náročné na čas – stejně tak jsme nechtěli zapojovat externí vývojáře ani klienta.
Ukázalo se, že v tom samém nástroji – designéru, který původně vznikl jako voice nástroj pro modelování hlasových dialogů (na začátku rule-based se spoustou bloků, teď díky LLM méně bloků, ale mnohem výkonnějších) – jsme "voice" a chat oddělili. Když jsme pak vypustili i interaktivitu (kdy někdo něco říká, bot reaguje, někdo odpovídá atd.), vznikla nám služba, kde je možné graficky v low-code režimu vytvořit nějaký automatizovaný stroj a následně ho vystavit jako API rozhraní.
Jako příklad: nejjednodušší implementací nebo funkcí toho RPA je kalkulačka dvou čísel. To zvládne flow builder – na to nepotřebuji vývojáře. Stačí drag and drop kostičky, kde se provede akce typu C = A + B.
B a najednou má API, na které může poslat parametry A a B v JSONu a na výstupu dostane C.
Blbost. K čemu je to dobrý? No, je to dobrý vlastně k tomu, že já jsem schopný v tom RPA dělat úplně to samé, co VoiceBot či chatbot. Co když potřebuji nějakou automatizační úlohu a v ní si potřebuji sáhnout na tři různé API systémy? No tak to tam udělám stejnýma kostičkama. Nebo to RPA můžu sdílet s tím VoiceBotem. Můžu z VoiceBota volat RPA.
A proto vlastně máme produkt e-mail bot, ale my jsme ho tady vlastně nezmínili jako technologii e-mail bot. E-mail bot je totiž jen jedna z mnoha implementací RPA, protože náš e-mail bot, poměrně mocný, není nic jiného než to, že na začátku dostane API volání – ať už jde o nějaký SMTP feed, nebo nás někdo triggeruje ze CRM – a vlastně e-mail bot dostane JSON, kde je e-mail body, e-mail from, e-mail to a subject. My pak třeba vyhodnocujeme, jestli je to spam, nebo ne. Nebo navrhujeme nejlepší možnou odpověď. Když někdo napíše „moc děkuji, těším se na spolupráci“, tak to ani nebudu posílat agentovi. Když někdo napíše „mám tady reklamaci, co s tím?“, tak v odpovědi JSON na tenhle e-mail bot udělám nějakou klasifikaci e-mailu. Řeknu třeba, jestli je to objednávka nebo reklamace, a třeba navrhnu, že to má putovat na nějakou agentskou skupinu, protože neděláme pro malé firmy – všichni mají nějaký skill. Každý agent na kontaktním centru má svoje zaměření a to platí i pro e-maily. Někdo je specialista na reklamace, takže my děláme filtrování a přeposílání e-mailů.
No a to RPA se ukázalo jako super technologie. Protože oni mají e-mail na vstupu a stejně tak od nás dostanou sentiment a kategorii, jestli to je objednávka, reklamace nebo small talk, na který nechceme reagovat – nebo takhle zareagujeme šablonou. A tohle teď pro některé klienty dodáváme právě těm RPAčkám. Je to super, protože do toho vidí, naklikají si to sami, takže je to jakýsi proces modeling, vizuální. Paráda!
Úplně robotic to asi není, spíš si představujeme už, jak vidíme technologie, ale... Musíš to zabalit tak, že to je prostředí pro agentní systémy, že jo? Přesně tak.
Takže zatím si stojíme a jsme rádi, že to máme. A napsal jsem to zase já, ale tak Vojto, neříkám, že nejsou žádné chyby nebo že to není dobré. Skvěle. Skalovat se to dá. Je to past, Vojto. Jestli to neumím vyřešit škálovaně pro milion requestů, bude potřeba koupit víc hardwaru a už to bude běžet. Dobře, nějaká paměť se tady ještě musí vyřešit.
No, RPA je teď v nějakém prototypu, nebo je to korová funkce, kterou chcete vytáhnout do samostatné featury produktu či části platformy? Je to doplněk, který ukázal, že to dává smysl, tak samozřejmě pojďme na tom dál dělat. Stejně tak jako technologie LiveTranslate, kterou Vojta zmínil – taky překládáme obory v reálném čase.
Ukázalo se, že to prostě dává smysl na trhu pro určitý typ klientů. Takže fáze z prototypu do produktu je logická a na začátku k tomu potřebuješ jednoho nadšeného, zrychleného, naspeedovaného člověka, a později pak ty chytřejší, kteří už to udělají pěkně. Takže jako… jako ve všem. Takhle to mám já, no.
Když se tady zeptám jednoho zrychleného, naspeedovaného a druhého strukturovaného a vědomého, co vás teď čeká, když jste po úspěšné akvizici — není to tak, že odevzdáš klíče a jdeš si koupit jachtu, ale dál chceš posouvat tu technologii dneska v rámci CallMineru. Na co se těšíte? Jaká je společná budoucnost CallMineru? Nebo vás, CallMineru?
Já to asi řeknu za sebe, protože jak jsme na konci uvedli, Vojta má taky svůj pohled, a jsem za to rád. Já se k tomu teďka vezmu víc z technicko-biznisového pohledu, protože vždycky jsem k tomu inklinoval. Já osobně jsem hrozně motivovaný to dál řešit, protože ta technologie, kterou jsme tady vytvořili – my jsme to dělali s pár lidmi, kteří do toho kecali a pracovali s námi – teď se dostává na pořádně velké klienty, a nejsou to jen americké trhy. Působíme globálně.
Zároveň je tam zajímavá věc, že CallMiner, jak jsem říkal na začátku, posledních 20-25 let řeší analytiku, ale klientům chyběla automatizace. Nám naopak občas klienti říkají, jestli tam budeme mít nějakou analytiku, takže jsme jim tam dali nějaký GPT prompt a výsledky se na konci nějak vyhodnotí. V tom nejsme nikdy tak silní.
Někdy to bylo i výběrové řízení, kde klienti poptávali obojí a převážila kvalita real-time řešení nad tím, že analytiku nemáme. To bylo sice trochu nevýhodné, ale za to jsem strašně šťastný. A teď se otevírá úplně brutální oblast, na které právě pracujeme ve formě prototypu – pojďme využít ta data a zkušenost s analýzou hovorů pro boty.
Teď už to můžu říct, protože jsme to minulý týden představovali na konferenci v Americe: máme první prototypy, kde si představ, že je to možná záležitost pár měsíců či let, možná sci-fi, ale fakt to funguje, je to bomba. A už o tom můžu mluvit.
Dokážeme vzít konkrétního klienta a protože CallMiner analyzuje hovory agentů – většinou v kontaktních centrech, kde sedí živí lidé – samozřejmě můžeme analyzovat i voice boty, což se nabízí a děláme to, ale primárně jsou tam agenti, kterých se snažíme coachovat a zlepšovat. Co ti agenti dělají? Klasifikují hovory, nacházejí detekovaná témata.
My teď dokážeme vytvořit obrovskou mapu. Máme třeba společnost A a agenty B, C a D, kteří řeší konkrétní use case. Ty use cases se nám pak zgrupují. Někteří řeší třeba reset hesla, jiní FAQ, další změnu účtu někde… Takže se nám z toho vytváří klastry a…
V těch klastrech už teda konkrétně, jak ten dialog pokračuje, na co se ten agent ptá na začátku, tak asi verifikují toho klienta. Jak potom mám nějakou další část toho dialogu, dělají se mi nějaké podklastry, aby bylo jasné, jak konkrétní use case funguje. A když pominu to, že tam někde bude vždycky nějaká integrace, která se stejně musí doimplementovat, jsme schopní z těch tisíců nebo stověk tisíců – můžu klidně říct i milionů hovorů – zpětně zrekonstruovat, jak to v tom botovi má vypadat.
A teď ty prototypy, které jsme sami vytvořili – díky tomu, že CallMiner je tady v té oblasti jakousi špičkou – jsme byli schopní díky našemu výzkumnému týmu udělat vlastně bota, na kterého žádný konverzační designer nešáhnul. Prostě jsme řekli: „Hele, tady je ten klient, tady jsou ty procesy, najdi nám ty procesy, které lidi řeší na kontaktním centru a mají vysoké procento vhodnosti pro automatizaci.“ Protože třeba to nemusí být tak jednoduché, jako třeba sjednání hypotéky, kde musí být ještě obchodník. Ale jsou tam normální věci, třeba: „Kde je moje zásilka?“ Ačkoli každý agent postupuje podle svého pravidla, není to jen jedno flow. Vždycky to stavíš trošku jinak.
Teď to ale za nás postavila ta technologie a ty si s tím potom chatuješ nebo zavoláš a koukáš, jak to funguje. On říká: „Hele, ono to opravdu dělá to, co ten agent.“ Vtipné je, že si to klidně můžeš udělat jako klasický trénovací vzorek a validační vzorek – a funguje to opět stejně. Takže vezmu trénovací data z těch hovorů, mám jejich přepisy, nahraju je do systému – třeba do workflow builderu – a pak si vezmu jiné nahrávky s agenty, kteří byli označeni jako ti, co to dělají dobře. To je mimochodem dobré, dát tam ty dobré agenty. Tím získám testovací vzorek a teď toho bota spustím a vlastně simuluju, co oni říkali, a koukám, jestli jsem došel ke správnému konci.
To je něco, co mě fakt fascinuje. Kdybych měl shrnout: toto uzavírá feedback. Je to prostě bomba. Teď se to takto uzavřelo. Proto říkám, že i kdybych chtěl, tak ty klíče od toho auta a nohy na stůl nehodlám dát, protože tohle je něco, kam se teď jsme schopní dostat, a jsem z toho opravdu fascinovaný.
Je to vlastně zase to, co dělám od začátku, nějaký předěl mezi technologií a reálnou věcí, byznysem. Protože samozřejmě i byznysový marketing je zajímavý. Takže já jsem furt… já jsem nakoupený, prostě. Martin to vymyslel, Vojta to udělá. Vojta to dnes slyší poprvé, protože na to bylo embargo, ne? Ale já beru jako největší výzvu, jak správně propojit s tím Američanem a s tím živelným startupem, kde Martin naprototypuje a my jdeme dělat. Je tam spousta takových králičích nor, ale my pracujeme velmi rychle a efektivně.
...v llnineru, kde přece jenom ti Američani pracují trošku jiným způsobem a více méně asi budeme, jak říká můj Adam – Adam vždycky říká, že budeme muset trošičku zpomalit, a oni by mohli zase trošku díky nám zrychlit. Takže to teď beru jako takovou velkou výzvu, abychom se fakt rozjeli a i ty vize Martina netrvaly v korporátech pět let, ale prostě trvaly dejme tomu v řádu měsíců.
Díky. Já vám moc držím palce. Děkuju, že jste takhle s vášní a do detailů popsali váš šelmostroj a nejen ten, ale i všechno okolo – proč to funguje a proč se vám podařilo pokračovat v misi v rámci americké firmy. Díky moc, držím palce a zase někdy na slyšenou. Moc děkujeme za pozvání a těšíme se třeba zase někdy napříště. Taky díky za pozvání a mějte se.
Děkujeme, že jste doposlouchali až sem, a díky taky našim partnerům, členům Data Talk klubu. Těmi jsou intecs, Sazka, BizzTreat, Colours of Data, Revolt BI, GoodData, Keboola, Emark, Carl Data Company, DataMind, Notino a FLO. A pokud chcete zůstat v obraze, co se české datové scény a globálních datových technologií týče, nezapomeňte se registrovat k odběru našeho týdenního newsletteru na datatalk.cz.
Nechť vás provází data.