Delen via


Inhoud filteren

Belangrijk

Het inhoudsfiltersysteem wordt niet toegepast op prompts en voltooiingen die worden verwerkt door het Whisper-model in Azure OpenAI Service. Meer informatie over het Fluistermodel in Azure OpenAI.

Azure OpenAI Service bevat een inhoudsfiltersysteem dat naast kernmodellen werkt, waaronder DALL-E-installatiekopieën. Dit systeem werkt door zowel de prompt als voltooiing uit te voeren via een ensemble van classificatiemodellen die zijn gericht op het detecteren en voorkomen van de uitvoer van schadelijke inhoud. Het inhoudsfiltersysteem detecteert en onderneemt actie op specifieke categorieën van mogelijk schadelijke inhoud in zowel invoerprompts als uitvoervoltooiingen. Variaties in API-configuraties en toepassingsontwerp kunnen van invloed zijn op voltooiingen en dus filtergedrag.

De inhoudsfiltermodellen voor de categorieën haat, seksueel, geweld en zelfbeschadiging zijn specifiek getraind en getest op de volgende talen: Engels, Duits, Japans, Spaans, Frans, Italiaans, Portugees en Chinees. De service kan echter in veel andere talen werken, maar de kwaliteit kan variëren. In alle gevallen moet u uw eigen tests uitvoeren om ervoor te zorgen dat deze werkt voor uw toepassing.

Naast het systeem voor inhoudsfiltering voert de Azure OpenAI-service bewaking uit om inhoud en/of gedragingen te detecteren die het gebruik van de service voorstellen op een manier die mogelijk in strijd is met toepasselijke productvoorwaarden. Zie de Transparantienotitie voor Azure OpenAI voor meer informatie over het begrijpen en beperken van risico's die zijn gekoppeld aan uw toepassing. Zie Gegevens, privacy en beveiliging voor De Azure OpenAI-service voor meer informatie over hoe gegevens worden verwerkt voor inhoudsfiltering en misbruikcontrole.

De volgende secties bevatten informatie over de inhoudsfiltercategorieën, de ernstniveaus voor filteren en de configuratie ervan en API-scenario's die in overweging moeten worden genomen bij het ontwerpen en implementeren van toepassingen.

Categorieën voor inhoudsfilters

Het inhoudsfiltersysteem dat is geïntegreerd in de Azure OpenAI-service bevat:

  • Neurale classificatiemodellen met meerdere klassen die zijn gericht op het detecteren en filteren van schadelijke inhoud; de modellen hebben betrekking op vier categorieën (haat, seksueel, geweld en zelfschadiging) op vier ernstniveaus (veilig, laag, gemiddeld en hoog). Inhoud die is gedetecteerd op het ernstniveau 'veilig', wordt gelabeld in aantekeningen, maar is niet onderhevig aan filteren en kan niet worden geconfigureerd.
  • Andere optionele classificatiemodellen gericht op het detecteren van jailbreakrisico's en bekende inhoud voor tekst en code; deze modellen zijn binaire classificaties die aangeven of gedrag van gebruikers of modellen als jailbreakaanval of overeenkomst met bekende tekst of broncode wordt aangemerkt. Het gebruik van deze modellen is optioneel, maar het gebruik van het model voor beveiligde materiaalcode kan vereist zijn voor de dekking van het auteursrecht van de klant.

Risicocategorieën

Categorie Beschrijving
Haat en eerlijkheid Haat- en billijkheidsgerelateerde schade verwijst naar inhoud die een pejoratieve of discriminerende taal aanvalt of gebruikt met verwijzing naar een persoon of identiteitsgroep op basis van bepaalde differentiërende kenmerken van deze groepen, waaronder maar niet beperkt tot ras, etniciteit, nationaliteit, genderidentiteitsgroepen en expressies, seksuele oriëntatie, religie, immigratiestatus, vaardigheidsstatus, persoonlijk uiterlijk, en lichaamsgrootte. 

