Innehållsfiltrering

Viktigt!

Innehållsfiltreringssystemet tillämpas inte på frågor och slutföranden som bearbetas av Whisper-modellen i Azure OpenAI Service. Läs mer om Whisper-modellen i Azure OpenAI.

Azure OpenAI Service innehåller ett system för innehållsfiltrering som fungerar tillsammans med kärnmodeller. Det här systemet fungerar genom att köra både prompten och slutförandet genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata. Variationer i API-konfigurationer och programdesign kan påverka slutföranden och därmed filtreringsbeteende.

Innehållsfiltreringsmodellerna för kategorierna hat, sexuellt, våld och självskadebeteende har tränats och testats specifikt på följande språk: engelska, tyska, japanska, spanska, franska, italienska, portugisiska och kinesiska. Tjänsten kan dock fungera på många andra språk, men kvaliteten kan variera. I samtliga fall bör du göra dina egna tester för att säkerställa att det fungerar för ditt program.

Utöver innehållsfiltreringssystemet utför Azure OpenAI-tjänsten övervakning för att identifiera innehåll och/eller beteenden som föreslår användning av tjänsten på ett sätt som kan strida mot tillämpliga produktvillkor. Mer information om att förstå och minimera risker som är kopplade till ditt program finns i Transparensanteckning för Azure OpenAI. Mer information om hur data bearbetas för innehållsfiltrering och övervakning av missbruk finns i Data, sekretess och säkerhet för Azure OpenAI Service.

Följande avsnitt innehåller information om innehållsfiltreringskategorierna, allvarlighetsgraderna för filtrering och deras konfigurerbarhet samt API-scenarier som ska beaktas i programdesign och implementering.

Innehållsfiltreringskategorier

Innehållsfiltreringssystemet som är integrerat i Azure OpenAI-tjänsten innehåller:

  • Neurala klassificeringsmodeller med flera klasser som syftar till att identifiera och filtrera skadligt innehåll; modellerna omfattar fyra kategorier (hat, sexuellt, våld och självskadebeteende) över fyra allvarlighetsnivåer (säkra, låga, medelhöga och höga). Innehåll som identifieras på allvarlighetsnivå "säker" är märkt i anteckningar men är inte föremål för filtrering och kan inte konfigureras.
  • Andra valfria klassificeringsmodeller som syftar till att upptäcka risk för jailbreak och känt innehåll för text och kod. dessa modeller är binära klassificerare som flaggar om användar- eller modellbeteende kvalificerar sig som en jailbreak-attack eller matchar känd text eller källkod. Användning av dessa modeller är valfritt, men användning av kodmodellen för skyddat material kan krävas för kundens upphovsrättsåtagande.

Riskkategorier

Kategori beskrivning
Hat och rättvisa Hat- och rättviserelaterade skador avser allt innehåll som attackerar eller använder nedsättande eller diskriminerande språk med hänvisning till en person eller identitetsgrupper på grundval av vissa differentieringsattribut för dessa grupper, inklusive men inte begränsat till ras, etnicitet, nationalitet, könsidentitetsgrupper och uttryck, sexuell läggning, religion, invandringsstatus, förmågasstatus, personligt utseende, och kroppsstorlek. 

Rättvisa handlar om att se till att AI-system behandlar alla grupper av människor rättvist utan att bidra till befintliga samhälleliga orättvisor. Precis som hatpropaganda beror rättviserelaterade skador på olika behandling av identitetsgrupper.  
Sexuella Sexuell beskriver språk som rör anatomiska organ och könsorgan, romantiska relationer, handlingar som porträtteras i erotiska eller tillgivna termer, graviditet, fysiska sexuella handlingar, inklusive de som framställs som ett övergrepp eller en tvingad sexuell våldsam handling mot ens vilja, prostitution, pornografi och övergrepp.  
Våld Våld beskriver språk som rör fysiska handlingar som är avsedda att skada, skada, skada eller döda någon eller något; beskriver vapen, vapen och relaterade enheter, till exempel tillverkning, föreningar, lagstiftning osv.
Självskadebeteende Självskadebeteende beskriver språk relaterade till fysiska handlingar som är avsedda att avsiktligt skada, skada, skada ens kropp eller döda sig själv.
Skyddat material för text* Skyddad materialtext beskriver känt textinnehåll (till exempel sångtexter, artiklar, recept och valt webbinnehåll) som kan matas ut av stora språkmodeller.
Skyddat material för kod Kod för skyddat material beskriver källkod som matchar en uppsättning källkod från offentliga lagringsplatser, som kan matas ut av stora språkmodeller utan korrekt källlagringsplatser.

