Sdílet prostřednictvím


Monitorování kvality a používání tokenů nasazených aplikací toku výzvy

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.

Monitorování aplikací nasazených do produkčního prostředí je zásadní součástí životního cyklu aplikace generující umělé inteligence. Změny chování dat a spotřebitelů můžou v průběhu času ovlivnit vaši aplikaci, což vede k zastaralým systémům, které negativně ovlivňují obchodní výsledky a zpřístupňují organizace rizikům dodržování předpisů, ekonomické a reputace.

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.

Monitorování Azure AI pro generování aplikací umělé inteligence umožňuje monitorovat aplikace v produkčním prostředí za účelem využití tokenů, kvality generování a provozních metrik.

Integrace pro monitorování nasazení toku výzvy umožňují:

  • Shromážděte produkční data odvozování z nasazené aplikace toku výzvy.
  • Využijte metriky zodpovědného vyhodnocení AI, jako je uzemnění, soudržnost, plynulost a relevance, které jsou interoperabilní s metrikami vyhodnocení toku výzvy.
  • Monitorujte výzvy, dokončení a celkové využití tokenů napříč každým nasazením modelu v toku výzvy.
  • Monitorujte provozní metriky, jako je počet požadavků, latence a míra chyb.
  • Používejte předkonfigurovaná upozornění a výchozí hodnoty pro opakované spouštění monitorování.
  • Využití vizualizací dat a konfigurace pokročilého chování na portálu Azure AI Foundry

Požadavky

Než budete postupovat podle kroků v tomto článku, ujistěte se, že máte následující požadavky:

  • Předplatné Azure s platným způsobem platby. Pro tento scénář se nepodporují bezplatná nebo zkušební předplatná Azure. Pokud nemáte předplatné Azure, vytvořte si placený účet Azure, abyste mohli začít.

  • Projekt Azure AI Foundry

  • Tok výzvy připravený k nasazení Pokud ho nemáte, přečtěte si článek Vývoj toku výzvy.

  • Řízení přístupu na základě role v Azure (Azure RBAC) se používá k udělení přístupu k operacím na portálu Azure AI Foundry. Pokud chcete provést kroky v tomto článku, musí být vašemu uživatelskému účtu přiřazena role Vývojář Azure AI ve skupině prostředků. Další informace o oprávněních najdete v tématu Řízení přístupu na základě role na portálu Azure AI Foundry.

Požadavky na monitorování metrik

Metriky monitorování generují určité nejmodernější jazykové modely GPT nakonfigurované s konkrétními pokyny pro vyhodnocení (šablony výzvy). Tyto modely fungují jako vyhodnocovací modely pro úlohy pořadí a sekvence. Pomocí této techniky můžete generovat metriky monitorování, které zobrazují silné empirické výsledky a vysokou korelaci s lidským úsudkem ve srovnání se standardními metrikami vyhodnocení AI. Další informace o vyhodnocení toku výzvy najdete v tématu odeslání hromadného testování a vyhodnocení toku a vyhodnocení a monitorování metrik pro generování umělé inteligence.

Modely GPT, které generují metriky monitorování, jsou následující. Tyto modely GPT se podporují s monitorováním a konfigurací jako prostředek Azure OpenAI:

  • GPT-3.5 Turbo
  • GPT-4
  • GPT-4-32k

Podporované metriky pro monitorování

Monitorování podporuje následující metriky:

Metrický Popis
Uzemnění Měří, jak dobře vygenerované odpovědi modelu odpovídají informacím ze zdrojových dat (uživatelem definovaný kontext).)
Relevance Měří rozsah, v jakém jsou generované odpovědi modelu relevantní a přímo související s danými otázkami.
Koherence Měří rozsah, ve kterém jsou generované odpovědi modelu logicky konzistentní a propojené.
Plynulost Měří gramatickou znalost předpovězené odpovědi generující umělé inteligence.

Mapování názvů sloupců

Při vytváření toku je potřeba zajistit, aby se názvy sloupců mapovaly. K měření bezpečnosti a kvality generování se používají následující názvy sloupců vstupních dat:

Název vstupního sloupce Definice Povinné/volitelné
Otázka Původní zadaný dotaz (označovaný také jako "vstupy" nebo "otázka") Požaduje se
Odpověď Konečné dokončení volání rozhraní API, které se vrátí (označované také jako "výstupy" nebo "odpověď") Požaduje se
Kontext Všechna kontextová data odesílaná do volání rozhraní API spolu s původní výzvou. Pokud například chcete získat výsledky hledání pouze z určitých certifikovaných zdrojů informací nebo webu, můžete tento kontext definovat v krocích vyhodnocení. Volitelné