Eerlijkheid houdt zich bezig met het garanderen dat AI-systemen alle groepen mensen rechtvaardig behandelen zonder bij te dragen aan bestaande maatschappelijke onzin. Net als bij haatspraak hangt eerlijkheidsgerelateerde schade af van de verschillende behandeling van identiteitsgroepen.  
Seksueel Seksueel beschrijft taal met betrekking tot anatomische organen en geslachtsdelen, romantische relaties, handelingen die worden weergegeven in erotische of genegenheidsvoorwaarden, zwangerschap, fysieke seksuele handelingen, waaronder die afgebeeld als een aanval of een gedwongen seksuele gewelddadige daad tegen wil, prostitutie, pornografie en misbruik.  
Geweld Geweld beschrijft taal met betrekking tot fysieke acties die bedoeld zijn om iemand of iets te kwetsen, verwonden, beschadigen of doden; beschrijft wapens, wapens en verwante entiteiten, zoals vervaardigingen, verenigingen, wetgeving, enz.
Zelfschade Zelfbeschadiging beschrijft taal met betrekking tot fysieke acties die bedoeld zijn om opzettelijk pijn te doen, gewond te raken, het lichaam te beschadigen of zichzelf te doden.
Beveiligd materiaal voor tekst* Beveiligde materiaaltekst beschrijft bekende tekstinhoud (bijvoorbeeld liedteksten, artikelen, recepten en geselecteerde webinhoud) die kan worden uitgevoerd door grote taalmodellen.
Beschermd materiaal voor code Beveiligde materiaalcode beschrijft broncode die overeenkomt met een set broncode uit openbare opslagplaatsen, die kan worden uitgevoerd door grote taalmodellen zonder de juiste bronvermelding van bronopslagplaatsen.

* Als u eigenaar van tekstmateriaal bent en tekstinhoud wilt indienen voor beveiliging, dient u een aanvraag in.

Promptschilden

Type Description
Schild vragen voor jailbreakaanvallen Jailbreak-aanvallen zijn gebruikersprompts die zijn ontworpen om het Generatieve AI-model te veroorzaken in het vertonen van gedrag dat is getraind om de regels die zijn ingesteld in het systeembericht te vermijden of te verbreken. Dergelijke aanvallen kunnen variëren van ingewikkelde roleplay tot subtiele subversie van de veiligheidsdoelstelling.
Prompt Shield voor indirecte aanvallen Indirecte aanvallen, ook wel indirecte promptaanvallen of injectieaanvallen tussen domeinen genoemd, zijn een potentieel beveiligingsprobleem waarbij derden schadelijke instructies plaatsen in documenten die het Generatieve AI-systeem kan openen en verwerken. Vereist het insluiten en opmaken van documenten.

Tekstinhoud

Waarschuwing

Het tabblad Ernstdefinities in dit document bevat voorbeelden van schadelijke inhoud die voor sommige lezers kan storen.

Afbeeldingsinhoud

Waarschuwing

Het tabblad Ernstdefinities in dit document bevat voorbeelden van schadelijke inhoud die voor sommige lezers kan storen.

Configureerbaarheid (preview)

De standaardconfiguratie voor inhoudsfiltering voor de GPT-modelreeks is ingesteld op filteren op de drempelwaarde voor gemiddelde ernst voor alle vier inhoudsschadecategorieën (haat, geweld, seksueel en zelfschade) en is van toepassing op zowel prompts (tekst, multimodale tekst/afbeelding) als voltooiingen (tekst). Dit betekent dat inhoud die wordt gedetecteerd op ernstniveau gemiddeld of hoog, wordt gefilterd, terwijl inhoud op ernstniveau laag niet wordt gefilterd door de inhoudsfilters. Voor DALL-E is de standaarddrempel voor ernst ingesteld op laag voor zowel prompts (tekst) als voltooiingen (afbeeldingen), zodat inhoud op ernstniveau laag, gemiddeld of hoog wordt gefilterd. De configureerbaarheidsfunctie is beschikbaar in preview en stelt klanten in staat om de instellingen, afzonderlijk voor prompts en voltooiingen, aan te passen om inhoud voor elke inhoudscategorie te filteren op verschillende ernstniveaus, zoals beschreven in de onderstaande tabel:

Ernst gefilterd Configureerbaar voor prompts Configureerbaar voor voltooiingen Omschrijvingen
Laag, gemiddeld, hoog Ja Ja Striktste filterconfiguratie. Inhoud die is gedetecteerd op ernstniveaus laag, gemiddeld en hoog, wordt gefilterd.
Gemiddeld, hoog Ja Ja Inhoud die is gedetecteerd op ernstniveau laag, wordt niet gefilterd, inhoud op gemiddeld en hoog wordt gefilterd.
Hoog Ja Ja Inhoud die is gedetecteerd op ernstniveaus laag en gemiddeld, wordt niet gefilterd. Alleen inhoud op ernstniveau hoog wordt gefilterd. Vereist goedkeuring1.
Geen filters Indien goedgekeurd1 Indien goedgekeurd1 Er wordt geen inhoud gefilterd, ongeacht het ernstniveau dat is gedetecteerd. Vereist goedkeuring1.

1 Voor Azure OpenAI-modellen hebben alleen klanten die zijn goedgekeurd voor aangepaste inhoudsfilters volledige controle over het filteren van inhoud en kunnen inhoudsfilters uitschakelen. Aanvragen voor gewijzigde inhoudsfilters via dit formulier: Beperkte toegangsbeoordeling van Azure OpenAI: Aangepaste inhoudsfilters voor Azure Government-klanten. U kunt deze aanvraag indienen voor gewijzigde inhoudsfilters via dit formulier: Azure Government - Aangepaste inhoudsfilters aanvragen voor De Azure OpenAI-service.

Configureerbare inhoudsfilters voor invoer (prompts) en uitvoer (voltooiingen) zijn beschikbaar voor de volgende Azure OpenAI-modellen:

  • GPT-modelreeks
  • GPT-4 Turbo Vision GA* (turbo-2024-04-09)
  • GPT-4o
  • DALL-E 2 en 3

*Alleen beschikbaar voor GPT-4 Turbo Vision GA, is niet van toepassing op GPT-4 Turbo Vision preview

Configuraties voor inhoudsfilters worden gemaakt in een resource in Azure AI Studio en kunnen worden gekoppeld aan implementaties. Meer informatie over configureerbaarheid vindt u hier.

Klanten zijn verantwoordelijk voor het garanderen dat toepassingen die Azure OpenAI integreren, voldoen aan de gedragscode.

Scenariodetails

Wanneer het inhoudsfiltersysteem schadelijke inhoud detecteert, krijgt u een foutmelding over de API-aanroep als de prompt ongepast is geacht, of het finish_reason antwoord is content_filter bedoeld om aan te geven dat een deel van de voltooiing is gefilterd. Wanneer u uw toepassing of systeem bouwt, moet u rekening houden met deze scenario's waarbij de inhoud die wordt geretourneerd door de Voltooiings-API wordt gefilterd, wat kan leiden tot onvolledige inhoud. Hoe u op deze informatie reageert, is toepassingsspecifiek. Het gedrag kan worden samengevat in de volgende punten:

  • Prompts die zijn geclassificeerd op een gefilterd categorie- en ernstniveau, retourneren een HTTP 400-fout.
  • Niet-streaming-voltooiingsgesprekken retourneren geen inhoud wanneer de inhoud wordt gefilterd. De finish_reason waarde wordt ingesteld op content_filter. In zeldzame gevallen met langere antwoorden kan een gedeeltelijk resultaat worden geretourneerd. In deze gevallen wordt de finish_reason update bijgewerkt.
  • Voor aanroepen voor streaming-voltooiingen worden segmenten teruggezet naar de gebruiker wanneer ze zijn voltooid. De service blijft streamen totdat een stoptoken, lengte of wanneer inhoud die is geclassificeerd op een gefilterd categorie- en ernstniveau wordt gedetecteerd.

Scenario: u verzendt een niet-streaming-voltooiingsoproep waarin om meerdere uitvoer wordt gevraagd; er geen inhoud is geclassificeerd op een gefilterd categorie- en ernstniveau

