Share via


Inhaltsfilterung

Wichtig

Das Inhaltsfiltersystem wird nicht auf Eingabeaufforderungen und Vervollständigungen angewendet, die vom Whisper-Modell in Azure OpenAI Service verarbeitet werden. Erfahren Sie mehr über das Whisper-Modell in Azure OpenAI.

Azure OpenAI Service beinhaltet ein Inhaltsfiltersystem, das mit Kernmodellen und DALL-E-Bildgenerierungsmodellen zusammenarbeitet. Dieses System funktioniert, indem sowohl die Eingabeaufforderung als auch die Vervollständigung durch ein Ensemble von Klassifizierungsmodellen ausgeführt wird, das darauf abzielt, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern. Das Inhaltsfiltersystem erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeeingabeaufforderungen als auch in Ausgabeabschlüssen und ergreift entsprechende Maßnahmen. Variationen in API-Konfigurationen und Anwendungsentwurf können sich auf Vervollständigungen und somit auf das Filterverhalten auswirken.

Die Inhaltsfiltermodelle für die Kategorien „Hass“, „Sexuell“, „Gewalt“ und „Selbstverletzung“ wurden speziell für die folgenden Sprachen trainiert und getestet: Englisch, Deutsch, Japanisch, Spanisch, Französisch, Italienisch, Portugiesisch und Chinesisch. Der Dienst funktioniert zwar für viele weitere Sprachen, die Qualität könnte jedoch variieren. In allen Fällen sollten Sie eigene Tests durchführen, um sicherzustellen, dass es für Ihre Anwendung funktioniert.

Zusätzlich zum Inhaltsfiltersystem führt der Azure OpenAI-Dienst eine Überwachung durch, um Inhalte und/oder Verhaltensweisen zu erkennen, die darauf hindeuten, dass der Dienst auf eine Weise verwendet wird, die gegen geltende Produktbedingungen verstößt. Weitere Informationen zum Verstehen und Minimieren von Risiken im Zusammenhang mit Ihrer Anwendung finden Sie im Transparenzhinweis für Azure OpenAI. Weitere Informationen zur Verarbeitung von Daten für die Inhaltsfilterung und Missbrauchsüberwachung finden Sie unter Daten, Datenschutz und Sicherheit für Azure OpenAI Service.

Die folgenden Abschnitte enthalten Informationen zu den Inhaltsfilterkategorien, den Filterschweregraden und ihrer Konfigurierbarkeit und API-Szenarien, die beim Anwendungsentwurf und der Implementierung berücksichtigt werden sollen.

Inhaltsfilterkategorien

Das in Azure OpenAI Service integrierte Inhaltsfiltersystem enthält Folgendes:

  • Neuronale mehrklassige Klassifizierungsmodelle zur Erkennung und Filterung schädlicher Inhalte. Die Modelle decken vier Kategorien („Hass“, „Sexuell“, „Gewalt“ und „Selbstverletzung“) in vier Schweregraden (sicher, niedrig, mittel und hoch) ab. Inhalte, die mit dem Schweregrad „Sicher“ erkannt werden, werden in Anmerkungen gekennzeichnet, unterliegen jedoch keiner Filterung und sind nicht konfigurierbar.
  • Andere optionale Klassifizierungsmodelle zur Erkennung eines Jailbreak-Risikos sowie zur Erkennung bekannter Inhalte für Text und Code; Bei diesen Modellen handelt es sich um binäre Klassifizierer, die kennzeichnen, ob das Benutzer- oder Modellverhalten die Kriterien eines Jailbreak-Angriffs erfüllt oder ob eine Übereinstimmung mit bekanntem Text oder Quellcode vorliegt. Die Verwendung dieser Modelle ist optional, aber die Verwendung des Modells für geschütztes Codematerial kann erforderlich sein, um die Verpflichtung des Kunden zum Urheberrecht abzudecken.

Risikokategorien

Category Beschreibung
Hass und Fairness Schäden im Zusammenhang mit Hass und Fairness beschreiben sprachliche Angriffe oder Verwendungen, die abwertende oder diskriminierende Ausdrücke in Bezug auf eine Person oder eine Identitätsgruppe auf der Grundlage bestimmter differenzierender Merkmale dieser Gruppen verwendet, einschließlich, aber nicht beschränkt auf Hautfarbe, ethnische Zugehörigkeit, Nationalität, Geschlechtsidentität und -ausdruck, sexuelle Orientierung, Religion, Migrationsstatus, Gesundheitszustand, persönliches Aussehen, und Körpergröße. 

