Freigeben über


Schnellstart: Groundedness-Erkennung (Vorschau)

Befolgen Sie dieses Handbuch, um die Azure KI Inhaltssicherheit Groundedness-Erkennung zu verwenden, um zu überprüfen, ob sich die Textantworten großer Sprachmodelle (LLMs) auf die von den Benutzern bereitgestellten Quellmaterialien stützen.

Voraussetzungen

  • Azure-Abonnement: Kostenloses Azure-Konto
  • Sobald Sie über ein Azure-Abonnement verfügen, können Sie im Azure-Portal eine Content Safety-Ressource erstellen, um Ihren Schlüssel und Endpunkt abzurufen. Geben Sie einen eindeutigen Namen für Ihre Ressource ein, wählen Sie Ihr Abonnement aus, und wählen Sie dann eine Ressourcengruppe, eine unterstützte Region (USA, Osten; USA, Osten 2; USA Westen; Schweden, Mitte) sowie einen unterstützten Tarif aus. Wählen Sie dann Erstellen aus.
  • Die Bereitstellung der Ressource dauert einige Minuten. Navigieren Sie danach zur neuen Ressource. Wählen Sie im linken Bereich unter Ressourcenverwaltung die Option API-Schlüssel und Endpunkte aus. Kopieren Sie einen der Abonnementschlüsselwerte und den Endpunkt an einen temporären Speicherort für die spätere Verwendung.
  • (Optional) Wenn Sie das Begründungsfeature verwenden möchten, erstellen Sie eine Azure OpenAI Service-Ressource mit einem bereitgestellten GPT-Modell.
  • cURL oder Python installiert.

Überprüfen der Groundedness ohne Begründung

Im einfachen Fall ohne die Begründungsfunktion klassifiziert die Groundedness-Erkennungs-API die Unbegründetheit des übermittelten Inhalts als true oder false.

In diesem Abschnitt wird eine Beispielanforderung mit cURL erläutert. Fügen Sie den nachstehenden Befehl in einen Text-Editor ein, und nehmen Sie folgende Änderungen vor:

  1. Ersetzen Sie <endpoint> durch die Endpunkt-URL, die Ihrer Ressource zugeordnet ist.

  2. Ersetzen Sie <your_subscription_key> durch einen der Schlüssel für Ihre Ressource.

  3. Ersetzen Sie optional Felder "query" oder "text" im Text durch Ihren eigenen Text für die Analyse.

    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
    }'
    

Öffnen Sie eine Eingabeaufforderung, und führen Sie den cURL-Befehl aus.

Um eine Zusammenfassungsaufgabe anstelle einer Fragebeantwortungsaufgabe (QnA) zu testen, verwenden Sie den folgenden JSON-Beispieltext:

{
    "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
}

Die folgenden Felder müssen in der URL enthalten sein:

Name Erforderlich BESCHREIBUNG type
API-Version Erforderlich Die zu benutzende API-Version. Aktuelle Version: api-version=2024-02-15-preview. Beispiel: <endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview String

Die Parameter im Anforderungstext sind in der folgenden Tabelle definiert:

Name Description type
domain (Optional) MEDICAL oder GENERIC. Standardwert. GENERIC. Enumeration
Aufgabe (Optional) Typ des Vorgangs: QnA, Summarization. Standardwert. Summarization. Enumeration
qna (Optional) Enthält QnA-Daten, wenn der Aufgabentyp QnA ist. String
- query (Optional) Dies stellt die Frage in einer QnA-Aufgabe dar. Zeichengrenzwert: 7500. String
text (Erforderlich) Der zu überprüfende LLM-Ausgabetext. Zeichengrenzwert: 7500. String
groundingSources (Erforderlich) Verwendet ein Array von Grounding-Quellen, um KI-generierten Text zu überprüfen. Informationen zu Grenzwerten finden Sie unter Eingabeanforderungen. Zeichenfolgenarray
Begründung (Optional) Gibt an, ob das Begründungsfeature verwendet werden soll. Der Standardwert ist false. Bei true müssen Sie Ihre eigenen Azure OpenAI GPT-4 Turbo-Ressourcen (1106-preview) bereitstellen, um Erläuterungen bereitzustellen. Seien Sie vorsichtig: Die Verwendung der Begründung erhöht die Verarbeitungszeit. Boolean

Interpretieren der API-Antwort