In de onderstaande tabel ziet u een overzicht van de verschillende manieren waarop inhoudsfiltering kan worden weergegeven:

HTTP-antwoordcode Reactiegedrag
200 In de gevallen waarin alle generatie de filters doorgeeft zoals geconfigureerd, worden er geen con tentmodus ratiedetails toegevoegd aan het antwoord. De finish_reason voor elke generatie is stop of lengte.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-JSON:

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

Scenario: Uw API-aanroep vraagt om meerdere antwoorden (N>1) en ten minste één van de antwoorden wordt gefilterd

HTTP-antwoordcode Reactiegedrag
200 De generaties die zijn gefilterd, hebben een finish_reason waarde van content_filter.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-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
        }
    ]
}

Scenario: Er wordt een ongepaste invoerprompt verzonden naar de voltooiings-API (voor streaming of niet-streaming)

HTTP-antwoordcode Reactiegedrag
400 De API-aanroep mislukt wanneer de prompt een inhoudsfilter activeert zoals geconfigureerd. Wijzig de prompt en probeer het opnieuw.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-JSON:

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

Scenario: u maakt een aanroep van streaming-voltooiingen; er geen uitvoerinhoud is geclassificeerd op een gefilterd categorie- en ernstniveau

HTTP-antwoordcode Reactiegedrag
200 In dit geval wordt de aanroep terug gestreamd met de volledige generatie en finish_reason is dit 'lengte' of 'stop' voor elk gegenereerd antwoord.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-JSON:

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

Scenario: U roept streaming-voltooiingen aan om meerdere voltooiingen te vragen en ten minste een deel van de uitvoerinhoud wordt gefilterd

HTTP-antwoordcode Reactiegedrag
200 Voor een bepaalde generatieindex bevat het laatste segment van de generatie een niet-null-waarde finish_reason . De waarde is content_filter het moment waarop de generatie is gefilterd.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-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
        }
    ]
}

Scenario: het systeem voor inhoudsfiltering wordt niet uitgevoerd bij voltooiing

HTTP-antwoordcode Reactiegedrag
200 Als het inhoudsfiltersysteem niet beschikbaar is of de bewerking niet op tijd kan voltooien, wordt uw aanvraag nog steeds voltooid zonder inhoudsfiltering. U kunt bepalen dat het filteren niet is toegepast door te zoeken naar een foutbericht in het content_filter_result object.

Voorbeeld van nettolading van aanvraag:

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

Voorbeeld van antwoord-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"
                }
            }
        }
    ]
}

Aantekeningen

Inhoudsfilters

Wanneer aantekeningen zijn ingeschakeld zoals weergegeven in het onderstaande codefragment, wordt de volgende informatie geretourneerd via de API voor de categorieën haat en billijkheid, seksueel, geweld en zelfschade:

  • inhoudsfiltercategorie (haat, seksueel, geweld, self_harm)
  • het ernstniveau (veilig, laag, gemiddeld of hoog) binnen elke inhoudscategorie
  • filterstatus (waar of onwaar).

Optionele modellen

Optionele modellen kunnen worden ingeschakeld in aantekeningen (retourneert informatie wanneer inhoud is gemarkeerd, maar niet gefilterd) of filtermodus (retourneert informatie wanneer inhoud is gemarkeerd en gefilterd).

Wanneer aantekeningen zijn ingeschakeld zoals wordt weergegeven in de onderstaande codefragmenten, wordt de volgende informatie geretourneerd door de API voor optionele modellen:

Modelleren Uitvoer
Jailbreak gedetecteerd (waar of onwaar),
gefilterd (waar of onwaar)
indirecte aanvallen gedetecteerd (waar of onwaar),
gefilterd (waar of onwaar)
beveiligde materiaaltekst gedetecteerd (waar of onwaar),
gefilterd (waar of onwaar)
beveiligde materiaalcode gedetecteerd (waar of onwaar), gefilterd (waar of onwaar),