* Om du äger textmaterial och vill skicka textinnehåll för skydd kan du skicka en begäran.

Prompt Shields

Typ Beskrivning
Fråga sköld för jailbreak-attacker Jailbreak-attacker är användarfrågor som utformats för att provocera Generative AI-modellen till att uppvisa beteenden som den har tränats för att undvika eller bryta mot reglerna som anges i systemmeddelandet. Sådana attacker kan variera från invecklat rollspel till subtil omstörtning av säkerhetsmålet.
Prompt Shield för indirekta attacker Indirekta attacker, även kallade indirekta promptattacker eller direktinmatningsattacker mellan domäner, är en potentiell säkerhetsrisk där tredje part placerar skadliga instruktioner i dokument som Generative AI-systemet kan komma åt och bearbeta. Kräver inbäddning och formatering av dokument.

Textinnehåll

Varning

Fliken Allvarlighetsgradsdefinitioner i det här dokumentet innehåller exempel på skadligt innehåll som kan vara störande för vissa läsare.

Avbildningsinnehåll

Varning

Fliken Allvarlighetsgradsdefinitioner i det här dokumentet innehåller exempel på skadligt innehåll som kan vara störande för vissa läsare.

Konfigurerbarhet (förhandsversion)

Standardkonfigurationen för innehållsfiltrering är inställd på att filtrera med tröskelvärdet för medelhög allvarlighetsgrad för alla fyra kategorier för innehållsskador för både frågor och slutföranden. Det innebär att innehåll som identifieras på allvarlighetsgrad medel eller hög filtreras, medan innehåll som identifieras på allvarlighetsnivå låg inte filtreras av innehållsfiltren. Konfigurationsfunktionen är tillgänglig i förhandsversionen och gör att kunderna kan justera inställningarna separat för uppmaningar och slutföranden för att filtrera innehåll för varje innehållskategori på olika allvarlighetsnivåer enligt beskrivningen i tabellen nedan:

Allvarlighetsgrad filtrerad Kan konfigureras för frågor Kan konfigureras för slutföranden Beskrivningar
Låg, medelhög, hög Ja Ja Striktast filtreringskonfiguration. Innehåll som identifieras på allvarlighetsgraderna låg, medelhög och hög filtreras.
Medelhög, hög Ja Ja Standardinställningen. Innehåll som identifieras på allvarlighetsnivå låg filtreras inte, innehåll på medelhög och hög filtreras.
Högt Ja Ja Innehåll som identifieras på allvarlighetsgraderna låg och medel filtreras inte. Endast innehåll på hög allvarlighetsgrad filtreras.
Inga filter Om det godkänns* Om det godkänns* Inget innehåll filtreras oavsett allvarlighetsgrad som identifierats. Kräver godkännande*.

* Endast kunder som har godkänts för modifierad innehållsfiltrering har fullständig innehållsfiltreringskontroll och kan inaktivera innehållsfilter helt eller delvis. Kontrollen för innehållsfiltrering gäller inte för innehållsfilter för DALL-E (förhandsversion) eller GPT-4 Turbo med visuellt innehåll (förhandsversion). Använd för ändrade innehållsfilter med hjälp av det här formuläret: Azure OpenAI Limited Access Review: Modified Content Filtering (microsoft.com).

Kunderna ansvarar för att säkerställa att program som integrerar Azure OpenAI följer uppförandekoden.

Konfigurationer för innehållsfiltrering skapas i en resurs i Azure AI Studio och kan associeras med distributioner. Läs mer om konfigurerbarhet här.

Information om scenario

När innehållsfiltreringssystemet identifierar skadligt innehåll får du antingen ett fel i API-anropet om uppmaningen bedömdes vara olämplig, eller finish_reason så är content_filter svaret ett tecken på att en del av slutförandet har filtrerats. När du skapar ditt program eller system vill du ta hänsyn till dessa scenarier där innehållet som returneras av API:et Completions filtreras, vilket kan resultera i ofullständigt innehåll. Hur du agerar på den här informationen är programspecifikt. Beteendet kan sammanfattas i följande punkter:

  • Frågor som klassificeras på en filtrerad kategori och allvarlighetsgrad returnerar ett HTTP 400-fel.
  • Icke-strömmande slutförandeanrop returnerar inget innehåll när innehållet filtreras. Värdet finish_reason anges till content_filter. I sällsynta fall med längre svar kan ett partiellt resultat returneras. I dessa fall finish_reason uppdateras den.
  • För strömningsavslutsanrop returneras segment tillbaka till användaren när de har slutförts. Tjänsten fortsätter att strömmas tills den antingen når en stopptoken, längd eller när innehåll som klassificeras på en filtrerad kategori och allvarlighetsgrad identifieras.

