Sdílet prostřednictvím


Povolení trasování a shromažďování zpětné vazby pro nasazení toku (Preview)

Poznámka:

Tato funkce je v současné době 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í se vývojáři APLIKACÍ snaží vylepšit své znalosti a optimalizovat výkon. 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 zpětnou vazbu uživatelů během odvozování nasazení toku.

Požadavky

  • Azure CLI a rozšíření Azure Machine Learning pro Azure CLI. Další informace najdete v tématu Instalace, nastavení a použití rozhraní příkazového řádku (v2).
  • Pracovní prostor služby Azure Machine Learning. Pokud ho nemáte, vytvořte ho pomocí kroků v rychlém startu : Vytvoření článku o prostředcích pracovního prostoru.
  • An Application Insights. Pracovní prostor strojového učení má obvykle výchozí propojenou službu Application Insights. Pokud chcete použít nový, můžete vytvořit prostředek Application Insights.
  • Zjistěte , jak vytvořit a otestovat tok v toku výzvy.
  • Základní znalosti o spravovaných online koncových bodech. Spravované online koncové body pracují s výkonnými procesory a počítači GPU v Azure škálovatelným a plně spravovaným způsobem, který vám uvolní režii při nastavování a správě základní infrastruktury nasazení. Další informace ospravovaných
  • Řízení přístupu na základě role v Azure (Azure RBAC) 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í mít váš uživatelský účet přiřazenou roli vlastníka nebo přispěvatele pro pracovní prostor Služby Azure Machine Learning nebo vlastní roli, která povoluje Microsoft.MachineLearningServices/workspaces/onlineEndpoints/. Pokud k vytváření a správě online koncových bodů/nasazení používáte studio, potřebujete další oprávnění Microsoft.Resources/deployments/write od vlastníka skupiny prostředků. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Learning.

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 do online koncových bodů spravovaných službou Azure Machine Learning. 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 atd.

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 uživatelské rozhraní studia, můžete zapnout diagnostiku Application Insights v rozšířených nastaveních –> krok nasazení v průvodci nasazením, kterým se data trasování a systémové metriky shromažďují do propojené služby Application Insights pracovního prostoru.

Pokud používáte sadu SDK nebo rozhraní příkazového řádku, můžete do souboru yaml nasazení přidat vlastnost app_insights_enabled: true , která bude shromažďovat data do propojeného application Insights pracovního prostoru. 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.

# below is the property in deployment yaml
# app_insights_enabled: true

# you can also use the environment variable
environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Poznámka:

Pokud nastavíte app_insights_enabled: true jenom pracovní prostor, ale nemáte propojený 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í, budou se data a metriky trasování odesílat do propojené služby Application Insights pracovního prostoru. 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 v tématu Trasování OpenTelemetry v trasování. 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.

Snímek obrazovky s trasovacími daty 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í API LLM; completion_tokens: Tokeny odpovědí rozhraní LLM API; total_tokens = prompt_tokens + completion tokens
Metriky spotřeby tokenů OpenAI
flow_latency histogram flow, response_code, streaming, response_type náklady na provedení požadavku, response_type znamená, jestli je úplná/ firstbyte/lastbyte
flow_request counter flow, response_code, exception, streaming 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.

Snímek obrazovky s povolením multidimenzionálních metrik

V levém navigačním panelu vyberte kartu Metriky . V Namespace metriky vyberte standardní metriky promptflow a pomocí různých metod agregace můžete prozkoumat metriky z rozevíracího seznamu Metriky.

Snímek obrazovky s metrikami koncového bodu toku výzvy

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é standardní šíření kontextu trasování OpenTelemetry, říká, že respektuje kontext trasování nastavenou v hlavičce požadavku a používá ji 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_hisotryvý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. Musíte vyplnit api_key hodnotu nebo upravit kód podle vašeho případu použití.

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.
# More information can be found here:
# https://docs.microsoft.com/azure/machine-learning/how-to-deploy-advanced-entry-script
data = {
    "question": "hello",
    "chat_history": []
}

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

url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint.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.

Snímek obrazovky s daty zpětné vazby a trasování žádosti v Application Insights

Pokročilé použ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í.

Další kroky