Rychlý start: Použití vícevariátové Detektor anomálií klientské knihovny

Důležité

Od 20. září 2023 nebudete moct vytvářet nové Detektor anomálií prostředky. Služba Detektor anomálií se 1. října 2026 vyřadí z provozu.

Začínáme s Detektor anomálií multivariate klientské knihovny pro jazyk C#. Podle těchto kroků nainstalujte balíček a začněte používat algoritmy poskytované službou. Nová rozhraní API detektoru anomálií umožňují vývojářům snadno integrovat pokročilou AI pro detekci anomálií ze skupin metrik bez nutnosti znalostí strojového učení nebo označených dat. Závislosti a vzájemné korelace mezi různými signály se automaticky počítají jako klíčové faktory. To vám pomůže proaktivně chránit složité systémy před selháními.

Pomocí Detektor anomálií vícevariátové klientské knihovny pro jazyk C# můžete:

  • Detekce anomálií na úrovni systému ze skupiny časových řad
  • Když vám žádná jednotlivá časová řada moc neřekne a budete se muset podívat na všechny signály, abyste zjistili problém.
  • Predikativní údržba drahých fyzických prostředků s desítkami až stovkami různých typů senzorů, které měří různé aspekty stavu systému.

Referenční dokumentace ke | knihovně – Balíček zdrojového kódu | knihovny (NuGet)

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Aktuální verze .NET Core
  • Jakmile budete mít předplatné Azure, vytvořte na webu Azure Portal prostředek Detektor anomálií, abyste získali klíč a koncový bod. Počkejte, až se nasazení nasadí, a vyberte tlačítko Přejít k prostředku .
    • K připojení aplikace k rozhraní API Detektor anomálií budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložte do kódu níže v rychlém startu. K vyzkoušení služby můžete použít cenovou úroveňF0 Free a později upgradovat na placenou úroveň pro produkční prostředí.

Nastavení

Vytvoření účtu úložiště

Multivariát Detektor anomálií vyžaduje uložení ukázkového souboru ve službě Azure Blob Storage.

  1. Vytvořte účet azure Storage.
  2. Přejděte do Řízení přístupu (IAM) a vyberte přidat přiřazení role.
  3. Vyhledejte roli Čtenář dat objektů blob služby Storage, zvýrazněte tento typ účtu a pak vyberte Další.
  4. Vyberte přiřadit přístup ke spravované identitě a vyberte Členy a pak zvolte Detektor anomálií prostředek, který jste vytvořili dříve, a pak vyberte Zkontrolovat a přiřadit.

Tato konfigurace může být někdy trochu matoucí, pokud máte potíže, doporučujeme projít si naši ukázku poznámkového bloku Jupyter s více proměnnými, která vás provede podrobnějším postupem.

Stažení ukázkových dat

Tento rychlý start používá jeden soubor pro ukázková data sample_data_5_3000.csv. Tento soubor si můžete stáhnout z našich ukázkových dat GitHubu.

Ukázková data si můžete stáhnout také spuštěním následujícího příkazu:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Nahrání ukázkových dat do účtu úložiště

  1. Přejděte do svého účtu úložiště, vyberte Kontejnery a vytvořte nový kontejner.
  2. Vyberte Nahrát a nahrát sample_data_5_3000.csv.
  3. Vyberte data, která jste nahráli, a zkopírujte adresu URL objektu blob, protože ji potřebujete přidat do ukázky kódu v několika krocích.

Načtení klíče a koncového bodu

K úspěšnému volání služby Detektor anomálií potřebujete následující hodnoty:

Název proměnné Hodnota
ANOMALY_DETECTOR_ENDPOINT Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Příklad koncového bodu: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Hodnotu klíče rozhraní API najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Použít můžete předponu KEY1 nebo KEY2.

Na webu Azure Portal přejděte ke svému prostředku. Koncový bod a klíče najdete v části Správa prostředků. Zkopírujte koncový bod i přístupový klíč, jak potřebujete pro ověřování volání rozhraní API. Použít můžete předponu KEY1 nebo KEY2. Vždy mít dva klíče vám umožní bezpečně otáčet a znovu vygenerovat klíče, aniž by to způsobilo přerušení služeb.

Vytvoření proměnných prostředí

Vytvořte a přiřaďte trvalé proměnné prostředí pro klíč a koncový bod.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Vytvoření nové aplikace .NET Core