Scenario: Du skickar ett icke-strömmande slutförandeanrop och ber om flera utdata. inget innehåll klassificeras på en filtrerad kategori- och allvarlighetsnivå

Tabellen nedan beskriver de olika sätt som innehållsfiltrering kan visas på:

HTTP-svarskod Svarsbeteende
200 I de fall då alla genereringar skickar filtren enligt konfigurationen läggs ingen information om con tältläge ration till i svaret. För finish_reason varje generation blir antingen stopp eller längd.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

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

Scenario: API-anropet ber om flera svar (N>1) och minst ett av svaren filtreras

HTTP-svarskod Svarsbeteende
200 Generationerna som filtrerades har värdet finish_reasoncontent_filter.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

{
    "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: En olämplig indataprompt skickas till API:et för slutförande (antingen för direktuppspelning eller icke-direktuppspelning)

HTTP-svarskod Svarsbeteende
400 API-anropet misslyckas när kommandotolken utlöser ett innehållsfilter som konfigurerats. Ändra kommandotolken och försök igen.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

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

Scenario: Du gör ett anrop för strömningsavslut; inget utdatainnehåll klassificeras på en filtrerad kategori och allvarlighetsgrad

HTTP-svarskod Svarsbeteende
200 I det här fallet strömmas anropet tillbaka med hela generationen och finish_reason blir antingen "längd" eller "stopp" för varje genererat svar.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

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

Scenario: Du gör ett anrop för att slutföra strömningen och ber om flera slutföranden och minst en del av utdatainnehållet filtreras

HTTP-svarskod Svarsbeteende
200 För ett givet generationsindex innehåller den sista delen av genereringen ett värde som inte är null finish_reason . Värdet är content_filter när genereringen filtrerades.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

 {
    "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: Innehållsfiltreringssystemet körs inte när det är klart

HTTP-svarskod Svarsbeteende
200 Om innehållsfiltreringssystemet är nere eller på annat sätt inte kan slutföra åtgärden i tid slutförs din begäran fortfarande utan innehållsfiltrering. Du kan fastställa att filtreringen inte tillämpades genom att söka efter ett felmeddelande i content_filter_result objektet.

Exempel på nyttolast för begäran:

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

Exempel på JSON-svar:

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

Kommentarer

Innehållsfilter

När anteckningar aktiveras enligt kodfragmentet nedan returneras följande information via API:et för kategorierna hat och rättvisa, sexuellt, våld och självskadebeteende:

  • innehållsfiltreringskategori (hat, sexuellt, våld, self_harm)
  • allvarlighetsgraden (säker, låg, medelhög eller hög) inom varje innehållskategori
  • filtreringsstatus (sant eller falskt).

Valfria modeller

Valfria modeller kan aktiveras i anteckningar (returnerar information när innehållet flaggades, men inte filtrerades) eller filterläget (returnerar information när innehållet flaggades och filtrerades).

När anteckningar aktiveras enligt kodfragmenten nedan returneras följande information av API:et för valfria modeller:

Modell Output
Jailbreak upptäckt (sant eller falskt),
filtrerat (sant eller falskt)
indirekta attacker upptäckt (sant eller falskt),
filtrerat (sant eller falskt)
skyddad materialtext upptäckt (sant eller falskt),
filtrerat (sant eller falskt)
kod för skyddat material upptäckt (sant eller falskt),
filtrerat (sant eller falskt),
Exempel på citat av den offentliga GitHub-lagringsplatsen där kodfragment hittades,
Lagringsplatsens licens

När du visar kod i ditt program rekommenderar vi starkt att programmet även visar exempelcitationen från anteckningarna. Efterlevnad av den anförde licensen kan också krävas för kundens upphovsrättsåtagande.

Se följande tabell för anteckningstillgängligheten i varje API-version:

Kategori 2024-02-01 GA 2024-04-01-preview Förhandsversion 2023-10-01 Förhandsversion 2023-06-01
Hatar
Våld
Sexuella
Självskadebeteende
Fråga Shield om jailbreak-attacker
Fråga Shield om indirekta attacker
Skyddad materialtext
Kod för skyddat material
Svordomsblockeringslista
Anpassad blockeringslista
# 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 
    } 
  ]
} 