Fairness befasst sich mit der Sicherstellung, dass KI-Systeme alle Gruppen von Menschen gleichwertig behandeln, ohne zu bestehenden gesellschaftlichen Ungleichheiten beizutragen. Ähnlich wie Hassrede basieren fairnessbezogene Schäden auf einer unterschiedlichen Behandlung von Identitätsgruppen.  
Sexuell „Sexuell“ beschreibt Sprache, die sich auf anatomische Organe und Genitalien, romantische Beziehungen, erotisch oder zärtlich dargestellte Akte, Schwangerschaft, körperliche sexuelle Akte – einschließlich solcher Akte, die als Übergriff oder erzwungener sexueller Gewaltakt gegen den eigenen Willen dargestellt werden –, Prostitution, Pornografie, und Missbrauch beziehen.  
Gewalt „Gewalt“ beschreibt Sprache im Zusammenhang mit physischen Handlungen mit dem Ziel, jemanden oder etwas zu verletzen oder zu töten oder jemandem oder etwas Schaden zuzufügen, sowie (Schuss-)Waffen und damit verbundene Einrichtungen wie Hersteller, Verbände, Gesetzgebung und Ähnliches.
Selbstverletzung „Selbstverletzung“ beschreibt Sprache im Zusammenhang mit physischen Handlungen mit dem Ziel, den eigenen Körper absichtlich zu verletzen, zu verwunden oder zu schädigen oder sich selbst zu töten.
Geschütztes Material für Text* Geschützter Materialtext beschreibt bekannte Textinhalte (z. B. Liedtexte, Artikel, Rezepte und ausgewählte Webinhalte), die von großen Sprachmodellen ausgegeben werden können.
Geschütztes Material für Code Geschützter Materialcode beschreibt Quellcode, der Quellcode aus öffentlichen Repositorys entspricht, die von großen Sprachmodellen ohne ordnungsgemäße Nennung von Quellrepositorys ausgegeben werden können.

* Wenn Sie Besitzer*in von Textmaterial sind und zu schützende Textinhalte übermitteln möchten, stellen Sie einen entsprechenden Antrag.

Prompt Shields

Typ Beschreibung
Prompt Shield für Jailbreak-Angriffe Jailbreak-Angriffe sind Benutzerprompts, die darauf abzielen, ein Verhalten des generativen KI-Modells zu provozieren, für dessen Vermeidung es trainiert wurde, oder gegen die in der Systemnachricht festgelegten Regeln zu verstoßen. Derartige Angriffe können von komplexem Rollenspiel bis hin zu subtiler Subversion des Sicherheitsziels reichen.
Prompt Shield für indirekte Angriffe Indirekte Angriffe, die auch als indirekte Promptangriffe oder domänenübergreifende Prompteinschleusungsangriffe bezeichnet werden, sind ein potenzielles Sicherheitsrisiko, bei dem Dritte böswillige Anweisungen innerhalb von Dokumenten platzieren, auf die das generative KI-System zugreifen und sie verarbeiten kann. Erfordert Dokumenteinbettung und -formatierung.

Textinhalte

Warnung

Die Registerkarte Schweregraddefinitionen in diesem Dokument enthält Beispiele für schädliche Inhalte, die für manche Leser*innen verstörend sein können.

Bilddateiinhalt

Warnung

Die Registerkarte Schweregraddefinitionen in diesem Dokument enthält Beispiele für schädliche Inhalte, die für manche Leser*innen verstörend sein können.

Konfigurierbarkeit (Vorschau)