V okně konzoly (například cmd, PowerShell nebo Bash) pomocí dotnet new příkazu vytvořte novou konzolovou aplikaci s názvem anomaly-detector-quickstart-multivariate. Tento příkaz vytvoří jednoduchý projekt Hello World s jedním zdrojovým souborem C#: Program.cs.

dotnet new console -n anomaly-detector-quickstart-multivariate

Změňte adresář na nově vytvořenou složku aplikace. Aplikaci můžete sestavit pomocí následujících:

dotnet build

Výstup sestavení by neměl obsahovat žádná upozornění ani chyby.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Instalace klientské knihovny

V adresáři aplikace nainstalujte klientskou knihovnu Detektor anomálií pro .NET pomocí následujícího příkazu:

dotnet add package Azure.AI.AnomalyDetector --prerelease

V adresáři projektu otevřete soubor program.cs a nahraďte následujícím kódem:

using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;

internal class Program
{
    private static void Main(string[] args)
    {
        string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT"); 
        string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
        string datasource = "Path-to-sample-file-in-your-storage-account";  // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
        Console.WriteLine(endpoint);
        var endpointUri = new Uri(endpoint);
        var credential = new AzureKeyCredential(apiKey);

        //create client
        AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

        // train
        TimeSpan offset = new TimeSpan(0);
        DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
        DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
        string model_id = null;
        try
        {
            model_id = TrainModel(client, datasource, start_time, end_time);

            // detect
            end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
            MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
            if (result != null)
            {
                Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
                Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
                Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
                Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
            }

            // delete
            DeleteModel(client, model_id);
        }
        catch (Exception e)
        {
            string msg = string.Format("Multivariate error. {0}", e.Message);
            Console.WriteLine(msg);
            throw;
        }

        int GetModelNumber(AnomalyDetectorClient client)
        {
            int model_number = 0;
            foreach (var multivariateModel in client.GetMultivariateModels())
            {
                model_number++;
            }
            return model_number;
        }

        string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
        {
            try
            {
                Console.WriteLine("Training new model...");

                Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));

                ModelInfo request = new ModelInfo(datasource, start_time, end_time);
                request.SlidingWindow = 200;

                Console.WriteLine("Training new model...(it may take a few minutes)");
                AnomalyDetectionModel response = client.TrainMultivariateModel(request);
                string trained_model_id = response.ModelId;
                Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));

                // Wait until the model is ready. It usually takes several minutes
                ModelStatus? model_status = null;
                int tryout_count = 1;
                response = client.GetMultivariateModel(trained_model_id);
                while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
                {
                    Thread.Sleep(1000);
                    response = client.GetMultivariateModel(trained_model_id);
                    model_status = response.ModelInfo.Status;
                    Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
                    tryout_count += 1;
                };

                if (model_status == ModelStatus.Ready)
                {
                    Console.WriteLine("Creating model succeeds.");
                    Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
                    return trained_model_id;
                }

                if (model_status == ModelStatus.Failed)
                {
                    Console.WriteLine("Creating model failed.");
                    Console.WriteLine("Errors:");
                    try
                    {
                        Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
                    }
                }
                return null;
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("Train error. {0}", e.Message));
                throw;
            }
        }

        MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
        {
            try
            {
                Console.WriteLine("Start batch detect...");
                MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);

                Console.WriteLine("Start batch detection, this might take a few minutes...");
                MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
                string result_id = response.ResultId;
                Console.WriteLine(string.Format("result id is: {0}", result_id));

                // get detection result
                MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
                MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
                int tryout_count = 0;
                while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
                {
                    Thread.Sleep(1000);
                    resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
                    result_status = resultResponse.Summary.Status;
                    Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
                    Console.Out.Flush();
                }

                if (result_status == MultivariateBatchDetectionStatus.Failed)
                {
                    Console.WriteLine("Detection failed.");
                    Console.WriteLine("Errors:");
                    try
                    {
                        Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
                    }
                    return null;
                }
                return resultResponse;
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("Detection error. {0}", e.Message));
                throw;
            }
        }

        void DeleteModel(AnomalyDetectorClient client, string model_id)
        {
            client.DeleteMultivariateModel(model_id);
            int model_number = GetModelNumber(client);
            Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
        }
 
    }
}

Spuštění aplikace

Spusťte aplikaci příkazem dotnet run z adresáře aplikace.

dotnet run

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služeb Azure AI, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků odstraníte také všechny ostatní prostředky přidružené ke skupině prostředků.

Další kroky