Mer information om rest-API-slutpunkter för inferens för Azure OpenAI och hur du skapar chattar och slutföranden finns i referensvägledningen för REST API för Azure OpenAI-tjänsten. Anteckningar returneras för alla scenarier när du använder en förhandsversion av API från 2023-06-01-previewoch med , samt GA API-versionen 2024-02-01.

Exempelscenario: En indataprompt som innehåller innehåll som klassificeras på en filtrerad kategori och allvarlighetsgrad skickas till API:et för slutföranden

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

Inbäddning av dokument i prompter

En viktig aspekt av Azure OpenAI:s ansvarsfulla AI-åtgärder är innehållssäkerhetssystemet. Det här systemet körs tillsammans med gpt-kärnmodellen för att övervaka eventuella oegentligheter i modellens indata och utdata. Dess prestanda förbättras när den kan skilja mellan olika element i din fråga, till exempel systemindata, användarindata och AI-assistentens utdata.

För förbättrade identifieringsfunktioner bör prompterna formateras enligt följande rekommenderade metoder.

API för chattens slutförande

API:et för chattens slutförande är uppbyggt per definition. Den består av en lista med meddelanden, var och en med en tilldelad roll.

Säkerhetssystemet parsar det här strukturerade formatet och tillämpar följande beteende:

  • På det senaste användarinnehållet identifieras följande kategorier av RAI-risker:
    • Hatar
    • Sexuella
    • Våld
    • Självskadebeteende
    • Jailbreak (valfritt)

Det här är ett exempel på en meddelandematris:

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

Bädda in dokument i prompten

Förutom identifiering av senaste användarinnehåll har Azure OpenAI även stöd för identifiering av specifika risker i kontextdokument via Prompt Shields – Indirect Prompt Attack Detection. Du bör identifiera delar av indata som är ett dokument (t.ex. hämtad webbplats, e-post osv.) med följande dokumentgränsare.

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

När du gör det är följande alternativ tillgängliga för identifiering i taggade dokument:

  • Identifiera följande kategorier för varje taggat dokumentinnehåll:
    • Indirekta attacker (valfritt)

Här är ett exempel på en matris för chattavslutsmeddelanden:

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

När du taggar obevakade dokument för identifiering bör dokumentinnehållet vara JSON-undantaget för att säkerställa lyckad parsning av Azure OpenAI-säkerhetssystemet.

Se till exempel följande e-posttext:

Hello Josè, 

I hope this email finds you well today.

När JSON flyr skulle det läsas:

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

Den undantagna texten i en chattkompletteringskontext skulle läsa:

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

Innehållsströmning

I det här avsnittet beskrivs strömningsupplevelsen och alternativen för Azure OpenAI-innehållsströmning. Med godkännande kan du ta emot innehåll från API:et när det genereras, i stället för att vänta på att segment av innehåll som har verifierats ska skicka innehållsfiltren.

Standardvärde

Innehållsfiltreringssystemet är integrerat och aktiverat som standard för alla kunder. I standardscenariot för direktuppspelning buffrar slutförandeinnehållet, innehållsfiltreringssystemet körs på det buffrade innehållet och – beroende på konfigurationen för innehållsfiltrering – antingen returneras innehållet till användaren om det inte bryter mot innehållsfiltreringsprincipen (Microsofts standardinställning eller en anpassad användarkonfiguration) eller så blockeras det omedelbart och returnerar ett innehållsfiltreringsfel. utan att returnera det skadliga slutförandeinnehållet. Den här processen upprepas till slutet av strömmen. Innehållet granskas fullständigt enligt innehållsfiltreringsprincipen innan det returneras till användaren. Innehållet returneras inte token för token i det här fallet, utan i "innehållssegment" med respektive buffertstorlek.

Asynkront modifierat filter

Kunder som har godkänts för ändrade innehållsfilter kan välja det asynkrona ändrade filtret som ytterligare ett alternativ, vilket ger en ny strömningsupplevelse. I det här fallet körs innehållsfilter asynkront och slutförandeinnehåll returneras omedelbart med en smidig strömningsupplevelse för token per token. Inget innehåll buffrat, vilket ger noll svarstid.

Kunderna måste vara medvetna om att även om funktionen förbättrar svarstiden är det en kompromiss mot säkerheten och realtidskontroll av mindre delar av modellutdata. Eftersom innehållsfilter körs asynkront fördröjs kon tältläge rationsmeddelanden och policyöverträdelsesignaler, vilket innebär att vissa delar av skadligt innehåll som annars skulle ha filtrerats omedelbart kan visas för användaren.

