Ustrukturyzowane procedury
Stała sekwencja kroków określonych typem, którą agent wykonuje za każdym razem tak samo
Omówienie
Ustrukturyzowana procedura to procedura wykonująca stałą sekwencję kroków. Procedura swobodna to wskazówki w języku naturalnym, które agent interpretuje i dostosowuje do sytuacji. Ustrukturyzowana procedura to uporządkowana lista kroków określonych typem, którą agent wykonuje po kolei zawsze, gdy ma zastosowanie.
Użyj ustrukturyzowanej procedury, gdy konkretne kroki muszą przebiegać tak samo przy każdej rozmowie: podczas weryfikacji tożsamości dzwoniącego, eskalacji zgłoszenia lub przyjmowania płatności. Tworzysz ją jako krótką listę kroków w prostym języku.
Jak każda procedura, ustrukturyzowana procedura ma wyzwalacz opisujący, kiedy ma zastosowanie. Gdy rozmowa pasuje do wyzwalacza, agent wykonuje kroki procedury po kolei, a potem wraca do reszty rozmowy.

Kiedy używać ustrukturyzowanej procedury
Użyj ustrukturyzowanej procedury, gdy konkretne kroki muszą za każdym razem przebiegać tak samo, ale nadal chcesz szybko tworzyć ją w prostych krokach. Ustrukturyzowane procedury łatwiej napisać niż workflow, ale oferują mniej możliwości. Porównanie z procedurami swobodnymi, workflow i promptem systemowym znajdziesz w artykule Kiedy używać procedur.
Elementy ustrukturyzowanej procedury
Ustrukturyzowana procedura ma trzy części: nazwę, wyzwalacz i uporządkowaną listę kroków.
Nazwa
Krótka etykieta identyfikująca procedurę w panelu. Nazwa nigdy nie jest wysyłana do LLM, więc nie wpływa na zachowanie agenta.
Wyzwalacz
Opis w prostym języku określający, kiedy agent powinien uruchomić tę procedurę, na przykład Gdy użytkownik prosi o zwrot środków za zamówienie. Agent porównuje intencję użytkownika z wyzwalaczem każdej procedury i uruchamia pasującą, dlatego wyzwalacze powinny być konkretne i różne. Agent widzi tylko tekst wyzwalacza, nigdy nazwę ani identyfikator procedury. Wyzwalacz działa tak samo jak w każdej procedurze; zobacz Tworzenie wyzwalaczy.
Pozostaw wyzwalacz pusty, aby procedura była podprocedurą uruchamianą tylko wtedy, gdy wywoła ją inna procedura.
Kroki
Treść procedury to uporządkowana lista kroków określonych typem. Dostępnych jest kilka typów kroków, które łączysz, aby opisać zadanie.

