Włączanie śledzenia i zbieranie opinii dotyczących wdrożenia przepływu
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ą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
Po wdrożeniu aplikacji generowania sztucznej inteligencji w środowisku produkcyjnym warto lepiej zrozumieć i zoptymalizować wydajność. Dane śledzenia dla każdego żądania, zagregowanych metryk i opinii użytkowników odgrywają kluczowe role.
W tym artykule nauczysz się włączać śledzenie, zbierać zagregowane metryki i zbierać opinie użytkowników podczas wnioskowania wdrożenia przepływu.
Wymagania wstępne
- Interfejs wiersza polecenia platformy Azure i rozszerzenie usługi Azure Machine Learning do interfejsu wiersza polecenia platformy Azure.
- Projekt AI Studio. Jeśli nie masz jeszcze projektu, możesz go utworzyć tutaj.
- Usługa Application Insights. Jeśli nie masz jeszcze zasobu usługi Application Insights, możesz go utworzyć tutaj.
- Mechanizmy kontroli dostępu oparte na rolach platformy Azure służą do udzielania dostępu do operacji w usłudze 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 usłudze Azure AI Studio.
Wdrażanie przepływu na potrzeby wnioskowania w czasie rzeczywistym
Po prawidłowym przetestowaniu przepływu możesz wdrożyć go 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, klaster Kubernetes i nie tylko.
Uwaga
Aby wdrożyć przepływ, musisz użyć najnowszego obrazu podstawowego przepływu monitów, aby obsługiwać interfejs API śledzenia i zbierania opinii.
Włączanie śledzenia i zbieranie metryk systemowych dla wdrożenia
Jeśli używasz interfejsu użytkownika programu Studio do wdrożenia, możesz włączyć diagnostykę usługi Application Insights w kroku Wdrażanie ustawień>zaawansowanych w kreatorze wdrażania, w jaki sposób dane śledzenia i metryki systemowe są zbierane do projektu połączonego z usługą Application Insights.
Jeśli używasz zestawu SDK lub interfejsu wiersza polecenia, możesz dodać właściwość app_insights_enabled: true
w pliku yaml wdrożenia, który zbiera dane do projektu połączonego z usługą Application Insights.
app_insights_enabled: true
Możesz również określić inne usługi Application Insights według zmiennej środowiskowej APPLICATIONINSIGHTS_CONNECTION_STRING
w pliku yaml wdrożenia w następujący sposób. Parametry połączenia usługi Application Insights można znaleźć na stronie Przegląd w witrynie Azure Portal.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Uwaga
Jeśli ustawisz app_insights_enabled: true
tylko taki zasób, ale projekt nie ma połączonego zasobu usługi Application Insights, wdrożenie nie zakończy się niepowodzeniem, ale nie będą zbierane żadne dane.
Jeśli jednocześnie określisz zarówno i app_insights_enabled: true
powyższą zmienną środowiskową, dane śledzenia i metryki zostaną wysłane do projektu połączonego z usługą Application Insights. W związku z tym, jeśli chcesz określić inną usługę Application Insights, musisz zachować zmienną środowiskową.
Jeśli wdrażasz na innych platformach, możesz również użyć zmiennej środowiskowej APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
do zbierania danych śledzenia i metryk w celu speicifed Application Insights.
Wyświetlanie danych śledzenia w usłudze Application Insights
Ślady rejestrują określone zdarzenia lub stan aplikacji podczas wykonywania. Może zawierać dane dotyczące wywołań funkcji, wartości zmiennych, zdarzeń systemowych i nie tylko. Ślady pomagają podzielić składniki aplikacji na dyskretne dane wejściowe i wyjściowe, co ma kluczowe znaczenie dla debugowania i zrozumienia aplikacji. Więcej informacji można znaleźć tutaj na temat śladów. 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. W usłudze Application Insights — badanie —>> wyszukiwanie transakcji i możesz wybrać każdy węzeł, aby wyświetlić jego szczegółowy ślad.
Zdarzenia typu zależności rejestrują wywołania z wdrożeń. Nazwa tego zdarzenia to nazwa folderu przepływu. Dowiedz się więcej na temat wyszukiwania transakcji i diagnostyki w usłudze Application Insights.
Wyświetlanie metryk systemowych w usłudze Application Insights
Nazwa metryk | Typ | Wymiary | opis |
---|---|---|---|
token_consumption | counter | -płynąć -węzeł - llm_engine - token_type: prompt_tokens : tokeny wejściowe interfejsu API LLM; completion_tokens : tokeny odpowiedzi interfejsu API LLM ; total_tokens = prompt_tokens + completion tokens |
Metryki użycia tokenu interfejsu OpenAI |
flow_latency | histogram | flow,response_code,streaming,response_type | koszt wykonania żądania, response_type oznacza, czy jest pełny/pierwszy/ostatni bajt |
flow_request | counter | flow,response_code,exception,streaming | liczba żądań przepływu |
node_latency | histogram | przepływ, węzeł, run_status | koszt wykonywania węzła |
node_request | counter | przepływ, węzeł, wyjątek, run_status | liczba wykonań węzła |
rpc_latency | histogram | przepływ, węzeł, api_call | koszt rpc |
rpc_request | counter | flow,node,api_call,exception | liczba rpc |
flow_streaming_response_duration | histogram | Przepływ | przesyłanie strumieniowe kosztów wysyłania odpowiedzi, od wysyłania pierwszego bajtu do wysyłania ostatniego bajtu |
Domyślny obszar roboczy usługi Application Insights można znaleźć na stronie przeglądu obszaru roboczego w witrynie Azure Portal.
- Otwórz usługę Application Insights i wybierz pozycję Użycie i szacowane koszty z lewej nawigacji. Wybierz pozycję Metryki niestandardowe (wersja zapoznawcza), a następnie wybierz pozycję Z wymiarami i zapisz zmianę.
- Wybierz kartę Metryki w obszarze nawigacji po lewej stronie. Wybierz metryki standardowe promptflow z przestrzeni nazw metryki i możesz eksplorować metryki z listy rozwijanej Metryka z różnymi metodami agregacji.
Zbieranie opinii i wysyłanie ich do usługi Application Insights
Obsługa przepływu monitów udostępnia nowy /feedback
interfejs API, który ułatwia klientowi zbieranie opinii, ładunek opinii może być dowolnymi danymi w formacie JSON. Funkcja PF obsługuje tylko pomaga klientowi zapisywać dane opinii w zakresie śledzenia. Dane zostaną zapisane w skonfigurowanym kliencie docelowym eksportera śledzenia. Obsługuje również propagację standardowego kontekstu śledzenia OpenTelemetry, mówiąc, że będzie on uwzględniać kontekst śledzenia ustawiony w nagłówku żądania i używać go jako kontekstu nadrzędnego zakresu żądania. Możesz użyć funkcji śledzenia rozproszonego, aby skorelować ślad opinii ze śladem żądania czatu.
Poniżej przedstawiono przykładowy kod pokazujący sposób oceniania śledzenia wdrożonego zarządzanego punktu końcowego przepływu i wysyłania opinii do tego samego zakresu śledzenia żądania oceniania. Przepływ zawiera dane wejściowe question
i chat_history
, i wyjściowe answer
. Po ocenianiu punktu końcowego zbieramy opinię i wysyłamy do usługi Application Insights określonej 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 may 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'))
Ślad żądania można wyświetlić wraz z opiniami w usłudze Application Insights.
Zaawansowane użycie: eksportowanie śledzenia do niestandardowej usługi modułu zbierającego OpenTelemetry
W niektórych przypadkach możesz wyeksportować dane śledzenia do wdrożonej usługi modułu zbierającego OTel, włączone przez ustawienie "OTEL_EXPORTER_OTLP_ENDPOINT". Użyj tego eksportera, jeśli chcesz dostosować własną logikę przetwarzania zakresu i własny docelowy trwały ślad.