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 umfasst ein Inhaltsfiltersystem, das mit Kernmodellen 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.

Schadenskategorien

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.
Jailbreak-Risiko Jailbreak-Angriffe sind Benutzer-Prompts, 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.
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.

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 Standardkonfiguration für die Inhaltsfilterung ist so festgelegt, dass für alle vier Kategorien von Inhaltsschäden sowohl für Eingabeaufforderungen als auch für Vervollständigungen der mittlere Schweregrad gefiltert wird. Dies 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. 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 Standardeinstellung. Mit dem Schweregrad „Niedrig“ erkannte Inhalte werden nicht gefiltert, Inhalte mit mittlerem und hohem Schweregrad werden gefiltert.
Hoch Ja Ja Mit den Schweregraden „Niedrig“ und „Mittel“ erkannte Inhalte werden nicht gefiltert. Nur Inhalte mit hohem Schweregrad werden gefiltert.
Keine Filter falls genehmigt* falls genehmigt* Unabhängig vom erkannten Schweregrad wird kein Inhalt gefiltert. Genehmigung erforderlich*.

* Nur Kunden, die für die angepasste Inhaltsfilterung zugelassen wurden, haben uneingeschränkte Kontrolle über die Inhaltsfilterung und können Inhaltsfilter teilweise oder vollständig deaktivieren. Das Inhaltsfiltersteuerelement gilt nicht für Inhaltsfilter für DALL-E (Vorschau) oder GPT-4 Turbo mit Vision (Vorschau). Angepasste Inhaltsfilter können über das folgende Formular beantragt werden: Azure OpenAI Limited Access Review: Modified Content Filtering (microsoft.com) (Überprüfung des eingeschränkten Zugriffs auf Azure OpenAI: angepasste Inhaltsfilter).

Kunden müssen sicherstellen, dass Anwendungen, die Azure OpenAI integrieren, dem Verhaltenskodex entsprechen.

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

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 im folgenden Codeschnipsel zu sehen aktiviert sind, werden von der API die folgenden Informationen für optionale Modelle (Jailbreak-Risiko, geschützter Materialtext, und geschützter Materialcode) zurückgegeben:

  • „category“ („jailbreak“, „protected_material_text“, „protected_material_code“)
  • „detected“ („true“ oder „false“)
  • „filtered“ („true“ oder „false“)

Beim Modell für geschützten Materialcode werden von der API die folgenden zusätzlichen Informationen zurückgegeben:

  • Ein Beispielzitat eines öffentlichen GitHub-Repositorys, in dem ein 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.

Anmerkungen sind derzeit in der GA-API-Version 2024-02-01 und in allen Vorschauversionen verfügbar, beginnend bei 2023-06-01-preview für Vervollständigungen und Chatvervollständigungen (GPT-Modelle). Der folgende Codeausschnitt zeigt, wie Anmerkungen verwendet werden:

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

Inhaltsstreaming

In diesem Abschnitt werden die Erfahrung und die Optionen für Azure OpenAI-Inhaltsstreaming beschrieben. Mit Genehmigung haben Sie die Möglichkeit, Inhalte aus der API zu erhalten, 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 geänderter Filter

Kunden, die für geänderte Inhaltsfilter genehmigt wurden, können den asynchron geänderten Filter als zusätzliche Option auswählen, wodurch eine neue Streamingerfahrung bereitgestellt wird. 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, so dass keine Wartezeit entsteht.

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.

Die Genehmigung für die Filterung geänderter Inhalte ist für den Zugriff auf den asynchronen geänderter Filter erforderlich. Die Anwendung finden Sie hier. Um ihn 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 geänderter Filter im Abschnitt „Streaming“ aus.

Vergleich der Inhaltsfiltermodi

Vergleichen Streaming – Standard Streaming – asynchroner geänderter 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 des asynchronen geänderten 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, kann eine Gebühr für diese Anforderung anfallen, 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