Parametry vyžadované pro metriky

Parametry nakonfigurované ve vašem datovém assetu určují, jaké metriky můžete podle této tabulky vytvořit:

Metrika Otázka Odpověď Kontext
Koherence Požaduje se Požaduje se -
Plynulost Požaduje se Požaduje se -
Uzemnění Požaduje se Požadováno Požaduje se
Relevance Požaduje se Požadováno Požaduje se

Další informace o konkrétních požadavcích mapování dat pro každou metriku najdete v tématu Požadavky na metriky dotazů a odpovědí.

Nastavení monitorování pro tok výzvy

Pokud chcete nastavit monitorování pro aplikaci toku výzvy, musíte nejprve nasadit aplikaci toku výzvy s odvozováním shromažďování dat a pak můžete nakonfigurovat monitorování nasazené aplikace.

Nasazení aplikace toku výzvy s odvozováním shromažďování dat

V této části se dozvíte, jak nasadit tok výzvy s povoleným odvozováním shromažďování dat. Podrobné informace o nasazení toku výzvy najdete v tématu Nasazení toku pro odvozování v reálném čase.

  1. Přihlaste se k Azure AI Foundry.

  2. Pokud ještě nejste v projektu, vyberte ho.

  3. V levém navigačním panelu vyberte Tok výzvy.

  4. Vyberte tok výzvy, který jste vytvořili dříve.

    Poznámka:

    Tento článek předpokládá, že jste už vytvořili tok výzvy, který je připravený k nasazení. Pokud ho nemáte, přečtěte si článek Vývoj toku výzvy.

  5. Ověřte, že se tok úspěšně spustí a že jsou požadované vstupy a výstupy nakonfigurované pro metriky, které chcete vyhodnotit.

    Zadání minimálních požadovaných parametrů (otázek, vstupů a odpovědí/výstupů) poskytuje pouze dvě metriky: soudržnost a plynulost. Tok musíte nakonfigurovat, jak je popsáno v části Požadavky na metriky monitorování. V tomto příkladu se jako vstupy toku používá ( question Otázka) a chat_history (Kontext) a answer jako výstup toku (Odpověď).

  6. Výběrem možnosti Nasadit zahájíte nasazování toku.

    Snímek obrazovky s editorem toku výzvy s tlačítkem Nasadit

  7. V okně nasazení se ujistěte, že je povolená kolekce odvozování dat, která bez problémů shromáždí data odvozování vaší aplikace do služby Blob Storage. Tato shromažďování dat se vyžaduje pro monitorování.

    Snímek obrazovky se základními nastaveními v průvodci nasazením

  8. Pokračujte kroky v okně nasazení a dokončete upřesňující nastavení.

  9. Na stránce Kontrola zkontrolujte konfiguraci nasazení a vyberte Vytvořit pro nasazení toku.

    Snímek obrazovky se stránkou kontroly v průvodci nasazením se všemi dokončenými nastaveními

    Poznámka:

    Ve výchozím nastavení se do služby Blob Storage shromažďují všechny vstupy a výstupy nasazené aplikace toku výzvy. Při vyvolání nasazení uživateli se data shromažďují, aby je vaše monitorování používalo.

  10. Na stránce nasazení vyberte kartu Test a otestujte nasazení, abyste měli jistotu, že funguje správně.

    Snímek obrazovky se stránkou testu nasazení

    Poznámka:

    Monitorování vyžaduje, aby alespoň jeden datový bod pochází ze zdroje jiného než karty Test v nasazení. K odesílání ukázkových požadavků do nasazení doporučujeme použít rozhraní REST API dostupné na kartě Využití . Další informace o odesílání ukázkových požadavků do nasazení najdete v tématu Vytvoření online nasazení.

Konfigurace sledování

