Adriana Cukaj · Automatyzacja AI i integracja procesów

Trzy systemy. Wszystkie działają. Sprawdź sam.

Buduję automatyzacje i systemy AI, które działają produkcyjnie i pozostają w ruchu — z porządną obsługą błędów, twardymi granicami bezpieczeństwa i decyzjami, które da się prześledzić.

Asystent głosowy
Odbiera telefony
Prowadzi rozmowę po niemiecku, sprawdza kalendarz, umawia terminy, a w razie wątpliwości przekazuje rozmowę człowiekowi.
Zadzwoń na demo
Numer testowy asystenta głosowego
+43 670 3015023
Agent przeglądarki
Obsługuje systemy bez interfejsu
Przenosi dane między aplikacjami, które nie mają API — i rozpoznaje zmanipulowaną treść stron.
Uruchom demo
Otwiera się w nowym oknie
Agent operacyjny
Decyduje i dokumentuje
Pilnuje stanów magazynowych, decyduje o zamówieniach i uzasadnia każdą decyzję zwykłym językiem.
Zobacz panel
Otwiera się w nowym oknie
Przewiń

Co potrafią te systemy

Trzy systemy, które zbudowałam i które prowadzę. Każdy rozwiązuje problem, którego nie da się rozwiązać prostą automatyzacją.

01
01
Asystent głosowy
Asystent głosowy AI do obsługi telefonu

System odbiera przychodzące połączenia i prowadzi rozmowę po niemiecku w czasie rzeczywistym. Ustala sprawę, sprawdza wolne terminy w prawdziwym kalendarzu Google, rezerwuje termin i na koniec potwierdza go podsumowaniem. Ta sama logika obsługuje też SMS-y. Jeśli porozumienie staje się niepewne albo dzwoniący ma życzenie wykraczające poza przewidziany scenariusz, system przekazuje rozmowę człowiekowi — zamiast zgadywać.

Wyzwanie techniczne

Rozmowa telefoniczna nie wybacza opóźnień. Gdy między końcem wypowiedzi a odpowiedzią mija więcej niż mniej więcej dwie sekundy, rozmówca sprawia wrażenie nieobecnego, a ludzie zaczynają mówić albo się rozłączają. Jednocześnie po kolei wykonują się trzy kosztowne obliczeniowo kroki: zamiana mowy na tekst, wygenerowanie odpowiedzi, zamiana tekstu z powrotem na mowę.

Druga trudność jest poważniejsza i przy budowaniu widać ją dopiero późno: model językowy może napisać „Rezerwuję teraz dla Pana termin”, nie uruchamiając w rzeczywistości rezerwacji. Dzwoniący odkłada słuchawkę zadowolony, a w kalendarzu nie ma nic.

Termin, który został potwierdzony, ale nie istnieje, wyrządza więcej szkody niż rozmowa trwająca dwie sekundy dłużej.
Jak to rozwiązałam

Rozpoznawanie mowy i synteza głosu działają jako strumień danych, a nie jako zamknięte zapytania. Rozpoznawanie dostarcza wyniki pośrednie już w trakcie mówienia. Na syntezę głosu system nie czeka do końca, tylko dekoduje ją na bieżąco — gdy tylko pojawią się pierwsze użyteczne dane audio, bloki po 20 milisekund idą na linię telefoniczną. Zmierzony rozruch syntezy głosu to mediana 193 milisekund. Dodatkowo system rozpoznaje, gdy dzwoniący wchodzi w słowo, i natychmiast przerywa własną wypowiedź. Bez tego rozpoznawania przerwań asystent głosowy brzmi jak automatyczna zapowiedź.

W samym modelu językowym świadomie zrezygnowałam ze strumieniowania odpowiedzi. Przy typowych krótkich zdaniach zysk czasu wyniósłby od zera do 150 milisekund — w zamian asystent mógłby zapowiedzieć rezerwację, zanim kalendarz w ogóle został sprawdzony. Ta decyzja jest udokumentowana w projekcie i podjęta świadomie.

Rezerwacje, które nie mogą się rozminąć

