Przejdź do treści

Szukaj w dokumentacji

Wpisz, aby przeszukać każdą stronę dokumentacji.

Menu dokumentacji
Wyjaśnienie + InstrukcjaOdbiorcy · Programiści i operatorzy

Obserwowalność

Ślady, metryki i logi dla każdej interakcji z agentem — przez OpenTelemetry

Ta strona została przetłumaczona automatycznie z języka angielskiego. W razie rozbieżności pierwszeństwo ma oryginał.Przeczytaj oryginał w języku angielskim

Dlaczego obserwowalność jest wbudowana

Agentów trudno debugować, czytając logi: najciekawsze zachowanie kryje się w zagnieżdżonych wywołaniach LLM, wywołaniach narzędzi i zapytaniach do bazy danych. Agent-Lab traktuje obserwowalność jako funkcję frameworka, a nie dodatek — każde żądanie HTTP, wywołanie modelu, zapytanie SQL i wychodzące połączenie HTTP staje się spanem eksportowanym przez standardowy w branży OpenTelemetry (z konwencjami semantycznymi OpenLLMetry i OpenInference).

Ponieważ od początku do końca jest to OTLP, działa każdy backend zgodny z kolektorem — stos Grafana, Elastic, Langfuse, LangWatch lub istniejące w twojej firmie APM.

Co jest instrumentowane

Konfiguracja znajduje się w agent_lab/infrastructure/metrics/tracer.py. Gdy ustawiono OTEL_EXPORTER_OTLP_ENDPOINT, automatycznie śledzone są:

Instrumentacja Co widzisz
FastAPI Jeden span serwera na żądanie, z trasą, statusem i czasem trwania
HTTPX Każde wychodzące wywołanie HTTP wykonywane przez agenta lub usługę
LangChain Każde wywołanie LLM/łańcucha wraz ze zużyciem tokenów — serce śledzenia agentów
OpenAI Natywne wywołania OpenAI (konwencje OpenInference)
SQLAlchemy Każde polecenie bazy danych (relacyjne, wyszukiwanie wektorowe, checkpointy)

Tożsamość zasobu pochodzi z SERVICE_NAME (domyślnie Agent-Lab) i SERVICE_VERSION (domyślnie snapshot). Ścieżki generujące szum (/status/*, /docs, /openapi.json, favicony) są odrzucane przez niestandardowy sampler.

Włączanie

Bez zmian w kodzie — wystarczy endpoint. Gdy ustawiono OTEL_EXPORTER_OTLP_ENDPOINT, spany trafiają do <endpoint>/v1/traces, /v1/metrics i /v1/logs przez OTLP/HTTP. Gdy zmienna nie jest ustawiona, śledzenie jest wyłączone.

# Point the app at any OTLP/HTTP collector
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 uvicorn agent_lab.main:app --reload

Na potrzeby lokalnego programowania dwa wstępnie skonfigurowane stosy wykonują za ciebie całe łączenie (z repozytorium frameworka):

docker compose -f compose-grafana.yml up --build      # collector + Prometheus + Tempo + Loki + Grafana
docker compose -f compose-opensearch.yml up --build   # collector + Data Prepper + OpenSearch + Dashboards

Każdy stos zawiera własną konfigurację OpenTelemetry Collector, odpowiednio w otel/grafana/ i otel/opensearch/ — te pliki są wzorcem tego, jak kierowane są ślady, metryki i logi. Topologie produkcyjne opisuje Przewodnik wdrażania.

Backendy obserwowalności LLM

Poza samym OTel Agent-Lab integruje się z wyspecjalizowanymi platformami obserwowalności LLM przez abstrakcję TracingBackend (podpiętą jako providery DI w agent_lab/core/container.py). Oba dostarczane backendy są włączane wyłącznie przez zmienne środowiskowe i po cichu się wyłączają, gdy brakuje ich zmiennych, dzięki czemu aplikacja zawsze się uruchamia.

Langfuse

Ustaw trzy zmienne ze swojego projektu Langfuse, a każdy ślad będzie powielany do endpointu OTLP Langfuse ({LANGFUSE_HOST}/api/public/otel/v1/traces) z atrybutami langfuse.trace.* — prompty, odpowiedzi, zużycie tokenów i koszty, gotowe do użycia w eksperymentach symulacyjnych:

Zmienna Przeznaczenie
LANGFUSE_HOST Bazowy URL Langfuse
LANGFUSE_PUBLIC_KEY pk-lf-…
LANGFUSE_SECRET_KEY sk-lf-…

LangWatch

Zmienna Przeznaczenie
LANGWATCH_ENDPOINT Endpoint LangWatch
LANGWATCH_API_KEY Klucz API LangWatch

LangWatch rejestruje span langwatch.trace() dla każdej wiadomości — w ten sposób zestawy symulacji zapisują oceny sędziego w powiązaniu z eksperymentami.

Referencyjne dashboardy

Stos Przewodnik Interfejs
Grafana + Prometheus + Tempo + Loki otel/GRAFANA.md http://localhost:3000
OpenSearch Dashboards otel/OPENSEARCH.md http://localhost:5601

Oba przewodniki zawierają nagrania demonstracyjne dashboardów w działaniu.

Rozszerzanie: własny backend

TracingBackend jest częścią publicznego API. Utwórz jego podklasę, aby przekazywać spany do własnej platformy, i zarejestruj ją w swoim Container:

from agent_lab import Container, TracingBackend


class MyBackend(TracingBackend):
    ...  # export spans wherever your platform needs them


class MyContainer(Container):
    # replace or extend the shipped tracing_backends provider list
    ...

Dokumentacja konfiguracji zawiera w jednej tabeli wszystkie zmienne związane z obserwowalnością.