Die Inhaltsfilterkonfiguration für die GPT-Modellreihe ist standardmäßig so festgelegt, dass alle vier Kategorien schädlicher Inhalte (Hass, Gewalt, Sexualität, Selbstverletzung) mit mittlerem Schweregrad gefiltert werden. Sie gilt sowohl für Prompts (Text, multimodale Texte/Bilder) als auch für Vervollständigungen (Text). Das bedeutet, dass Inhalte, die mit dem Schweregrad „Mittel“ oder „Hoch“ erkannt werden, gefiltert werden, während Inhalte, die mit dem Schweregrad „Niedrig“ erkannt werden, nicht von den Inhaltsfiltern gefiltert werden. Bei DALL-E wird der standardmäßige Schwellenwert für den Schweregrad sowohl für Prompt (Text) als auch für Vervollständigungen (Bilder) auf „Niedrig“, „Mittel“ oder „Hoch“ festgelegt. Daher werden erkannte Inhalte mit dem Schweregrad „Niedrig“, „Mittel“ oder „Hoch“ gefiltert. Das Konfigurierbarkeitsfeature ist in der Vorschau verfügbar und ermöglicht es Kunden, die Einstellungen separat für Eingabeaufforderungen und Vervollständigungen anzupassen, um Inhalte wie in der folgenden Tabelle beschrieben für jede Inhaltskategorie mit unterschiedlichen Schweregraden zu filtern:

Gefilterter Schweregrad Konfigurierbar für Eingabeaufforderungen Konfigurierbar für Vervollständigungen Beschreibungen
Niedrig, mittel, hoch Ja Ja Strengste Filterkonfiguration. Mit den Schweregraden „Niedrig“, „Mittel“ und „Hoch“ erkannte Inhalte werden gefiltert.
Mittel, Hoch Ja Ja Mit dem Schweregrad „Niedrig“ erkannte Inhalte werden nicht gefiltert, Inhalte mit mittlerem und hohem Schweregrad werden gefiltert.
Hoch Falls genehmigt1 Falls genehmigt1 Mit den Schweregraden „Niedrig“ und „Mittel“ erkannte Inhalte werden nicht gefiltert. Nur Inhalte mit hohem Schweregrad werden gefiltert. Genehmigung erforderlich1.
Keine Filter Falls genehmigt1 Falls genehmigt1 Unabhängig vom erkannten Schweregrad wird kein Inhalt gefiltert. Genehmigung erforderlich1.

1 Für Azure OpenAI-Modelle haben diejenigen die vollständige Kontrolle über die Inhaltsfilterung, einschließlich der Konfiguration von Inhaltsfiltern mit nur hohem Schweregrad oder Deaktivierung von Inhaltsfiltern, die für die Filterung von geänderten Inhalten zugelassen wurden. Beantragen von geänderten Inhaltsfiltern über dieses Formular: Azure OpenAI Limited Access Review: Modified Content Filters and Abuse Monitoring (microsoft.com) (Überprüfung des eingeschränkten Zugriffs in Azure OpenAI: Geänderte Inhaltsfilter und Missbrauchsüberwachung [microsoft.com])

Diese Previewfunktion ist für die folgenden Azure OpenAI-Modelle verfügbar:

  • GPT-Modellreihe (Text)
  • GPT-4 Turbo Vision 2024-04-09 (multimodale Texte/Bilder)
  • DALL-E 2 und 3 (Bild)

Inhaltsfilterkonfigurationen werden in einer Ressource in Azure KI Studio erstellt und können Bereitstellungen zugeordnet werden. Weitere Informationen zur Konfigurierbarkeit finden Sie hier.

Kunden sind dafür verantwortlich, sicherzustellen, dass Anwendungen, die Azure OpenAI integrieren, den Verhaltenskodex einhalten.

Szenariodetails

Wenn das Inhaltsfiltersystem schädliche Inhalte erkennt, erhalten Sie entweder einen Fehler im API-Aufruf, wenn die Äußerung als unangemessen angesehen wurde, oder finish_reason in der Antwort ist content_filter, um anzuzeigen, dass der Abschluss teilweise gefiltert wurde. Wenn Sie Ihre Anwendung oder Ihr System erstellen, sollten Sie diese Szenarien berücksichtigen, in denen der von der Vervollständigungs-API zurückgegebene Inhalt gefiltert wird, was zu unvollständigen Inhalten führen kann. Wie Sie auf diese Informationen reagieren, ist anwendungsspezifisch. Das Verhalten kann in den folgenden Punkten zusammengefasst werden:

  • Eingabeaufforderungen, die in einer gefilterten Kategorie und einem Schweregrad klassifiziert sind, geben einen HTTP 400-Fehler zurück.
  • Nicht streamende Abschlussaufrufe geben keine Inhalte zurück, wenn der Inhalt gefiltert wird. Der finish_reason-Wert wird auf content_filter festgelegt. In seltenen Fällen mit längeren Antworten kann ein Teilergebnis zurückgegeben werden. In diesen Fällen wird der finish_reason aktualisiert.
  • Für Streaming-Abschlussaufrufe werden Segmente an den Benutzer zurückgegeben, sobald sie abgeschlossen wurden. Der Dienst setzt das Streaming fort, bis entweder ein Stopptoken oder eine Länge erreicht wird oder wenn Inhalte erkannt werden, die in einer gefilterten Kategorie und einem Schweregrad klassifiziert sind.

