Open Telemetry#
AutoGen bietet native Unterstützung für Open Telemetry. Dies ermöglicht es Ihnen, Telemetriedaten von Ihrer Anwendung zu sammeln und an ein von Ihnen gewähltes Telemetrie-Backend zu senden.
Dies sind die Komponenten, die derzeit instrumentiert sind
Laufzeit (
SingleThreadedAgentRuntimeundGrpcWorkerAgentRuntime).Tool (
BaseTool) mit demexecute_toolSpan in der GenAI-Semantikkonvention für Tools.AgentChat Agents (
BaseChatAgent) mit dencreate_agentundinvoke_agentSpans in der GenAI-Semantikkonvention für Agents.
Hinweis
Um die Telemetrie der Agentenlaufzeit zu deaktivieren, können Sie den trace_provider im Laufzeitkonstruktor auf opentelemetry.trace.NoOpTracerProvider setzen.
Zusätzlich können Sie die Umgebungsvariable AUTOGEN_DISABLE_RUNTIME_TRACING auf true setzen, um die Telemetrie der Agentenlaufzeit zu deaktivieren, wenn Sie keinen Zugriff auf den Laufzeitkonstruktor haben. Zum Beispiel, wenn Sie ComponentConfig verwenden.
Instrumentieren Ihrer Anwendung#
Um Ihre Anwendung zu instrumentieren, benötigen Sie ein SDK und einen Exporter. Sie haben diese möglicherweise bereits, wenn Ihre Anwendung bereits mit Open Telemetry instrumentiert ist.
Saubere Instrumentierung#
Wenn Sie Open Telemetry nicht in Ihrer Anwendung eingerichtet haben, können Sie diese Schritte befolgen, um Ihre Anwendung zu instrumentieren.
pip install opentelemetry-sdk
Abhängig von Ihrem Open Telemetry Collector können Sie gRPC oder HTTP verwenden, um Ihre Telemetrie zu exportieren.
# Pick one of the following
pip install opentelemetry-exporter-otlp-proto-http
pip install opentelemetry-exporter-otlp-proto-grpc
Als nächstes benötigen wir einen Tracer-Provider
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
def configure_oltp_tracing(endpoint: str = None) -> trace.TracerProvider:
# Configure Tracing
tracer_provider = TracerProvider(resource=Resource({"service.name": "my-service"}))
processor = BatchSpanProcessor(OTLPSpanExporter())
tracer_provider.add_span_processor(processor)
trace.set_tracer_provider(tracer_provider)
return tracer_provider
Jetzt können Sie den `trace_provider` beim Erstellen Ihrer Laufzeit übergeben
# for single threaded runtime
single_threaded_runtime = SingleThreadedAgentRuntime(tracer_provider=tracer_provider)
# or for worker runtime
worker_runtime = GrpcWorkerAgentRuntime(tracer_provider=tracer_provider)
Und das ist alles! Ihre Anwendung ist jetzt mit Open Telemetry instrumentiert. Sie können Ihre Telemetriedaten jetzt in Ihrem Telemetrie-Backend anzeigen.
Vorhandene Instrumentierung#
Wenn Sie Open Telemetry bereits in Ihrer Anwendung eingerichtet haben, können Sie den Tracer-Provider beim Erstellen der Laufzeit an diese übergeben
from opentelemetry import trace
# Get the tracer provider from your application
tracer_provider = trace.get_tracer_provider()
# for single threaded runtime
single_threaded_runtime = SingleThreadedAgentRuntime(tracer_provider=tracer_provider)
# or for worker runtime
worker_runtime = GrpcWorkerAgentRuntime(tracer_provider=tracer_provider)
Beispiele#
Siehe Tracing und Observability für ein vollständiges Beispiel, wie Open Telemetry mit AutoGen eingerichtet wird.