Filtrowanie zawartości

Ważne

System filtrowania zawartości nie jest stosowany do monitów i uzupełniania przetworzonych przez model Whisper w usłudze Azure OpenAI Service. Dowiedz się więcej o modelu Whisper w usłudze Azure OpenAI.

Usługa Azure OpenAI Service zawiera system filtrowania zawartości, który działa obok podstawowych modeli. Ten system działa przez uruchomienie zarówno monitu, jak i ukończenia przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wyjściu szkodliwej zawartości. System filtrowania zawartości wykrywa i podejmuje działania na określonych kategoriach potencjalnie szkodliwej zawartości w monitach wejściowych i uzupełnianiu danych wyjściowych. Zmiany w konfiguracjach interfejsu API i projekcie aplikacji mogą mieć wpływ na ukończenie, a tym samym zachowanie filtrowania.

Modele filtrowania zawartości dla kategorii nienawiści, seksualnej, przemocy i samookaleczenia zostały specjalnie przeszkolone i przetestowane na następujących językach: angielski, niemiecki, japoński, hiszpański, francuski, włoski, portugalski i chiński. Jednak usługa może działać w wielu innych językach, ale jakość może się różnić. We wszystkich przypadkach należy przeprowadzić własne testy, aby upewnić się, że działa ona w danym zastosowaniu.

Oprócz systemu filtrowania zawartości usługa Azure OpenAI wykonuje monitorowanie w celu wykrywania zawartości i/lub zachowań sugerujących korzystanie z usługi w sposób, który może naruszać odpowiednie warunki produktu. Aby uzyskać więcej informacji na temat rozumienia i ograniczania ryzyka związanego z aplikacją, zobacz temat Transparency Note for Azure OpenAI (Uwaga dotycząca przezroczystości dla usługi Azure OpenAI). Aby uzyskać więcej informacji na temat przetwarzania danych na potrzeby filtrowania zawartości i monitorowania nadużyć, zobacz Dane, prywatność i zabezpieczenia usługi Azure OpenAI Service.

W poniższych sekcjach przedstawiono informacje o kategoriach filtrowania zawartości, poziomach ważności filtrowania i ich konfigurowalności oraz scenariuszach interfejsu API, które mają być brane pod uwagę podczas projektowania i implementacji aplikacji.

Kategorie filtrowania zawartości

System filtrowania zawartości zintegrowany z usługą Azure OpenAI service zawiera:

  • Neuronowe modele klasyfikacji wieloklasowej mające na celu wykrywanie i filtrowanie szkodliwej zawartości; Modele obejmują cztery kategorie (nienawiść, seksualna, przemoc i samookaleczenia) na czterech poziomach ważności (bezpieczny, niski, średni i wysoki). Zawartość wykryta na poziomie ważności „bezpieczne” jest oznaczona adnotacjami, ale nie podlega filtrowaniu i nie jest konfigurowalna.
  • Inne opcjonalne modele klasyfikacji mające na celu wykrywanie ryzyka jailbreaku i znanej zawartości tekstu i kodu; te modele to klasyfikatory binarne, które flagują, czy zachowanie użytkownika lub modelu kwalifikuje się jako atak zabezpieczeń systemu lub pasuje do znanego tekstu lub kodu źródłowego. Korzystanie z tych modeli jest opcjonalne, ale korzystanie z modelu kodu chronionego materiału może być wymagane w przypadku pokrycia zobowiązania do praw autorskich klienta.

Kategorie szkód

Kategoria opis
Nienawiść i sprawiedliwość Szkody związane z nienawiścią i sprawiedliwością odnoszą się do wszelkich treści, które atakują lub używają języka pejoratywnego lub dyskryminującego w odniesieniu do osoby lub grup tożsamości na podstawie pewnych atrybutów różnicowych tych grup, w tym ras, pochodzenia etnicznego, narodowości, grup tożsamości płci i wyrażenia, orientacji seksualnej, religii, statusu imigracyjnego, statusu zdolności, wyglądu osobistego, i rozmiar ciała. 