V této části se dozvíte, jak nakonfigurovat monitorování nasazené aplikace toku výzvy.

  1. V levém navigačním panelu přejděte do části Modely prostředků>+ koncové body.

  2. Vyberte nasazení toku výzvy, které jste vytvořili.

  3. V poli Povolit monitorování kvality generování vyberte Povolit.

    Snímek obrazovky se stránkou nasazení se zvýrazněnou kvalitou generování

  4. Začněte konfigurovat monitorování výběrem požadovaných metrik.

  5. Ověřte, že se názvy sloupců mapují z toku, jak je definováno v mapování názvů sloupců.

  6. Vyberte připojení a nasazení Azure OpenAI, které chcete použít k monitorování aplikace toku výzvy.

  7. Pokud chcete zobrazit další možnosti konfigurace, vyberte Upřesnit možnosti .

    Snímek obrazovky se sloupci mapovanými pro metriky monitorování

  8. Upravte vzorkovací frekvenci, prahové hodnoty pro nakonfigurované metriky a zadejte e-mailové adresy, které by měly dostávat výstrahy, když průměrné skóre pro danou metriku klesne pod prahovou hodnotu.

    Snímek obrazovky s rozšířenými možnostmi při mapování sloupců pro metriky monitorování

    Poznámka:

    Pokud vaše nasazení nemá povolené shromažďování dat, vytvoření monitorování umožní shromažďování odvozování dat do služby Azure Blob Storage, což bude trvat několik minut offline nasazení.

  9. Vyberte Vytvořit a vytvořte monitor.

Využití výsledků monitorování

Po vytvoření monitorování se bude každý den spouštět, aby vypočítal metriky využití a generování tokenů.

  1. Pokud chcete zobrazit výsledky monitorování, přejděte na kartu Monitorování (Preview) v rámci nasazení. Tady uvidíte přehled výsledků monitorování během vybraného časového intervalu. Výběr data můžete použít ke změně časového intervalu dat, která monitorujete. V tomto přehledu jsou k dispozici následující metriky:

    • Celkový počet požadavků: Celkový počet požadavků odeslaných do nasazení během vybraného časového intervalu.
    • Celkový počet tokenů: Celkový počet tokenů používaných nasazením během vybraného časového intervalu.
    • Počet tokenů výzvy: Počet výzev tokenů používaných nasazením během vybraného časového intervalu.
    • Počettokench
  2. Zobrazte metriky na kartě Využití tokenu (tato karta je ve výchozím nastavení vybraná). Tady můžete zobrazit využití tokenu vaší aplikace v průběhu času. Můžete také zobrazit distribuci tokenů výzvy a dokončení v průběhu času. Obor spojnice trendu můžete změnit tak, aby monitoruje všechny tokeny v celé aplikaci nebo použití tokenu pro konkrétní nasazení (například gpt-4) používané v rámci vaší aplikace.

    Snímek obrazovky znázorňující využití tokenu na stránce monitorování nasazení

  3. Přejděte na kartu Kvalita generování a sledujte kvalitu aplikace v průběhu času. V časovém diagramu se zobrazují následující metriky:

    • Počet porušení: Počet porušení pro danou metriku (například Fluency) je součet porušení ve vybraném časovém intervalu. Pokud vypočítaná hodnota pro metriku klesne pod nastavenou prahovou hodnotu, dojde k porušení metriky při výpočtu (výchozí hodnota je denní).
    • Průměrné skóre: Průměrné skóre pro danou metriku (například Fluency) je součet skóre pro všechny instance (nebo požadavky) vydělený počtem instancí (nebo požadavků) v průběhu vybraného časového intervalu.

    Na kartě Porušení kvality generování se zobrazuje míra porušení ve vybraném časovém intervalu. Míra porušení je počet porušení rozdělených celkovým počtem možných porušení. V nastavení můžete upravit prahové hodnoty metrik. Ve výchozím nastavení se metriky počítají každý den; tuto frekvenci lze také upravit v nastavení.

    Snímek obrazovky znázorňující spojnici trendu kvality generování na stránce monitorování nasazení

  4. Na kartě Monitorování (Preview) můžete také zobrazit komplexní tabulku všech ukázkových požadavků odeslaných do nasazení během vybraného časového intervalu.

    Poznámka:

    Monitorování nastavuje výchozí vzorkovací frekvenci na 10 %. To znamená, že pokud se do vašeho nasazení odešle 100 požadavků, 10 se vzorkuje a použije se k výpočtu metrik kvality generování. Vzorkovací frekvenci můžete upravit v nastavení.

    Snímek obrazovky znázorňující tlačítko trasování pro kvalitu generování

  5. Výběrem tlačítka Trasování na pravé straně řádku v tabulce zobrazíte podrobnosti trasování pro daný požadavek. Toto zobrazení poskytuje komplexní podrobnosti trasování pro požadavek vaší aplikace.

    Snímek obrazovky zobrazující informace o trasování

  6. Zavřete zobrazení trasování.

  7. Přejděte na kartu Provozní a zobrazte provozní metriky pro nasazení téměř v reálném čase. Podporujeme následující provozní metriky:

    • Počet požadavků
    • Latence
    • Míra chyb

    Snímek obrazovky s kartou Provozní nasazení

