Włącz śledzenie i zbieranie informacji zwrotnych dotyczących wdrożenia przepływu (klasyczny)

Dotyczy tylko:Portal Foundry (klasyczny). Ten artykuł nie jest dostępny w nowym portalu Foundry. Dowiedz się więcej o nowym portalu.

Uwaga

Linki w tym artykule mogą otwierać zawartość w nowej dokumentacji Microsoft Foundry, w przeciwieństwie do dokumentacji Foundry (klasycznej), którą przeglądasz obecnie.

Ważne

Elementy oznaczone (wersja zapoznawcza) w tym artykule są obecnie dostępne w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą nie być obsługiwane lub mogą mieć ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Wygólne warunki użytkowania Microsoft Azure Previews.

Po wdrożeniu aplikacji generowania sztucznej inteligencji w środowisku produkcyjnym warto zwiększyć zrozumienie i zoptymalizować wydajność. Dane śledzenia dla każdego żądania, zagregowane metryki i opinie użytkowników odgrywają kluczowe role.

W tym artykule nauczysz się włączać śledzenie, zbierać zagregowane metryki oraz zbierać opinie użytkowników podczas wykonywania operacji inferencji w ramach wdrożenia przepływu.

Uwaga

Aby uzyskać ulepszony sposób ciągłego monitorowania wdrożonych aplikacji (innych niż przepływ monitów), rozważ użycie Azure oceny online sztucznej inteligencji.

Wymagania wstępne

Ważne

Ten artykuł zapewnia wsparcie dziedzictwa dla projektów opartych na węźle. Nie będzie działać dla projektów odlewni. Zobacz Jak sprawdzić, jaki typ projektu mam?

SDK compatibility note: Przykłady kodu wymagają określonej wersji zestawu SDK Microsoft Foundry. Jeśli napotkasz problemy ze zgodnością, rozważ migrację z projektu opartego na hubie do projektu Foundry.

  • Azure CLI i rozszerzenie Azure Machine Learning do Azure CLI.
  • Projekt Microsoft Foundry. Jeśli nie masz jeszcze projektu, możesz go utworzyć.
  • Zasób usługi Application Insights. Jeśli nie masz jeszcze zasobu usługi Application Insights, możesz go utworzyć.
  • Kontrole dostępu oparte na rolach Azure służą do przyznawania dostępu do operacji w Azure Machine Learning. Aby wykonać kroki opisane w tym artykule, musisz mieć uprawnienia Właściciel lub Współautor dla wybranej grupy zasobów. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach w portalu Foundry.

Wdrażanie przepływu na potrzeby wnioskowania w czasie rzeczywistym

Po prawidłowym przetestowaniu przepływu (przepływu elastycznego lub przepływu DAG) można wdrożyć przepływ w środowisku produkcyjnym. W tym artykule jako przykład użyjemy polecenia Deploy a flow for real-time inference (Wdrażanie przepływu w czasie rzeczywistym ). W przypadku przepływów flex należy przygotować flow.flex.yaml plik zamiast flow.dag.yaml.

Można również wdrożyć na innych platformach, takich jak kontener Platformy Docker i klaster Kubernetes.

Użyj najnowszego obrazu podstawowego przepływu monitów, aby wdrożyć przepływ tak, aby obsługiwał interfejs API śledzenia i zbierania opinii.

Włącz śledzenie i zbieraj metryki systemowe dla wdrożenia.

Jeśli do wdrożenia używasz portalu Foundry, wybierz pozycję Wdrażanie>ustawień zaawansowanych> usługi Application Insights w kreatorze wdrażania. Korzystając z tej metody, zbierasz dane śledzenia i metryki systemowe do projektu połączonego z usługą Application Insights.

Jeśli używasz zestawu SDK lub interfejsu wiersza polecenia, dodaj właściwość app_insights_enabled: true w pliku YAML wdrożenia, aby zbierać dane do projektu połączonego z usługą Application Insights.

app_insights_enabled: true

Możesz również określić inne informacje o aplikacji przez zmienną środowiskową APPLICATIONINSIGHTS_CONNECTION_STRING w pliku YAML dla wdrożenia. Connection string dla usługi Application Insights można znaleźć na stronie Overview w portalu Azure.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Uwaga

Jeśli ustawisz tylko app_insights_enabled: true, ale twój projekt nie ma połączonego zasobu Application Insights, wdrożenie nie zakończy się niepowodzeniem, ale nie zostaną zebrane żadne dane.

Jeśli jednocześnie określisz zarówno app_insights_enabled: true, jak i poprzednią zmienną środowiskową, dane śledzenia i metryki zostaną wysłane do projektu połączonego z usługą Application Insights. Jeśli chcesz określić różne szczegółowe informacje o aplikacji, zachowaj tylko zmienną środowiskową.

Jeśli wdrażasz na innych platformach, możesz również użyć zmiennej środowiskowej APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>, aby zbierać dane śledzenia i metryki do wskazanej usługi Application Insights.

Wyświetlanie danych śledzenia w usłudze Application Insights

Śledzenia rejestrują określone zdarzenia lub stan aplikacji podczas wykonywania. Mogą zawierać dane dotyczące wywołań funkcji, wartości zmiennych i zdarzeń systemowych. Ślady pomagają podzielić składniki aplikacji na dyskretne dane wejściowe i wyjściowe. Ten proces ma kluczowe znaczenie dla debugowania i zrozumienia aplikacji. Aby dowiedzieć się więcej o śladach, zobacz tę witrynę internetową. Dane śledzenia są zgodne ze specyfikacją OpenTelemetry.