Sprawiedliwość dotyczy zapewnienia, że systemy sztucznej inteligencji traktują wszystkie grupy ludzi sprawiedliwie bez przyczyniania się do istniejących nierówności społecznych. Podobnie jak w przypadku mowy nienawiści, szkody związane z sprawiedliwością zależą od różnego traktowania grup tożsamości.  
Seksualne Język opisów seksualnych związanych z anatomicznymi narządami i genitaliami, romantycznymi relacjami, aktami przedstawionymi w kategoriach erotycznych lub pieszczotliwych, ciąży, fizycznych aktów seksualnych, w tym tych przedstawianych jako napaść lub wymuszony akt przemocy seksualnej przeciwko woli, prostytucji, pornografii i nadużyć.  
Przemocy Przemoc opisuje język związany z działaniami fizycznymi mającymi na celu zranienie, uszkodzenie, uszkodzenie lub zabicie kogoś lub coś; opisuje broń, broń i powiązane jednostki, takie jak produkcje, stowarzyszenia, ustawodawstwo itp.
Samookaleczenia Samookaleczenia opisuje język związany z działaniami fizycznymi, które mają celowo zaszkodzić, zranić, uszkodzić ciało lub zabić siebie.
Ryzyko jailbreaku Ataki zabezpieczeń systemu to monity użytkowników zaprojektowane w celu wywołania modelu generowania sztucznej inteligencji do wykazywania zachowań, które zostały wytrenowane w celu uniknięcia lub przerwania reguł ustawionych w komunikacie systemowym. Takie ataki mogą się różnić od skomplikowanych ról do subtelnego podwersji celu bezpieczeństwa.
Materiał chroniony dla tekstu* Chroniony tekst materiałowy opisuje znaną zawartość tekstową (na przykład teksty piosenek, artykuły, przepisy i wybraną zawartość internetową), którą można uzyskać za pomocą dużych modeli językowych.
Materiał chroniony dla kodu Kod chronionych materiałów opisuje kod źródłowy zgodny z zestawem kodu źródłowego z repozytoriów publicznych, które mogą być wyprowadzane przez duże modele językowe bez odpowiedniego cytowania repozytoriów źródłowych.

* Jeśli jesteś właścicielem materiału tekstowego i chcesz przesłać zawartość tekstową do ochrony, prześlij wniosek.

Zawartość tekstowa

Ostrzeżenie

Karta Definicje ważności w tym dokumencie zawiera przykłady szkodliwej zawartości, która może być niepokojąca dla niektórych czytelników.

Zawartość obrazu

Ostrzeżenie

Karta Definicje ważności w tym dokumencie zawiera przykłady szkodliwej zawartości, która może być niepokojąca dla niektórych czytelników.

Możliwość konfigurowania (wersja zapoznawcza)

Domyślna konfiguracja filtrowania zawartości jest ustawiona tak, aby filtrować na średnim poziomie ważności dla wszystkich czterech kategorii szkody zawartości dla monitów i uzupełniania. Oznacza to, że zawartość wykryta na średnim lub wysokim poziomie ważności jest filtrowana, podczas gdy zawartość wykryta na niskim poziomie ważności nie jest filtrowana przez filtry zawartości. Funkcja konfigurowania jest dostępna w wersji zapoznawczej i umożliwia klientom dostosowywanie ustawień, oddzielnie w celu wyświetlania monitów i uzupełniania w celu filtrowania zawartości dla każdej kategorii zawartości na różnych poziomach ważności, jak opisano w poniższej tabeli:

Odfiltrowana ważność Konfigurowalny pod kątem monitów Możliwość konfigurowania pod kątem uzupełniania Opisy
Niski, średni, wysoki Tak Tak Najostrzejsza konfiguracja filtrowania. Zawartość wykryta na niskich, średnich i wysokich poziomach ważności jest filtrowana.
Średni, wysoki Tak Tak Ustawienie domyślne. Zawartość wykryta na niskim poziomie ważności nie jest filtrowana, zawartość w średnim i wysokim poziomie jest filtrowana.
Wys. Tak Tak Zawartość wykryta na niskich i średnich poziomach ważności nie jest filtrowana. Filtrowana jest tylko zawartość na wysokim poziomie ważności.
Brak filtrów W przypadku zatwierdzenia* W przypadku zatwierdzenia* Żadna zawartość nie jest filtrowana niezależnie od wykrytego poziomu ważności. Wymaga zatwierdzenia*.