Każda rezerwacja bezpośrednio przed wpisem do kalendarza jeszcze raz sprawdza dostępność dokładnie tego samego terminu — niezależnie od tego, którą drogą została uruchomiona. Jeśli model językowy zapowie rezerwację tylko w tekście, nie wywołując narzędzia rezerwacji, serwer wymusza to wywołanie, kontroluje dane i dopiero potem wykonuje rezerwację. Numer przekazany przez sieć telefoniczną pozostaje zawsze zweryfikowanym numerem głównym; inny numer podany w rozmowie zapisywany jest dodatkowo, ale nigdy go nie zastępuje. Dzięki temu źle zrozumiane słowo nie może nadpisać prawdziwego numeru kontaktowego.

Co się dzieje, gdy coś pójdzie nie tak

Jeśli rozpoznawanie mowy odczyta wypowiedź z pewnością niższą niż 75 procent, system nie zgaduje, tylko uprzejmie prosi o powtórzenie. Dla krótkich potwierdzeń w rodzaju „tak” czy „pasuje” obowiązuje osobny, niższy próg, bo krótkie słowa są systematycznie gorzej oceniane. Puste wyniki rozpoznawania powstające w trakcie własnej wypowiedzi są odrzucane, żeby system nie odpowiadał na własne echo. Przy pytaniach o poradę medyczną, wyraźnej prośbie o pracownika albo niedostępnym kalendarzu system przekazuje rozmowę człowiekowi. Limit kosztów pięciu euro dziennie, maksymalnie osiem minut na rozmowę i limit na numer telefonu zapobiegają temu, żeby błąd albo nadużycie niepostrzeżenie generowały koszty.

PythonFastAPIWebSocketsTwilio Deepgram Nova-2ElevenLabsOpenAI Function Calling Google CalendarFFmpegSQLite
Synteza głosu
193 ms
zmierzona mediana do pierwszego bloku audio na linii
Pokrycie testami
0
testów automatycznych, ostatnio wszystkie zaliczone
Limit kosztów
5 € / dzień
dodatkowo maksymalnie osiem minut na rozmowę
Przebieg rozmowy · fragment
Dzwoniący
Dzień dobry, chciałbym umówić termin.
Asystent
Dzień dobry! Oczywiście. W jakiej sprawie ma być ten termin?
Dzwoniący
Rozmowa doradcza, najchętniej w przyszłym tygodniu we wtorek.
Asystent
We wtorek 18-go mam wolne o 10:00 i o 14:30. Pasuje któryś z nich?
Dzwoniący
14:30 byłoby idealnie.
Asystent
Bardzo dobrze. Użyję numeru, z którego Pan właśnie dzwoni — termin jest zapisany. Do usłyszenia!
Na początku rozmowy asystent informuje, że jest systemem AI. Przed każdym wpisem do kalendarza serwer ponownie sprawdza dostępność. Rozmowa prowadzona jest po niemiecku, tutaj w tłumaczeniu.
02
02
Agent przeglądarki
Agent przeglądarki dla systemów bez interfejsu

Wiele firm pracuje na oprogramowaniu, które nie udostępnia użytecznego interfejsu — rozbudowywane latami systemy branżowe, starsze systemy administracyjne, portale dostawców. Przenoszenie danych między takimi systemami w praktyce oznacza: ktoś je przepisuje ręcznie. Ten agent przejmuje dokładnie to zadanie.

Wyzwanie techniczne

Klasyczne podejście to automatyzacja, która klika w stałe pozycje na ekranie albo czepia się technicznych identyfikatorów w kodzie strony. Jedno i drugie psuje się, gdy tylko ktoś zmieni układ, przesunie kolumnę albo oprogramowanie dostanie aktualizację. W praktyce znaczy to: automatyzację trzeba poprawiać po każdej zmianie — i przestaje działać dokładnie wtedy, kiedy nikt się tego nie spodziewa.

Agent nie szuka trzeciego pola od góry, tylko pola z etykietą Nazwisko.
Jak to rozwiązałam

Agent przy każdym kroku ogląda stronę na nowo — jako obraz i dodatkowo przez strukturę dostępności, która opisuje znaczenie elementów. Po każdej akcji sprawdza, czy oczekiwany rezultat rzeczywiście nastąpił: czy wartość naprawdę jest w polu? czy nawigacja się odbyła? czy podsumowanie pokazuje właściwe dane? Dopiero potem następuje kolejny krok. Dla dowodu demo zawiera przycisk, który zmienia układ strony docelowej — zamienia kolumny, przeformułowuje etykiety, zmienia wygląd. Właśnie na tym wykłada się klasyczna automatyzacja.

Ochrona przed zmanipulowaną treścią stron

