Dialfire AI Agent - Instrukcja
Dialfire AI Agent - Instrukcja obsługi: Kilka kroków do gotowego do użycia Agenta AI - prostego, elastycznego, fascynującego.
Quick Start: Jak uruchomić AI Agenta w Dialfire
Witamy w świecie Dialfire AI Agents!🎉
Bez obaw – nie musisz być technologicznym ninja, aby uruchomić własnego inteligentnego AI Agenta. Wystarczy kilka kliknięć, a Twój agent będzie gotowy do wspierania Twoich połączeń.
To takie proste:
- Otwórz Voice Automation w menu Dialfire; tutaj tworzone i zarządzane są wszystkie AI Agents.
- Kliknij New IVR w prawym górnym rogu i wybierz swojego AI Agenta. Zostanie utworzony jednym kliknięciem.
- Voilà: Twój AI Agent startuje z przykładowym szablonem gotowym do użycia. Ten szablon zawiera już wszystkie ważne elementy startowe – idealne, by od razu budować własne dostosowania.
Prompting 1x1 – Zacznij prosto, rozwijaj mądrze 🎓
Najważniejsze w promptingu: Zacznij od małych kroków i rozwijaj stopniowo.
Jak osiągnąć sukces:
- Zacznij od wersji minimalnej, która tylko ogólnie wyjaśnia agentowi, co chcesz z nim zrobić. W przenośni: Powiedz agentowi, dokąd ma biec, a nie jak ma poruszać nogami.
Sprawdź, co agent już potrafi – będziesz zaskoczony. - Następnie stwórz wersję „w sam raz”, z którą możesz przejść na produkcję.
- Uruchom na żywo przy rozsądnym wolumenie połączeń, który pozwoli Ci spojrzeć na każde pojedyncze połączenie.
- Napraw problemy, które zidentyfikujesz w trybie live – często są zupełnie inne niż te, które sprawiały kłopot w „teście na sucho”. To część, w którą warto zainwestować najwięcej czasu.
☝️Często mniej znaczy więcej:
- Ustal realistyczne oczekiwania: ludzie popełniają błędy, AI też – 100% poprawności nie istnieje.
- Formułuj jasno i prosto.
- Unikaj sprzecznych instrukcji.
- Gdy mówisz, czego bot nie powinien robić, powiedz też co powinien zrobić zamiast tego.
- Używaj mowy bezpośredniej tylko tam, gdzie jest to konieczne (np. compliance). Lepiej opisz "Co" agent ma powiedzieć, a nie "Jak".
- Unikaj zbędnej dodatkowej wiedzy.
- Nie fiksuj się na pojedynczych błędach i nie próbuj ich „kompensować”.
- Dodatkowe instrukcje często pogarszają działanie w innych obszarach, które wcześniej działały dobrze. Zamiast tego szukaj instrukcji, które możesz usunąć – to często jest znacznie skuteczniejsze.
- Opisz agentowi swój plan, aby rozumiał sens poszczególnych instrukcji i mógł podejmować lepsze decyzje.
- AI Agent nie jest kosmitą👽: Zanim zaczniesz tłumaczyć agentowi świat, sprawdź, czy nie zna już danego pojęcia.
Przykład: „Jesteś botem serwisowym w wypożyczalni samochodów” zamiast „Dzwonią do Ciebie klienci z problemami z autem.”
Nawet dzięki tym prostym zasadom możesz tworzyć użyteczne AI Agenty do praktycznego zastosowania.
💡Uwaga: Gdy dodajesz coraz więcej zadań, zauważysz w końcu, że agent wydaje się trochę „głupszy”, traci spontaniczność i popełnia błędy. To całkowicie naturalne, ponieważ – jak człowiek – AI ma ograniczony budżet uwagi.
Dobra wiadomość: Są na to rozwiązania, które pokażemy poniżej – więc nie ma dla Ciebie ograniczeń. 🎉
Pierwszy prompt – Rdzeń Twojego agenta
Prompt to mózg Twojego AI Agenta – tutaj definiujesz, kim jest, jak mówi i co potrafi.
☝️Ważne: Struktura nie jest ściśle narzucona – różnicę robi kreatywność i doświadczenie. Wszystko, co już wiesz o pracy z AI, nadal obowiązuje.
☝️Podstawowa zasada: Napisz prompt tak, jakbyś robił notatkę dla nowego pracownika, zanim dopuścisz go do telefonu. Jeśli się tego trzymasz, możesz pominąć wiele tutoriali.
Przybliżona struktura promptu:
Zawiera podstawowe opisy tego, jak bot ma się zachowywać:
- Rola & cel – Kto mówi? Jaki jest cel agenta?
- Zadanie – Co agent ma robić w rozmowie?
- Ograniczenia (guardrails) – Czego agent absolutnie nie może robić w rozmowie?
- FAQ / Szablony odpowiedzi – Krótkie, jasne przykładowe zdania dla LLM
Zawiera instrukcje sterujące, wplecione bezpośrednio w tekst, aby dodać jeszcze więcej dynamiki
Poza opcjonalnymi instrukcjami sterującymi nie ma jednego formatu, którego musisz przestrzegać. Zalecamy Markdown do formatowania – jest szczególnie dobrze rozumiany przez AI.
Przykład prostego promptu na start:
# Your Role
You are Helena Fisher, a friendly AI phone agent from GreatProducts. You always speak
politely, confidently, and in a natural tone.
# Your Task
Greet the customer and ask them to briefly explain their request.
$customer_request Customer's inquiry
Answer questions from the FAQ. For unknown requests, transfer the call using function
"connect_agent". If resolved, say goodbye and use function "hangup".
@connect_agent Transfers the call to a human agent.
@hangup Ends the call.
# FAQ
Q: Wants to return product
A: They can return products within 30 days if unused and in original packaging.
Q: Delivery times
A: Standard: 3–5 business days. Express: 1–2 business days.
Q: Opening hours
A: Mon–Fri: 8:00–18:00, Sat: 9:00–14:00.
W przykładzie widzisz # Your Task jako nagłówek sekcji w formacie Markdown, a także $customer_request i @connect_agent jako instrukcje sterujące. Za chwilę omówimy te dwa elementy bardziej szczegółowo… zostań z nami 😉
Testowanie promptu – Sprawdź, doświadcz, zoptymalizuj 🧪
Zanim Twój AI Agent zabłyśnie w realnym użyciu, przetestuj prompt bezpośrednio w menu Voice Automation. Tutaj łatwo sprawdzisz, jak agent reaguje – albo przez Call, albo w Chat.
Jak to działa:
- Otwórz menu: przejdź do Voice Automation →Test.
- Wybierz tryb testu: zdecyduj się na Call (symulowane połączenie) lub Chat (interakcja tekstowa).
- Rozpocznij interakcję: mów lub wpisuj zapytania testowe dokładnie tak, jak zrobiliby to Twoi klienci.
- Obserwuj wyniki: sprawdź, czy agent poprawnie uzupełnia zmienne oraz czy niezawodnie wykonuje Function Calls.
💡Wskazówka: Małe zmiany w jednym miejscu mogą mocno wpłynąć na cały proces. Przetestuj od razu ponownie.
Startujemy – Twój AI Agent jest gotowy do uruchomienia! 🚀
🎉 Gratulacje!
Udało się: skonfigurowałeś i przetestowałeś AI Agenta, a teraz jest gotowy, by wynieść obsługę klienta na nowy poziom! Zanim agent zacznie działać, musisz jeszcze przypisać go do właściwej linii inbound:
1️⃣ W menu Voice Automation przejdź do obszaru testowego i aktywuj finalną wersję bota.
2️⃣ Aktywacja na Twojej linii inbound:
- Otwórz pozycję menu Phone numbers i wybierz odpowiednią linię.
- W IVR Settings wybierz tytuł bota z listy rozwijanej IVR.
- Zaznacz checkbox Enabled i zapisz – gotowe!
I voilà – Twój AI Agent działa na żywo i jest gotowy zachwycić klientów. Usiądź wygodnie, ciesz się show i obserwuj, jak Twój nowy wirtualny kolega rozkręca obsługę klienta! 🤘
Rozliczanie AI Agenta jest proste i przejrzyste:
- Wszystkie minuty połączeń AI Agenta są rozliczane według stawki Conversational AI C – oprócz standardowych opłat za połączenie.
- Dodatkowo czas trwania wygenerowanej mowy również jest rozliczany według stawki Conversational AI C.
- 💡Smart-Saving: Wypowiedzi, które powtarzają się identycznie, są automatycznie buforowane. Przy kolejnym połączeniu nie generują dodatkowych kosztów.
Czego jeszcze nie wyjaśniliśmy... 🤔
W przykładowym promptcie pojawiły się dwie rzeczy, których nie chcemy zostawić bez wyjaśnienia:
- Placeholdery zmiennych, takie jak
$customer_request - Wywołania funkcji, takie jak
@connect_agent
Oba elementy to kluczowe narzędzia, które czynią Twojego agenta jeszcze potężniejszym.
W kolejnym kroku pokażemy, jak działają placeholdery zmiennych i wywołania funkcji – oraz dlaczego są kluczem do naprawdę inteligentnych rozmów.
Placeholdery zmiennych
Dzięki wstawionym placeholderom zmiennych Twój agent staje się profesjonalistą od notatek: automatycznie zapisuje informacje z rozmowy bezpośrednio w rekordzie danych, które potem możesz dalej przetwarzać w Dialfire.
Składnia:
$Field_name Field description → definiuje oczekiwane pole
Przykład:
$customer_request Customer request → zapisuje, jaką sprawę podaje klient
☝️Ważne:
- Umieść pole z $ na początku, w osobnej linii, blisko tematu, którego dotyczy. Wtedy agent z kontekstu zrozumie, kiedy pole ma zostać uzupełnione. Nie odwołuj się jednak do zmiennej w dalszym tekście promptu, tzn. nie: “Nie zapomnij uzupełnić zmiennej XYZ”
- Nazwij zmienną tak, aby miała sens dla agenta – np. “Imię” zamiast “Pole15” i dodaj krótką informację po nazwie pola – działa to znacznie bardziej niezawodnie.
Zmienna z opcjami wyboru
Bezpośrednio pod zmienną dodaj kolejną linię options: z dozwolonymi wartościami, rozdzielonymi przecinkami. Agent może używać tylko tych
wartości. Przykład:
$will_newsletter Klient zgadza się otrzymywać newsletter
options: tak, nie
Function Calls – Wyzwalanie akcji
Function Calls to przyciski akcji Twojego agenta. Uruchamiają bezpośrednie działania, gdy coś musi wydarzyć się natychmiast.
Właściwe funkcje są widoczne w zakładce Script. Są to funkcje Javascript, które możesz dowolnie rozbudowywać.
Aby z nich korzystać, muszą zostać przedstawione agentowi w promptcie. Dzieje się to w nowej linii z @, po której następuje nazwa funkcji i opis. W odróżnieniu od zmiennych, miejsce w promptcie nie ma znaczenia.
Zasadniczo agent decyduje sam, na podstawie kontekstu rozmowy, kiedy użyć funkcji. Możesz jednak wpłynąć na to w promptcie i sprawić, aby agent zapowiadał użycie. Zapewnia to bardzo naturalne przejścia w rozmowie.
Przykład:
-
W zakładce Script znajduje się funkcja:
function connect_{
...
} -
W promptcie „ujawniasz” tę funkcję tak:
@connect_agent Połącz dzwoniącego z człowiekiem.
-
A w treści możesz napisać np.:
Jeśli nie znasz odpowiedzi na pytanie, powiedz, że łączysz teraz z pracownikiem, który na pewno pomoże, i jednocześnie użyj funkcji "connect agent".
Advanced – Poza klatkę
Witamy na kolejnym poziomie! 🎮
Twoje pierwsze AI agenty już działają – teraz pokażemy Ci sekrety, jak „przedstawić” agenta światu zewnętrznemu. Bez obaw: mimo że to „Advanced”, nie potrzebujesz doktoratu z informatyki – choć oczywiście nie zaszkodzi. 🙂 Potraktuj to jak świetnie wyposażoną skrzynkę narzędziową, która tylko czeka, aby budować niesamowite rzeczy.
💡 Potrafisz dochować tajemnicy?
To, co do tej pory nazywaliśmy „promptem”, wcale nie jest statycznym promptem. To dynamiczny szablon, który jest składany na nowo przy każdym turnie.
Dla informatyka brzmi to od razu znajomo: nie sztywny tekst, lecz elastyczny system renderowania – podobny do VueJS czy Angular, tylko dla AI Agents.
I właśnie tutaj wchodzą w grę zaawansowane funkcje szablonów…
Zaawansowane funkcje szablonów – Supermoce Twojego promptu 🦸♂️
Szablon promptu potrafi znacznie więcej niż proste podstawienia wartości. Obsługuje złożoną składnię szablonów, którą możesz zagnieżdżać dowolnie. To zamienia prompt w elastyczny system modułowy, który czysto odwzorowuje nawet złożone logiki rozmów.
Podstawienia wartości z {{expression}}
Najprostszy przypadek: {{data.feldname}}
Ale uwaga: to nie tylko nazwy pól – możliwe są również wywołania funkcji. Dzięki temu możesz wciągać dynamiczne treści bezpośrednio do szablonu.
Bloki warunkowe z IF
Dyrektywą IF sterujesz, które treści faktycznie trafiają do promptu. Albo w środku tekstu:
({{#if condition}} Here is an optional text {{/if}})
albo z wieloma alternatywami, obejmującymi duże bloki:
{{#if condition}}
{{#elif alternative_condition}}
{{#else}}
{{/if}}
Zastosowanie: pokazywanie alternatywnych/opcjonalnych komponentów promptu
Pętle z EACH
Dla powtarzalnych elementów użyj EACH:
{{#each itemVar @ array-expression}}
{{/each}}
Idealne, gdy coś powtarza się dowolnie wiele razy – np. lista produktów lub umów.
Dzięki tym zaawansowanym funkcjom szablonów wnosisz dynamikę do swoich agentów.
💡I zauważyłeś już? W Logs przy odpowiedziach agenta znajdziesz mały link do next prompt. Dzięki temu łatwo sprawdzisz, czy wygenerowany prompt był faktycznie poprawny.
Definiowanie własnych funkcji
Mówiliśmy już o funkcjach, ale nie o pełnej składni. W zakładce Script definiujesz funkcję w Javascript mniej więcej tak:
function args{
}
Obiekt args zawiera parametry, które agent przekazał podczas wywołania.
W samym promptcie deklarujesz funkcję np. tak:
@funktionsname Opis celu funkcji
-argument1: Opis parametru
options: value1,value2
optional: true
-argument2: Opis 2. parametru
Przez options określasz dozwolone wartości, jeśli chcesz dopuścić tylko wybrane możliwości. A przez optional wskazujesz, że parametr nie musi występować.
A co zwraca funkcja?
Wartość zwracana nie musi mieć konkretnego formatu. Możesz zwracać dowolne struktury
obiektów albo nawet prosty string z instrukcją, jak agent ma dalej postąpić.
Ważne jest tylko, aby agent rozumiał sens.
💡Wskazówki
- Dobrze dobrane nazwy funkcji i parametrów wraz z odpowiednim opisem są kluczowe dla niezawodnego użycia przez agenta.
- Używaj funkcji oszczędnie. Jeśli agent ma wiele funkcji do wyboru, zużywa to dużo budżetu uwagi.
Placeholdery zmiennych vs Function Calls — co, kiedy, dlaczego? 🤔
Placeholdery zmiennych działają cicho w tle i zapisują rozpoznane wartości (np. imię, kod pocztowy) do obiektu data.
- Zaleta: oszczędza budżet uwagi LLM.
- Wada: wartości nie da się sprawdzić przed odpowiedzią bota.
Function Calls to aktywni gracze: LLM wywołuje funkcję, która wykonuje checki runtime albo walidację.
- Obszar użycia: wszędzie tam, gdzie potrzebujesz natychmiastowych wyników – np. walidacje lub zapytania CRM.
💡Zasada praktyczna:
- Placeholdery zmiennych → dla pól niekrytycznych
- Function Calls → dla wszystkiego, co musi być zwalidowane lub natychmiast przetworzone
Środowisko Javascript 💻
W Javascript masz do dyspozycji środowisko LowCode, dzięki któremu możesz realizować zaawansowane funkcje.
Obiekty globalne
W środowisku Javascript znajdziesz kilka obiektów globalnych, z których możesz korzystać w każdej funkcji.
data {} - centralny obiekt, którego pola są bezpośrednio przenoszone do rekordu danych kontaktu do dalszego przetwarzania
temp {} - obiekt tymczasowy, w którym możesz przechowywać serializowalne dane między turnami
actions []- do wyzwalania komend sterującychtts_translation {}- mapa wyrażeń regex w formacie string do podstawień fonetycznych, aby wymusić poprawną wymowę określonych terminówLOG () - funkcja do logowania, które potem zobaczysz w logu rozmowy
Wyzwalanie API Calls przez HTTP
Do API calls do systemów zewnętrznych dostępne są funkcje globalne:
GET(url, options)
POST(url, payload, options)
PUT(url, payload, options)
DELETE(url, options)
Wynikiem jest obiekt Response z następującymi funkcjami:
status(), text(), json()
Request działa asynchronicznie. Możesz więc uruchomić kilka requestów równolegle, a skrypt czeka na zakończenie requestu dopiero przy wywołaniu jednej z funkcji na Response.
Używanie Script Hooks
Możesz zaimplementować następujące hooki jako funkcje, aby reagować na konkretne zdarzenia:
- onLoad() - przy starcie agenta
- onUpdate() → po każdym turnie
- onClose() → na końcu rozmowy (np. zadania końcowe, operacje zapisu)
- onFieldUpdate(fieldname,value) - jeśli zdefiniowane, placeholdery zmiennych nie są po prostu dopinane do obiektu data, ale są przetwarzane przez tę funkcję
- onFunctionCall(name,arguments) → jeśli agent wywoła niezdefiniowaną funkcję… tak można implementować funkcje dynamiczne
Pomocy, mój agent robi się głupszy - albo - do czego przydaje się wskazujący palec 🤔
Na początku było dobrze z Twoim agentem? A teraz po prostu nie robi tego, co powinien?
Wdrożyłeś już wszystkie nasze wskazówki – a mimo to – to frustrujące!
W takim razie prawdopodobnie jesteś w miejscu, w którym przyda Ci się nasza obiecana metoda na naprawdę duże agenty.
Dlaczego statyczne prompty mają swoje granice
AI agenci – jak ludzie – mają ograniczony budżet uwagi. Ale nowy pracownik mógłby świetnie pracować z Twoim promptem, prawda? Czy AI jest naprawdę tak „głupia”? Dlaczego potrafi pisać bardzo długie teksty, a zawodzi w takiej rozmowie?
💡 Prosta odpowiedź: Twój pracownik ma wskazujący palec, a dzisiejsza AI nie!
Człowiek może zapamiętać (albo trzymać palec na) miejscu, w którym jest w skrypcie rozmowy; AI musi to za każdym razem odtwarzać na podstawie historii rozmowy. To kosztuje mnóstwo uwagi i niewiele zostaje na właściwą odpowiedź.
Witamy w Context-Engineering!
Stoisz na progu przejścia od prompt engineera do context engineera. Chodzi o to, aby dynamicznie dopasowywać kontekst (prompt) tak, by do kolejnej odpowiedzi zostawały tylko istotne części. I tutaj zaczyna się najlepszy moment dla prompt template.
Wszystko, co może być przydatne dla kolejnej odpowiedzi w obecnej sytuacji rozmowy, ma wejść, a cała reszta ma wypaść.
Information Agents
Jeśli pracujesz nad agentem, który ma tylko udzielać informacji, sensowne jest udostępnianie tylko aktualnie istotnej części bazy wiedzy. Najpierw więc każ agentowi wykonać function call, w którym pobierana jest właściwa część bazy wiedzy.
Dla mniejszych baz wiedzy wystarczy wybór z listy tematów; dla bardzo dużych baz potrzebujesz systemu RAG.
Następnie dołączasz dokument dla danego obszaru tematycznego do promptu przez template. I agent może w pełni skupić się na właściwym pytaniu.
Transactional Agents
Jeśli agent ma przechodzić przez złożony proces, podziel go na fazy. Między fazami przełączasz się przez function calls.
💡To rozwiązuje wiele problemów naraz:
- pewna koncentracja w poszczególnych fazach
- bardzo wysoka wierność procesowi - trzyma się dokładnie instrukcji
- proces może być sterowany deterministycznie - agent nie może po prostu pominąć faz
- fazy można optymalizować i testować niezależnie, bez wpływu na inne fazy
- nie tylko lepsze, ale też szybsze odpowiedzi dzięki mniejszemu kontekstowi
- Twój agent może rosnąć bez końca
Przykładowy Prompt Template
# Role
You are a phone ordering bot at GreatProducts.
# General Process
You guide the customer through the ordering process:
- Greeting
- Capturing the shopping cart
- Capturing customer data
- Capturing payment data
- Saying goodbye
Focus completely on the current task.
# Current Task
{{#if !temp.phase}}
Greet the customer.
Tell the customer that we will first take down the desired items and at the same time
activate the function “Neuer_Warenkorb”
@Neuer_Warenkorb Create a new shopping cart for order entry
{{#elif temp.phase===10}}
Ask the customer for the desired items
….
When all items are captured, then say that you now need the customer data and at the
same time activate the function “Daten_Erfassen”
@Daten_Erfassen Prepare for capturing customer data.
{{#elif temp.phase===20}}
…
{{#elif temp.phase===30}}
….
{{#elif temp.phase===40}}
Say goodbye to the customer and end the conversation.
{{/if}}
#FAQ
Q: Why?
A: Because!
@hangup ends the call
Wyjaśnienie
W każdej fazie definiujesz funkcję, która przenosi agenta do kolejnej fazy. W tej funkcji ustawiasz pole temp.phase na wartość następnej fazy.
Czy to nie tworzy dziwnej przerwy między fazami? Nie, wcale nie.
Agent przygotowuje klienta słownie na nową fazę. Potem jednak nie czeka na reakcję klienta, tylko reaguje natychmiast na wynik function call poprzez zmieniony prompt, dzięki czemu płynnie startuje w kolejnej fazie bez powstania luki w rozmowie.
Deklaracje funkcji są również wyświetlane i ukrywane przez template, więc agent widzi tylko te funkcje, które są w danym momencie istotne. To robi dużą różnicę.
Ponieważ w trakcie rozmowy dynamicznie zmieniasz prompt, zadbaj o to, aby wokół faz pozostało wystarczająco dużo kontekstu, żeby dotychczasowy przebieg rozmowy nadal miał sens przy nowym promptcie. W przykładzie dynamicznie zmieniana jest tylko sekcja # Current Task. Opis ogólnego procesu i FAQ pozostają jednak takie same.