* Tylko klienci, którzy zostali zatwierdzeni do zmodyfikowanego filtrowania zawartości, mają pełną kontrolę filtrowania zawartości i mogą częściowo lub całkowicie wyłączyć filtry zawartości. Kontrolka filtrowania zawartości nie ma zastosowania do filtrów zawartości dla języka DALL-E (wersja zapoznawcza) ani GPT-4 Turbo z funkcją Vision (wersja zapoznawcza). Zastosuj do zmodyfikowanych filtrów zawartości przy użyciu tego formularza: Przegląd ograniczonego dostępu usługi Azure OpenAI: zmodyfikowane filtrowanie zawartości (microsoft.com).

Klienci są odpowiedzialni za zapewnienie, że aplikacje integrujące usługę Azure OpenAI są zgodne z kodeksem postępowania.

Konfiguracje filtrowania zawartości są tworzone w ramach zasobu w usłudze Azure AI Studio i mogą być skojarzone z wdrożeniami. Dowiedz się więcej o możliwościach konfiguracji tutaj.

Szczegóły scenariusza

Gdy system filtrowania zawartości wykryje szkodliwą zawartość, zostanie wyświetlony błąd wywołania interfejsu API, jeśli monit został uznany za nieodpowiedni, lub finish_reason w odpowiedzi będzie content_filter oznaczać, że część ukończenia została przefiltrowana. Podczas kompilowania aplikacji lub systemu należy uwzględnić te scenariusze, w których zawartość zwracana przez interfejs API uzupełniania jest filtrowana, co może spowodować niekompletną zawartość. Sposób działania na temat tych informacji będzie specyficzny dla aplikacji. Zachowanie można podsumować w następujących kwestiach:

  • Monity sklasyfikowane na poziomie kategorii filtrowanej i ważności będą zwracać błąd HTTP 400.
  • Wywołania uzupełniania bez przesyłania strumieniowego nie będą zwracać żadnej zawartości po przefiltrowaniu zawartości. Wartość zostanie ustawiona finish_reason na content_filter. W rzadkich przypadkach z dłuższymi odpowiedziami można zwrócić częściowy wynik. W takich przypadkach element zostanie zaktualizowany finish_reason .
  • W przypadku wywołań ukończenia przesyłania strumieniowego segmenty zostaną zwrócone użytkownikowi po zakończeniu. Usługa będzie kontynuować przesyłanie strumieniowe do momentu osiągnięcia tokenu zatrzymania, długości lub wykrycia zawartości sklasyfikowanej na filtrowanej kategorii i poziomie ważności.

Scenariusz: Wysyłasz wywołanie zakończenia przesyłania strumieniowego bez przesyłania strumieniowego z prośbą o wiele danych wyjściowych; żadna zawartość nie jest klasyfikowana na poziomie kategorii filtrowanej i ważności

W poniższej tabeli przedstawiono różne sposoby wyświetlania filtrowania zawartości:

Kod odpowiedzi HTTP Zachowanie odpowiedzi
200 W przypadkach, gdy wszystkie generacje przekazują filtry zgodnie z konfiguracją, do odpowiedzi nie są dodawane żadne szczegóły kon tryb namiotu ration. Wartość finish_reason dla każdej generacji będzie zatrzymana lub długość.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Scenariusz: Wywołanie interfejsu API pyta o wiele odpowiedzi (N1>), a co najmniej jedna z odpowiedzi jest filtrowana

Kod odpowiedzi HTTP Zachowanie odpowiedzi
200 Odfiltrowane generacje będą miały finish_reason wartość content_filter.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Scenariusz: do interfejsu API uzupełniania jest wysyłany nieodpowiedni monit wejściowy (w przypadku przesyłania strumieniowego lub przesyłania strumieniowego)

Kod odpowiedzi HTTP Zachowanie odpowiedzi
400 Wywołanie interfejsu API kończy się niepowodzeniem, gdy monit wyzwoli filtr zawartości zgodnie z konfiguracją. Zmodyfikuj monit i spróbuj ponownie.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Scenariusz: wykonasz wywołanie uzupełniania przesyłania strumieniowego; żadna zawartość wyjściowa nie jest klasyfikowana na poziomie kategorii filtrowanej i ważności