Začínáme s Detektor anomálií multivariate klientské knihovny pro JavaScript. Podle těchto kroků nainstalujte balíček a začněte používat algoritmy poskytované službou. Nová rozhraní API detektoru anomálií umožňují vývojářům snadno integrovat pokročilou AI pro detekci anomálií ze skupin metrik bez nutnosti znalostí strojového učení nebo označených dat. Závislosti a vzájemné korelace mezi různými signály se automaticky počítají jako klíčové faktory. To vám pomůže proaktivně chránit složité systémy před selháními.

Pomocí Detektor anomálií vícevariátové klientské knihovny pro JavaScript můžete:

  • Detekce anomálií na úrovni systému ze skupiny časových řad
  • Když vám žádná jednotlivá časová řada moc neřekne a budete se muset podívat na všechny signály, abyste zjistili problém.
  • Predikativní údržba drahých fyzických prostředků s desítkami až stovkami různých typů senzorů, které měří různé aspekty stavu systému.

Referenční dokumentace | ke knihovně – Balíček zdrojového kódu | knihovny (npm) | Ukázkový kód

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Aktuální verze Node.js
  • Jakmile budete mít předplatné Azure, vytvořte na webu Azure Portal prostředek Detektor anomálií, abyste získali klíč a koncový bod. Počkejte, až se nasazení nasadí, a vyberte tlačítko Přejít k prostředku .
    • K připojení aplikace k rozhraní DETEKTOR ANOMÁLIÍ API budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložíte do kódu níže v rychlém startu. K vyzkoušení služby můžete použít cenovou úroveňF0 Free a později upgradovat na placenou úroveň pro produkční prostředí.

Nastavení

Vytvoření nové aplikace Node.js

V okně konzoly (například cmd, PowerShell nebo Bash) vytvořte pro vaši aplikaci nový adresář a přejděte do něj.

mkdir myapp && cd myapp

Spuštěním příkazu npm init vytvoříte aplikaci uzlu se souborem package.json.

npm init

Vytvořte soubor s názvem index.js a naimportujte následující knihovny:

'use strict'

const fs = require('fs');
const parse = require("csv-parse/lib/sync");
const { AnomalyDetectorClient } = require('@azure/ai-anomaly-detector');
const { AzureKeyCredential } = require('@azure/core-auth');

Vytvořte proměnné koncového bodu a klíče Azure vašeho prostředku. Vytvořte další proměnnou pro ukázkový datový soubor.

Poznámka:

Vždy budete mít možnost použít jeden ze dvou klíčů. To je povolení obměně zabezpečených klíčů. Pro účely tohoto rychlého startu použijte první klíč.

const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Důležité

Nezapomeňte klíč z kódu odebrat, až to budete hotovi, a nikdy ho veřejně neposílejte. V produkčním prostředí použijte bezpečný způsob ukládání přihlašovacích údajů a přístupu k vašim přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v článku zabezpečení služeb Azure AI.

Pokud chcete použít Detektor anomálií vícevariátová rozhraní API, musíte nejprve trénovat vlastní modely. Trénovací data jsou sada více časových řad, které splňují následující požadavky:

Každá časová řada by měla být soubor CSV se dvěma (a pouze dvěma) sloupci, "timestamp" a "value" (vše malými písmeny) jako řádek záhlaví. Hodnoty "časového razítka" by měly odpovídat normě ISO 8601; Hodnota může být celá čísla nebo desetinná místa s libovolným počtem desetinných míst. Příklad:

časové razítko hodnota
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3,6
2019-04-01T00:02:00Z 4
... ...

Každý soubor CSV by měl být pojmenován za jinou proměnnou, která se použije pro trénování modelu. Například "temperature.csv" a "humidity.csv". Všechny soubory CSV by se měly zazipovat do jednoho souboru ZIP bez jakýchkoli podsložek. Soubor ZIP může mít jakýkoli název, který chcete. Soubor ZIP by se měl nahrát do úložiště objektů blob v Azure. Jakmile vygenerujete adresu URL SAS objektu blob (sdílené přístupové podpisy) pro soubor ZIP, můžete ho použít k trénování. V tomto dokumentu se dozvíte, jak vygenerovat adresy URL SAS ze služby Azure Blob Storage.

Instalace klientské knihovny

ms-rest-azure Nainstalujte balíčky NPM.azure-ai-anomalydetector Knihovna csv-parse se také používá v tomto rychlém startu:

npm install @azure/ai-anomaly-detector csv-parse

Soubor vaší aplikace package.json se aktualizuje o závislosti.

Příklady kódu

Tyto fragmenty kódu ukazují, jak pomocí klientské knihovny Detektor anomálií pro Node.js provést následující akce:

Ověření klienta

