Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku opisano środowisko i opcje przesyłania strumieniowego zawartości w usłudze Azure OpenAI. Klienci mogą odbierać zawartość z interfejsu API w momencie jego generowania, zamiast czekać na fragmenty zawartości, które zostały zweryfikowane, aby przejść przez filtry treści.
Domyślne zachowanie filtrowania
System filtrowania zawartości jest domyślnie zintegrowany i włączony dla wszystkich klientów. W domyślnym scenariuszu przesyłania zawartość końcowa jest buforowana, po czym uruchamiany jest system filtrowania tej zawartości. W zależności od konfiguracji filtrowania zawartości, zawartość jest albo zwracana użytkownikowi, jeśli nie narusza zasad filtrowania zawartości (domyślna konfiguracja Microsoft lub niestandardowa konfiguracja użytkownika), albo natychmiast blokowana, a zamiast tego zwracany jest błąd filtrowania zawartości. 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.
Filtrowanie asynchroniczne
Klienci mogą wybrać filtr asynchroniczny 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 szybkie przesyłanie strumieniowe z zerowym opóźnieniem skojarzonym z filtrowaniem zawartości.
Klienci muszą zrozumieć, że chociaż funkcja poprawia opóźnienia, 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 moderacji treści 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 moderowania zawartości są stale zwracane podczas transmisji. Zdecydowanie zalecamy używanie adnotacji w aplikacji i implementowanie innych mechanizmów kontroli i wytycznych dotyczących sztucznej inteligencji, takich jak redagowanie zawartości lub zwracanie innych informacji o bezpieczeństwie do użytkownika.
Sygnał filtrowania zawartości: sygnał błędu filtrowania zawartości jest opóźniony. Jeśli dochodzi do naruszenia polityki, jest ono zwracane natychmiast po wykryciu, a strumień zostaje zatrzymany. Sygnał filtrowania treści jest gwarantowany w przedziale około 1000 znaków od treści naruszającej zasady.
Zobowiązanie do praw autorskich klienta: Zawartość, która jest oflagowana z mocą wsteczną jako materiał chroniony, może nie kwalifikować się do pokrycia zobowiązaniem do praw autorskich klienta.
Aby włączyć filtr asynchroniczny w portalu usługi Azure AI Foundry, postępuj zgodnie z instrukcjami filtru zawartości, aby utworzyć nową konfigurację filtrowania zawartości, a następnie wybierz pozycję Filtr asynchroniczny w sekcji Przesyłanie strumieniowe.
Porównanie trybów filtrowania zawartości
Porównaj | Przesyłanie strumieniowe — ustawienie domyślne | Przesyłanie strumieniowe — filtr asynchroniczny |
---|---|---|
Stan | ogólna dostępność | Podgląd publiczny |
Uprawnienie | Wszyscy klienci | Wszyscy klienci |
Jak włączyć | Domyślnie włączone, nie jest wymagana żadna akcja | Klienci mogą skonfigurować ją bezpośrednio w portalu usługi Azure AI Foundry (w ramach konfiguracji filtrowania zawartości stosowanej na poziomie wdrożenia) |
Modalność i dostępność | Tekst; wszystkie modele GPT | Tekst; wszystkie modele GPT |
Doświadczenie 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 (do 1000 znaków na przyrost) |
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
Powiadomienie o wiadomości adnotacyjnej
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 o zakończeniu tokenu
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
}
Wiadomość dotycząca adnotacji
Pole tekstowe jest zawsze pustym ciągiem wskazującym brak nowych tokenów. Adnotacje mają zastosowanie tylko do tokenów już wysłanych. Może być wiele komunikatów adnotacji odnoszących 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 (przechodzi przez filtry)
Poniżej znajduje się rzeczywista odpowiedź na zakończenie czatu z użyciem asynchronicznego filtra. 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
Kiedy filtrowanie treści jest uruchamiane dla zapytania i "status": 400
jest otrzymywane jako część odpowiedzi, zostanie naliczona opłata za to żądanie, ponieważ zapytanie zostało ocenione przez usługę. Ze względu na asynchroniczny charakter systemu filtrowania zawartości następuje opłata za tokeny monitu i ukończenia.
Opłaty będą również naliczane, gdy "status":200
zostanie odebrany z "finish_reason": "content_filter"
. W tym przypadku monit nie miał żadnych problemów, ale ukończenie wygenerowane przez model zostało wykryte jako naruszające zasady filtrowania treści, co skutkuje jego zablokowaniem.