Kod odpowiedzi HTTP Zachowanie odpowiedzi
200 W takim przypadku wywołanie zwróci pełną generację i finish_reason będzie mieć wartość "length" lub "stop" dla każdej wygenerowanej odpowiedzi.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Scenariusz: Wykonasz wywołanie ukończenia przesyłania strumieniowego z prośbą o wiele uzupełniania, a co najmniej część zawartości wyjściowej jest filtrowana

Kod odpowiedzi HTTP Zachowanie odpowiedzi
200 W przypadku danego indeksu generacji ostatni fragment generacji zawiera wartość inną niż null finish_reason . Wartość jest content_filter wtedy, gdy generacja została przefiltrowana.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Scenariusz: system filtrowania zawartości nie jest uruchamiany po zakończeniu

Kod odpowiedzi HTTP Zachowanie odpowiedzi
200 Jeśli system filtrowania zawartości nie działa lub w inny sposób nie może ukończyć operacji w czasie, żądanie będzie nadal wykonywane bez filtrowania zawartości. Możesz określić, że filtrowanie nie zostało zastosowane, wyszukując komunikat o błędzie w content_filter_result obiekcie.

Przykładowy ładunek żądania:

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

Przykładowy kod JSON odpowiedzi:

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

Adnotacje

Filtry zawartości

Po włączeniu adnotacji, jak pokazano w poniższym fragmencie kodu, następujące informacje są zwracane za pośrednictwem interfejsu API dla kategorii nienawiści i sprawiedliwości, seksualnej, przemocy i samookaleczenia:

  • kategoria filtrowania zawartości (nienawiść, seksualna, przemoc, self_harm)
  • poziom ważności (bezpieczny, niski, średni lub wysoki) w każdej kategorii zawartości
  • stan filtrowania (prawda lub fałsz).

Modele opcjonalne

Opcjonalne modele można włączyć w adnotacjach (zwraca informacje, gdy zawartość została oflagowana, ale nie filtrowana) lub tryb filtru (zwraca informacje, gdy zawartość została oflagowana i filtrowana).

Po włączeniu adnotacji, jak pokazano w poniższym fragmencie kodu, następujące informacje są zwracane przez interfejs API dla modeli opcjonalnych: ryzyko jailbreaku, chroniony tekst materiałowy i kod materiału chronionego:

  • category (jailbreak, protected_material_text, protected_material_code),
  • wykryto (prawda lub fałsz),
  • filtrowane (prawda lub fałsz).

W przypadku modelu kodu chronionego materiału interfejs API zwraca następujące dodatkowe informacje:

  • przykładowe cytaty z publicznego repozytorium GitHub, w którym znaleziono fragment kodu
  • licencja repozytorium.

Podczas wyświetlania kodu w aplikacji zdecydowanie zalecamy, aby aplikacja wyświetlała również przykładowy cytat z adnotacji. Zgodność z cytowaną licencją może być również wymagana w przypadku pokrycia zobowiązania do praw autorskich klienta.

Adnotacje są obecnie dostępne w wersji 2024-02-01 interfejsu API ogólnodostępnej i we wszystkich wersjach zapoznawczych, począwszy od 2023-06-01-preview uzupełniania i uzupełniania czatu (modele GPT). Poniższy fragment kodu pokazuje, jak używać adnotacji:

# 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))

Wyjście

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

Aby uzyskać szczegółowe informacje na temat punktów końcowych interfejsu API REST wnioskowania dla usługi Azure OpenAI i sposobu tworzenia czatów i uzupełniania, postępuj zgodnie ze wskazówkami dotyczącymi interfejsu API REST usługi Azure OpenAI Service. Adnotacje są zwracane dla wszystkich scenariuszy w przypadku korzystania z dowolnej wersji interfejsu API w wersji zapoznawczej, począwszy od 2023-06-01-previewwersji , a także wersji 2024-02-01interfejsu API ogólnie dostępnej.

Przykładowy scenariusz: do interfejsu API uzupełniania jest wysyłany monit wejściowy zawierający zawartość sklasyfikowaną na poziomie kategorii filtrowanej i ważności

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

Przesyłanie strumieniowe zawartości