Vytvořte instanci objektu AnomalyDetectorClient pomocí koncového bodu a přihlašovacích údajů.

const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));

Učení modelu

Vytvoření výsledku modelu

Nejprve musíme vytvořit požadavek modelu. Ujistěte se, že počáteční a koncový čas odpovídá vašemu zdroji dat.

const Modelrequest = {
  source: data_source,
  startTime: new Date(2021,0,1,0,0,0),
  endTime: new Date(2021,0,2,12,0,0),
  slidingWindow:200
};

Trénování nového modelu

Požadavek modelu předáte metodě klienta trainMultivariateModel Detektor anomálií.

console.log("Training a new model...")
const train_response = await client.trainMultivariateModel(Modelrequest)
const model_id = train_response.location?.split("/").pop() ?? ""
console.log("New model ID: " + model_id)

Pokud chcete zkontrolovat, jestli je trénování modelu dokončené, můžete sledovat stav modelu:

let model_response = await client.getMultivariateModel(model_id);
let model_status = model_response.modelInfo.status;

while (model_status != 'READY' && model_status != 'FAILED'){
  await sleep(10000).then(() => {});
  model_response = await client.getMultivariateModel(model_id);
  model_status = model_response.modelInfo.status;
}

if (model_status == 'FAILED') {
  console.log("Training failed.\nErrors:");
  for (let error of model_response.modelInfo?.errors ?? []) {
    console.log("Error code: " + error.code + ". Message: " + error.message);
  }
}

console.log("TRAINING FINISHED.");

Detekce anomálií

Pomocí funkcí detectAnomaly můžete getDectectionResult určit, jestli ve zdroji dat existují nějaké anomálie.

console.log("Start detecting...");
const detect_request = {
  source: data_source,
  startTime: new Date(2021,0,2,12,0,0),
  endTime: new Date(2021,0,3,0,0,0)
};
const result_header = await client.detectAnomaly(model_id, detect_request);
const result_id = result_header.location?.split("/").pop() ?? "";
let result = await client.getDetectionResult(result_id);
let result_status = result.summary.status;

while (result_status != 'READY' && result_status != 'FAILED'){
  await sleep(2000).then(() => {});
  result = await client.getDetectionResult(result_id);
  result_status = result.summary.status;
}

if (result_status == 'FAILED') {
  console.log("Detection failed.\nErrors:");
  for (let error of result.summary.errors ?? []) {
    console.log("Error code: " + error.code + ". Message: " + error.message)
  }
}
console.log("Result status: " + result_status);
console.log("Result Id: " + result.resultId);

Export modelu

Poznámka:

Příkaz pro export je určený k povolení spouštění Detektor anomálií vícevariát modelů v kontejnerizovaném prostředí. Tato možnost není aktuálně podporována pro vícevariát, ale podpora bude přidána v budoucnu.

K exportu exportModel natrénovaného modelu použijte funkci.

const export_result = await client.exportModel(model_id)
const model_path = "model.zip"
const destination = fs.createWriteStream(model_path)
export_result.readableStreamBody?.pipe(destination)
console.log("New model has been exported to "+model_path+".")

Odstranění modelu

K odstranění existujícího modelu, který je k dispozici pro aktuální prostředek, použijte deleteMultivariateModel funkci.

client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")

Spuštění aplikace

Před spuštěním aplikace může být užitečné zkontrolovat kód proti úplnému vzorovém kódu.

Spusťte aplikaci pomocí příkazu node pro soubor rychlého startu.

node index.js

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služeb Azure AI, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků odstraníte také všechny ostatní prostředky přidružené ke skupině prostředků.

Další kroky

Referenční dokumentace ke |knihovně – Balíček zdrojového kódu | knihovny (PyPi) |Vyhledání ukázkového kódu na GitHubu

Začínáme s Detektor anomálií multivariate klientskou knihovnou pro Python. Podle těchto kroků nainstalujte balíček a začněte používat algoritmy poskytované službou. Nová rozhraní API detektoru anomálií umožňují vývojářům snadno integrovat pokročilou AI pro detekci anomálií ze skupin metrik bez nutnosti znalostí strojového učení nebo označených dat. Závislosti a vzájemné korelace mezi různými signály se automaticky počítají jako klíčové faktory. To vám pomůže proaktivně chránit složité systémy před selháními.

Pomocí Detektor anomálií vícevariátové klientské knihovny pro Python můžete:

  • Detekce anomálií na úrovni systému ze skupiny časových řad
  • Když vám žádná jednotlivá časová řada moc neřekne a budete se muset podívat na všechny signály, abyste zjistili problém.
  • Predikativní údržba drahých fyzických prostředků s desítkami až stovkami různých typů senzorů, které měří různé aspekty stavu systému.