Anteckningar: Anteckningar och con tältläge rationsmeddelanden returneras kontinuerligt under strömmen. Vi rekommenderar starkt att du använder anteckningar i din app och implementerar ytterligare säkerhetsmekanismer för AI-innehåll, till exempel redigera innehåll eller returnera ytterligare säkerhetsinformation till användaren.

Signal för innehållsfiltrering: Felsignalen för innehållsfiltrering fördröjs. Om det uppstår en principöverträdelse returneras den så snart den är tillgänglig och strömmen stoppas. Innehållsfiltreringssignalen garanteras inom ett fönster på ~1 000 tecken för innehåll som bryter mot principen.

Godkännande för modifierad innehållsfiltrering krävs för åtkomst till det asynkrona ändrade filtret. Programmet finns här. Om du vill aktivera det i Azure OpenAI Studio följer du instruktionsguiden för innehållsfiltret för att skapa en ny konfiguration för innehållsfiltrering och väljer Asynkront modifierat filter i avsnittet Direktuppspelning.

Jämförelse av lägen för innehållsfiltrering

Jämför Direktuppspelning – standard Direktuppspelning – asynkront modifierat filter
Status Allmän tillgänglighet Allmänt tillgänglig förhandsversion
Berättigande Alla kunder Kunder som godkänts för modifierad innehållsfiltrering
Så här aktiverar du Aktiverad som standard krävs ingen åtgärd Kunder som godkänts för modifierad innehållsfiltrering kan konfigurera den direkt i Azure OpenAI Studio (som en del av en konfiguration för innehållsfiltrering som tillämpas på distributionsnivå)
Modalitet och tillgänglighet Text; alla GPT-modeller Text; alla GPT-modeller utom gpt-4-vision
Direktuppspelningsupplevelse Innehållet buffrad och returneras i segment Noll svarstid (ingen buffring, filter körs asynkront)
Signal för innehållsfiltrering Omedelbar filtreringssignal Fördröjd filtreringssignal (i steg om upp till ~1 000 tecken)
Konfigurationer för innehållsfiltrering Stöder standard- och kunddefinierade filterinställningar (inklusive valfria modeller) Stöder standard- och kunddefinierade filterinställningar (inklusive valfria modeller)

Anteckningar och exempelsvar

Meddelande om att fråga

Detta är samma som standardanteckningar.

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

Meddelande om slutförandetoken

Slutförandemeddelanden vidarebefordras omedelbart. Ingen moderering utförs först och inga anteckningar tillhandahålls från början.

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 
} 

Anteckningsmeddelande

Textfältet är alltid en tom sträng som anger inga nya token. Anteckningar är endast relevanta för token som redan har skickats. Det kan finnas flera anteckningsmeddelanden som refererar till samma token.

"start_offset" och "end_offset" är förskjutningar med låg kornighet i text (med 0 i början av prompten) för att markera vilken text kommentaren är relevant för.

"check_offset" representerar hur mycket text som har modererats helt. Det är en exklusiv lägre gräns för värdena för "end_offset" framtida anteckningar. Den minskar inte.

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 
} 

Exempel på svarsström (skickar filter)

Nedan visas ett verkligt svar på chattens slutförande med hjälp av ett asynkront modifierat filter. Observera att promptanteckningarna inte ändras, att slutförandetoken skickas utan anteckningar och att nya anteckningsmeddelanden skickas utan token. De associeras i stället med vissa förskjutningar av innehållsfilter.

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

Exempel på svarsström (blockeras av filter)

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

Viktigt!

När innehållsfiltrering utlöses för en uppmaning och en tas emot som en "status": 400 del av svaret debiteras den här begäran eftersom uppmaningen utvärderades av tjänsten. Avgifter inträffar också när en "status":200 tas emot med "finish_reason": "content_filter". I det här fallet hade uppmaningen inga problem, men slutförandet som genererades av modellen upptäcktes bryta mot reglerna för innehållsfiltrering som resulterar i att slutförandet filtreras.

Bästa praxis

Som en del av din applikationsdesign, överväg följande bästa praxis för att leverera en positiv upplevelse med din applikation samtidigt som du minimerar potentiella skador:

  • Besluta hur du vill hantera scenarier där dina användare skickar frågor med innehåll som klassificeras vid en filtrerad kategori och allvarlighetsgradsnivå eller på annat sätt missbrukar ditt program.
  • Kontrollera finish_reason om ett slutförande har filtrerats.
  • Kontrollera att det inte finns något felobjekt i content_filter_result (som anger att innehållsfilter inte kördes).
  • Om du använder kodmodellen för skyddat material i kommentarsläge visar du källhänvisnings-URL:en när du visar koden i ditt program.

Nästa steg