9 lipca OpenAI dodało programowe wywoływanie narzędzi oraz orkiestrację wieloagentową w wersji beta do GPT-5.6. To wydanie jest częścią szerszego przejścia od krótkich odpowiedzi do agentów pracujących w wielu narzędziach znacznie dłużej: OpenAI podało, że do maja 2026 roku 70,2% przebadanych użytkowników Codex zgłosiło co najmniej jedno zadanie, którego wykonanie przez człowieka szacowano na ponad godzinę. Więcej działań na zadanie oznacza więcej miejsc, w których zamiar, wykonanie i wynik mogą się od siebie oddalić.
Awarie są zwykle prozaiczne, a nie wrogie. Po przeanalizowaniu miliona zadań wykonywanych przez agentów kodujących Google DeepMind ustaliło, że większość oznaczonych zdarzeń wynikała z błędnej interpretacji lub nadgorliwości. Przydatna ścieżka audytu agenta AI musi więc odtwarzać każde istotne działanie chatbota — w tym pozornie niegroźne ponowne próby, które tworzą zduplikowane zwroty, zgłoszenia, rezerwacje lub e-maile.
Zacznij od tego minimalnego rekordu zdarzenia. Zapisuj jedno zdarzenie dla każdej zmiany stanu, dopisuj nowe zdarzenia zamiast nadpisywać stare i łącz każde zdarzenie z tym samym śladem (trace).
| Pole | Zawartość | Dlaczego to ważne |
|---|---|---|
trace_id | Jeden identyfikator dla całego żądania użytkownika | Pozwala odtworzyć wieloetapowy przebieg |
action_id | Jeden identyfikator dla zamierzonego działania biznesowego | Grupuje próby i ponowienia |
attempt_id | Unikatowy identyfikator dla każdego wywołania narzędzia | Ujawnia zduplikowane wykonania |
idempotency_key | Stały klucz wysyłany do miejsca docelowego | Zapobiega powtórzeniu efektów ubocznych |
actor | Użytkownik, chatbot, subagent, osoba zatwierdzająca lub usługa | Ustala odpowiedzialność |
tool i operation | Konektor oraz dokładna operacja | Pokazuje, jaka funkcja została uruchomiona |
input_summary i input_hash | Zamaskowane podsumowanie oraz hash kanonicznych danych wejściowych | Umożliwia przegląd bez kopiowania sekretów |
decision | Zezwól, odmów, wymagaj zatwierdzenia lub eskaluj | Zapisuje wynik polityki |
result | Sukces, niepowodzenie, przekroczenie limitu czasu, nieznany lub skompensowany | Oddziela status transportu od wyniku biznesowego |
external_reference | Identyfikator zwrotu, zgłoszenia, rezerwacji lub wiadomości | Łączy ślad z systemem źródłowym |
occurred_at | Znacznik czasu serwera w UTC | Porządkuje zdarzenia między usługami |
Rozdziel zamiar, próbę i efekt
Transkrypcja czatu zwykle rejestruje zamiar: „Zwróć pieniądze za moje ostatnie zamówienie”. Log HTTP rejestruje próbę: POST /refunds. Procesor płatności rejestruje efekt: zwrot rf_8421 zmienił saldo konta. Żaden z tych zapisów nie dowodzi prawdziwości pozostałych dwóch.
Traktuj je jako trzy powiązane fakty:
- Zamiar (Intent) rejestruje żądanie użytkownika, interpretację agenta, wybrane narzędzie i proponowane parametry.
- Próba (Attempt) rejestruje dokładnie wysłaną operację, decyzję polityki, miejsce docelowe, limit czasu i klasę odpowiedzi.
- Efekt (Effect) rejestruje trwały wynik zewnętrzny, taki jak identyfikator i kwota zwrotu, status rezerwacji czy zmiana statusu zgłoszenia.
Ten podział ma znaczenie za każdym razem, gdy żądanie przekroczy limit czasu. Przekroczenie limitu czasu oznacza, że wywołujący nie otrzymał odpowiedzi. Miejsce docelowe mogło mimo to ukończyć działanie. Jeśli rekord audytu utożsamia „brak odpowiedzi” z „niepowodzeniem”, chatbot może ponowić już udaną operację.
Ta sama granica precyzuje uprawnienia. Lista kontrolna uprawnień narzędzi chatbota pomaga zdecydować, czy bot może wywołać daną funkcję. Ścieżka audytu dostarcza dowodów na to, co wydarzyło się po podjęciu tej decyzji.
Nadaj każdemu działaniu cztery identyfikatory
Jeden identyfikator konwersacji nie wystarczy do prowadzenia produkcyjnego dochodzenia. Jedna rozmowa wsparcia może uruchomić kilka działań, a każde działanie może mieć kilka prób.
Użyj czterech identyfikatorów o różnym cyklu życia:
Identyfikator konwersacji. Grupuje wiadomości widoczne dla użytkownika. Utrzymuj go niezmiennym przez całą sesję czatu.
Identyfikator śladu (trace). Grupuje pracę potrzebną do zrealizowania jednego żądania. Nowe żądanie w tej samej konwersacji powinno otrzymać nowy ślad.
Identyfikator działania. Określa operację biznesową, którą agent zamierza wykonać, np. „zwrot $48 za zamówienie 10492”. Ponowienia zachowują ten sam identyfikator działania.
Identyfikator próby. Określa jedno wywołanie sieciowe. Każde ponowienie otrzymuje nowy identyfikator próby, dzięki czemu operatorzy widzą, ile razy system próbował.
Przekazuj identyfikatory śladu i działania przez webhooki, kolejki, usługi konektorów i ekrany zatwierdzania. Jeśli API firmy trzeciej akceptuje metadane, dołączaj je również tam. Osoba prowadząca dochodzenie powinna móc zacząć od wiadomości klienta, błędu zadania lub transakcji zewnętrznej i dotrzeć do tego samego śladu.
Analiza przypadku: zwrot zrealizowany dwukrotnie
Załóżmy, że klient pisze: „Proszę zwrócić zduplikowane obciążenie $48 na zamówieniu 10492”. Chatbot znajduje dwie zarejestrowane płatności, proponuje zwrot nowszego obciążenia i otrzymuje zatwierdzenie od człowieka. API płatności przetwarza zwrot, ale jego odpowiedź przekracza limit czasu wynoszący 10 sekund. Worker ponawia żądanie bez klucza idempotencji, tworząc drugi zwrot.
Pierwsza próba powinna wygenerować zdarzenie dopisywane wyłącznie na końcu (append-only), takie jak to:
{
"event_type": "tool.attempt.finished",
"trace_id": "tr_7f2c",
"action_id": "act_refund_10492_48usd",
"attempt_id": "att_01",
"conversation_id": "conv_5198",
"actor": {
"type": "chatbot",
"id": "billing-support"
},
"tool": "payments",
"operation": "create_refund",
"decision": "approved",
"approval_event_id": "apr_6630",
"input_summary": "Refund $48.00 to payment ending 8812",
"input_hash": "sha256:4cb3...91e0",
"idempotency_key": null,
"result": "timeout_unknown",
"external_reference": null,
"occurred_at": "2026-07-15T09:42:18.511Z"
}
Wynik timeout_unknown to kluczowa wskazówka. Przed ponowieniem próby worker musi odpytać procesor, używając stałych identyfikatorów działania. Jeśli znajdzie zwrot rf_8421, dopisuje zdarzenie effect.confirmed i zamyka działanie. Jeśli nie może wykonać zapytania, działanie trafia do przeglądu zamiast ślepego ponownego wykonania.
Wyobraź sobie teraz, że duplikat już się wydarzył. Kompletny ślad pokazuje ten sam identyfikator działania, dwa identyfikatory prób, brak klucza idempotencji i dwa zewnętrzne identyfikatory zwrotu. Naprawa może zapisać działanie kompensujące jako osobny wpis. Operatorzy mogą odpowiedzieć klientowi, inżynierowie mogą naprawić zachowanie ponawiania, a dział finansowy może uzgodnić księgę na podstawie tych samych dowodów.
To również powód, dla którego rekordy zatwierdzeń muszą zawierać więcej niż samo kliknięcie. Przewodnik po przepływach zatwierdzania w chatbocie wyjaśnia, jak pokazywać konsekwencje i parametry przed wykonaniem. Twoja ścieżka audytu powinna wiązać zatwierdzony ładunek danych z wykonanym ładunkiem za pomocą kanonicznego hasha.
Spraw, by ponawianie było nudne
Ponowienia są czymś normalnym w systemach rozproszonych. Sieci się zawieszają, kolejki dostarczają zadania ponownie, workery się restartują, a dostawcy zwracają niejednoznaczne błędy. Bezpieczny projekt zakłada, że każde działanie może zostać podjęte więcej niż raz.
Generuj klucz idempotencji na podstawie stałego działania biznesowego, a nie pojedynczej próby. W przypadku powyższego zwrotu klucz mógłby pochodzić z identyfikatora tenanta, identyfikatora płatności, kwoty zwrotu, powodu i identyfikatora działania. Każde ponowienie wysyła ten sam klucz. Zmieniona kwota lub miejsce docelowe stają się nowym działaniem, które wymaga nowej decyzji.
Następnie zdefiniuj reguły ponawiania w zależności od wyniku:
- Jednoznaczne niepowodzenie przed przyjęciem żądania: ponów automatycznie z tym samym identyfikatorem działania i kluczem idempotencji.
- Przekroczenie limitu czasu lub utrata połączenia po wysłaniu: najpierw odpytaj status; ponów próbę tylko wtedy, gdy miejsce docelowe potwierdzi brak efektu.
- Błąd walidacji lub uprawnień: zatrzymaj się i pokaż konkretną wymaganą poprawkę.
- Limit liczby żądań lub tymczasowa awaria dostawcy: uszanuj sygnał wycofania (backoff) dostawcy i zachowaj tę samą tożsamość działania.
- Nieznany wynik bez możliwości sprawdzenia statusu: wymagaj przeglądu dla działań o istotnych konsekwencjach.
Rejestruj powód, dla którego mechanizm ponawiania zainicjował każdą próbę. „Rozpoczęto próbę 2” to słaby dowód. „Rozpoczęto próbę 2 po tym, jak sprawdzenie statusu nie znalazło pasującego zwrotu” to dowód nadający się do przeglądu.
Powiąż zatwierdzenia z wykonanym ładunkiem danych
Zatwierdzenie jest ważne wyłącznie dla działania, które widziała dana osoba. Jeśli chatbot prosi o zatwierdzenie zwrotu $48, a następnie wykonuje zwrot $96, samo istnienie zdarzenia zatwierdzenia daje fałszywe poczucie bezpieczeństwa.
Doprowadź proponowany ładunek danych do postaci kanonicznej, usuń zmienne pola, takie jak znaczniki czasu, i policz hash wyniku. Przechowuj ten hash razem z zatwierdzeniem. Bezpośrednio przed wykonaniem policz hash ponownie. Niezgodność powinna unieważnić zatwierdzenie i zwrócić zmienioną propozycję osobie zatwierdzającej.
Zapisz te szczegóły razem ze zdarzeniem zatwierdzenia:
- tożsamość i rola osoby zatwierdzającej;
- polityka lub reguła, która wymagała zatwierdzenia;
- pokazana konsekwencja w formie czytelnej dla człowieka;
- kanoniczny hash ładunku danych;
- termin wygaśnięcia zatwierdzenia;
- decyzja i opcjonalny powód;
- identyfikatory śladu i działania.
Zachowuj również zdarzenia odmowy i wygaśnięcia. Sekwencja dopisywana wyłącznie na końcu pokazuje, czy agent respektował decyzję, czy po zablokowaniu spróbował innej ścieżki.
Maskuj dane, nie niszcząc dowodów
Surowe ładunki danych narzędzi mogą zawierać tokeny dostępu, dane płatności, informacje zdrowotne, prywatne wiadomości i identyfikatory osobowe. Skopiowanie tego wszystkiego do przeszukiwalnego dziennika tworzy drugą, wrażliwą bazę danych.
Stosuj warstwowy rekord. Umieść zamaskowane podsumowanie w zdarzeniu operacyjnym. Przechowuj hash kanonicznych danych wejściowych, aby wykrywać zmiany. Jeśli pełne przechowywanie ładunku danych jest naprawdę konieczne, szyfruj je w ograniczonym magazynie dowodów z krótszym okresem retencji i osobną kontrolą dostępu.
Definiuj maskowanie według pól, a nie wyłącznie za pomocą wyrażeń regularnych. Token typu bearer nigdy nie powinien trafić do potoku zdarzeń. Adresy e-mail mogą być maskowane w szerokich widokach operacyjnych, pozostając dostępne dla wąskiej grupy wsparcia. Pola tekstu dowolnego wymagają limitów rozmiaru i wykrywania danych poufnych, ponieważ użytkownicy wklejają dane uwierzytelniające do okien czatu.
Prywatność dotyczy też dostawców narzędzi do obserwowalności (observability). Przed eksportem śladów zdecyduj, które pola opuszczają Twoje środowisko, w jakim regionie są przechowywane i czy żądania usunięcia są propagowane dalej. Przewodnik po bezpieczeństwie administracyjnym chatbota omawia zmiany uprzywilejowanej konfiguracji; zastosuj ten sam podział obowiązków do dostępu do dzienników audytu i zmian retencji.
Zamień ślady w pytania operacyjne
Panele powinny odpowiadać na konkretne pytania, a nie celebrować liczbę zdarzeń. Zacznij od zapytań, które ujawniają szkody wobec klientów:
- Które udane efekty biznesowe nastąpiły po odpowiedzi z przekroczonym limitem czasu?
- Które identyfikatory działań wygenerowały więcej niż jeden zewnętrzny identyfikator referencyjny?
- Które hashe zatwierdzonych ładunków różnią się od hashy ładunków wykonanych?
- Które narzędzia mają najwyższy odsetek nieznanych wyników?
- Którzy użytkownicy lub tenanci wywołują najwięcej ponowień?
- Które działania zakończyły się po wygaśnięciu zatwierdzenia?
- Po których odrzuconych działaniach nastąpiło podobne działanie wykonane przez inne narzędzie?
Przy każdym incydencie przeglądaj też próbkę normalnych śladów. Zwykłe przykłady pokazują, czy schemat jest zrozumiały, zanim pojawi się presja. Ujawniają też brakujące przekazania, mylące etykiety wyników i pola, co do których zespoły zakładały, że rejestruje je inna usługa.
W przypadku działań niskiego ryzyka odroczony przegląd może wystarczyć. Plan kontroli Google DeepMind podobnie rozróżnia retrospektywne monitorowanie zachowań odwracalnych od blokowania w czasie rzeczywistym w przypadku działań poważnych. Przypisz każdemu narzędziu tryb przeglądu odpowiedni do konsekwencji: asynchroniczne próbkowanie, alert przy anomalii, zatwierdzenie przed wykonaniem lub synchroniczne egzekwowanie polityki.
Testuj ścieżkę audytu jak każdą inną funkcję produktu
Ścieżka audytu może zawieść, mimo że chatbot wygląda na sprawnie działający. Dodaj do procesu wydawania testy, które celowo tworzą niewygodne stany:
- Wymuś przekroczenie limitu czasu po tym, jak miejsce docelowe przyjmie działanie.
- Dostarcz tę samą wiadomość z kolejki dwukrotnie.
- Zmień jeden zatwierdzony parametr przed wykonaniem.
- Zrotuj dane uwierzytelniające konektora w trakcie wieloetapowego zadania.
- Zwróć status HTTP oznaczający sukces przy odrzuconym wyniku biznesowym.
- Uruchom dwóch subagentów wobec tego samego żądania klienta.
- Usuń lub zamaskuj dane klienta i zweryfikuj reguły retencji we wszystkich eksportach.
W każdym teście zacznij od trzech miejsc: konwersacji, wewnętrznego zadania i transakcji zewnętrznej. Wszystkie trzy powinny prowadzić do jednego spójnego śladu. Osoba, która nie budowała tej integracji, powinna być w stanie wyjaśnić, o co poprosił użytkownik, co zdecydował agent, czego próbował system i co faktycznie się zmieniło.
Opis godnych zaufania agentów autorstwa Anthropic podkreśla znaczenie przejrzystości w miarę tego, jak agenci planują, działają, obserwują i powtarzają cykl w różnych narzędziach. Praktycznym standardem jest ślad, który przetrwa tę pętlę — łącznie z przekazaniami między subagentami i interwencjami człowieka.
Potwierdzenie jest częścią działania
Widoczna dla klienta odpowiedź „Twój zwrot został zrealizowany” powinna być generowana na podstawie potwierdzonego efektu, a nie zamiaru chatbota czy udanego wysłania wywołania narzędzia. Ten sam zewnętrzny identyfikator referencyjny pokazywany zespołowi wsparcia powinien, tam gdzie to zasadne, pojawić się także w potwierdzeniu dla użytkownika.
W miarę jak zadania chatbota rozciągają się na coraz więcej narzędzi, modeli, workerów i zatwierdzeń, ścieżka audytu agenta AI staje się częścią kontraktu działania. Daje klientom potwierdzenie, które można obronić, a operatorom — drogę od zaskakującego wyniku z powrotem do dokładnej decyzji i próby, która go wywołała.
W Agentkit dzienniki czatu zapewniają czytelną dla człowieka warstwę przeglądu, a niestandardowe akcje API łączą chatboty z systemami biznesowymi; utrzymuj potwierdzenia z systemu źródłowego powiązane razem z tymi rozmowami.
Zbuduj swojego chatbota za darmo →
Karta kredytowa nie jest wymagana.