Požadavky

Nastavení

Nainstalujte klientskou knihovnu. Klientskou knihovnu můžete nainstalovat pomocí následujících:

pip install --upgrade azure.ai.anomalydetector

Vytvoření účtu úložiště

Multivariát Detektor anomálií vyžaduje uložení ukázkového souboru ve službě Azure Blob Storage.

  1. Vytvořte účet azure Storage.
  2. Přejděte do Řízení přístupu (IAM) a vyberte přidat přiřazení role.
  3. Vyhledejte roli Čtenář dat objektů blob služby Storage, zvýrazněte tento typ účtu a pak vyberte Další.
  4. Vyberte přiřadit přístup ke spravované identitě a vyberte Členy a pak zvolte Detektor anomálií prostředek, který jste vytvořili dříve, a pak vyberte Zkontrolovat a přiřadit.

Tato konfigurace může být někdy trochu matoucí, pokud máte potíže, doporučujeme projít si naši ukázku poznámkového bloku Jupyter s více proměnnými, která vás provede podrobnějším postupem.

Stažení ukázkových dat

Tento rychlý start používá jeden soubor pro ukázková data sample_data_5_3000.csv. Tento soubor si můžete stáhnout z našich ukázkových dat GitHubu.

Ukázková data si můžete stáhnout také spuštěním následujícího příkazu:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Nahrání ukázkových dat do účtu úložiště

  1. Přejděte do svého účtu úložiště, vyberte Kontejnery a vytvořte nový kontejner.
  2. Vyberte Nahrát a nahrát sample_data_5_3000.csv.
  3. Vyberte data, která jste nahráli, a zkopírujte adresu URL objektu blob, protože ji potřebujete přidat do ukázky kódu v několika krocích.

Načtení klíče a koncového bodu

K úspěšnému volání služby Detektor anomálií potřebujete následující hodnoty:

Název proměnné Hodnota
ANOMALY_DETECTOR_ENDPOINT Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Příklad koncového bodu: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Hodnotu klíče rozhraní API najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Použít můžete předponu KEY1 nebo KEY2.

Na webu Azure Portal přejděte ke svému prostředku. Koncový bod a klíče najdete v části Správa prostředků. Zkopírujte koncový bod i přístupový klíč, jak potřebujete pro ověřování volání rozhraní API. Použít můžete předponu KEY1 nebo KEY2. Vždy mít dva klíče vám umožní bezpečně otáčet a znovu vygenerovat klíče, aniž by to způsobilo přerušení služeb.

Vytvoření proměnných prostředí

Vytvořte a přiřaďte trvalé proměnné prostředí pro klíč a koncový bod.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Vytvoření nové aplikace v Pythonu

  1. Vytvořte nový soubor Pythonu s názvem sample_multivariate_detect.py. Pak ho otevřete v preferovaném editoru nebo integrovaném vývojovém prostředí (IDE).

  2. Obsah souboru sample_multivariate_detect.py nahraďte následujícím kódem. Je třeba upravit cesty pro proměnné blob_url.

import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *

SUBSCRIPTION_KEY =  os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']

ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))

time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account"  # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv

train_body = ModelInfo(
    data_source=blob_url,
    start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
    end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
    data_schema="OneTable",
    display_name="sample",
    sliding_window=200,
    align_policy=AlignPolicy(
        align_mode=AlignMode.OUTER,
        fill_n_a_method=FillNAMethod.LINEAR,
        padding_value=0,
    ),
)

batch_inference_body = MultivariateBatchDetectionOptions(
       data_source=blob_url,
       top_contributor_count=10,
       start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
       end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
   )


print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))

## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None

while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
    model = ad_client.get_multivariate_model(model_id)
    print(model)
    model_status = model.model_info.status
    print("Model is {}".format(model_status))
    time.sleep(30)
if model_status == ModelStatus.READY:
    print("Done.\n--------------------")
    # Return the latest model id

# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id

# Get results (may need a few seconds)
r = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")

while r.summary.status != MultivariateBatchDetectionStatus.READY and r.summary.status != MultivariateBatchDetectionStatus.FAILED and r.summary.status !=MultivariateBatchDetectionStatus.CREATED:
    anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
    print("Detection is {}".format(r.summary.status))
    time.sleep(5)
    
   
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))