Nachdem Sie Ihre Anforderung übermittelt haben, erhalten Sie eine JSON-Antwort, die die durchgeführte Groundedness-Analyse widerspiegelt. So sieht eine typische Ausgabe aus:

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

Die JSON-Objekte in der Ausgabe werden hier definiert:

Name Description type
ungroundedDetected Gibt an, ob der Text nicht begründet ist. Boolean
ungroundedPercentage Gibt den Anteil des als nicht begründet gekennzeichneten Texts an, ausgedrückt als Zahl zwischen 0 und 1, wobei 0 keinen unbegründeten Inhalt angibt und 1 den vollständig unbegründeten Inhalt angibt. Gleitkomma
ungroundedDetails Bietet Einblicke in unbegründeten Inhalt mit bestimmten Beispielen und Prozentsätzen. Array
-text Der spezifische Text, der unbegründet ist. String

Überprüfen von Groundedness mit Begründung

Die Groundedness-Erkennungs-API bietet die Möglichkeit, Begründungen in die API-Antwort einzuschließen. Wenn die Begründung aktiviert ist, enthält die Antwort ein "reasoning" Feld, das bestimmte Instanzen und Erklärungen für alle erkannten Unbegründetheiten enthält.

Sorgen Sie für Ihre eigene GPT-Bereitstellung

Tipp

Derzeit werden nur Azure OpenAI GPT-4 Turbo-Ressourcen (1106-preview) unterstützt, keine anderen GPT-Typen. Sie können Ihre GPT-4 Turbo-Ressourcen (1106-preview) flexibel in jeder Region bereitstellen. Um jedoch potenzielle Wartezeiten zu minimieren und jegliche Bedenken bzgl. Datenschutz und Risiken im Hinblick auf geografische Grenzen auszuräumen, empfehlen wir, sie in derselben Region wie Ihre Inhaltssicherheitsressourcen zu platzieren. Ausführliche Informationen zum Datenschutz finden Sie in den Daten-, Datenschutz- und Sicherheitsrichtlinien für Azure OpenAI Service und Daten, Datenschutz und Sicherheit in Azure KI Inhaltssicherheit.

Wenn Sie das Reasoning-Feature für Ihre Azure OpenAI GPT4-Turbo-Ressource (1106-preview) aktivieren möchten, verwenden Sie eine verwaltete Identität, um Ihrer Inhaltssicherheit-Ressource den Zugriff auf die Azure OpenAI-Ressource zu ermöglichen:

  1. Aktivieren sie verwaltete Identität für Azure KI Inhaltssicherheit.

    Navigieren Sie im Azure-Portal zu Ihrer Azure KI Inhaltssicherheits-Instanz. Suchen Sie den Abschnitt Identität unter der Kategorie Einstellungen. Aktivieren der systemseitig zugewiesenen verwalteten Identität. Diese Aktion gewährt Ihrer Azure KI Inhaltssicherheits-Instanz eine Identität, die in Azure für den Zugriff auf andere Ressourcen erkannt und verwendet werden kann.

    Screenshot einer Inhaltssicherheits-Identitätsressource im Azure-Portal.

  2. Zuweisen einer Rolle zur verwalteten Identität.

    Navigieren Sie zu Ihrer Azure OpenAI-Instanz, wählen Sie Rollenzuweisung hinzufügen aus, um den Prozess der Zuweisung einer Azure OpenAI-Rolle zur Azure KI Inhaltssicherheits-Identität zu starten.

    Screenshot des Hinzufügens von Rollenzuweisungen im Azure-Portal.

    Wählen Sie die Rolle Benutzer oder Mitwirkender aus.

    Screenshot des Azure-Portals mit den Rollen

API-Anforderung stellen

Legen Sie in Ihrer Anforderung an die Groundedness-Erkennungs-API den "reasoning" Textparameter auf true, und geben Sie die anderen erforderlichen Parameter an:

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

In diesem Abschnitt wird eine Beispielanforderung mit cURL erläutert. Fügen Sie den nachstehenden Befehl in einen Text-Editor ein, und nehmen Sie folgende Änderungen vor:

  1. Ersetzen Sie <endpoint> durch die Endpunkt-URL, die Ihrer Ressource zugeordnet ist.

  2. Ersetzen Sie <your_subscription_key> durch einen der Schlüssel für Ihre Ressource.

  3. Ersetzen Sie optional Felder "query" oder "text" im Text durch Ihren eigenen Text für die Analyse.

    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. Öffnen Sie eine Eingabeaufforderung, und führen Sie den cURL-Befehl aus.

