0Pricing
AI Agents · Lekcja

Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych

Dowiedz się, co rejestrować na każdym etapie: nazwę narzędzia, argumenty wejściowe, wynik, opóźnienie, błąd i identyfikator nadrzędnego span.

Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Co rejestrować dla każdego kroku

Dla każdego spanu należy przechwytywać:

  • Nazwę kroku (llm_call, tool_call, retrieve)
  • Dane wejściowe (wiadomości, argumenty narzędzia, zapytanie)
  • Dane wyjściowe (odpowiedź, wynik narzędzia)
  • Metadane (model, opóźnienie, liczba tokenów, koszt)
  • Informacje o błędzie, jeśli wystąpił

Własny helper spanów

Bez frameworka można użyć minimalnego helpera:

from contextlib import contextmanager
import time, uuid

@contextmanager
def span(name, trace_id, parent_id=None):
    span_id = str(uuid.uuid4())
    start = time.time()
    record = {'trace_id': trace_id, 'span_id': span_id, 'parent_id': parent_id, 'name': name, 'start': start}
    try:
        yield record
    except Exception as e:
        record['error'] = str(e)
        raise
    finally:
        record['duration_ms'] = (time.time() - start) * 1000
        save_span(record)

Using It

trace_id = str(uuid.uuid4())
with span('llm_call_planner', trace_id) as s:
    s['model'] = 'gpt-4o-mini'
    s['messages_in'] = messages
    response = client.chat.completions.create(model='gpt-4o-mini', messages=messages)
    s['response'] = response.choices[0].message.content
    s['tokens_in'] = response.usage.prompt_tokens
    s['tokens_out'] = response.usage.completion_tokens

Zagnieżdżanie spanów

Należy przekazywać parent_id dalej, aby spany tworzyły drzewo:

with span('agent_step', trace_id) as parent:
    with span('llm_call', trace_id, parent_id=parent['span_id']):
        ...
    with span('tool_call:search', trace_id, parent_id=parent['span_id']):
        ...

Rejestrowanie wywołań narzędzi

W przypadku wywołań narzędzi należy rejestrować w szczególności:

  • Nazwę narzędzia
  • Argumenty (JSON)
  • Wynik (JSON, ewentualnie skrócony)
  • Opóźnienie
  • Błąd (jeśli wystąpił)

Skracanie dużych danych

Niektóre wyniki narzędzi są ogromne (200 KB kodu HTML). Należy je skrócić przed zapisaniem:

def safe_payload(obj, max_chars=8000):
    s = json.dumps(obj)
    return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'

Redagowanie PII

Usuń dane osobowe przed zapisaniem:

import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')

def redact(text):
    return EMAIL_RE.sub('[email]', text)

print(redact("Contact me at alice@example.com for details."))

Ustrukturyzowane logi wyjściowe

Generuj jeden rekord JSON na span — przekazuj go do ELK, Loki, Datadog lub BigQuery:

import json
import sys

def save_span(record):
    print(json.dumps(record), file=sys.stderr, flush=True)

demo_record = {'span': 'call_llm', 'duration_ms': 120, 'ok': True}
save_span(demo_record)
print("Logged span:", json.dumps(demo_record))

Korelacja z sesjami użytkowników

Do każdego spanu dołącz session_id i user_id, aby później móc filtrować trace'y według użytkownika.

Próbkowanie

W przypadku agentów o dużym wolumenie należy próbkować:

import random

def should_trace(user_id):
    return random.random() < 0.10  # 10% of traces
# Always trace errors and slow runs.

random.seed(42)
sampled = sum(should_trace(i) for i in range(1000))
print(f"Traced {sampled} out of 1000 calls (~10% target)")

Odtwarzanie na podstawie trace'ów

Zapisuj kompletne dane wejściowe (wiadomości, narzędzia, argumenty), aby można było ponownie uruchomić trace z nowym promptem i przetestować ulepszenia. To podstawa tworzenia oprogramowania sterowanego ewaluacją.

Skracać duże payloady?

Dlaczego skracać duże wyniki narzędzi w logach?

Podsumowanie

Każdy krok, każde dane wejściowe i każde dane wyjściowe — ustrukturyzowane, zagnieżdżone i próbkowane. To surowiec dla wszystkich pozostałych elementów obserwowalności.

Często zadawane pytania

Czy lekcja „Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych” jest bezpłatna?

Tak — pełny tekst „Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych”?

Dowiedz się, co rejestrować na każdym etapie: nazwę narzędzia, argumenty wejściowe, wynik, opóźnienie, błąd i identyfikator nadrzędnego span. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego agenci potrzebują śledzenia
  2. Rejestrowanie wywołań narzędzi oraz danych wejściowych i wyjściowych
  3. Opóźnienie i koszt na każdym etapie
  4. Wizualizacja uruchomień agentów (Langfuse, LangSmith)
← Powrót do AI Agents