# See detailed inference result
for r in anomaly_results.results:
    print(
        "timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
            r.timestamp,
            r.value.is_anomaly,
            r.value.score,
            r.value.severity,
            len(r.value.interpretation) if r.value.is_anomaly else 0,
        )
    )
    if r.value.interpretation:
        for contributor in r.value.interpretation:
            print(
                "\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
                    contributor.variable, contributor.contribution_score
                )
            )

Spuštění aplikace

Spusťte aplikaci pomocí příkazu python pro soubor rychlého startu.

python sample_multivariate_detect.py

Výstup

10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID:	 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status:	 READY
Result length:	 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0    , anomaly score: 0.1770, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0    , anomaly score: 0.3446, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0    , anomaly score: 0.2397, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0    , anomaly score: 0.1270, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0    , anomaly score: 0.3321, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0    , anomaly score: 0.4053, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0    , anomaly score: 0.4371, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1    , anomaly score: 0.6615, severity: 0.3850, contributor count: 5   
	contributor variable: series_3  , contributor score: 0.2939
	contributor variable: series_1  , contributor score: 0.2834
	contributor variable: series_4  , contributor score: 0.2329
	contributor variable: series_0  , contributor score: 0.1543
	contributor variable: series_2  , contributor score: 0.0354

Výsledky výstupu byly zkráceny kvůli stručnosti.

Vyčištění prostředků

Pokud chcete vyčistit a odebrat prostředek Detektor anomálií, můžete prostředek nebo skupinu prostředků odstranit. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené. Můžete také zvážit odstranění proměnných prostředí, které jste vytvořili, pokud už je nechcete používat.

Začínáme s Detektor anomálií multivariate klientské knihovny pro Javu Pomocí těchto kroků nainstalujte balíček pomocí algoritmů poskytovaných službou. Nová rozhraní API detektoru anomálií umožňují vývojářům snadno integrovat pokročilou AI pro detekci anomálií ze skupin metrik bez nutnosti znalostí strojového učení nebo označených dat. Závislosti a vzájemné korelace mezi různými signály se automaticky počítají jako klíčové faktory. To vám pomůže proaktivně chránit složité systémy před selháními.

Pomocí Detektor anomálií vícevariátové klientské knihovny pro Javu můžete:

  • Detekce anomálií na úrovni systému ze skupiny časových řad
  • Když vám žádná jednotlivá časová řada moc neřekne a budete se muset podívat na všechny signály, abyste zjistili problém.
  • Predikativní údržba drahých fyzických prostředků s desítkami až stovkami různých typů senzorů, které měří různé aspekty stavu systému.

Referenční dokumentace ke | knihovně – balíček zdrojového kódu | knihovny (Maven) | – ukázkový kód

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Aktuální verze sady Java Development Kit(JDK)
  • Nástroj sestavení Gradle nebo jiný správce závislostí.
  • Jakmile budete mít předplatné Azure, vytvořte na webu Azure Portal prostředek Detektor anomálií, abyste získali klíč a koncový bod. Počkejte, až se nasazení nasadí, a vyberte tlačítko Přejít k prostředku .
    • K připojení aplikace k rozhraní DETEKTOR ANOMÁLIÍ API budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložíte do kódu níže v rychlém startu. K vyzkoušení služby můžete použít cenovou úroveňF0 Free a později upgradovat na placenou úroveň pro produkční prostředí.

Nastavení

Vytvoření nového projektu Gradle

V tomto rychlém startu se používá správce závislostí Gradle. Další informace o klientské knihovně najdete v centrálním úložišti Maven.

V okně konzoly (například cmd, PowerShell nebo Bash) vytvořte pro vaši aplikaci nový adresář a přejděte do něj.

mkdir myapp && cd myapp

gradle init Spusťte příkaz z pracovního adresáře. Tento příkaz vytvoří základní soubory sestavení pro Gradle, včetně build.gradle.kts , které se používají za běhu k vytvoření a konfiguraci aplikace.

gradle init --type basic

Po zobrazení výzvy k výběru DSL vyberte Kotlin.

Instalace klientské knihovny

Vyhledejte build.gradle.kts a otevřete ho pomocí preferovaného integrovaného vývojového prostředí (IDE) nebo textového editoru. Pak zkopírujte tuto konfiguraci sestavení. Nezapomeňte zahrnout závislosti projektu.

dependencies {
    compile("com.azure:azure-ai-anomalydetector")
}

Vytvoření souboru Java

Vytvořte složku pro ukázkovou aplikaci. Z pracovního adresáře spusťte následující příkaz:

mkdir -p src/main/java

