Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Leitfaden werden die Azure OpenAI-Inhaltsstreamingerfahrung und -optionen beschrieben. Kunden können Inhalte von der API empfangen, sobald sie generiert werden, anstatt auf Inhaltsblöcke zu warten, die die Inhaltsfilter passiert haben.
Hinweis
Die asynchrone Filterkonfiguration erfordert die Berechtigung zum Ändern von Inhaltsfilterrichtlinien im Foundry-Portal.
Auswählen des richtigen Streamingmodus
Standardstreaming verwenden, wenn:
- Maximale Sicherheit und Compliance sind erforderlich.
- Sie benötigen sofortige Filterung, bevor Inhalte angezeigt werden
- Ihre Anwendung kann keine rückwirkende Entfernung von Inhalten verarbeiten.
- Beispiel: Kundenorientierte Chatbots in regulierten Branchen
Asynchroner Filter verwenden, wenn:
- Geringe Latenz ist für die Benutzererfahrung von entscheidender Bedeutung
- Sie können clientseitige Inhalts redaction implementieren
- Ihre Anwendung verfügt über zusätzliche Sicherheitskontrollen
- Sie sind bereit, verzögerte Filtersignale zu verarbeiten
- Beispiel: Interne Entwicklungstools, kreative Schreibassistenten
Standardfilterverhalten
Das Content Guardrails-System ist für alle Kunden standardmäßig integriert und aktiviert. Im Standardstreamingszenario wird Vervollständigungsinhalt gepuffert, das Schutzmaßnahmensystem für Inhalte wird auf den gepufferten Inhalten ausgeführt, und dann wird der Inhalt – abhängig von der Konfiguration der Schutzmaßnahme – an den Benutzer zurückgegeben, wenn er nicht gegen die Schutzmaßnahmenrichtlinie (die Standardkonfiguration von Microsoft oder eine benutzerdefinierte Konfiguration) verstößt, oder er wird sofort blockiert und stattdessen wird ein Schutzmaßnahmenfehler zurückgegeben. Dieser Vorgang wird bis zum Ende des Datenstroms wiederholt. Der Inhalt wird gemäß der Guardrail-Richtlinie vollständig überprüft, bevor er an den Benutzer zurückgegeben wird. Inhalt wird in diesem Fall nicht tokenweise zurückgegeben, sondern in "Inhaltsblöcken" der jeweiligen Puffergröße.
Asynchrone Filterung
Die Kundschaft kann den asynchronen Filter als zusätzliche Option auswählen, um eine neue Streamingumgebung bereitzustellen. In diesem Fall werden Inhaltsfilter asynchron ausgeführt, und der Vervollständigungsinhalt wird sofort mit einer reibungslosen Token-für-Token-Streamingerfahrung zurückgegeben. Es wird kein Inhalt gepuffert, was eine schnelle Streamingerfahrung mit null Latenz ermöglicht, die mit der Inhaltsfilterung verknüpft ist.
Die Kundschaft muss verstehen, dass das Feature zwar die Wartezeit verbessert, aber einen Kompromiss bezüglich der Sicherheit und Echtzeitüberprüfung kleinerer Abschnitte der Modellausgabe darstellt. Da Inhaltsfilter asynchron ausgeführt werden, werden Nachrichten zur Inhaltsmoderation und Signale zur Richtlinienverletzung verzögert, was bedeutet, dass einige Abschnitte mit schädlichen Inhalten, die andernfalls sofort gefiltert werden würden, den Benutzer*innen angezeigt werden könnten.
Anmerkungen: Anmerkungen und Inhaltsmoderationsmeldungen werden während des Streams kontinuierlich zurückgegeben. Es wird dringend empfohlen, Anmerkungen in Ihrer App zu nutzen und andere AI-Richtlinien und Steuerungsmechanismen zu implementieren, z. B. das Redacting von Inhalten oder das Zurückgeben anderer Sicherheitsinformationen an den Benutzer.
Signal zur Inhaltsfilterung: Das Fehlersignal für die Inhaltsfilterung ist verzögert. Wenn eine Richtlinienverletzung vorliegt, wird sie zurückgegeben, sobald sie verfügbar ist, und der Datenstrom wird beendet. Das Inhaltsfiltersignal wird innerhalb eines Fensters von ca. 1000 Zeichen des richtlinienverletzenden Inhalts garantiert.
Verpflichtung zum Urheberrecht des Kunden: Inhalte, die rückwirkend als geschütztes Material gekennzeichnet sind, sind möglicherweise nicht für die Abdeckung durch das Urheberrecht des Kunden berechtigt.
Kostenaspekte
Von Bedeutung
Abrechnung für die Inhaltsfilterung im Streaming
Wenn die Inhaltsfilterung während des Streamings ausgelöst wird, gelten Gebühren sowohl für Eingabeaufforderungs- als auch für Abschlusstoken:
- Status 400 (Filterung der Eingabeaufforderung): Gebühr für die Auswertung der Eingabeaufforderung erhoben
- Status 200 mit finish_reason: "content_filter": Wird sowohl für Eingabeaufforderungs- als auch für Abschlusstoken berechnet, die vor dem Filtern generiert wurden
Dies gilt sowohl für den Standard- als auch für den asynchronen Filtermodus. Weitere Informationen finden Sie unter Azure OpenAI-Preise.
Um den asynchronen Filter im Microsoft Foundry-Portal zu aktivieren folgen Sie der Anleitung Inhaltsfilter zum Erstellen einer neuen Inhaltsfilterkonfiguration, und wählen Sie Asynchronous Filter im Abschnitt "Streaming" aus.
Hinweis
Asynchroner Filter ist in API Version 2024-02-01 und höher verfügbar. Verwenden Sie das OpenAI Python SDK v1.0+ oder Azure OpenAI SDK mit kompatiblen API-Versionen.
Vergleich der Inhaltsfiltermodi
| Compare | Streaming – Voreinstellung | Streaming: asynchroner Filter |
|---|---|---|
| Der Status | GA | GA |
| Eligibility | Alle Kunden | Alle Kunden |
| So aktivieren Sie | Standardmäßig aktiviert, keine Aktion erforderlich | Kunden können sie direkt im Foundry-Portal konfigurieren (im Rahmen einer Inhaltsfilterkonfiguration, die auf Bereitstellungsebene angewendet wird) |
| Modalität und Verfügbarkeit | Text; alle GPT-Modelle | Text; alle GPT-Modelle |
| Streamingumgebung | Inhalt wird gepuffert und in Blöcken zurückgegeben. | Nulllatenz (keine Pufferung, Filter werden asynchron ausgeführt) |
| Signal zur Inhaltsfilterung | Sofortiges Filtersignal | Verzögertes Filtersignal (in Schritten von bis zu ungefähr 1000 Zeichen) |
| Konfigurationen für Inhaltsfilterung | Unterstützt Standard- und alle benutzerdefinierten Filtereinstellungen (einschließlich optionaler Modelle) | Unterstützt Standard- und alle benutzerdefinierten Filtereinstellungen (einschließlich optionaler Modelle) |
Anmerkungen und Beispielantworten
Promptanmerkungsnachricht
Diese Nachricht entspricht den Standardanmerkungen.
data: {
"id": "",
"object": "",
"created": 0,
"model": "",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": { ... }
}
],
"choices": [],
"usage": null
}
Vervollständigungstokennachricht
Vervollständigungsnachrichten werden sofort weitergeleitet. Der Dienst führt keine Moderation aus oder stellt zunächst Anmerkungen bereit.
data: {
"id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N",
"object": "chat.completion.chunk",
"created": 1692905411,
"model": "gpt-35-turbo",
"choices": [
{
"index": 0,
"finish_reason": null,
"delta": {
"content": "Color"
}
}
],
"usage": null
}
Anmerkungsnachricht
Das Textfeld ist immer eine leere Zeichenfolge, die keine neuen Token angibt. Anmerkungen gelten nur für Token, die bereits gesendet wurden. Mehrere Anmerkungsnachrichten können auf dieselben Token verweisen.
"start_offset" und "end_offset" sind Offsets mit niedriger Granularität im Text, die mit 0 am Anfang der Eingabeaufforderung beginnen und markieren, auf welchen Text die Anmerkung angewendet wird.
"check_offset" zeigt, wie viel Text vollständig moderiert ist. Es handelt sich um eine exklusive Untergrenze für die "end_offset"-Werte zukünftiger Anmerkungen. Sie nimmt nie ab.
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
}
Erläuterte Schlüsselfelder:
-
check_offset: Zeichenposition bis zu der Stelle, bis zu der der Inhalt vollständig moderiert wurde (wird nicht verringert) -
start_offset: Anfangszeichenposition, an der dieser Anmerkungsbatch beginnt -
end_offset: Endzeichenposition, an der dieser Anmerkungsbatch endet
Alle Offsets zählen ab 0 am Anfang des ursprünglichen Prompt-Texts.
Beispielantwortdatenstrom (durchläuft Filter)
Das folgende Beispiel zeigt eine echte Chatabschlussantwort, die asynchronen Filter verwendet. Die Aufforderungsanmerkungen ändern sich nicht, Abschlusstoken werden ohne Anmerkungen gesendet, und neue Anmerkungsmeldungen werden ohne Token gesendet. Stattdessen werden diese neuen Anmerkungen mit bestimmten Inhaltsfilter-Offsets verknüpft.
{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}
data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null}
data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null}
data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null}
data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null}
data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null}
...
data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null}
...
data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null}
data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null}
data: [DONE]
Beispielantwortdatenstrom (durch Filter blockiert)
{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}
data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null}
data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null}
data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null}
data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null}
data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null}
...
data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-
turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null}
data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null}
data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null}
data: [DONE]
Problembehandlung
Der Stream wird aufgrund des Inhaltsfilter-Abschlussgrundes gestoppt.
Symptom: Der Datenstrom endet unerwartet mit finish_reason: "content_filter".
Ursache: Der vom Modell generierte Inhalt hat gegen die Inhaltsfilterrichtlinie verstoßen. Im asynchronen Filtermodus kann dieses Signal eintreffen, nachdem bereits Inhalte angezeigt wurden.
Lösung:
- Überprüfen Sie
content_filter_resultsim letzten Abschnitt, um zu ermitteln, welche Kategorie die Filterung ausgelöst hat (Hass, Gewalt, sexuelle Inhalte, Selbstverletzung, geschütztes Material). - Wenn Sie einen asynchronen Filter verwenden, implementieren Sie die Inhaltsredaktion in Ihrer Anwendung, um Inhalte zu entfernen, die bereits angezeigt wurden.
- Überprüfen Sie die Konfiguration der Inhaltsfilterung im Foundry-Portal, um die Schweregradschwellenwerte bei Bedarf anzupassen.
- Erwägen Sie, die Eingabeaufforderung neu zu erstellen, um auslösende Filter zu vermeiden.
Anmerkungen, die nicht im Stream angezeigt werden
Symptom: Der Datenstrom wird erfolgreich abgeschlossen, ist aber content_filter_results immer leer oder null.
Ursache: Inhaltsfilteranmerkungen sind für Ihre Bereitstellung möglicherweise nicht aktiviert, oder Sie verwenden eine API-Version, die Keine Anmerkungen unterstützt.
Lösung:
- Überprüfen, ob Sie API Version 2024-02-01 oder höher verwenden
- Überprüfen Ihrer Inhaltsfilterkonfiguration im Foundry-Portal
- Sicherstellen, dass Anmerkungen für die ausgewählten Filter aktiviert sind
- Überprüfen Sie die Dokumentation zu Guardrail-Anmerkungen für Konfigurationsschritte
Verzögerte Filtersignale im asynchronen Filtermodus
Symptom: Inhalte, die gefiltert werden sollen, werden kurz angezeigt, bevor sie rückwirkend gekennzeichnet werden.
Ursache: Dies ist das erwartete Verhalten im asynchronen Filtermodus. Das Filtern wird asynchron mit einem garantierten Signal innerhalb von ~1.000 Zeichen ausgeführt.
Lösung:
- Dies funktioniert wie es für den asynchronen Filtermodus vorgesehen ist.
- Implementieren Sie die clientseitige Inhaltsentschlüsselung, wenn Sie verzögerte Filtersignale empfangen
- Überwachen der
check_offsetWerte, um den Fortschritt der Moderation zu verfolgen - Erwägen Sie die Verwendung des Standardmäßigen Streamingmodus, wenn für Ihren Anwendungsfall sofortige Filterung erforderlich ist.
Grundlegendes zu „content_filter_offsets“
Symptom: Unklar, wie man die Werte check_offset, start_offset und end_offset interpretiert.
Erläuterung:
-
check_offset: Zeichenposition bis zu der Stelle, bis zu der der Inhalt vollständig moderiert wurde (wird nicht verringert) -
start_offset: Anfang des Textbereichs, für den diese Anmerkung gilt -
end_offset: Ende des Textbereichs, für den diese Anmerkung gilt
Alle Offsets sind Zeichenpositionen mit 0 am Anfang der Eingabeaufforderung.
Nächste Schritte
- Konfigurieren von Inhaltsfiltern – Einrichten eines asynchronen Filters im Gießereiportal
- Referenz zu Guardrail-Anmerkungen – Detaillierte Anmerkungsschemas und Schweregrade
- Inhaltsfilterung – Grundlegendes zu Inhaltssicherheitsfeatures