Nie każdy krok może występować wszędzie. W gałęzi Jeśli możesz użyć każdego kroku poza kolejnym Jeśli lub Ponów. W obsłudze błędu kroku Narzędzie możesz użyć każdego kroku poza Jeśli lub kolejnym Narzędzie.
Dokumentacja kroków API
content ustrukturyzowanej procedury to dokument zakodowany w JSON zawierający tablicę steps. Każdy krok to obiekt identyfikowany przez type. Wyzwalacz to osobne pole najwyższego poziomu procedury, a nie część content. Ładunki API i SDK używają type: "deterministic" dla samej procedury.
Zapytaj
Krok Zapytaj nakazuje agentowi poprosić o informacje i czekać, aż użytkownik poda odpowiednią odpowiedź.
- Typ API:
ask instruction: Wymagany, niepusty ciąg znaków.
Przekaż
Krok Przekaż nakazuje agentowi wygenerować pojedynczą wiadomość własnymi słowami. Nie czeka na odpowiedź użytkownika przed przejściem dalej.
- Typ API:
tell instruction: Wymagany, niepusty ciąg znaków.
Powiedz
Krok Powiedz wypowiada podany tekst dokładnie tak, jak został zapisany, a następnie przechodzi dalej. Podaj message_translations, aby przekazać agentowi dokładną wiadomość dla każdego dodatkowego obsługiwanego języka, z kluczem będącym kodem języka.
- Typ API:
say message: Wymagany, niepusty ciąg znaków.message_translations: Opcjonalny obiekt mapujący kod języka na{ "value": "..." }.
Jeśli, w przeciwnym razie jeśli i w przeciwnym razie
Krok Jeśli zawiera co najmniej jedną uporządkowaną gałąź warunkową. Uruchamia się pierwsza pasująca gałąź. Opcjonalna tablica fallback to gałąź W przeciwnym razie.
- Typ API:
branch branches: Wymagana, niepusta lista gałęzi warunkowych.fallback: Opcjonalna lista kroków W przeciwnym razie.- Każda gałąź wymaga
conditioni niepustej listysteps.
Działa to jak if/else-if/else:
- Warunki są sprawdzane po kolei.
- Uruchamia się pierwsza pasująca gałąź.
- Jeśli żaden warunek nie pasuje, uruchamia się
fallback. - Po zakończeniu gałęzi procedura wraca do głównej sekwencji.
Powyższy przykład używa warunku tekstowego, który model ocenia w języku naturalnym. Warunki mogą też być wyrażeniami opartymi na zmiennych dynamicznych:
Warunek wyrażeniowy sprawdza zmienne dynamiczne, które są wypełniane wynikami narzędzia lub ustawiane na początku rozmowy. Nie może odczytać ostatniej odpowiedzi użytkownika. Aby rozgałęzić działanie na podstawie wypowiedzi użytkownika, użyj warunku tekstowego.
Wszystkie gałęzie w jednym kroku Jeśli muszą używać tego samego typu warunku: llm albo expression.
Narzędzie
Krok Narzędzie wywołuje konkretne narzędzie.
- Typ API:
tool_call tool_id: Wymagany, niepusty identyfikator narzędzia. Narzędzie musi być przypisane do agenta.tool_name: Wymagana nazwa narzędzia zgodna z narzędziem.instruction: Opcjonalna instrukcja opisująca sposób wywołania narzędzia.schema_overrides: Opcjonalne stałe wartości parametrów narzędzia.on_failure: Opcjonalna obsługa błędu.
Stałe wartości parametrów
Użyj schema_overrides, gdy parametr zawsze musi mieć konkretną wartość. Model nie widzi ani nie wybiera nadpisanego parametru. Klucze to ścieżki parametrów w schemacie narzędzia; każda wartość wskazuje źródło:
Obsługa błędów
Bez on_failure nieudane wywołanie narzędzia kończy rozmowę. Dodaj on_failure, aby zamiast tego uruchomić kroki odzyskiwania.
fallback: Wymagana, niepusta lista kroków uruchamianych, gdy narzędzie zawiedzie.branches: Zarezerwowane dla warunkowej obsługi błędów. Pozostaw puste.
Obsługa błędu może zawierać kroki Zapytaj, Przekaż, Powiedz, Podprocedura, Narzędzie systemowe i Ponów. Nie może zawierać kroków Narzędzie ani Jeśli. Po uruchomieniu obsługi procedura przechodzi do kroku po kroku Narzędzie.
Ponów
Krok Ponów ponownie uruchamia obsługę błędu, w której się znajduje, w tym wywołanie narzędzia. Każda próba ponownie wywołuje narzędzie i, jeśli znów zawiedzie, ponownie uruchamia każdy krok obsługi. Gdy próby się wyczerpią, rozmowa się kończy.
- Typ API:
retry max_retries: Opcjonalna liczba całkowita od 1 do 3. Domyślnie 1.- Wartość liczy próby po pierwotnym wywołaniu narzędzia.
- Ponów jest prawidłowe tylko w
on_failure. - Ponów musi być ostatnim krokiem obsługi błędu, ponieważ późniejsze kroki byłyby nieosiągalne.
Podprocedura
Krok Podprocedura uruchamia inną ustrukturyzowaną procedurę. Po zakończeniu kroków tej procedury wykonanie wraca do kroku po kroku Podprocedura.
- Typ API:
sub_procedure procedure_id: Wymagany, niepusty identyfikator procedury.- Cel musi istnieć w tym samym agencie.
- Cel musi być ustrukturyzowaną procedurą.
- Procedura nie może wywoływać samej siebie.
Narzędzie systemowe
Krok Narzędzie systemowe wykonuje wbudowaną akcję systemową.
- Typ API:
system_tool system_tool_name: Wymagana nazwa narzędzia systemowego.- Obecnie obsługiwane jest tylko
end_call. W przyszłości mogą zostać dodane kolejne narzędzia systemowe. - Ponieważ
end_calljest końcowe, musi być ostatnim krokiem w zawierającej je sekwencji, gałęzi lub obsłudze błędu.
Reguły walidacji
Publikacja agenta lub zapisanie jego wersji roboczej odrzuca ustrukturyzowaną procedurę, która narusza którąkolwiek z tych reguł. Błąd wskazuje problematyczny krok jego ścieżką.
- Nie można umieszczać dwóch kroków Jeśli bezpośrednio po sobie.
- Kroki Jeśli nie mogą być zagnieżdżone.
- Krok Jeśli z warunkami wyrażeniowymi nie może bezpośrednio następować po kroku Zapytaj.
- Wszystkie warunki w jednym kroku Jeśli muszą mieć ten sam typ:
llmalboexpression. - Ponów może występować tylko w
on_failurei musi być tam ostatnim krokiem. end_callmusi być ostatnim krokiem na liście, na której występuje.fallbackobsługi błędu musi zawierać co najmniej jeden krok.- Podprocedura musi wskazywać istniejącą ustrukturyzowaną procedurę w tym samym agencie, a nie samą siebie.
tool_idmusi być narzędziem agenta,tool_namemusi się zgadzać, aschema_overridesmusi odpowiadać schematowi narzędzia.- Lista
steps, każdainstructioni każdamessagemuszą być niepuste.
Informacje o zmianie struktury procedury, która narusza jedną z tych reguł, znajdziesz w Dobrych praktykach.
Pełny przykład API
Ten przykład obsługuje anulowanie zamówienia na podstawie statusu wysyłki. Ustawia stałą wartość parametru narzędzia, obsługuje nieudane wywołanie narzędzia, wywołuje inną ustrukturyzowaną procedurę, a następnie kończy rozmowę.
Jak działa ustrukturyzowana procedura
Przekształcenie kroków ustrukturyzowanej procedury do postaci wykonywanej przez agenta nazywa się kompilacją. Platforma kompiluje każdą ustrukturyzowaną procedurę, gdy zapiszesz wersję roboczą agenta lub opublikujesz agenta; autorzy nigdy nie muszą niczego kompilować samodzielnie.
Gdy żądanie użytkownika pasuje do wyzwalacza procedury, platforma wchodzi do procedury i wykonuje jej kroki po kolei. W trakcie wykonywania ustrukturyzowanej procedury agent skupia się na każdym kroku osobno. Gdy dotrze do końca, platforma zwraca sterowanie do reszty rozmowy.
Krawędzie workflow nie mogą prowadzić do ustrukturyzowanej procedury ani z niej wychodzić. Użyj kroku Podprocedura, aby połączyć ustrukturyzowane procedury. Platforma zarządza wejściem z pasującego wyzwalacza i zakończeniem, w tym zwróceniem sterowania do węzła workflow, w którym procedura się rozpoczęła.
Poniższe reguły opisują działanie kroków podczas wykonywania.
Tylko Zapytaj czeka na użytkownika
Każdy krok poza Zapytaj uruchamia się od razu, a sterowanie przechodzi do kolejnego kroku w tej samej
turze. Krok Przekaż lub Powiedz przekazuje wiadomość i kontynuuje. Poza Zapytaj nie ma kroku, który wstrzymuje
rozmowę, ani kroku kończącego bieżącą turę. Jeśli potrzebujesz danych od użytkownika,
użyj kroku Zapytaj. Jeśli rozmowa ma się zakończyć, użyj narzędzia systemowego end_call.
Dotarcie do końca procedury nie kończy tury
Gdy ostatni krok się zakończy, procedura dobiega końca, a agent wraca do reszty rozmowy z nadal otwartą turą, więc może powiedzieć więcej. Gdy podprocedura się zakończy, sterowanie wraca do kolejnego kroku procedury, która ją wywołała.
Kroki Narzędzie rozróżniają tylko sukces i błąd
Krok Narzędzie nie może rozgałęziać działania według kodu statusu ani treści odpowiedzi. Jeśli narzędzie się powiedzie, procedura jest kontynuowana. Jeśli zawiedzie, a krok nie ma obsługi błędu, rozmowa się kończy. Jeśli ją ma, uruchamiają się kroki obsługi, a procedura przechodzi do kolejnego kroku. Krok Ponów w obsłudze ponownie uruchamia narzędzie i, jeśli znów zawiedzie, każdy krok obsługi, aż narzędzie się powiedzie lub wyczerpią się próby. Jeśli się wyczerpią, rozmowa się kończy.
Kroki Jeśli przechodzą dalej, gdy nic nie pasuje
Warunki są sprawdzane po kolei i uruchamia się pierwsze dopasowanie. Gałąź W przeciwnym razie uruchamia się, gdy nic nie pasuje. Jeśli nie ma W przeciwnym razie i nic nie pasuje, procedura przechodzi do kroku po Jeśli. Nieobsłużony przypadek nie jest błędem.
Gałęzie Jeśli nie przekazują stanu dalej
Nic, co zostanie ustalone w gałęzi Jeśli, nie jest pamiętane przez późniejsze kroki. Jeśli coś poznanego w gałęzi jest później potrzebne, zapisz to jawnie za pomocą wywołania narzędzia lub zmiennej dynamicznej.
Kroki Zapytaj, Przekaż i Powiedz nie mają narzędzi
Tylko kroki Narzędzie mogą wywoływać narzędzia. Nie musisz informować kroku Zapytaj, Przekaż ani Powiedz, aby nie wywoływał narzędzi — nie może tego zrobić.
Zarządzanie ustrukturyzowaną procedurą
Tworzenie w panelu
Zarządzanie przez CLI
Zarządzanie przez API
Otwórz agenta w panelu, a następnie wybierz Procedury. Użyj +, aby utworzyć ustrukturyzowaną procedurę. Dodaj wyzwalacz, wybierz typ dla każdego kroku i opublikuj zmiany agenta.
Panel waliduje ustrukturyzowane procedury podczas edycji. Jeśli procedura narusza regułę walidacji, przycisk Opublikuj wyświetla stan błędu, karta Procedury pokazuje plakietkę błędu, a podgląd nie uruchomi się, dopóki procedura nie zostanie poprawiona. Wybierz wskaźnik błędu, aby sprawdzić, której procedury i kroku dotyczy problem.


