Tracing agentów AI z OpenTelemetry
Jak instrumentować autonomicznych agentów konwencjami GenAI OpenTelemetry, by każdy krok rozumowania, wywołanie narzędzia i koszt trafiły do jednego przenośnego trace.
Definicja
Tracing agentów rejestruje pełną ścieżkę wykonania uruchomienia agenta jako drzewo spanów — prompty, wywołania modelu, wywołania narzędzi i kroki podagentów — każdy z czasem, tokenami i wynikiem. Konwencje GenAI w OpenTelemetry stają się standardem de facto przenośnego zapisu tych spanów.
Gdy agent zawodzi, pytanie jest zawsze to samo: co on właściwie zrobił? Tracing na nie odpowiada. Trace zamienia trzydziestosekundowy przebieg z pięcioma narzędziami w czytelne drzewo, które obejrzysz krok po kroku.
Co przechwytuje trace
Trace to pełne drzewo jednego przebiegu agenta. Każdy węzeł to span: prompt, wywołanie modelu, wywołanie narzędzia, krok podagenta. Dobry span zapisuje typ operacji, wejścia i wyjścia, liczbę tokenów, koszt, opóźnienie i status. Czytane z góry na dół, spany odtwarzają dokładnie, jak agent rozumował i działał.
To jednostka trzech rzeczy naraz: debugowania (gdzie poszło źle), wyceny (który krok spalił tokeny) i audytu (jaka decyzja doprowadziła do jakiej akcji).
| Atrybut spanu | Co zapisuje | Do czego |
|---|---|---|
| Typ operacji | Wywołanie modelu, narzędzia, retrieval, podagent | Czytanie przebiegu jako drzewa |
| Wejścia / wyjścia | Prompt i wynik, zawężone | Debugowanie |
| Tokeny | Tokeny promptu i odpowiedzi | Wycena |
| Koszt | Pieniądze wydane na krok | FinOps i budżety |
| Opóźnienie | Ile trwał krok | Wydajność |
| Status | Sukces lub błąd | Lokalizacja awarii |
Dlaczego konwencje GenAI OpenTelemetry?
Ważnym przełomem 2025 r. było zbieżenie na konwencjach GenAI w OpenTelemetry. Zamiast by każda platforma wymyślała własny format traces, spany agentów idą wspólnym schematem. Dwa praktyczne zyski:
- Przenośność. Twoje traces nie są przywiązane do jednego dostawcy; przeczyta je dowolny zgodny backend.
- Unifikacja. Spany agentów stoją obok istniejących traces usług, więc jeden backend obejmuje cały stack.
Dedykowane platformy obserwowalności agentów dokładają wartość na wierzchu — session replay, time-travel debugging, dashboardy — ale to standard chroni Cię, gdy narzędzia się zmieniają.
Instrumentacja agenta
- Owiń wywołania modelu. Emituj span na inferencję z atrybutami tokenów i kosztu.
- Owiń każde narzędzie. Span na wywołanie narzędzia z wejściami, wyjściami i statusem — tu kryje się większość awarii.
- Zagnieżdżaj podagentów. Spany potomne pod przebiegiem rodzica zachowują drzewo.
- Propaguj kontekst. Przenoś kontekst trace przez kroki asynchroniczne, by drzewo pozostało spójne.
- Eksportuj asynchronicznie. Próbkuj i eksportuj poza ścieżką gorącą, by narzut był pomijalny.
Od traces do operacji
Gdy traces istnieją, reszta obserwowalności wynika sama: wskaźnik ukończenia, koszt na zadanie i opóźnienie to agregaty po spanach; wykrywanie pętli to wzorzec na nich; a logi audytowe, których oczekuje ład, to Twoje traces uczynione odpornymi na manipulację. Zacznij od otraceowania jednego agenta end-to-end — wszystko inne na tym stoi. Pojęcia są w słowniku.
Najczęstsze pytania
Dlaczego OpenTelemetry, a nie SDK dostawcy?
Bo zachowuje przenośność traces dokładnie wtedy, gdy narzędzia wokół agentów zmieniają się najszybciej. Z konwencjami GenAI OpenTelemetry spany agentów idą wspólnym, otwartym schematem i lądują w tym samym backendzie co reszta usług, więc masz jeden widok całego stacku zamiast odizolowanego silosu agenta. SDK dostawcy z pewnością przechwyci bogate traces, a te dobre emitują lub czytają standard, ale budowanie wyłącznie na własnościowym formacie znaczy, że Twoja historia i dashboardy są zakładnikiem roadmapy i cennika jednego dostawcy. Pragmatyczna postawa to instrumentować najpierw pod otwartą konwencję, a dedykowane platformy traktować jako wartość dodaną na wierzchu — session replay, dashboardy agentów, time-travel debugging — a nie jako fundament. Wtedy możesz później zmienić lub dodać narzędzie bez reinstrumentacji agentów, co jest realnym ryzykiem w dziedzinie, gdzie dzisiejsza wiodąca platforma może nie być tą z przyszłego roku. Przenośność tanio wybrać teraz, drogo doszywać później.
Co span powinien przechwycić dla agenta?
Każdy span powinien zapisać dość, by odtworzyć i rozliczyć jeden krok przebiegu, czyli minimum sześć rzeczy: typ operacji (wywołanie modelu, narzędzia, retrieval lub krok podagenta), wejścia i wyjścia na odpowiednim poziomie szczegółu, liczbę tokenów, koszt pieniężny, opóźnienie oraz status mówiący, czy się powiodło. Przechwytywanie wejść i wyjść wymaga osądu — chcesz dość, by debugować, bez logowania sekretów czy ogromnych blobów, więc zawężaj lub redaguj wrażliwe pola i przycinaj, gdzie trzeba. Typ operacji pozwala wyświetlić przebieg jako czytelne drzewo; tokeny i koszt zamieniają ten sam span w zapis FinOps; opóźnienie i status czynią go sygnałem wydajności i awarii. Czytane z góry na dół, dobrze uformowane spany odtwarzają dokładnie, jak agent rozumował i działał, dlatego dyscyplina spójnego dołączania tych atrybutów liczy się bardziej niż konkretne narzędzie. Span bez tokenów nie da się wycenić; bez statusu nie da się triażować.
Czy tracing nie dokłada zbyt dużego narzutu?
W praktyce nie, bo tracing jest tani względem tego, co dominuje opóźnienie i koszt agenta: inferencji modelu. Span to niewielka ilość ustrukturyzowanych metadanych; inferencja to setki milisekund i realne pieniądze, więc względny narzut zapisania kroku jest pomijalny. Dwie standardowe techniki tak go utrzymują. Asynchroniczny eksport przenosi pracę wysyłki spanów poza ścieżkę gorącą, więc agent nie czeka na backend telemetrii, a sampling pozwala zapisywać pełny szczegół na reprezentatywnej części przebiegów, wciąż licząc każdy przebieg do metryk zagregowanych. Błędem jest pominąć tracing dla oszczędności narzutu, a potem lecieć na ślepo, gdy agent się zapętla, zawodzi lub przepala budżet — koszt niewidzenia, co się stało, przyćmiewa koszt zapisu. Traktuj tracing jako część agenta, nie opcjonalny dodatek, i dostrajaj sampling oraz retencję do swojego wolumenu, a nie wyłączaj go.
Jaka jest różnica między trace, spanem a logiem?
Span to zapis pojedynczej operacji — jednego wywołania modelu, jednego wywołania narzędzia — z czasem startu, czasem trwania, atrybutami i statusem. Trace to drzewo spanów, które razem reprezentują jeden kompletny przebieg agenta, powiązane relacjami rodzic–dziecko, byś widział, że to wywołanie narzędzia stało się wewnątrz tego kroku planowania wewnątrz tego podagenta. Log z kolei to pojedynczy komunikat ze znacznikiem czasu, przydatny do doraźnego szczegółu, ale płaski: strumień linii bez struktury pokazującej, jak kroki się zagnieżdżają i wiążą. Dla agentów to trace jest jednostką, która się liczy, bo ciekawe awarie dotyczą sekwencji i przyczynowości — agent pobrał zatruty dokument, potem wykonał nietypowe wywołanie narzędzia — co drzewo ujmuje, a strumień logów zaciemnia. W praktyce wciąż emitujesz logi, ale dołączasz je do właściwego spanu, by dziedziczyły jego kontekst. Myśl o spanach jak o krokach, o trace jak o całej historii, a o logach jak o adnotacjach na pojedynczych krokach.