voorbeeldvermelding van openbare GitHub-opslagplaats waar codefragment is gevonden,
de licentie van de opslagplaats

Bij het weergeven van code in uw toepassing raden we u ten zeerste aan dat de toepassing ook de voorbeeldvermelding van de aantekeningen weergeeft. Naleving van de geciteerde licentie kan ook vereist zijn voor de dekking van het auteursrecht van de klant.

Zie de volgende tabel voor de beschikbaarheid van aantekeningen in elke API-versie:

Categorie 2024-02-01 GA 2024-04-01-preview 2023-10-01-preview 2023-06-01-preview
Haten
Geweld
Seksueel
Zelfschade
Prompt Shield voor jailbreakaanvallen
Prompt Shield voor indirecte aanvallen
Beveiligde materiaaltekst
Beveiligde materiaalcode
Blokkeringslijst voor grof taalgebruik
Aangepaste blokkeringslijst
# 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))

Uitvoer

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

Voor meer informatie over de deductie REST API-eindpunten voor Azure OpenAI en over het maken van chat- en voltooiingen, volgt u de naslaginformatie over de REST API van de Azure OpenAI-service. Aantekeningen worden geretourneerd voor alle scenario's bij het gebruik van een preview-API-versie vanaf 2023-06-01-preview, evenals de GA-API-versie 2024-02-01.

Voorbeeldscenario: Een invoerprompt met inhoud die is geclassificeerd op een gefilterd categorie- en ernstniveau, wordt verzonden naar de voltooiings-API

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

Document insluiten in prompts

Een belangrijk aspect van de verantwoordelijke AI-maatregelen van Azure OpenAI is het beveiligingssysteem voor inhoud. Dit systeem wordt uitgevoerd naast het GPT-kernmodel om onregelmatigheden in de invoer en uitvoer van het model te bewaken. De prestaties worden verbeterd wanneer er onderscheid kan worden gemaakt tussen verschillende elementen van uw prompt, zoals systeeminvoer, gebruikersinvoer en de uitvoer van de AI-assistent.

Voor verbeterde detectiemogelijkheden moeten prompts worden opgemaakt volgens de volgende aanbevolen methoden.

API voor voltooiing van chat

De API voor chatvoltooiing is per definitie gestructureerd. Het bestaat uit een lijst met berichten, elk met een toegewezen rol.

Het veiligheidssysteem parseert deze gestructureerde indeling en past het volgende gedrag toe:

  • Op de meest recente 'gebruikers'-inhoud worden de volgende categorieën RAI-risico's gedetecteerd:
    • Haten
    • Seksueel
    • Geweld
    • Zelfschade
    • Jailbreak (optioneel)

Dit is een voorbeeld van een berichtmatrix:

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

Documenten insluiten in uw prompt

Naast detectie van laatste gebruikersinhoud biedt Azure OpenAI ook ondersteuning voor de detectie van specifieke risico's binnen contextdocumenten via Prompt Shields – Indirect Prompt Attack Detection. U moet delen van de invoer identificeren die een document zijn (bijvoorbeeld opgehaalde website, e-mail, enzovoort) met het volgende documentscheidingsteken.

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

Wanneer u dit doet, zijn de volgende opties beschikbaar voor detectie op gelabelde documenten:

  • Detecteer op elke getagde 'document'-inhoud de volgende categorieën:
    • Indirecte aanvallen (optioneel)

Hier volgt een voorbeeld van een matrix met chatvoltooiingsberichten:

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

Wanneer u niet-gecodeerde documenten tagt voor detectie, moet de documentinhoud JSON-escaped zijn om te zorgen voor een geslaagde parsering door het Azure OpenAI-beveiligingssysteem.

Zie bijvoorbeeld de volgende hoofdtekst van de e-mail:

Hello Josè, 

I hope this email finds you well today.

Met JSON-escape zou het het volgende lezen:

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

De escape-tekst in een context voor chatvoltooiing zou het volgende lezen:

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

Inhoud streamen