Přejděte do nové složky a vytvořte soubor s názvem MetricsAdvisorQuickstarts.java. Otevřete ho v preferovaném editoru nebo integrovaném vývojovém prostředí a přidejte následující import příkazy:

package com.azure.ai.anomalydetector;

import com.azure.ai.anomalydetector.models.*;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.*;
import com.azure.core.http.policy.*;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.PagedResponse;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.StreamResponse;
import com.azure.core.util.Context;
import reactor.core.publisher.Flux;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

Vytvořte proměnné koncového bodu a klíče Azure vašeho prostředku. Vytvořte další proměnnou pro ukázkový datový soubor.

Poznámka:

Vždy budete mít možnost použít jeden ze dvou klíčů. To je povolení obměně zabezpečených klíčů. Pro účely tohoto rychlého startu použijte první klíč.

String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";

Důležité

Nezapomeňte klíč z kódu odebrat, až to budete hotovi, a nikdy ho veřejně neposílejte. V produkčním prostředí použijte bezpečný způsob ukládání přihlašovacích údajů a přístupu k vašim přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v článku zabezpečení služeb Azure AI.

Pokud chcete použít Detektor anomálií vícevariátová rozhraní API, musíte nejprve trénovat vlastní modely. Trénovací data jsou sada více časových řad, které splňují následující požadavky:

Každá časová řada by měla být soubor CSV se dvěma (a pouze dvěma) sloupci, "timestamp" a "value" (vše malými písmeny) jako řádek záhlaví. Hodnoty "časového razítka" by měly odpovídat normě ISO 8601; Hodnota může být celá čísla nebo desetinná místa s libovolným počtem desetinných míst. Příklad:

časové razítko hodnota
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3,6
2019-04-01T00:02:00Z 4
... ...

Každý soubor CSV by měl být pojmenován za jinou proměnnou, která se použije pro trénování modelu. Například "temperature.csv" a "humidity.csv". Všechny soubory CSV by se měly zazipovat do jednoho souboru ZIP bez jakýchkoli podsložek. Soubor ZIP může mít jakýkoli název, který chcete. Soubor ZIP by se měl nahrát do úložiště objektů blob v Azure. Jakmile vygenerujete adresu URL SAS objektu blob (sdílené přístupové podpisy) pro soubor ZIP, můžete ho použít k trénování. V tomto dokumentu se dozvíte, jak vygenerovat adresy URL SAS ze služby Azure Blob Storage.

Příklady kódu

Tyto fragmenty kódu ukazují, jak pomocí klientské knihovny Detektor anomálií pro Node.js provést následující akce:

Ověření klienta

Vytvořte instanci objektu anomalyDetectorClient pomocí koncového bodu a přihlašovacích údajů.

HttpHeaders headers = new HttpHeaders()
    .put("Accept", ContentType.APPLICATION_JSON);

HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
 new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);

HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
    .policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);

AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
    .pipeline(httpPipeline)
    .endpoint(endpoint)
    .httpLogOptions(httpLogOptions)
    .buildClient();

Učení modelu

Vytvoření výsledku modelu a trénování modelu

Nejprve musíme vytvořit požadavek modelu. Ujistěte se, že počáteční a koncový čas odpovídá vašemu zdroji dat.

Abychom mohli použít Detektor anomálií vícevariát rozhraní API, musíme před použitím detekce vytrénovat vlastní model. Data použitá pro trénování jsou dávka časových řad, každá časová řada by měla být v souboru CSV s pouze dvěma sloupci, "timestamp" a "value"(názvy sloupců by měly být úplně stejné). Každý soubor CSV by měl být pojmenován za každou proměnnou časové řady. Všechny časové řady by se měly zazipovat do jednoho souboru ZIP a nahrát je do úložiště objektů blob v Azure a není potřeba název souboru ZIP. Případně můžete do souboru ZIP zahrnout další soubor meta.json, pokud chcete, aby název proměnné byl jiný než název souboru ZIP. Jakmile vygenerujeme adresu URL SAS objektu blob (sdílené přístupové podpisy), můžeme k trénování použít adresu URL souboru ZIP.

Path path = Paths.get("test-data.csv");
List<String> requestData = Files.readAllLines(path);
List<TimeSeriesPoint> series = requestData.stream()
    .map(line -> line.trim())
    .filter(line -> line.length() > 0)
    .map(line -> line.split(",", 2))
    .filter(splits -> splits.length == 2)
    .map(splits -> {
        TimeSeriesPoint timeSeriesPoint = new TimeSeriesPoint();
        timeSeriesPoint.setTimestamp(OffsetDateTime.parse(splits[0]));
        timeSeriesPoint.setValue(Float.parseFloat(splits[1]));
        return timeSeriesPoint;
    })
    .collect(Collectors.toList());