Dobre praktyki
Każdy typ kroku już wymusza własne działanie, więc rzadko musisz je opisywać. Określ cel każdego kroku, a typ kroku zajmie się resztą. Poniższe wskazówki dotyczą przypadków, które warto zrobić dobrze.
Aby przetestować procedurę strukturalną, postępuj zgodnie z Iterowaniem procedury.
Wybór typów kroków
Zadaj jedno pytanie w każdym kroku Ask
Krok Ask czeka na jedną odpowiedź. Jeśli połączysz kilka pytań w jednej instrukcji, agent zwykle pominie część z nich lub je połączy. Użyj jednego Ask dla każdej informacji.
Używaj Tell do stwierdzeń, a Ask do pytań
Krok Tell przekazuje komunikat i przechodzi dalej bez czekania. Tell sformułowany jako pytanie nigdy nie otrzyma odpowiedzi. Jeśli krok wymaga odpowiedzi użytkownika, użyj Ask.
Dodaj jasny warunek wyjścia do Ask, gdy samo pytanie nie wystarcza
Krok Ask przechodzi dalej po otrzymaniu odpowiedniej odpowiedzi. Jeśli z pytania nie wynika jasno, co uznajesz za odpowiedź, zapisz to w instrukcji, na przykład _Poproś o identyfikator zamówienia; prawidłowy identyfikator ma osiem cyfr _.
Wybierz Tell dla swobodnego sformułowania, Say dla dokładnych słów
Użyj kroku Tell, gdy agent ma sam ułożyć komunikat, a Say, gdy brzmienie musi być dosłowne lub przetłumaczone. Oba przekazują dokładnie jeden komunikat, więc nie trzeba instruować kroku, by wysłał pojedynczy komunikat.
Nie każ krokom bez narzędzi unikać narzędzi
Kroki Ask, Tell i Say nie mogą wywoływać narzędzi. Dodanie do nich nie wywołuj żadnych narzędzi tylko zaśmieca instrukcję i nie zmienia działania.
Struktura procedury
Nie wstawiaj wypełniaczy między dwa kroki If
Nie można umieścić dwóch kroków If jeden po drugim. Wstawienie niezwiązanego Tell lub Say między nimi, by spełnić tę regułę, sprawia, że agent mówi coś, czego nie powinien. Zamiast tego dodaj drugą decyzję do pierwszego If jako dodatkowe gałęzie Else if lub przenieś ją do podprocedury.
Umieść zagnieżdżone decyzje w podprocedurze
Kroki If nie mogą być zagnieżdżone. Gdy jedna decyzja zależy od drugiej, umieść wewnętrzną decyzję w osobnej procedurze strukturalnej i wywołaj ją krokiem Sub-procedure z gałęzi, która jej potrzebuje.
Dodaj Else, gdy ważne jest „żadne z powyższych”
Krok If bez Else przechodzi do następnego kroku, gdy nic nie pasuje. Jeśli niedopasowany przypadek powinien działać inaczej, dodaj dla niego gałąź Else.
Zapisuj wszystko, czego potrzebuje późniejszy krok
Decyzje podjęte w gałęzi If nie są później pamiętane. Jeśli późniejszy krok zależy od czegoś ustalonego w gałęzi, zapisz to wywołaniem narzędzia lub zmienną dynamiczną w tej gałęzi.
Umieszczaj warunki wyrażeń po narzędziu, które je wypełnia
Warunki wyrażeń sprawdzają zmienne dynamiczne. Umieść krok If, który ich używa, zaraz po kroku Tool, który ustawia te zmienne. Aby rozgałęzić procedurę na podstawie słów użytkownika, użyj warunku tekstowego.
Wydziel wspólne kroki do podprocedury
Gdy kilka procedur strukturalnych ma tę samą sekwencję, na przykład przekazanie sprawy człowiekowi, umieść ją w jednej procedurze strukturalnej z pustym wyzwalaczem i wywołuj ją z każdej z nich. Skopiowane sekwencje z czasem zaczynają się różnić.
Praca z narzędziami
Steruj krokiem Tool za pomocą If, nie jego instrukcji
Krok Tool zawsze wywołuje swoje narzędzie. Warunek zapisany w instrukcji, taki jak _pomiń to, jeśli zgłoszenie ma już tag _, nie może zapobiec wywołaniu. Jeśli wywołanie nie powinno zawsze nastąpić, umieść warunek w kroku If przed krokiem Tool.
Ustawiaj wartości parametrów zamiast je opisywać
Gdy parametr musi zawsze mieć określoną wartość, ustaw ją za pomocą nadpisania constant w
schema_overrides. Instrukcja typu zawsze ustaw status na pending prosi model o
zastosowanie się do niej; nadpisanie jest wymuszane i nie można go pominąć.
Dodaj obsługę błędów do każdego kroku Tool
Bez on_failure każdy błąd narzędzia kończy rozmowę. Dodaj obsługę, która informuje użytkownika,
co się stało, i ponawia próbę, przekazuje sprawę dalej lub kontynuuje.
Ogranicz kroki Tool do wywołania narzędzia
Krok Tool tylko uruchamia narzędzie; agent nie może wtedy mówić ani podejmować decyzji. Aby porozmawiać z użytkownikiem lub rozgałęzić procedurę na podstawie wyniku narzędzia, umieść to w osobnym kroku przed lub po kroku Tool.
Pisanie instrukcji
Opisuj tylko bieżący krok
Procedura kontroluje, co uruchamia się dalej, a agent nie wie o późniejszych krokach podczas wykonywania bieżącego. Niech kolejność kroków zajmie się sekwencją.
Nie próbuj kończyć tury tekstem
Zdania zapisane w instrukcjach kroków, takie jak to jest ostatnia wiadomość tej tury, proszą
agenta o wymuszenie granicy, której platforma nie obsługuje. Użyj kroku Ask, aby czekać na użytkownika, lub
narzędzia systemowego end_call, aby zakończyć rozmowę.
Zasady globalne zachowaj w prompcie systemowym
Ton, formatowanie, pożegnania i zasady odmowy należą do promptu systemowego . Instrukcja kroku powinna określać tylko to, co jest specyficzne dla danego kroku.
Łączenie procedur
Ogólne wskazówki dotyczące łączenia procedur odnoszą się też do procedur strukturalnych; zobacz Łączenie procedur na stronie Procedury swobodne.
Jeden wzorzec dotyczy konkretnie łączenia typów: procedura swobodna może odwoływać się do procedury strukturalnej. Obsługę otwartych sytuacji zachowaj w procedurze swobodnej, a części, które zawsze muszą działać tak samo, takie jak weryfikacja tożsamości czy przekazanie sprawy dalej, deleguj do procedury strukturalnej.
Ograniczenia
- Kroki If nie mogą być zagnieżdżone ani umieszczone jeden po drugim.
- Jedynym obsługiwanym narzędziem systemowym jest
end_call. - Procedury strukturalne nie mogą odwoływać się do dokumentów bazy wiedzy.
- Nie można zakończyć bieżącej tury po ukończeniu procedury; agent utrzymuje turę otwartą i może dalej mówić.
- Krawędzie workflow nie mogą prowadzić do procedury strukturalnej ani z niej wychodzić. Użyj kroku Sub-procedure, aby łączyć procedury strukturalne; rozpoczęciem i ukończeniem zarządza platforma.
- Uruchomienie procedury zwiększa opóźnienie: agent wykonuje wywołanie narzędzia, aby do niej wejść, a następnie przechodzi przez wygenerowany workflow.
Obsługa dostawców modeli
Procedury strukturalne wymuszają wewnętrzne wywołania narzędzi przy wejściu do podprocedury i ukończeniu procedury. Główne rodziny modeli OpenAI, Anthropic, Gemini i Grok obsługują wymuszony wybór narzędzia. Inne modele lub niestandardowi dostawcy mogą tego nie gwarantować, przez co przejścia do podprocedur lub ukończenie procedury mogą być mniej niezawodne. Przy korzystaniu z innego dostawcy modelu sprawdź obsługę wymuszonego wyboru narzędzia.
Zobacz Procedury, aby poznać ograniczenia dotyczące wszystkich procedur, w tym limit rozmiaru treści i różnice między procedurami strukturalnymi a swobodnymi.