Udostępnij za pośrednictwem


Używanie listy bloków z usługą Azure OpenAI

Konfigurowalne filtry zawartości są wystarczające dla większości potrzeb dotyczących con tryb namiotu ration. Może jednak być konieczne filtrowanie terminów specyficznych dla danego przypadku użycia.

Wymagania wstępne

  • Subskrypcja platformy Azure. Utwórz je bezpłatnie.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Azure OpenAI w witrynie Azure Portal, aby uzyskać token, klucz i punkt końcowy. Wprowadź unikatową nazwę zasobu, wybierz subskrypcję wprowadzoną w formularzu aplikacji, wybierz grupę zasobów, obsługiwany region i obsługiwaną warstwę cenową. Następnie wybierz Utwórz.
    • Wdrożenie zasobu trwa kilka minut. Po zakończeniu wybierz pozycję Przejdź do zasobu. W okienku po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Klucz subskrypcji i punkt końcowy. Punkt końcowy i jeden z kluczy są używane do wywoływania interfejsów API.
  • Zainstalowany interfejs wiersza polecenia platformy Azure.
  • Zainstalowano bibliotekę cURL

Korzystanie z list blokowych

Listy blokowe można tworzyć za pomocą interfejsu API usługi Azure OpenAI. Poniższe kroki ułatwiają rozpoczęcie pracy.

Uzyskiwanie tokenu

Najpierw musisz uzyskać token umożliwiający uzyskanie dostępu do interfejsów API na potrzeby tworzenia, edytowania i usuwania list zablokowanych. Ten token można uzyskać przy użyciu następującego polecenia interfejsu wiersza polecenia platformy Azure:

az account get-access-token 

Tworzenie lub modyfikowanie listy zablokowanych

Skopiuj poniższe polecenie cURL do edytora tekstów i wprowadź następujące zmiany:

  1. Zastąp ciąg {subscriptionId} identyfikatorem subskrypcji.
  2. Zastąp ciąg {resourceGroupName} nazwą grupy zasobów.
  3. Zastąp ciąg {accountName} nazwą zasobu.
  4. Zastąp ciąg {raiBlocklistName} (w adresie URL) nazwą niestandardową listy. Dozwolone znaki: 0-9, A-Z, a-z, - . _ ~.
  5. Zastąp element {token} tokenem uzyskanym z powyższego kroku "Pobierz token".
  6. Opcjonalnie zastąp wartość pola "description" opisem niestandardowym.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "description": "This is a prompt blocklist"  
    } 
}' 

Kod odpowiedzi powinien być 201 (utworzona nowa lista) lub 200 (zaktualizowana istniejąca lista).

Stosowanie listy zablokowanych do filtru zawartości

Jeśli nie utworzono jeszcze filtru zawartości, możesz to zrobić w usłudze Azure AI Foundry. Zobacz Filtrowanie zawartości.

Aby zastosować listę bloków uzupełniania do filtru zawartości, użyj następującego polecenia cURL:

  1. Zastąp ciąg {subscriptionId} identyfikatorem podrzędnym.
  2. Zastąp ciąg {resourceGroupName} nazwą grupy zasobów.
  3. Zastąp ciąg {accountName} nazwą zasobu.
  4. Zastąp element {raiPolicyName} nazwą filtru zawartości
  5. Zastąp element {token} tokenem uzyskanym z powyższego kroku "Pobierz token".
  6. Opcjonalnie zmień tytuł na "completionBlocklists" "promptBlocklists" , jeśli chcesz, aby lista zablokowanych miała być stosowana do monitów użytkownika zamiast uzupełniania modelu sztucznej inteligencji.
  7. Zastąp "raiBlocklistName" element w treści nazwą niestandardową listy. Dozwolone znaki: 0-9, A-Z, a-z, - . _ ~.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiPolicies/{raiPolicyName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

Dodawanie elementów blockItems do listy

Uwaga

Istnieje maksymalny limit wynoszący 10 000 terminów dozwolonych na jednej liście.

Skopiuj poniższe polecenie cURL do edytora tekstów i wprowadź następujące zmiany:

  1. Zastąp ciąg {subscriptionId} identyfikatorem podrzędnym.
  2. Zastąp ciąg {resourceGroupName} nazwą grupy zasobów.
  3. Zastąp ciąg {accountName} nazwą zasobu.
  4. Zastąp ciąg {raiBlocklistName} (w adresie URL) nazwą niestandardową listy. Dozwolone znaki: 0-9, A-Z, a-z, - . _ ~.
  5. Zastąp element {raiBlocklistItemName} niestandardową nazwą elementu listy.
  6. Zastąp element {token} tokenem uzyskanym z powyższego kroku "Pobierz token".
  7. Zastąp wartość "blocking pattern" pola elementem, który chcesz dodać do listy zablokowanych. Maksymalna długość bloku to 1000 znaków. Określ również, czy wzorzec jest regularny, czy dokładny.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{  
    "properties": {  
        "pattern": "blocking pattern",  
        "isRegex": false  
    }  
}' 

Uwaga

Dodanie nowego terminu do listy zablokowanych może potrwać około 5 minut. Przetestuj po 5 minutach.

Kod odpowiedzi powinien mieć wartość 200.

{ 
  "name": "raiBlocklistItemName", 
  "id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName", 
  "properties": { 
    "pattern": "blocking pattern", 
    "isRegex": false 
  } 
} 

Analizowanie tekstu przy użyciu listy zablokowanych

Teraz możesz przetestować wdrożenie z listą zablokowanych. Aby uzyskać instrukcje dotyczące wywoływania punktów końcowych usługi Azure OpenAI, odwiedź przewodnik Szybki start.

W poniższym przykładzie wdrożenie GPT-35-Turbo z listą zablokowanych blokuje monit. Odpowiedź zwraca 400 błąd.

{ 
    "error": { 
        "message": "The response was filtered due to the prompt triggering Azure OpenAI’s 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=2198766", 
        "type": null, 
        "param": "prompt", 
        "code": "content_filter", 
        "status": 400, 
        "innererror": { 
            "code": "ResponsibleAIPolicyViolation", 
            "content_filter_result": { 
                "custom_blocklists": [ 
                    { 
                        "filtered": true, 
                        "id": "raiBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    } 
} 

Jeśli samo ukończenie jest zablokowane, odpowiedź zwraca wartość 200, ponieważ ukończenie jest odcinane tylko wtedy, gdy zawartość listy zablokowanych jest zgodna. Adnotacje pokazują, że lista zablokowanych została dopasowana.

{ 
    "id": "chatcmpl-85NkyY0AkeBMunOjyxivQSiTaxGAl", 
    "object": "chat.completion", 
    "created": 1696293652, 
    "model": "gpt-35-turbo", 
    "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": [ 
        { 
            "index": 0, 
            "finish_reason": "content_filter", 
            "message": { 
                "role": "assistant" 
            }, 
            "content_filter_results": { 
                "custom_blocklists": [ 
                    { 
                        "filtered": true, 
                        "id": "myBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "usage": { 
        "completion_tokens": 75, 
        "prompt_tokens": 27, 
        "total_tokens": 102 
    } 
} 

Następne kroki