Integer window = 28;
AlignMode alignMode = AlignMode.OUTER;
FillNAMethod fillNAMethod = FillNAMethod.LINEAR;
Integer paddingValue = 0;
AlignPolicy alignPolicy = new AlignPolicy()
                                .setAlignMode(alignMode)
                                .setFillNAMethod(fillNAMethod)
                                .setPaddingValue(paddingValue);
String source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
OffsetDateTime startTime = OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
OffsetDateTime endTime = OffsetDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneOffset.UTC);
String displayName = "Devops-MultiAD";

ModelInfo request = new ModelInfo()
                        .setSlidingWindow(window)
                        .setAlignPolicy(alignPolicy)
                        .setSource(source)
                        .setStartTime(startTime)
                        .setEndTime(endTime)
                        .setDisplayName(displayName);
TrainMultivariateModelResponse trainMultivariateModelResponse = anomalyDetectorClient.trainMultivariateModelWithResponse(request, Context.NONE);
String header = trainMultivariateModelResponse.getDeserializedHeaders().getLocation();
String[] substring = header.split("/");
UUID modelId = UUID.fromString(substring[substring.length - 1]);
System.out.println(modelId);

//Check model status until the model is ready
Response<Model> trainResponse;
while (true) {
    trainResponse = anomalyDetectorClient.getMultivariateModelWithResponse(modelId, Context.NONE);
    ModelStatus modelStatus = trainResponse.getValue().getModelInfo().getStatus();
    if (modelStatus == ModelStatus.READY || modelStatus == ModelStatus.FAILED) {
        break;
    }
    TimeUnit.SECONDS.sleep(10);
}

if (trainResponse.getValue().getModelInfo().getStatus() != ModelStatus.READY){
    System.out.println("Training failed.");
    List<ErrorResponse> errorMessages = trainResponse.getValue().getModelInfo().getErrors();
    for (ErrorResponse errorMessage : errorMessages) {
        System.out.println("Error code:  " + errorMessage.getCode());
        System.out.println("Error message:  " + errorMessage.getMessage());
    }
}

Detekce anomálií

DetectionRequest detectionRequest = new DetectionRequest().setSource(source).setStartTime(startTime).setEndTime(endTime);
DetectAnomalyResponse detectAnomalyResponse = anomalyDetectorClient.detectAnomalyWithResponse(modelId, detectionRequest, Context.NONE);
String location = detectAnomalyResponse.getDeserializedHeaders().getLocation();
String[] substring = location.split("/");
UUID resultId = UUID.fromString(substring[substring.length - 1]);

DetectionResult detectionResult;
while (true) {
    detectionResult = anomalyDetectorClient.getDetectionResult(resultId);
    DetectionStatus detectionStatus = detectionResult.getSummary().getStatus();;
    if (detectionStatus == DetectionStatus.READY || detectionStatus == DetectionStatus.FAILED) {
        break;
    }
    TimeUnit.SECONDS.sleep(10);
}

if (detectionResult.getSummary().getStatus() != DetectionStatus.READY){
    System.out.println("Inference failed");
    List<ErrorResponse> detectErrorMessages = detectionResult.getSummary().getErrors();
    for (ErrorResponse errorMessage : detectErrorMessages) {
        System.out.println("Error code:  " + errorMessage.getCode());
        System.out.println("Error message:  " + errorMessage.getMessage());
    }
}

Export modelu

Poznámka:

Příkaz pro export je určený k povolení spouštění Detektor anomálií vícevariát modelů v kontejnerizovaném prostředí. Tato možnost není aktuálně podporována pro vícevariát, ale podpora bude přidána v budoucnu.

K exportu vytrénovaného modelu použijte exportModelWithResponsepříkaz .

StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));

Odstranění modelu

K odstranění existujícího modelu, který je k dispozici pro aktuální prostředek, použijte deleteMultivariateModelWithResponse funkci.

Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);

Spuštění aplikace

Aplikaci můžete sestavit pomocí následujících:

gradle build

Spuštění aplikace

Před spuštěním může být užitečné zkontrolovat kód proti úplnému vzorovém kódu.

Spusťte aplikaci s run cílem:

gradle run

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služeb Azure AI, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků odstraníte také všechny ostatní prostředky přidružené ke skupině prostředků.

Další kroky