Tool-Aufrufe sowie Ein- und Ausgaben protokollieren
Erfassen Sie pro Schritt: Toolname, Eingabeargumente, Ausgabe, Latenz, Fehler und die ID des übergeordneten Spans.
Tool-Aufrufe sowie Ein- und Ausgaben protokollieren ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
Was pro Schritt protokolliert werden sollte
Erfassen Sie für jeden Span:
- Schrittname (llm_call, tool_call, retrieve)
- Eingaben (Nachrichten, Tool-Argumente, Abfrage)
- Ausgaben (Antwort, Tool-Ergebnis)
- Metadaten (Modell, Latenz, Tokenanzahl, Kosten)
- Fehlerinformationen, falls der Schritt fehlgeschlagen ist
Selbst erstellte Span-Hilfsfunktion
Ohne Framework genügt eine minimale Hilfsfunktion:
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_tokensVerschachtelung von Spans
Geben Sie parent_id weiter, damit die Spans einen Baum bilden:
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']):
...Tool-Aufrufe protokollieren
Protokollieren Sie speziell für Tool-Aufrufe:
- Toolname
- Argumente (JSON)
- Ergebnis (JSON, gegebenenfalls gekürzt)
- Latenz
- Fehler (falls vorhanden)
Große Payloads kürzen
Einige Tool-Ergebnisse sind sehr groß (200 KB HTML). Kürzen Sie sie vor dem Speichern:
def safe_payload(obj, max_chars=8000):
s = json.dumps(obj)
return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'Personenbezogene Daten entfernen
Persönliche Informationen vor dem Speichern entfernen:
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."))
Strukturierte Log-Ausgabe
Pro Span einen JSON-Datensatz ausgeben – an ELK, Loki, Datadog oder BigQuery weiterleiten:
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))
Mit Benutzersitzungen korrelieren
Jeden Span um eine session_id und user_id ergänzen, damit Sie Traces später nach Benutzer filtern können.
Sampling
Bei Agents mit hohem Volumen Stichproben nehmen:
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)")
Aus Traces wiedergeben
Vollständige Eingaben (Nachrichten, Tools, args) speichern, damit Sie einen Trace mit einem neuen Prompt erneut ausführen können, um Verbesserungen zu testen. Das ist die Grundlage für eval-getriebene Entwicklung.
Große Payloads kürzen?
Warum sollten große Tool-Ausgaben in Logs gekürzt werden?
Zusammenfassung
Jeder Schritt, jede Eingabe, jede Ausgabe – strukturiert, verschachtelt, durch Sampling erfasst. Das ist der Rohstoff für alles Weitere in der Observability.
Häufig gestellte Fragen
Ist die Lektion „Tool-Aufrufe sowie Ein- und Ausgaben protokollieren“ kostenlos?
Ja — der vollständige Text von „Tool-Aufrufe sowie Ein- und Ausgaben protokollieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Tool-Aufrufe sowie Ein- und Ausgaben protokollieren“?
Erfassen Sie pro Schritt: Toolname, Eingabeargumente, Ausgabe, Latenz, Fehler und die ID des übergeordneten Spans. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Agents zu starten?
Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Tool-Aufrufe sowie Ein- und Ausgaben protokollieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?
Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Agents Tracing benötigen
- Tool-Aufrufe sowie Ein- und Ausgaben protokollieren
- Latenz und Kosten pro Schritt
- Agent-Läufe visualisieren (Langfuse, LangSmith)