Szczegółowe dane śledzenia można wyświetlić w określonej usłudze Application Insights. Poniższy zrzut ekranu przedstawia przykład zdarzenia wdrożonego przepływu zawierającego wiele węzłów. Wybierz pozycję Application Insights>Zbadaj>wyszukiwanie transakcji, a następnie wybierz każdy węzeł, aby wyświetlić jego szczegółowy ślad.

Zdarzenie typu zależności rejestruje wywołania z wdrożeń. Nazwa zdarzenia to nazwa folderu przepływu. Aby dowiedzieć się więcej, zobacz Wyszukiwanie transakcji i diagnostyka w usłudze Application Insights.

Wyświetlanie metryk systemowych w usłudze Application Insights

Nazwa metryki Typ Wymiary Opis
token_consumption licznik - flow
- node
- llm_engine
- token_type: : prompt_tokenstokeny wejściowe interfejsu API LLM; completion_tokens: tokeny odpowiedzi interfejsu API LLM; total_tokens = prompt_tokens + completion tokens
Metryki użycia tokenu OpenAI.
flow_latency histogram flow, , response_code, , streamingresponse_type Koszt wykonania żądania, response_type, oznacza, czy chodzi o pełny bajt, pierwszy bajt, czy ostatni bajt.
flow_request licznik flow, , response_code, , exceptionstreaming Liczba przepływów żądań.
node_latency histogram flow, node, run_status Koszt wykonywania węzła.
node_request licznik flow, , node, , exceptionrun_status Liczba wykonań węzła.
rpc_latency histogram flow, node, api_call Koszt wywołania procedury zdalnej.
rpc_request licznik flow, , node, , api_callexception Liczba wywołań procedury zdalnej.
flow_streaming_response_duration histogram flow Koszt wysyłania odpowiedzi w trybie przesyłania strumieniowego, od momentu wysłania pierwszego bajtu do wysłania ostatniego bajtu.

Domyślne metryki usługi Application Insights obszaru roboczego można znaleźć na stronie przeglądu obszaru roboczego w portalu Azure.

  1. Otwórz usługę Application Insights i wybierz pozycję Użycie i szacowane koszty w okienku po lewej stronie. Wybierz pozycję Metryki niestandardowe (wersja zapoznawcza)>Z wymiarami i zapisz zmianę.
  2. Wybierz kartę Metryki w okienku po lewej stronie. W Przestrzeni nazw metryk wybierz standardowe metryki promptflow. Metryki można eksplorować z listy rozwijanej Metryka przy użyciu różnych metod agregacji.

Zbieranie opinii i wysyłanie ich do usługi Application Insights

Zarządzanie przepływem monitów udostępnia nowy /feedback interfejs API, który umożliwia klientom zbieranie opinii zwrotnych. Ładunek opinii może być dowolnymi danymi w formacie JSON. Obsługa przepływu poleceń pomaga klientowi zapisać dane opinii do śladu. Dane są zapisywane w docelowym obiekcie eksportera śledzenia skonfigurowanym przez klienta. Zarządzanie przepływem monitów wspiera również propagację standardowego kontekstu śledzenia OpenTelemetry. Uwzględnia kontekst śledzenia ustalony w nagłówku żądania i wykorzystuje ten kontekst jako kontekst nadrzędny dla zakresu żądania. Możesz użyć funkcji śledzenia rozproszonego, aby skorelować ślad opinii ze śladem żądania czatu.

Poniższy przykładowy kod pokazuje, jak ocenić przepływ danych wdrożony w zarządzanym punkcie końcowym, dla którego włączono śledzenie, i jak wysłać opinię do tego samego zakresu śledzenia żądania oceny. Przepływ zawiera dane wejściowe question i chat_history. Dane wyjściowe to answer. Po dokonaniu oceny punktu końcowego opinia jest zbierana i wysyłana do usługi Application Insights zgodnie z informacjami określonymi podczas wdrażania przepływu.

import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider

# Initialize your tracer.
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())

# Request data goes here.
# The example below assumes JSON formatting, which might be updated
# depending on the format your endpoint expects.
data = {
    "question": "hello",
    "chat_history": []
}

body = str.encode(json.dumps(data))

url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint.
api_key = ''
if not api_key:
    raise Exception("A key should be provided to invoke the endpoint")

# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules.
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }

try:
    with tracer.start_as_current_span('genai-request') as span:

        ctx = context.get_current()
        TraceContextTextMapPropagator().inject(headers, ctx)
        print(headers)
        print(ctx)
        req = urllib.request.Request(url, body, headers)
        response = urllib.request.urlopen(req)

        result = response.read()
        print(result)

        # Now you can process the answer and collect feedback.
        feedback = "thumbdown"  # Example feedback (modify as needed).

        # Make another request to save the feedback.
        feedback_body = str.encode(json.dumps(feedback))
        feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
        urllib.request.urlopen(feedback_req)

except urllib.error.HTTPError as error:
    print("The request failed with status code: " + str(error.code))

    # Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure.
    print(error.info())
    print(error.read().decode("utf8", 'ignore'))

Ślady żądania można wyświetlić wraz z informacjami zwrotnymi w usłudze Application Insights.

Zaawansowane użycie: Eksport śladu do niestandardowej usługi modułu zbierającego OpenTelemetry

W niektórych przypadkach możesz wyeksportować dane śladowe do wdrożonego serwisu kolektora OpenTelemetry. Aby włączyć tę usługę, ustaw wartość OTEL_EXPORTER_OTLP_ENDPOINT. Użyj tego eksportera, jeśli chcesz dostosować własną logikę przetwarzania obszaru i własny docelowy obiekt dla przechowywania śladów.