Povolení trasování a shromažďování zpětné vazby pro nasazení toku
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Po nasazení aplikace Generative AI v produkčním prostředí můžete zlepšit pochopení a optimalizaci výkonu. Trasování dat pro každý požadavek, agregované metriky a zpětná vazba uživatelů hrají kritické role.
V tomto článku se dozvíte, jak povolit trasování, shromažďovat agregované metriky a shromažďovat názory uživatelů během odvozování nasazení toku.
Poznámka:
Pokud chcete zlepšit způsob průběžného monitorování nasazených aplikací (kromě toku výzvy), zvažte použití online vyhodnocení Azure AI.
Požadavky
- Azure CLI a rozšíření Azure Machine Learning pro Azure CLI.
- Projekt Azure AI Foundry Pokud projekt ještě nemáte, můžete ho vytvořit tady.
- An Application Insights. Pokud ještě prostředek Application Insights nemáte, můžete ho vytvořit tady.
- Řízení přístupu na základě role v Azure slouží k udělení přístupu k operacím ve službě Azure Machine Learning. Pokud chcete provést kroky v tomto článku, musíte mít oprávnění vlastníka nebo přispěvatele pro vybranou skupinu prostředků. Další informace najdete v tématu Řízení přístupu na základě role na portálu Azure AI Foundry.
Nasazení toku pro odvozování v reálném čase
Po správném otestování toku můžete tok nasadit v produkčním prostředí, a tok flex nebo tok DAG. V tomto článku jako příklad použijeme nasazení toku pro odvozování v reálném čase. Pro flex toky musíte připravit flow.flex.yaml
soubor místo flow.dag.yaml
.
Můžete také nasadit na jiné platformy, jako je kontejner Dockeru, cluster Kubernetes a další.
Poznámka:
K nasazení toku je potřeba použít nejnovější bitovou kopii základního toku výzvy, aby podporovala rozhraní API pro trasování a shromažďování zpětné vazby.
Povolení trasování a shromažďování systémových metrik pro vaše nasazení
Pokud k nasazení používáte portál Azure AI Foundry, můžete zapnout diagnostiku Application Insights v kroku Nasazení rozšířeného nastavení>v průvodci nasazením, jakým způsobem se data trasování a systémové metriky shromažďují do projektu propojeného s Application Insights.
Pokud používáte sadu SDK nebo rozhraní příkazového řádku, můžete přidat vlastnost app_insights_enabled: true
do souboru yaml nasazení, která shromažďuje data do projektu propojeného s Application Insights.
app_insights_enabled: true
Další Application Insights můžete také zadat pomocí proměnné APPLICATIONINSIGHTS_CONNECTION_STRING
prostředí v souboru yaml nasazení následujícím způsobem. Připojovací řetězec application Insights najdete na stránce Přehled na webu Azure Portal.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Poznámka:
Pokud nastavíte app_insights_enabled: true
jenom projekt, ale váš projekt nemá propojený prostředek Application Insights, nasazení se nezdaří, ale nebudou shromážděna žádná data.
Pokud současně zadáte proměnnou app_insights_enabled: true
prostředí i výše uvedenou proměnnou prostředí, data a metriky trasování se odešlou do projektu propojeného s Application Insights. Proto pokud chcete zadat jinou službu Application Insights, stačí zachovat proměnnou prostředí.
Pokud nasadíte na jiné platformy, můžete také použít proměnnou APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
prostředí ke shromažďování dat trasování a metrik pro speicifed Application Insights.
Zobrazení dat trasování ve službě Application Insights
Trasuje zaznamenává konkrétní události nebo stav aplikace během provádění. Může obsahovat data o voláních funkcí, hodnotách proměnných, systémových událostech a dalších událostech. Trasování pomáhá rozdělit komponenty aplikace na samostatné vstupy a výstupy, což je zásadní pro ladění a pochopení aplikace. Další informace najdete tady o trasováních. Data trasování se řídí specifikací OpenTelemetry.
Podrobné trasování můžete zobrazit v zadané službě Application Insights. Následující snímek obrazovky ukazuje příklad události nasazeného toku obsahujícího více uzlů. V Application Insights –> Prošetření –> Vyhledávání transakcí a můžete vybrat každý uzel, abyste zobrazili podrobné trasování.
Události typu závislostí zaznamenávají volání z vašich nasazení. Název této události je název složky toku. Přečtěte si další informace o vyhledávání a diagnostice transakcí v Application Insights.
Zobrazení systémových metrik v Application Insights
Název metrik | Typ | Dimenze | Popis |
---|---|---|---|
token_consumption | counter | -téct -uzel - llm_engine - token_type: prompt_tokens : Vstupní tokeny rozhraní LLM API; completion_tokens : Tokeny odpovědí rozhraní LLM API ; total_tokens = prompt_tokens + completion tokens |
Metriky spotřeby tokenů OpenAI |
flow_latency | histogram | tok, response_code, streamování, response_type | náklady na provedení požadavku, response_type znamená, jestli je úplná/ firstbyte/lastbyte |
flow_request | counter | tok, response_code, výjimka, streamování | počet požadavků toku |
node_latency | histogram | flow, node, run_status | Náklady na spuštění uzlu |
node_request | counter | flow, node, exception, run_status | Počet spuštění uzlu |
rpc_latency | histogram | flow, node, api_call | Náklady na rpc |
rpc_request | counter | flow, node, api_call, exception | Počet rpc |
flow_streaming_response_duration | histogram | tok | streaming response sending cost, from sending first byte to sending last byte |
Výchozí application Insights pracovního prostoru najdete na stránce přehledu pracovního prostoru na webu Azure Portal.
- Otevřete Application Insights a v levém navigačním panelu vyberte Využití a odhadované náklady . Vyberte Vlastní metriky (Preview) a vyberte S dimenzemi a uložte změnu.
- V levém navigačním panelu vyberte kartu Metriky . V oboru názvů metrik vyberte standardní metrikypromptflow a metriky můžete prozkoumat z rozevíracího seznamu Metriky s různými metodami agregace.
Shromažďování názorů a odesílání do Application Insights
Obsluha toku výzvy poskytuje nové /feedback
rozhraní API, které zákazníkovi pomůže shromáždit zpětnou vazbu. Datovou částí zpětné vazby můžou být libovolná data formátu JSON. Služba PF pomáhá zákazníkovi ukládat data zpětné vazby do rozsahu trasování. Data budou uložena do nakonfigurovaného cílového zákazníka vývozce trasování. Podporuje také šíření standardního trasovacího kontextu OpenTelemetry. Říká se, že bude respektovat kontext trasování nastavený v hlavičce požadavku a použít ho jako kontext nadřazeného rozsahu požadavku. K korelaci trasování zpětné vazby s trasováním žádosti o chat můžete využít funkci distribuovaného trasování trasování.
Následuje ukázkový kód, který ukazuje, jak určit skóre trasování nasazeného spravovaného koncového bodu a odeslat zpětnou vazbu do stejného rozsahu trasování žádosti o bodování. Tok má vstupy question
a chat_history
výstup answer
. Po vyhodnocení koncového bodu shromáždíme zpětnou vazbu a pošleme ji do Application Insights zadanou při nasazování toku.
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'))
Trasování žádosti můžete zobrazit spolu se zpětnou vazbou v Application Insights.
Rozšířené využití: Export trasování do vlastní služby kolektoru OpenTelemetry
V některých případech můžete chtít exportovat data trasování do nasazené služby kolektoru OTel, která je povolená nastavením "OTEL_EXPORTER_OTLP_ENDPOINT". Tento exportér použijte, pokud chcete přizpůsobit vlastní logiku zpracování rozsahu a vlastní trvalý cíl trasování.