Rychlý start: Detekce uzemnění (Preview)

Podle tohoto průvodce můžete pomocí detekce obsahu Azure AI Sejf ty Groundedness zkontrolovat, jestli jsou textové odpovědi velkých jazykových modelů (LLM) uzemněny ve zdrojových materiálech poskytovaných uživateli.

Požadavky

  • Předplatné Azure – Vytvoření předplatného zdarma
  • Jakmile budete mít předplatné Azure, vytvořte na webu Azure Portal prostředek content Sejf ty, abyste získali klíč a koncový bod. Zadejte jedinečný název vašeho prostředku, vyberte své předplatné a vyberte skupinu prostředků, podporovanou oblast (USA – východ 2, USA – západ, Švédsko – střed) a podporovanou cenovou úroveň. Pak vyberte Vytvořit.
    • Nasazení prostředku trvá několik minut. Potom přejděte k novému prostředku. V levém podokně v části Správa prostředků vyberte klíče rozhraní API a koncové body. Zkopírujte jednu z hodnot klíče předplatného a koncový bod do dočasného umístění pro pozdější použití.
  • (Volitelné) Pokud chcete použít funkci odůvodnění , vytvořte prostředek služby Azure OpenAI s nasazeným modelem GPT.
  • Nainstalovaný cURL nebo Python .

Kontrola uzemnění bez odůvodnění

V jednoduchém případě bez funkce odůvodnění klasifikuje rozhraní API pro detekci uzemnění neuzemnění odeslaného obsahu jako true nebo false.

Tato část vás provede ukázkovým požadavkem s cURL. Vložte následující příkaz do textového editoru a proveďte následující změny.

  1. Nahraďte <endpoint> adresou URL koncového bodu přidruženou k vašemu prostředku.

  2. Nahraďte <your_subscription_key> jedním z klíčů pro váš prostředek.

  3. Volitelně můžete pole v "text" textu nahradit "query" vlastním textem, který chcete analyzovat.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview' \
    --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "domain": "Generic",
      "task": "QnA",
      "qna": {
           "query": "How much does she currently get paid per hour at the bank?"
      },
      "text": "12/hour",
      "groundingSources": [
        "I'm 21 years old and I need to make a decision about the next two years of my life. Within a week. I currently work for a bank that requires strict sales goals to meet. IF they aren't met three times (three months) you're canned. They pay me 10/hour and it's not unheard of to get a raise in 6ish months. The issue is, **I'm not a salesperson**. That's not my personality. I'm amazing at customer service, I have the most positive customer service \"reports\" done about me in the short time I've worked here. A coworker asked \"do you ask for people to fill these out? you have a ton\". That being said, I have a job opportunity at Chase Bank as a part time teller. What makes this decision so hard is that at my current job, I get 40 hours and Chase could only offer me 20 hours/week. Drive time to my current job is also 21 miles **one way** while Chase is literally 1.8 miles from my house, allowing me to go home for lunch. I do have an apartment and an awesome roommate that I know wont be late on his portion of rent, so paying bills with 20hours a week isn't the issue. It's the spending money and being broke all the time.\n\nI previously worked at Wal-Mart and took home just about 400 dollars every other week. So I know i can survive on this income. I just don't know whether I should go for Chase as I could definitely see myself having a career there. I'm a math major likely going to become an actuary, so Chase could provide excellent opportunities for me **eventually**."
      ],
      "reasoning": False
    }'
    
  4. Otevřete příkazový řádek a spusťte příkaz cURL.

K otestování úlohy souhrnu místo úkolu odpovědi na otázku (QnA) použijte následující ukázkový text JSON:

{
    "domain": "Medical",
    "task": "Summarization",
    "text": "Ms Johnson has been in the hospital after experiencing a stroke.",
    "groundingSources": ["Our patient, Ms. Johnson, presented with persistent fatigue, unexplained weight loss, and frequent night sweats. After a series of tests, she was diagnosed with Hodgkin’s lymphoma, a type of cancer that affects the lymphatic system. The diagnosis was confirmed through a lymph node biopsy revealing the presence of Reed-Sternberg cells, a characteristic of this disease. She was further staged using PET-CT scans. Her treatment plan includes chemotherapy and possibly radiation therapy, depending on her response to treatment. The medical team remains optimistic about her prognosis given the high cure rate of Hodgkin’s lymphoma."],
    "reasoning": false
}

Do adresy URL musí být zahrnuta následující pole:

Název Požadováno Popis Typ
Verze rozhraní API Požaduje se Toto je verze rozhraní API, která se má použít. Aktuální verze je: api-version=2024-02-15-preview. Příklad: <endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview String

Parametry v textu požadavku jsou definovány v této tabulce:

Název Popis Typ
Domény (Volitelné) MEDICAL nebo GENERIC. Výchozí hodnota: GENERIC. Výčet
Úkol (Volitelné) Typ úkolu: QnA, Summarization. Výchozí hodnota: Summarization. Výčet
qna (Volitelné) Obsahuje data QnA, pokud je QnAtyp úkolu . String
- query (Volitelné) To představuje otázku v úkolu QnA. Limit znaků: 7 500. String
text (Povinné) Výstupní text LLM, který se má zkontrolovat. Limit znaků: 7 500. String
groundingSources (Povinné) Používá pole zeměných zdrojů k ověření textu generovaného AI. V rámci jednoho požadavku je možné analyzovat až 55 000 znaků uzemnění zdrojů. Pole řetězců
Uvažování (Volitelné) Určuje, jestli se má použít funkce odůvodnění. Výchozí hodnota je false. Pokud truepotřebujete použít vlastní prostředky Azure OpenAI GPT-4 Turbo, abyste mohli poskytnout vysvětlení. Buďte opatrní: použití důvodů zvyšuje dobu zpracování. Logická hodnota

Interpretace odpovědi rozhraní API

Po odeslání požadavku obdržíte odpověď JSON, která odráží provedenou analýzu groundedness. Typický výstup vypadá takto:

{
    "ungroundedDetected": true,
    "ungroundedPercentage": 1,
    "ungroundedDetails": [
        {
            "text": "12/hour."
        }
    ]
}

Objekty JSON ve výstupu jsou definovány zde:

Název Popis Typ
UngroundedDetected Určuje, zda text vykazuje neuzemněnost. Logická hodnota
ungroundedPercentage Určuje poměr textu identifikovaný jako neuzemněný vyjádřený číslem v rozsahu 0 až 1, kde 0 označuje žádný neuzemněný obsah a 1 označuje zcela neuzemněný obsah. Float
ungroundedDetails Poskytuje přehled o neuzemněném obsahu s konkrétními příklady a procenty. Pole
-text Konkrétní text, který je neuzemněný. String

Kontrola uzemnění s odůvodněním

Rozhraní API pro detekci uzemnění poskytuje možnost zahrnout do odpovědi rozhraní API odůvodnění . Při povoleném zdůvodnění odpověď obsahuje "reasoning" pole, které podrobně popisuje konkrétní instance a vysvětlení pro každou zjištěnou neuzemnění. Buďte opatrní: při použití odůvodnění se zvýší doba zpracování a účtují se další poplatky.

Použití vlastního nasazení GPT

Tip

V tuto chvíli podporujeme pouze prostředky Azure OpenAI GPT-4 Turbo a nepodporují jiné typy GPT. Prostředky GPT-4 Turbo je možné nasadit v libovolné oblasti; Doporučujeme ale, aby se nacházely ve stejné oblasti jako prostředky zabezpečení obsahu, aby se minimalizovala potenciální latence.