In deze sectie wordt de streaming-ervaring en opties van Azure OpenAI-inhoud beschreven. Klanten hebben de mogelijkheid om inhoud te ontvangen van de API terwijl deze wordt gegenereerd, in plaats van te wachten op segmenten van inhoud die zijn geverifieerd om uw inhoudsfilters door te geven.

Standaardinstelling

Het inhoudsfiltersysteem is standaard geïntegreerd en ingeschakeld voor alle klanten. In het standaardscenario voor streaming wordt voltooiingsinhoud gebufferd, wordt het inhoudsfiltersysteem uitgevoerd op de gebufferde inhoud. Afhankelijk van de configuratie voor inhoudsfiltering wordt inhoud geretourneerd aan de gebruiker als deze niet in strijd is met het inhoudsfilterbeleid (de standaardinstelling van Microsoft of een aangepaste gebruikersconfiguratie), of wordt deze onmiddellijk geblokkeerd en wordt een inhoudsfilterfout geretourneerd, zonder de schadelijke voltooiingsinhoud te retourneren. Dit proces wordt herhaald tot het einde van de stream. Inhoud wordt volledig gecontroleerd op basis van het inhoudsfilterbeleid voordat deze wordt geretourneerd aan de gebruiker. In dit geval wordt geen token-by-token geretourneerd, maar in 'inhoudssegmenten' van de respectieve buffergrootte.

Asynchroon filter

Klanten kunnen het Asynchrone filter kiezen als een extra optie, zodat ze een nieuwe streaming-ervaring kunnen bieden. In dit geval worden inhoudsfilters asynchroon uitgevoerd en wordt voltooiingsinhoud onmiddellijk geretourneerd met een vloeiende token-by-tokenstreaming-ervaring. Er wordt geen inhoud gebufferd, wat een snelle streaming-ervaring mogelijk maakt met nul latentie die is gekoppeld aan de veiligheid van inhoud.

Klanten moeten zich ervan bewust zijn dat terwijl de functie de latentie verbetert, het een compromis is tegen de veiligheid en realtime controle van kleinere secties van modeluitvoer. Omdat inhoudsfilters asynchroon worden uitgevoerd, worden con tentmodus rationberichten en beleidsschendingssignalen vertraagd, wat betekent dat sommige secties van schadelijke inhoud die anders onmiddellijk zouden zijn gefilterd, kunnen worden weergegeven aan de gebruiker.

Aantekeningen: Aantekeningen en con tentmodus ratieberichten worden continu geretourneerd tijdens de stream. We raden u ten zeerste aan aantekeningen in uw app te gebruiken en aanvullende beveiligingsmechanismen voor AI-inhoud te implementeren, zoals het redacteren van inhoud of het retourneren van aanvullende veiligheidsinformatie aan de gebruiker.

Signaal voor inhoudsfiltering: het foutsignaal voor inhoudsfilters is vertraagd. Als er sprake is van een schending van het beleid, wordt deze geretourneerd zodra deze beschikbaar is en wordt de stream gestopt. Het signaal voor inhoudsfiltering wordt gegarandeerd binnen een venster van circa 1000 tekens van de inhoud die het beleid schendt.

Toezegging van het auteursrecht van de klant: inhoud die met terugwerkende kracht als beschermd materiaal wordt gemarkeerd, komt mogelijk niet in aanmerking voor de dekking van de copyright-toezegging van de klant.

Als u asynchroon filter in Azure OpenAI Studio wilt inschakelen, volgt u de instructie voor het inhoudsfilter om een nieuwe configuratie voor inhoudsfilters te maken en selecteert u Asynchroon filter in de sectie Streaming.

Vergelijking van inhoudsfiltermodi