Szenario: Sie senden einen Nicht-Streaming-Abschlussaufruf, in dem Sie nach mehreren Ausgaben fragen. Kein Inhalt wird in einer gefilterten Kategorie und einem Schweregrad klassifiziert.

In der Tabelle unten sind die verschiedenen Möglichkeiten beschrieben, wie Inhaltsfilterung dargestellt werden kann:

HTTP-Antwortcode Antwortverhalten
200 In den Fällen, in denen alle Generierungen den Filter wie konfiguriert ohne Beanstandung durchlaufen, werden der Antwort keine Details zu Inhaltsmoderation hinzugefügt. Die finish_reason für jede Generierung ist entweder „Stopp“ oder „Länge“.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Text example", 
    "n": 3,
    "stream": false
}

Beispielantwort JSON:

{
    "id": "example-id",
    "object": "text_completion",
    "created": 1653666286,
    "model": "davinci",
    "choices": [
        {
            "text": "Response generated text",
            "index": 0,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Szenario: Ihr API-Aufruf bittet um mehrere Antworten (N>1), und mindestens eine der Antworten wird gefiltert.

HTTP-Antwortcode Antwortverhalten
200 Die Generierungen, die gefiltert wurden, weisen den finish_reason-Wert content_filter auf.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Text example",
    "n": 3,
    "stream": false
}

Beispielantwort JSON:

{
    "id": "example",
    "object": "text_completion",
    "created": 1653666831,
    "model": "ada",
    "choices": [
        {
            "text": "returned text 1",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null
        },
        {
            "text": "returned text 2",
            "index": 1,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Szenario: Eine unangemessene Eingabeäußerung wird an die Abschluss-API gesendet (entweder für Streaming oder nicht für Streaming)

HTTP-Antwortcode Antwortverhalten
400 Der API-Aufruf schlägt fehl, wenn der Prompt einen Inhaltsfilter wie konfiguriert auslöst. Ändern Sie die Äußerung, und versuchen Sie es erneut.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Content that triggered the filtering model"
}

Beispielantwort JSON:

"error": {
    "message": "The response was filtered",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400
}

Szenario: Sie führen einen Streamingabschlussaufruf durch. Keine Ausgabeinhalte sind in einer gefilterten Kategorie und einem Schweregrad klassifiziert.

HTTP-Antwortcode Antwortverhalten
200 In diesem Fall wird durch den Aufruf die gesamte Generierung zurück gestreamt, und finish_reason für jede generierte Antwort ist entweder „Länge“ oder „Stopp“.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Beispielantwort JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670914,
    "model": "ada",
    "choices": [
        {
            "text": "last part of generation",
            "index": 2,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Szenario: Sie führen einen Streamingabschlussaufruf mit der Aufforderung nach mehreren Vervollständigungen durch, und mindestens ein Teil des Ausgabeinhalts wird gefiltert.

HTTP-Antwortcode Antwortverhalten
200 Für einen bestimmten Generierungsindex enthält der letzte Teil der Generierung einen finish_reason-Wert ungleich null. Der Wert ist im Fall einer gefilterten Generierung content_filter.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Beispielantwort JSON:

 {
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670515,
    "model": "ada",
    "choices": [
        {
            "text": "Last part of generated text streamed back",
            "index": 2,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Szenario: Das Inhaltsfiltersystem wird für den Abschluss nicht ausgeführt

HTTP-Antwortcode Antwortverhalten
200 Wenn das Inhaltsfiltersystem nicht ausgeführt wird oder in anderer Weise nicht in der Lage ist, den Vorgang zeitgerecht abzuschließen, wird Ihre Anforderung trotzdem ohne Filterung abgeschlossen. Sie können bestätigen, dass die Filterung nicht angewendet wurde, indem Sie im Objekt content_filter_result nach einer Fehlermeldung suchen.

Beispiel für Anforderungsnutzdaten:

{
    "prompt":"Text example",
    "n": 1,
    "stream": false
}

Beispielantwort JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1652294703,
    "model": "ada",
    "choices": [
        {
            "text": "generated text",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null,
            "content_filter_result": {
                "error": {
                    "code": "content_filter_error",
                    "message": "The contents are not filtered"
                }
            }
        }
    ]
}

Anmerkungen

Inhaltsfilter

Wenn Anmerkungen wie im folgenden Codeschnipsel zu sehen aktiviert sind, werden über die API die folgenden Informationen für die Kategorien („Hass“, „Sexuell“, „Gewalt“, und „Selbstverletzung“) zurückgegeben:

  • Inhaltsfilterkategorie („hate“, „sexual“, „violence“, „self_harm“)
  • Schweregrad („safe“, „low“, „medium“ oder „high“) innerhalb der jeweiligen Inhaltskategorie
  • Filterstatus („true“ oder „false“)

Optionale Modelle

Optionale Modelle können im Anmerkungsmodus (gibt Informationen zurück, wenn Inhalte gekennzeichnet, aber nicht gefiltert wurden) oder im Filtermodus (gibt Informationen zurück, wenn Inhalte gekennzeichnet und gefiltert wurden) aktiviert werden.

Wenn Anmerkungen wie in den folgenden Codeschnipsels zu sehen aktiviert sind, werden von der API die folgenden Informationen für optionale Modelle zurückgegeben:

Modell Output
Jailbreak erkannt (true oder false),
gefiltert (true oder false)
Indirekte Angriffe erkannt (true oder false),
gefiltert (true oder false)
geschützter Materialtext erkannt (true oder false),
gefiltert (true oder false)
geschützter Materialcode erkannt (true oder false),
gefiltert (true oder false),
Beispielzitat des öffentlichen GitHub-Repositorys, in dem der Codeschnipsel gefunden wurde,
Die Lizenz des Repositorys

Wenn in Ihrer Anwendung Code angezeigt wird, sollte die Anwendung auch unbedingt das Beispielzitat aus den Anmerkungen anzeigen. Die Einhaltung der zitierten Lizenz kann auch für die Abdeckung der Verpflichtung des Kunden zum Urheberrecht erforderlich sein.

In der folgenden Tabelle finden Sie die Verfügbarkeit von Anmerkungen in jeder API-Version:

Kategorie 2024-02-01 GA 2024-04-01-preview 2023-10-01-preview 2023-06-01-preview
Hass
Gewalt
Sexuell
Selbstverletzung
Prompt Shield für Jailbreak-Angriffe
Prompt Shield für indirekte Angriffe
Geschützter Materialtext
Geschützter Materialcode
Sperrliste für Obszönitäten
Benutzerdefinierte Sperrliste
# os.getenv() for the endpoint and key assumes that you are using environment variables.

import os
from openai import AzureOpenAI
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-03-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") 
    )

response = client.completions.create(
    model="gpt-35-turbo-instruct", # model = "deployment_name".
    prompt="{Example prompt where a severity level of low is detected}" 
    # Content that is detected at severity level medium or high is filtered, 
    # while content detected at severity level low isn't filtered by the content filters.
)

print(response.model_dump_json(indent=2))

Output

{ 
  "choices": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "protected_material_code": { 
          "citation": { 
            "URL": " https://github.com/username/repository-name/path/to/file-example.txt", 
            "license": "EXAMPLE-LICENSE" 
          }, 
          "detected": true,
          "filtered": false 
        }, 
        "protected_material_text": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "finish_reason": "stop", 
      "index": 0, 
      "message": { 
        "content": "Example model response will be returned ", 
        "role": "assistant" 
      } 
    } 
  ], 
  "created": 1699386280, 
  "id": "chatcmpl-8IMI4HzcmcK6I77vpOJCPt0Vcf8zJ", 
  "model": "gpt-35-turbo-instruct", 
  "object": "text.completion",
  "usage": { 
    "completion_tokens": 40, 
    "prompt_tokens": 11, 
    "total_tokens": 417 
  },  
  "prompt_filter_results": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "jailbreak": { 
          "detected": false, 
          "filtered": false 
        }, 
        "profanity": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "prompt_index": 0 
    } 
  ]
} 

Ausführliche Informationen zu den Rückschluss-REST-API-Endpunkten für Azure OpenAI und zum Erstellen von Chats und Vervollständigungen finden Sie im Referenzleitfaden zur Rest-API des Azure OpenAI Service. Anmerkungen werden für alle Szenarien zurückgegeben, wenn Sie eine beliebige Vorschau-API-Version ab 2023-06-01-preview sowie die GA-API-Version 2024-02-01 verwenden.

Beispielszenario: Eine Eingabeeingabeaufforderung mit Inhalten, die in einer gefilterten Kategorie und einem Schweregrad klassifiziert sind, wird an die Vervollständigungs-API gesendet.

{
    "error": {
        "message": "The response was filtered due to the prompt triggering Azure Content management policy. 
                   Please modify your prompt and retry. To learn more about our content filtering policies
                   please read our documentation: https://go.microsoft.com/fwlink/?linkid=21298766",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400,
        "innererror": {
            "code": "ResponsibleAIPolicyViolation",
            "content_filter_result": {
                "hate": {
                    "filtered": true,
                    "severity": "high"
                },
                "self-harm": {
                    "filtered": true,
                    "severity": "high"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered":true,
                    "severity": "medium"
                }
            }
        }
    }
}

Dokumenteinbettung in Prompts

Ein wichtiger Aspekt der Azure OpenAI-Maßnahmen für verantwortungsvolle KI ist das Sicherheitssystem für Inhalte. Dieses System wird zusammen mit dem GPT-Kernmodell ausgeführt, um Unregelmäßigkeiten in der Modelleingabe und -ausgabe zu überwachen. Seine Leistung wird verbessert, wenn es zwischen verschiedenen Elementen Ihrer Eingabeaufforderung wie Systemeingaben, Benutzereingaben und der Ausgabe des KI-Assistenten unterscheiden kann.

Um die Erkennungsfunktionen zu verbessern, sollten Prompts nach den folgenden empfohlenen Methoden formatiert werden.

Chatvervollständigungs-API

Die Chatvervollständigungs-API ist definitionsgemäß strukturiert. Sie besteht aus einer Liste von Nachrichten, die jeweils eine zugewiesene Rolle haben.

Das Sicherheitssystem parst dieses strukturierte Format und wendet das folgende Verhalten an:

  • Bei den neuesten „Benutzer“-Inhalten werden die folgenden Kategorien von RAI-Risiken erkannt:
    • Hass
    • Sexuell
    • Gewalt
    • Selbstverletzung
    • Jailbreak (optional)

Dies ist ein Beispiel für ein Nachrichtenarray:

{"role": "system", "content": "Provide some context and/or instructions to the model."}, 
{"role": "user", "content": "Example question goes here."}, 
{"role": "assistant", "content": "Example answer goes here."}, 
{"role": "user", "content": "First question/message for the model to actually respond to."} 

Einbetten von Dokumenten in Ihren Prompt

Zusätzlich zur Erkennung der letzten Benutzerinhalte unterstützt Azure OpenAI auch die Erkennung bestimmter Risiken innerhalb von Kontextdokumenten über Prompt Shields – Erkennung von indirekten Promptangriffen. Sie sollten Teile der Eingabe, die ein Dokument (z. B. abgerufene Website, E-Mail usw.) sind, mit dem folgenden Dokumenttrennzeichen identifizieren.

<documents> 
*insert your document content here* 
</documents>

Dabei stehen die folgenden Optionen für die Erkennung in markierten Dokumenten zur Verfügung:

  • Erkennen Sie bei jedem markierten „Dokument“-Inhalt die folgenden Kategorien:
    • Indirekte Angriffe (optional)

Nachfolgend sehen Sie ein Beispiel für das Array der Chatvervollständigungsnachrichten:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n*insert your document content here*\n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."} 

JSON-Escapezeichen

Wenn Sie ungeprüfte Dokumente für die Erkennung markieren, muss der Inhalt des Dokuments mit JSON-Escapezeichen versehen sein, um ein erfolgreiches Parsen durch das Azure OpenAI-Sicherheitssystem zu gewährleisten.

Sehen Sie sich beispielsweise den folgenden E-Mail-Text an:

Hello Josè, 

I hope this email finds you well today.

Mit JSON-Escapezeichen würde er folgendermaßen lauten:

Hello Jos\u00E9,\nI hope this email finds you well today. 

Der Text mit Escapezeichen in einem Chatvervollständigungskontext würde folgendermaßen lauten:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n Hello Jos\\u00E9,\\nI hope this email finds you well today. \n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."}

Inhaltsstreaming

In diesem Abschnitt werden die Erfahrung und die Optionen für Azure OpenAI-Inhaltsstreaming beschrieben. Kunden haben die Möglichkeit, Inhalte aus der API abzurufen, während sie generiert werden, anstatt darauf zu warten, dass überprüfte Inhaltsblöcke Ihre Inhaltsfilter durchlaufen.

Standard

Das Inhaltsfiltersystem ist für alle Kunden standardmäßig integriert und aktiviert. Im Standardstreamingszenario wird Vervollständigungsinhalt gepuffert, das Inhaltsfiltersystem wird auf den gepufferten Inhalten ausgeführt, und dann werden Inhalte – abhängig von der Konfiguration der Inhaltsfilterung – entweder an Benutzer*innen zurückgegeben, wenn die Inhalte nicht gegen die Inhaltsfilterrichtlinie verstoßen (Microsoft-Standardrichtlinie oder benutzerdefinierte Konfiguration), oder sie werden sofort blockiert und geben einen Inhaltsfilterfehler zurück, ohne den schädlichen Vervollständigungsinhalt zurückzugeben. Dieser Vorgang wird bis zum Ende des Streams wiederholt. Der Inhalt wird gemäß der Inhaltsfilterrichtlinie vollständig überprüft, bevor er an Benutzer*innen zurückgegeben wird. Der Inhalt wird in diesem Fall nicht Token-für-Token zurückgegeben, sondern in „Inhaltsblöcken“ mit der entsprechenden Puffergröße.

Asynchroner Filter

Kunden können den asynchronen Filter als zusätzliche Option auswählen, um eine neue Streamingumgebung bereitzustellen. In diesem Fall werden Inhaltsfilter asynchron ausgeführt, und der Vervollständigungsinhalt wird sofort mit einer reibungslosen Token-für-Token-Streamingerfahrung zurückgegeben. Es wird kein Inhalt gepuffert, was eine schnelles Streaming mit Nulllatenz und Inhaltssicherheit ermöglicht.

Kunden müssen sich bewusst sein, dass das Feature zwar die Wartezeit verbessert, aber einen Kompromiss bezüglich der Sicherheit und Echtzeitüberprüfung kleinerer Abschnitte der Modellausgabe darstellt. Da Inhaltsfilter asynchron ausgeführt werden, werden Nachrichten zur Inhaltsmoderation und Signale zur Richtlinienverletzung verzögert, was bedeutet, dass einige Abschnitte mit schädlichen Inhalten, die andernfalls sofort gefiltert werden würden, den Benutzer*innen angezeigt werden könnten.

Anmerkungen: Anmerkungen und Inhaltsmoderationsmeldungen werden während des Streams kontinuierlich zurückgegeben. Es wird dringend empfohlen, in Ihren Apps Anmerkungen zu nutzen und zusätzliche KI-Inhaltssicherheitsmechanismen zu implementieren, z. B. das Schwärzen von Inhalten oder das Zurückgeben zusätzlicher Sicherheitsinformationen an Benutzer*innen.

Signal zur Inhaltsfilterung: Das Fehlersignal für die Inhaltsfilterung ist verzögert. Im Falle einer Richtlinienverletzung wird es zurückgegeben, sobald es verfügbar ist, und der Datenstrom wird beendet. Das Inhaltsfiltersignal wird innerhalb eines Fensters von ca. 1000 Zeichen des richtlinienverletzenden Inhalts garantiert.

Verpflichtung des Kunden zum Urheberrecht: Inhalte, die rückwirkend als geschütztes Material gekennzeichnet sind, können möglicherweise nicht durch die Verpflichtung des Kunden zum Urheberrecht abgedeckt werden.

Um asynchrone Filter in Azure OpenAI Studio zu aktivieren, folgen Sie der Schrittanleitung für den Inhaltsfilter, um eine neue Inhaltsfilterkonfiguration zu erstellen, und wählen Sie Asynchroner Filter im Abschnitt „Streaming“ aus.

Vergleich der Inhaltsfiltermodi

Vergleichen Streaming – Standard Streaming: asynchroner Filter
Status Allgemein verfügbar Öffentliche Vorschau
Berechtigung Alle Kunden Kunden, welche für die Filterung geänderter Inhalte genehmigt wurden
Vorgehensweise zum Aktivieren Standardmäßig aktiviert, keine Aktion erforderlich Kunden, welche für die Filterung geänderter Inhalte genehmigt wurden, können dies direkt über Azure OpenAI Studio konfigurieren (als Teil einer Inhaltsfilterkonfiguration, die auf Bereitstellungsebene angewendet wird)
Modalität und Verfügbarkeit Text; alle GPT-Modelle Text; alle GPT-Modelle mit Ausnahme von gpt-4-vision
Streamingumgebung Inhalt wird gepuffert und in Blöcken zurückgegeben. Nulllatenz (keine Pufferung, Filter werden asynchron ausgeführt)
Signal zur Inhaltsfilterung Sofortiges Filtersignal Verzögertes Filtersignal (in Inkrementen von bis zu ca. 1000 Zeichen)
Konfigurationen für Inhaltsfilterung Unterstützt Standard- und alle benutzerdefinierten Filtereinstellungen (einschließlich optionaler Modelle) Unterstützt Standard- und alle benutzerdefinierten Filtereinstellungen (einschließlich optionaler Modelle)

Anmerkungen und Beispielantworten

Promptanmerkungsnachricht

Diese entspricht den Standardanmerkungen.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

Vervollständigungstokennachricht

Vervollständigungsnachrichten werden sofort weitergeleitet. Es wird keine vorherige Moderation durchgeführt, und anfänglich werden keine Anmerkungen bereitgestellt.

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

Anmerkungsnachricht

Das Textfeld ist immer eine leere Zeichenfolge, was bedeutet, dass keine neuen Token vorhanden sind. Anmerkungen sind nur für bereits gesendete Token relevant. Möglicherweise gibt es mehrere Anmerkungsmeldungen, die auf dieselben Token verweisen.

"start_offset" und "end_offset" sind Offsets mit niedriger Granularität im Text (mit 0 am Anfang der Eingabeaufforderung), um zu markieren, für welchen Text die Anmerkung relevant ist.

"check_offset" stellt dar, wie viel Text vollständig moderiert wurde. Es handelt sich um eine exklusive Untergrenze für die "end_offset"-Werte zukünftiger Anmerkungen. Sie ist nicht abnehmend.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

Beispielantwortdatenstrom (durchläuft Filter)

Nachfolgend finden Sie eine echte Vervollständigungsantwort für einen Chat mithilfe eines asynchronen Filters. Beachten Sie, dass die Anmerkungen der Eingabeaufforderung nicht verändert werden, Vervollständigungstoken ohne Anmerkungen gesendet werden, und neue Anmerkungsnachrichten ohne Token gesendet werden – sie werden stattdessen bestimmten Inhaltsfilteroffsets zugeordnet.

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

Beispielantwortdatenstrom (durch Filter blockiert)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

Wichtig

Wenn die Inhaltsfilterung für einen Prompt ausgelöst wird und "status": 400 als Teil der Antwort empfangen wird, wird für diese Anforderung eine Gebühr erhoben, da der Prompt vom Dienst ausgewertet wurde. Gebühren fallen auch an, wenn "status":200 mit "finish_reason": "content_filter" empfangen wird. In diesem Fall treten beim Prompt keine Probleme auf, aber es wurde festgestellt, dass die vom Modell generierte Vervollständigung gegen die Inhaltsfilterregeln verstößt, was dazu führt, dass die Vervollständigung gefiltert wird.

Bewährte Methoden

Berücksichtigen Sie im Rahmen Ihres Anwendungsentwurfs die folgenden bewährten Methoden, um eine positive Erfahrung mit Ihrer Anwendung zu erzielen und gleichzeitig potenzielle Schäden zu minimieren:

  • Entscheiden Sie, wie Sie mit Szenarien umgehen möchten, in denen Ihre Benutzer Aufforderungen senden, die Inhalte enthalten, die nach einer gefilterten Kategorie und einem Schweregrad klassifiziert sind, oder in denen Ihre Anwendung anderweitig missbraucht wird.
  • Überprüfen Sie die finish_reason, um zu sehen, ob ein Abschluss gefiltert ist.
  • Überprüfen Sie, ob kein Fehlerobjekt im content_filter_result vorhanden ist (was angibt, dass Inhaltsfilter nicht ausgeführt wurden).
  • Wenn Sie das Modell für geschützten Materialcode im Anmerkungsmodus verwenden, sollten Sie die Zitat-URL anzeigen, wenn Sie den Code in Ihrer Anwendung anzeigen.

Nächste Schritte