W tej sekcji opisano środowisko i opcje przesyłania strumieniowego zawartości usługi Azure OpenAI. Po zatwierdzeniu masz możliwość odbierania zawartości z interfejsu API podczas jego generowania, zamiast czekać na fragmenty zawartości, które zostały zweryfikowane w celu przekazania filtrów zawartości.

Wartość domyślna

System filtrowania zawartości jest domyślnie zintegrowany i włączony dla wszystkich klientów. W domyślnym scenariuszu przesyłania strumieniowego zawartość uzupełniania jest buforowana, system filtrowania zawartości jest uruchamiany w buforowanej zawartości i — w zależności od konfiguracji filtrowania zawartości — zawartość jest zwracana użytkownikowi, jeśli nie narusza ona zasad filtrowania zawartości (domyślna lub niestandardowa konfiguracja użytkownika) albo jest natychmiast blokowana i zwraca błąd filtrowania zawartości, bez zwracania szkodliwej zawartości uzupełniania. Ten proces jest powtarzany do końca strumienia. Zawartość jest w pełni weryfikowana zgodnie z zasadami filtrowania zawartości, zanim zostanie zwrócona użytkownikowi. Zawartość nie jest zwracana w tym przypadku token po tokenie, ale w "fragmentach zawartości" odpowiedniego rozmiaru buforu.

Filtr zmodyfikowany asynchronicznie

Klienci, którzy zostali zatwierdzeni do zmodyfikowanych filtrów zawartości, mogą wybrać asynchroniczny zmodyfikowany filtr jako dodatkową opcję, zapewniając nowe środowisko przesyłania strumieniowego. W takim przypadku filtry zawartości są uruchamiane asynchronicznie, a zawartość uzupełniania jest zwracana natychmiast przy użyciu bezproblemowego środowiska przesyłania strumieniowego tokenu po tokenie. Żadna zawartość nie jest buforowana, co umożliwia zerowe opóźnienie.

Klienci muszą pamiętać, że chociaż funkcja poprawia opóźnienie, jest to kompromis przed bezpieczeństwem i weryfikacją w czasie rzeczywistym mniejszych sekcji danych wyjściowych modelu. Ponieważ filtry zawartości są uruchamiane asynchronicznie, komunikaty kon tryb namiotu ration i sygnały naruszenia zasad są opóźnione, co oznacza, że niektóre sekcje szkodliwej zawartości, które w przeciwnym razie zostałyby odfiltrowane natychmiast, mogą być wyświetlane użytkownikowi.

Adnotacje: adnotacje i komunikaty kon tryb namiotu ration są stale zwracane podczas strumienia. Zdecydowanie zalecamy korzystanie z adnotacji w aplikacji i implementowanie dodatkowych mechanizmów bezpieczeństwa zawartości sztucznej inteligencji, takich jak redagowanie zawartości lub zwracanie dodatkowych informacji o bezpieczeństwie do użytkownika.

Sygnał filtrowania zawartości: sygnał błędu filtrowania zawartości jest opóźniony. W przypadku naruszenia zasad jest zwracany natychmiast po udostępnieniu i zatrzymaniu strumienia. Sygnał filtrowania zawartości jest gwarantowany w oknie ok. 1000 znaków zawartości naruszającej zasady.

Zatwierdzenie zmodyfikowanego filtrowania zawartości jest wymagane w celu uzyskania dostępu do filtru zmodyfikowanego asynchronicznie. Aplikację można znaleźć tutaj. Aby ją włączyć w usłudze Azure OpenAI Studio, postępuj zgodnie z instrukcjami filtru zawartości, aby utworzyć nową konfigurację filtrowania zawartości, a następnie wybierz pozycję Asynchroniczny zmodyfikowany filtr w sekcji Przesyłanie strumieniowe.

Porównanie trybów filtrowania zawartości