Vergelijken Streaming - standaard Streaming - Asynchroon filter
Status GA Openbare preview
In aanmerking komend Alle klanten Klanten die zijn goedgekeurd voor aangepaste inhoudsfilters
Inschakelen Standaard ingeschakeld, geen actie nodig Klanten die zijn goedgekeurd voor aangepaste inhoudsfiltering, kunnen deze rechtstreeks configureren in Azure OpenAI Studio (als onderdeel van een configuratie voor inhoudsfiltering, toegepast op implementatieniveau)
Modaliteit en beschikbaarheid Sms; alle GPT-modellen Sms; alle GPT-modellen
Streaming-ervaring Inhoud wordt gebufferd en geretourneerd in segmenten Nullatentie (geen buffering, filters worden asynchroon uitgevoerd)
Signaal voor inhoudsfiltering Direct filtersignaal Vertraagd filtersignaal (in stappen van maximaal ~1000 tekens)
Configuraties voor inhoudsfilters Biedt ondersteuning voor standaard- en door de klant gedefinieerde filterinstelling (inclusief optionele modellen) Biedt ondersteuning voor standaard- en door de klant gedefinieerde filterinstelling (inclusief optionele modellen)

Aantekeningen en voorbeeldreacties

Bericht voor aantekening vragen

Dit is hetzelfde als standaardaantekeningen.

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

Voltooiingstokenbericht

Voltooiingsberichten worden onmiddellijk doorgestuurd. Er wordt eerst geen toezicht uitgevoerd en er worden in eerste instantie geen aantekeningen gegeven.

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 
} 

Aantekeningsbericht

Het tekstveld is altijd een lege tekenreeks die aangeeft dat er geen nieuwe tokens zijn. Aantekeningen zijn alleen relevant voor al verzonden tokens. Er kunnen meerdere aantekeningsberichten zijn die verwijzen naar dezelfde tokens.

"start_offset" en "end_offset" zijn verschuivingen met lage granulariteit in tekst (met 0 aan het begin van de prompt) om te markeren voor welke tekst de aantekening relevant is.

"check_offset" geeft aan hoeveel tekst volledig is gemodereerd. Het is een exclusieve ondergrens voor de "end_offset" waarden van toekomstige aantekeningen. Het is niet aflopend.

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 
} 

Voorbeeld van antwoordstroom (filters doorgeven)

Hieronder ziet u een antwoord met een echte chatvoltooiing met behulp van asynchroon filter. Zoals u ziet, worden de promptaantekeningen niet gewijzigd, worden voltooiingstokens zonder aantekeningen verzonden en worden nieuwe aantekeningen zonder tokens verzonden. Deze worden in plaats daarvan gekoppeld aan bepaalde offsets voor inhoudsfilters.

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

Voorbeeld van antwoordstroom (geblokkeerd door filters)

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

Belangrijk

Wanneer inhoudsfiltering wordt geactiveerd voor een prompt en een "status": 400 wordt ontvangen als onderdeel van het antwoord, worden er kosten in rekening gebracht voor deze aanvraag omdat de prompt door de service is geëvalueerd. Vanwege de asynchrone aard van het inhoudsfiltersysteem worden kosten in rekening gebracht voor zowel de prompt als de voltooiingstokens. Er worden ook kosten in rekening gebracht wanneer een "status":200 wordt ontvangen met "finish_reason": "content_filter". In dit geval heeft de prompt geen problemen, maar de voltooiing die door het model is gegenereerd, is gedetecteerd om de regels voor inhoudsfiltering te schenden die ertoe leiden dat de voltooiing wordt gefilterd.

Aanbevolen procedures

Overweeg als onderdeel van uw toepassingsontwerp de volgende best practices om een positieve ervaring met uw toepassing te bieden en tegelijkertijd mogelijke schade tot een minimum te beperken:

  • Bepaal hoe u scenario's wilt afhandelen waarbij uw gebruikers prompts verzenden die inhoud bevatten die is geclassificeerd op een gefilterd categorie- en ernstniveau of die anderszins misbruik maakt van uw toepassing.
  • Controleer de finish_reason om te zien of een voltooiing is gefilterd.
  • Controleer of er geen foutobject is in het content_filter_result (waarmee wordt aangegeven dat inhoudsfilters niet zijn uitgevoerd).
  • Als u het beveiligde materiaalcodemodel gebruikt in de annotatemodus, geeft u de bronvermeldings-URL weer wanneer u de code in uw toepassing weergeeft.

Volgende stappen