Die Parameter im Anforderungstext sind in der folgenden Tabelle definiert:

Name Description type
domain (Optional) MEDICAL oder GENERIC. Standardwert. GENERIC. Enumeration
Aufgabe (Optional) Typ des Vorgangs: QnA, Summarization. Standardwert. Summarization. Enumeration
qna (Optional) Enthält QnA-Daten, wenn der Aufgabentyp QnA ist. String
- query (Optional) Dies stellt die Frage in einer QnA-Aufgabe dar. Zeichengrenzwert: 7500. String
text (Erforderlich) Der zu überprüfende LLM-Ausgabetext. Zeichengrenzwert: 7500. String
groundingSources (Erforderlich) Verwendet ein Array von Grounding-Quellen, um KI-generierten Text zu überprüfen. Informationen zu Grenzwerten finden Sie unter Eingabeanforderungen, Zeichenfolgenarray
Begründung (Optional) Wenn auf true gesetzt, verwendet der Dienst Azure OpenAI-Ressourcen, um eine Erläuterung bereitzustellen. Seien Sie vorsichtig: Die Verwendung der Begründung erhöht die Verarbeitungszeit und verursacht zusätzliche Gebühren. Boolean
llmResource (Erforderlich) Wenn Sie das Reasoning-Feature für Ihre eigenen Azure OpenAI GPT4-Turbo-Ressourcen (1106-preview) aktivieren möchten, fügen Sie dieses Feld sowie die Unterfelder für die verwendeten Ressourcen hinzu. String
- resourceType Gibt den Typ der verwendeten Ressource an. Derzeit ist nur AzureOpenAI zulässig. Es werden nur Azure OpenAI GPT-4 Turbo-Ressourcen (1106-preview) unterstützt, keine anderen GPT-Typen. Enum
- azureOpenAIEndpoint Ihre Endpunkt-URL für den Azure OpenAI-Dienst. String
- azureOpenAIDeploymentName Der Name der zu verwendenden GPT-Bereitstellung. String

Interpretieren der API-Antwort

Nachdem Sie Ihre Anforderung übermittelt haben, erhalten Sie eine JSON-Antwort, die die durchgeführte Groundedness-Analyse widerspiegelt. So sieht eine typische Ausgabe aus:

{
    "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. "
        }
    ]
}

Die JSON-Objekte in der Ausgabe werden hier definiert:

Name Description type
ungroundedDetected Gibt an, ob der Text nicht begründet ist. Boolean
ungroundedPercentage Gibt den Anteil des als nicht begründet gekennzeichneten Texts an, ausgedrückt als Zahl zwischen 0 und 1, wobei 0 keinen unbegründeten Inhalt angibt und 1 den vollständig unbegründeten Inhalt angibt. Gleitkomma
ungroundedDetails Bietet Einblicke in unbegründeten Inhalt mit bestimmten Beispielen und Prozentsätzen. Array
-text Der spezifische Text, der unbegründet ist. String
-offset Ein Objekt, das die Position des unbegründeten Texts in verschiedener Codierung beschreibt. String
- offset > utf8 Die Offsetposition des unbegründeten Texts in UTF-8-Codierung. Ganzzahl
- offset > utf16 Die Offsetposition des unbegründeten Texts in UTF-16-Codierung. Ganzzahl
- offset > codePoint Die Offsetposition des unbegründeten Texts in Bezug auf Unicode-Codepunkte. Ganzzahl
-length Ein Objekt, das die Länge des unbegründeten Texts in verschiedener Codierung beschreibt. (utf8, utf16, codePoint), ähnlich dem Offset. Objekt
- length > utf8 Die Länge des unbegründeten Texts in UTF-8-Codierung. Ganzzahl
- length > utf16 Die Länge des unbegründeten Texts in UTF-16-Codierung. Ganzzahl
- length > codePoint Die Länge des unbegründeten Texts in Bezug auf Unicode-Codepunkte. Ganzzahl
-reason Bietet Erklärungen für erkannte Unbegründetheit. String

Bereinigen von Ressourcen

Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind.

Nächste Schritte

Kombinieren Sie die Groundedness-Erkennung mit anderen LLM-Sicherheitsfeatures wie Prompt Shields.