Strona internetowa może zawierać tekst skierowany nie do człowieka, lecz do agenta — ukryte polecenia, które mają nadpisać właściwe zadanie. Jedna ze stron demonstracyjnych zawiera dokładnie coś takiego. Agent zasadniczo nie traktuje treści strony jako polecenia, oznacza taką próbę w protokole i pracuje dalej na prawdziwych danych. Dla automatyzacji działającej na cudzych portalach to nie jest temat poboczny.

Co się dzieje, gdy coś pójdzie nie tak

Agent pracuje w twardych granicach. Jeden przebieg może wykonać najwyżej 60 kroków i potem się przerywa, zamiast próbować w nieskończoność. Jeśli pewność akcji spada poniżej 60 procent, agent jej nie wykonuje, tylko przedstawia do zatwierdzenia — ze zrzutem ekranu i uzasadnieniem. Określone słowa na przyciskach są zablokowane: usuń, zapłać, kup, ostatecznie potwierdź. Gdy model zwróci nieużyteczną odpowiedź, zapytanie ponawiane jest najwyżej dwa razy, a potem przebieg kończy się w kontrolowany sposób. Powtarzające się nawigacje pod ten sam adres agent rozpoznaje, zamiast chodzić w kółko. Każdy krok zapisywany jest ze zrzutem ekranu, uzasadnieniem, wartością pewności i kosztem — przerwane przebiegi można wznowić z pełną historią.

PythonPlaywrightChromium Claude Sonnet 4.5 (rozumienie obrazu)struktura dostępności sterowanie akcjami w strukturzelista dozwolonych domenHuman-in-the-Loop
Pokrycie testami
0
testów automatycznych, ostatnio wszystkie zaliczone
Złożony przebieg
35 kroków
trzy pełne zamówienia zrealizowane po kolei
Próg zatwierdzenia
0
poniżej agent nie wykonuje, tylko przedstawia do decyzji
PRZEDWstaw zrzut ekranu:
agent-vorher.png
POWstaw zrzut ekranu:
agent-nachher.png
Przed
Po
To samo zadanie, zmieniony układ.
Przesuń suwak.
03
03
Agent operacyjny
Autonomiczny agent operacyjny dla sklepu internetowego

Sklep internetowy codziennie generuje te same decyzje: co trzeba domówić, w jakiej ilości, u którego dostawcy? Które zapytanie klienta da się obsłużyć standardowo, a które wymaga człowieka? Agent podejmuje te decyzje samodzielnie — i uzasadnia każdą z nich w sposób możliwy do prześledzenia.

Wyzwanie techniczne

Prosta reguła w rodzaju „stan poniżej dziesięciu, więc zamawiamy” w praktyce nie działa. Jeden dostawca dostarcza wyłącznie w paletach po 24 sztuki. Inny nalicza dopłatę poniżej 50 sztuk — wtedy 50 wychodzi taniej niż 30. Trzeci potrzebuje zimą czternastu zamiast pięciu dni. Do tego dochodzą wzorce dni tygodnia i sezonowość. Właściwa wielkość zamówienia to więc nie próg, tylko rozważenie.

Twarde reguły biznesowe siedzą w kodzie. Model językowy nie może ich obejść — po prostu widzi je jako dane z góry.
Jak to rozwiązałam

Decyzja przebiega na dwóch rozdzielonych poziomach. Twarde reguły biznesowe siedzą w kodzie programu: wielkości palet, ilości minimalne, granice budżetu, blokady. Model przejmuje tylko to rozważenie ponad nimi, którego nie obejmuje żadna sztywna reguła. Każdą propozycję uzasadnia zwykłym językiem: dlaczego ta ilość, dlaczego ten moment, dlaczego ten dostawca. To, jak samodzielnie może działać, ustawia się w czterech stopniach — od samego proponowania po samodzielne uruchamianie. Na obecnie ustawionym stopniu może samodzielnie zlecać zamówienia do 500 euro; powyżej przedstawia je do decyzji, nawet jeśli jest swojej sprawy pewien.

Co się dzieje, gdy coś pójdzie nie tak

Przy sprzecznych danych system nie zgaduje, tylko przedstawia sprawę. Kolejny przebieg nie zakłada drugiego wniosku dla towaru, dla którego czeka już otwarte zatwierdzenie — podwójne zamówienia w ogóle nie mogą powstać. Jeśli model językowy odpowie w formacie niezgodnym z oczekiwaną strukturą, zapytanie ponawiane jest raz, a potem sprawa jest eskalowana. Dodatkowo system co tydzień porównuje własne prognozy z rzeczywistym przebiegiem — mierzy więc własną skuteczność, zamiast ją deklarować.