Pokud chcete k povolení funkce odůvodnění použít prostředek Azure OpenAI GPT4-Turbo, použijte spravovanou identitu, abyste umožnili vašemu prostředku Content Sejf ty přístup k prostředku Azure OpenAI:

  1. Povolení spravované identity pro obsah Azure AI Sejf ty

    Na webu Azure Portal přejděte k vaší instanci obsahu Azure AI Sejf ty. V kategorii Nastavení vyhledejte část Identita. Povolte spravovanou identitu přiřazenou systémem. Tato akce udělí vašemu obsahu Azure AI Sejf ty instanci identity, kterou je možné rozpoznat a použít v rámci Azure pro přístup k dalším prostředkům.

    Snímek obrazovky prostředku identity Sejf ty obsahu na webu Azure Portal

  2. Přiřaďte roli spravované identitě.

    Přejděte do instance Azure OpenAI a výběrem možnosti Přidat přiřazení role spusťte proces přiřazování role Azure OpenAI k Sejf ty identitě obsahu Azure AI.

    Snímek obrazovky s přidáním přiřazení role na webu Azure Portal

    Zvolte roli Uživatel nebo Přispěvatel.

    Snímek obrazovky webu Azure Portal s rolemi přispěvatele a uživatele zobrazenými v seznamu

Vytvoření požadavku rozhraní API

V požadavku na rozhraní API pro detekci uzemnění nastavte "reasoning" parametr těla na truehodnotu a zadejte další potřebné parametry:

 {
  "reasoning": true,
  "llmResource": {
    "resourceType": "AzureOpenAI",
    "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
    "azureOpenAIDeploymentName": "<your_deployment_name>"
  }
}

Tato část vás provede ukázkovým požadavkem s cURL. Vložte následující příkaz do textového editoru a proveďte následující změny.

  1. Nahraďte <endpoint> adresou URL koncového bodu přidruženou k vašemu prostředku.

  2. Nahraďte <your_subscription_key> jedním z klíčů pro váš prostředek.

  3. Volitelně můžete pole v "text" textu nahradit "query" vlastním textem, který chcete analyzovat.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview' \
    --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "domain": "Generic",
      "task": "QnA",
      "qna": {
           "query": "How much does she currently get paid per hour at the bank?"
      },
      "text": "12/hour",
      "groundingSources": [
        "I'm 21 years old and I need to make a decision about the next two years of my life. Within a week. I currently work for a bank that requires strict sales goals to meet. IF they aren't met three times (three months) you're canned. They pay me 10/hour and it's not unheard of to get a raise in 6ish months. The issue is, **I'm not a salesperson**. That's not my personality. I'm amazing at customer service, I have the most positive customer service \"reports\" done about me in the short time I've worked here. A coworker asked \"do you ask for people to fill these out? you have a ton\". That being said, I have a job opportunity at Chase Bank as a part time teller. What makes this decision so hard is that at my current job, I get 40 hours and Chase could only offer me 20 hours/week. Drive time to my current job is also 21 miles **one way** while Chase is literally 1.8 miles from my house, allowing me to go home for lunch. I do have an apartment and an awesome roommate that I know wont be late on his portion of rent, so paying bills with 20hours a week isn't the issue. It's the spending money and being broke all the time.\n\nI previously worked at Wal-Mart and took home just about 400 dollars every other week. So I know i can survive on this income. I just don't know whether I should go for Chase as I could definitely see myself having a career there. I'm a math major likely going to become an actuary, so Chase could provide excellent opportunities for me **eventually**."
      ],
      "reasoning": true,
      "llmResource": {
            "resourceType": "AzureOpenAI",
            "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
            "azureOpenAIDeploymentName": "<your_deployment_name>"
    }'
    
  4. Otevřete příkazový řádek a spusťte příkaz cURL.

Parametry v textu požadavku jsou definovány v této tabulce:

Název Popis Typ
Domény (Volitelné) MEDICAL nebo GENERIC. Výchozí hodnota: GENERIC. Výčet
Úkol (Volitelné) Typ úkolu: QnA, Summarization. Výchozí hodnota: Summarization. Výčet
qna (Volitelné) Obsahuje data QnA, pokud je QnAtyp úkolu . String
- query (Volitelné) To představuje otázku v úkolu QnA. Limit znaků: 7 500. String
text (Povinné) Výstupní text LLM, který se má zkontrolovat. Limit znaků: 7 500. String
groundingSources (Povinné) Používá pole zeměných zdrojů k ověření textu generovaného AI. V rámci jednoho požadavku je možné analyzovat až 55 000 znaků uzemnění zdrojů. Pole řetězců
Uvažování (Volitelné) Nastavte na truehodnotu , služba používá prostředky Azure OpenAI k poskytnutí vysvětlení. Buďte opatrní: při použití odůvodnění se zvýší doba zpracování a účtují se další poplatky. Logická hodnota
llmResource (Povinné) Pokud chcete k povolení odůvodnění použít vlastní prostředek Azure OpenAI GPT4-Turbo, přidejte toto pole a uveďte dílčí pole pro použité prostředky. String
- resourceType Určuje typ používaného prostředku. V současné době to umožňuje AzureOpenAIpouze . Podporujeme pouze prostředky Azure OpenAI GPT-4 Turbo a nepodporují jiné typy GPT. Prostředky GPT-4 Turbo je možné nasadit v libovolné oblasti; Doporučujeme ale, aby se nacházely ve stejné oblasti jako prostředky zabezpečení obsahu, aby se minimalizovala potenciální latence. Výčet
- azureOpenAIEndpoint Adresa URL koncového bodu pro službu Azure OpenAI String
- azureOpenAIDeploymentName Název konkrétního nasazení GPT, které se má použít. String

Interpretace odpovědi rozhraní API

Po odeslání požadavku obdržíte odpověď JSON, která odráží provedenou analýzu groundedness. Typický výstup vypadá takto:

{
    "ungroundedDetected": true,
    "ungroundedPercentage": 1,
    "ungroundedDetails": [
        {
            "text": "12/hour.",
            "offset": {
                "utF8": 0,
                "utF16": 0,
                "codePoint": 0
            },
            "length": {
                "utF8": 8,
                "utF16": 8,
                "codePoint": 8
            },
            "reason": "None. The premise mentions a pay of \"10/hour\" but does not mention \"12/hour.\" It's neutral. "
        }
    ]
}

Objekty JSON ve výstupu jsou definovány zde:

Název Popis Typ
UngroundedDetected Určuje, zda text vykazuje neuzemněnost. Logická hodnota
ungroundedPercentage Určuje poměr textu identifikovaný jako neuzemněný vyjádřený číslem v rozsahu 0 až 1, kde 0 označuje žádný neuzemněný obsah a 1 označuje zcela neuzemněný obsah. Float
ungroundedDetails Poskytuje přehled o neuzemněném obsahu s konkrétními příklady a procenty. Pole
-text Konkrétní text, který je neuzemněný. String
-offset Objekt popisující pozici neuzemněného textu v různých kódováních. String
- offset > utf8 Posun pozice neuzemněného textu v kódování UTF-8. Celé číslo
- offset > utf16 Posun pozice neuzemněného textu v kódování UTF-16. Celé číslo
- offset > codePoint Pozice posunu neuzemněného textu z hlediska bodů kódu Unicode. Celé číslo
-length Objekt popisující délku neuzemněného textu v různých kódováních. (utf8, utf16, codePoint), podobně jako posun. Object
- length > utf8 Délka neuzemněného textu v kódování UTF-8. Celé číslo
- length > utf16 Délka neuzemněného textu v kódování UTF-16. Celé číslo
- length > codePoint Délka neuzemněného textu z hlediska bodů kódu Unicode. Celé číslo
-reason Nabízí vysvětlení pro zjištěnou nezemřenost. String

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ů se odstraní také všechny ostatní prostředky, které jsou k ní přidružené.

Další kroky

Zkombinujte detekci uzemnění s dalšími bezpečnostními funkcemi LLM, jako jsou Prompt Shields.