Tradycyjny, solidny sposób na przewidywalność rozmów z LLM: maszyna stanów, deterministyczne bramki oraz zaplanowany fallback. Szczególnie istotne, gdy asystent korzysta z narzędzi.
Czas czytania: ~15 minAktualizacja: 2026-01-09
W skrócie
rozmowa jako proces i stany
deterministyczne bramki w Engine
fallback: no‑answer / HITL / retry
Dlaczego state machine
Model językowy jest świetny w generowaniu treści, ale słaby w utrzymywaniu niejawnych reguł.
Jeżeli rozmowa ma mieć przewidywalny przebieg (szczególnie z narzędziami),
potrzebujesz mechanizmu, który tradycyjnie sprawdza się od dekad: maszyny stanów.
Minimalny wzorzec stanów: intake → plan/execute → deliver z kontrolowanym fallbackiem i eskalacją.
Minimalny zestaw stanów
Dla większości asystentów wystarczą stany:
Intake — zrozumienie celu, zebranie danych wejściowych.
Plan — wybór strategii, narzędzi, ograniczeń.
Execute — wykonanie z bramkami (policy, DLP, ACL, timeouts).
Deliver — odpowiedź, cytowania, format, next steps.
Fallback — no‑answer, HITL, retry planowy.
Przejścia i bramki
Każde przejście ma warunek i log. Przykład (pseudo):
if missing_required_inputs:
goto Intake (ask)
elif high_risk and not approved:
goto Fallback (approval)
elif tools_required:
goto Execute
else:
goto Deliver
Kluczowe: bramki są deterministyczne. Model może proponować, ale decyzja o przejściu jest w silniku.
Integracja z narzędziami
Każde narzędzie ma kontrakt (schema, skutki uboczne, idempotency).
Execute uruchamia narzędzia z limitami i timeouts.
Wyniki są walidowane (schema) i cytowane (provenance).
Fallback i eskalacja
Fallback to nie „błąd”, tylko zaplanowana ścieżka. Typowe warianty:
No‑Answer + dopytanie.
Approval/HITL dla działań o skutkach ubocznych.
Retry planowy dla operacji technicznych (np. chwilowy timeout).
Artefakty
Warto utrzymywać trzy artefakty:
Mapa stanów
diagram + warunki przejść (wersjonowane).
Bramki
policy, DLP, ACL, SLO, approval.
Test harness
regresje na ścieżkach i wyjątkach.
Checklist
Zdefiniuj stany i przejścia (nie zostawiaj tego „w głowie modelu”).
Wymuś deterministyczne bramki w silniku.
Wpisz fallback (no‑answer, HITL, retry) jako część projektu.