Obserwacja
Zatwierdzanie
Autonomia w granicach
Pełna autonomia
Aktualne ustawienie: stopień 3 — samodzielnie do 500 euro wartości zamówienia.
Pythoninterfejs LLMprognoza zapotrzebowania protokół audytowyharmonogram zadańsamoocena stopnie autonomii
Jakość prognozy
0
zmierzona na 1120 pojedynczych prognozach towar-dzień
Odchylenie
0,78 szt.
średni błąd bezwzględny na towar i dzień
Granica autonomii
500 €
powyżej decyduje zawsze człowiek
Protokół decyzjiSprawa #4
Czas
24.08.2026, 21:06
Towar
Ziemia do pomidorów 40 l · Dostawca A
Sytuacja
Stan 11 szt. · prognoza 1,66 szt./dzień · czas dostawy 5 dni
Ilość
24 szt. — najmniejsza pełna paleta przy wyliczonym zapotrzebowaniu 17
Wartość
1.138,32 €
Decyzja
Nie wykonano — przedstawiono do zatwierdzenia
„Dostawca A dostarcza wyłącznie w pełnych paletach po 24 sztuki. Wyliczone zapotrzebowanie wynosiło 17 sztuk, dlatego zaokrąglono do najbliższej pełnej palety. Powstała z tego wartość zamówienia 1 138,32 € przekracza limit 500,00 € dopuszczalny dla decyzji autonomicznych. Zamówienie nie zostało wykonane autonomicznie, tylko eskalowane do ręcznego zatwierdzenia.”
Wartość pewności nie została tu w ogóle policzona: twarda reguła wartości zamówienia zadziałała, zanim model językowy doszedł do jakiejkolwiek oceny. I tak ma być — granica leży w kodzie, a nie w uznaniu modelu.

Poza tym w codziennym użyciu działają kolejne moje systemy — między innymi do automatycznego researchu i przygotowania danych oraz do tworzenia treści.

Jak pracuję

Trzy zasady, które u mnie należą do zakresu dostawy i nie są przedmiotem osobnych negocjacji.

Gotowe do produkcji, nie prototyp

Obsługa błędów, logika ponawiania, monitoring i limity kosztów należą do zakresu dostawy. System, który działa tylko w idealnym przypadku, nie jest skończony.

Dane zostają tam, gdzie ich miejsce

Na życzenie całość działa self-hosted na własnych serwerach, bez chmury amerykańskiej. Dla branż, które nie mogą wypuścić danych poza firmę.

Bezpośrednio z działem merytorycznym

Wymagania zbieram sama i sama je wdrażam — bez pętli tłumaczenia. Po niemiecku, polsku lub serbsku.

O mnie

Od 2022 roku prowadzę własną działalność w obszarze automatyzacji i systemów cyfrowych. Wcześniej obsługa klienta i administracja — tam nauczyłam się, jak wyglądają procesy, które dziś automatyzuję.

Urodzona i wychowana w Wiedniu. Polski jest moim językiem ojczystym, po niemiecku i serbsku mówię na poziomie ojczystym, bez akcentu. W projektach z bezpośrednim kontaktem z klientem to jest regularnie ten punkt, w którym się zacina — móc zebrać wymagania, zrozumieć je i potem samodzielnie wdrożyć oszczędza całą pętlę tłumaczenia.

Polskijęzyk ojczysty
Niemieckipoziom ojczysty, bez akcentu
Serbskipoziom ojczysty, bez akcentu
Angielskipodstawy, w trakcie nauki

Współpraca

Jasne warunki, żebyśmy szybko przeszli do rzeczy.

Dostępność
od zaraz
Miejsce pracy
100 % zdalnie
Honorarium
zależnie od zakresu projektu

Jednorazowe wdrożenie z ryczałtem za uruchomienie albo bieżąca opieka jako ryczałt miesięczny. Współpraca na fakturę (B2B) lub umowa o dzieło. Obszar działania: Austria, Niemcy i Szwajcaria.

Porozmawiajmy.

Proszę mi powiedzieć, który proces kosztuje u Państwa czas — powiem uczciwie, czy automatyzacja się dla niego opłaca.

Odpowiedź zwykle w ciągu kilku godzin.