Compare Przesyłanie strumieniowe — ustawienie domyślne Przesyłanie strumieniowe — asynchroniczny zmodyfikowany filtr
Stan Ogólna dostępność Publiczna wersja zapoznawcza
Uprawnienie Wszyscy klienci Klienci zatwierdzeni do zmodyfikowanego filtrowania zawartości
Jak włączyć Domyślnie nie jest wymagana żadna akcja Klienci zaaprobowani do zmodyfikowanego filtrowania zawartości mogą skonfigurować ją bezpośrednio w usłudze Azure OpenAI Studio (w ramach konfiguracji filtrowania zawartości stosowanej na poziomie wdrożenia)
Modalność i dostępność Tekst; wszystkie modele GPT Tekst; wszystkie modele GPT z wyjątkiem gpt-4-vision
Środowisko przesyłania strumieniowego Zawartość jest buforowana i zwracana we fragmentach Opóźnienie zerowe (bez buforowania, filtry są uruchamiane asynchronicznie)
Sygnał filtrowania zawartości Sygnał natychmiastowego filtrowania Opóźniony sygnał filtrowania (w maksymalnie 1000-znakowych przyrostach)
Konfiguracje filtrowania zawartości Obsługuje domyślne i dowolne ustawienie filtru zdefiniowanego przez klienta (w tym opcjonalne modele) Obsługuje domyślne i dowolne ustawienie filtru zdefiniowanego przez klienta (w tym opcjonalne modele)

Adnotacje i przykładowe odpowiedzi

Monituj o komunikat adnotacji

Jest to takie samo, jak adnotacje domyślne.

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

Komunikat tokenu ukończenia

Komunikaty ukończenia są przekazywane natychmiast. W pierwszej kolejności nie jest wykonywana moderacja, a początkowo nie podano adnotacji.

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 
} 

Komunikat adnotacji

Pole tekstowe będzie zawsze pustym ciągiem wskazującym brak nowych tokenów. Adnotacje będą dotyczyć tylko tokenów już wysłanych. Może istnieć wiele komunikatów adnotacji odwołujące się do tych samych tokenów.

"start_offset" i "end_offset" są przesunięciami o niskim poziomie szczegółowości w tekście (z wartością 0 na początku monitu) w celu oznaczenia tekstu, do którego ma zastosowanie adnotacja.

"check_offset" reprezentuje, ile tekstu zostało w pełni moderowane. Jest to wyłączna dolna granica "end_offset" wartości przyszłych adnotacji. Nie zmniejsza się.

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 
} 

Przykładowy strumień odpowiedzi (przekazuje filtry)

Poniżej znajduje się prawdziwa odpowiedź na zakończenie czatu przy użyciu asynchronicznego zmodyfikowanego filtru. Zwróć uwagę, że adnotacje monitu nie są zmieniane, tokeny uzupełniania są wysyłane bez adnotacji, a nowe komunikaty adnotacji są wysyłane bez tokenów — są one zamiast tego skojarzone z pewnymi przesunięciami filtru zawartości.

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

Przykładowy strumień odpowiedzi (zablokowany przez filtry)

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

Ważne

Po wyzwoleniu filtrowania zawartości dla monitu i "status": 400 odebraniu w ramach odpowiedzi może zostać naliczona opłata za to żądanie, ponieważ monit został oceniony przez usługę. Opłaty będą również naliczane , gdy "status":200 element zostanie odebrany za pomocą "finish_reason": "content_filter"polecenia . W takim przypadku monit nie miał żadnych problemów, ale wykryto ukończenie wygenerowane przez model w celu naruszenia reguł filtrowania zawartości, co powoduje filtrowanie uzupełniania.

Najlepsze rozwiązania

W ramach projektu aplikacji należy wziąć pod uwagę następujące najlepsze rozwiązania, aby zapewnić pozytywne środowisko pracy z aplikacją, jednocześnie minimalizując potencjalne szkody:

  • Zdecyduj, w jaki sposób chcesz obsługiwać scenariusze, w których użytkownicy wysyłają monity zawierające zawartość sklasyfikowaną na poziomie kategorii filtrowanej i ważności lub w inny sposób niewłaściwie używaną aplikację.
  • Sprawdź, finish_reason czy uzupełnianie jest filtrowane.
  • Sprawdź, czy w obiekcie nie ma żadnego obiektu błędu content_filter_result (co wskazuje, że filtry zawartości nie były uruchamiane).
  • Jeśli używasz chronionego modelu kodu materiałowego w trybie adnotacji, wyświetl adres URL cytatu podczas wyświetlania kodu w aplikacji.

Następne kroki