Tracing mit benutzerdefiniertem OpenTelemetry Collector#
In bestimmten Szenarien möchten Sie möglicherweise Ihren eigenen OpenTelemetry Collector verwenden und Ihre Abhängigkeiten minimieren.
In diesem Fall können Sie die Abhängigkeit von promptflow-devkit, das den Standard-Collector von Promptflow bereitstellt, vermeiden und nur von promptflow-tracing abhängig sein.
Lernziele - Nach Abschluss dieses Tutorials sollten Sie in der Lage sein:
LLM-Aufrufe (OpenAI) mit benutzerdefiniertem OpenTelemetry Collector verfolgen.
0. Abhängige Pakete installieren#
%%capture --no-stderr
%pip install -r ./requirements.txt
1. Richten Sie einen OpenTelemetry Collector ein#
Implementieren Sie einen einfachen Collector, der die Traces auf der Standardausgabe ausgibt.
import threading
from http.server import BaseHTTPRequestHandler, HTTPServer
from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import (
ExportTraceServiceRequest,
)
class OTLPCollector(BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers["Content-Length"])
post_data = self.rfile.read(content_length)
traces_request = ExportTraceServiceRequest()
traces_request.ParseFromString(post_data)
print("Received a POST request with data:")
print(traces_request)
self.send_response(200, "Traces received")
self.end_headers()
self.wfile.write(b"Data received and printed to stdout.\n")
def run_server(port: int):
server_address = ("", port)
httpd = HTTPServer(server_address, OTLPCollector)
httpd.serve_forever()
def start_server(port: int):
server_thread = threading.Thread(target=run_server, args=(port,))
server_thread.daemon = True
server_thread.start()
print(f"Server started on port {port}. Access https://:{port}/")
return server_thread
# invoke the collector service, serving on OTLP port
start_server(port=4318)
2. Verfolgen Sie Ihre Anwendung mit Tracing#
Angenommen, wir haben bereits eine Python-Funktion, die die OpenAI-API aufruft
from llm import my_llm_tool
deployment_name = "gpt-35-turbo-16k"
Rufen Sie start_trace() auf und konfigurieren Sie den OTLP-Exporter für den oben genannten Collector.
from promptflow.tracing import start_trace
start_trace()
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor
tracer_provider = trace.get_tracer_provider()
otlp_span_exporter = OTLPSpanExporter()
tracer_provider.add_span_processor(BatchSpanProcessor(otlp_span_exporter))
Visualisieren Sie Traces auf der Standardausgabe.
result = my_llm_tool(
prompt="Write a simple Hello, world! python program that displays the greeting message. Output code only.",
deployment_name=deployment_name,
)
result
# view the traces under this cell