Výsledky na kartě Monitorování (Preview) vašeho nasazení poskytují přehledy, které vám pomůžou proaktivně zlepšit výkon aplikace toku výzvy.

Pokročilá konfigurace monitorování se sadou SDK v2

Monitorování také podporuje pokročilé možnosti konfigurace pomocí sady SDK v2. Podporovány jsou následující scénáře:

Povolení monitorování využití tokenů

Pokud vás zajímá jenom povolení monitorování využití tokenů pro nasazenou aplikaci toku výzvy, můžete přizpůsobit následující skript vašemu scénáři:

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationTokenStatisticsSignal,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"

# These variables can be renamed but it is not necessary
monitor_name ="gen_ai_monitor_tokens" 
defaulttokenstatisticssignalname ="token-usage-signal" 

# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Create an instance of token statistic signal
token_statistic_signal = GenerationTokenStatisticsSignal()

monitoring_signals = {
    defaulttokenstatisticssignalname: token_statistic_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

Povolení monitorování pro kvalitu generování

Pokud vás zajímá jenom povolení monitorování kvality generování pro nasazenou aplikaci toku výzvy, můžete přizpůsobit následující skript vašemu scénáři:

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationSafetyQualityMonitoringMetricThreshold,
    GenerationSafetyQualitySignal,
    BaselineDataRange,
    LlmData,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
aoai_deployment_name ="INSERT YOUR AOAI DEPLOYMENT NAME"
aoai_connection_name = "INSERT YOUR AOAI CONNECTION NAME"

# These variables can be renamed but it is not necessary
app_trace_name = "app_traces"
app_trace_Version = "1"
monitor_name ="gen_ai_monitor_generation_quality" 
defaultgsqsignalname ="gsq-signal"

# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Set thresholds for passing rate (0.7 = 70%)
aggregated_groundedness_pass_rate = 0.7
aggregated_relevance_pass_rate = 0.7
aggregated_coherence_pass_rate = 0.7
aggregated_fluency_pass_rate = 0.7

# Create an instance of gsq signal
generation_quality_thresholds = GenerationSafetyQualityMonitoringMetricThreshold(
    groundedness = {"aggregated_groundedness_pass_rate": aggregated_groundedness_pass_rate},
    relevance={"aggregated_relevance_pass_rate": aggregated_relevance_pass_rate},
    coherence={"aggregated_coherence_pass_rate": aggregated_coherence_pass_rate},
    fluency={"aggregated_fluency_pass_rate": aggregated_fluency_pass_rate},
)
input_data = Input(
    type="uri_folder",
    path=f"{endpoint_name}-{deployment_name}-{app_trace_name}:{app_trace_Version}",
)
data_window = BaselineDataRange(lookback_window_size="P7D", lookback_window_offset="P0D")
production_data = LlmData(
    data_column_names={"prompt_column": "question", "completion_column": "answer", "context_column": "context"},
    input_data=input_data,
    data_window=data_window,
)

gsq_signal = GenerationSafetyQualitySignal(
    connection_id=f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{project_name}/connections/{aoai_connection_name}",
    metric_thresholds=generation_quality_thresholds,
    production_data=[production_data],
    sampling_rate=1.0,
    properties={
        "aoai_deployment_name": aoai_deployment_name,
        "enable_action_analyzer": "false",
        "azureml.modelmonitor.gsq_thresholds": '[{"metricName":"average_fluency","threshold":{"value":4}},{"metricName":"average_coherence","threshold":{"value":4}}]',
    },
)

monitoring_signals = {
    defaultgsqsignalname: gsq_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

Po vytvoření monitorování ze sady SDK můžete výsledky monitorování využívat na portálu Azure AI Foundry.

  • Přečtěte si další informace o tom, co můžete dělat v Azure AI Foundry.
  • Získejte odpovědi na nejčastější dotazy v článku Nejčastější dotazy k Azure AI.