Dela via


Konfigurera innehållsfilter (förhandsversion) för modeller i Azure AI-tjänster

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Innehållsfiltreringssystemet som är integrerat i Azure AI Services körs tillsammans med kärnmodellerna. Den använder en ensemble av klassificeringsmodeller med flera klasser för att upptäcka fyra kategorier av skadligt innehåll (våld, hat, sexuellt och självskadebeteende) på fyra allvarlighetsnivåer (säkra, låga, medelstora och höga). Den erbjuder valfria binära klassificerare för att identifiera risk för jailbreak, befintlig text och kod i offentliga lagringsplatser. Läs mer om innehållskategorier, allvarlighetsnivåer och beteendet för innehållsfiltreringssystemet i följande artikel

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 av innehållsskador för både prompter och slutföranden. Därför filtreras innehåll som identifieras på allvarlighetsnivå medel eller hög, medan innehåll som identifieras på allvarlighetsgrad låg eller säker inte filtreras.

Innehållsfilter kan konfigureras på resursnivå och associeras med en eller flera distributioner.

Förutsättningar

För att slutföra den här artikeln behöver du:

Skapa ett anpassat innehållsfilter

Följ dessa steg för att skapa ett anpassat innehållsfilter:

  1. Gå till Azure AI Foundry-portalen.

  2. Välj Säkerhet + säkerhet.

  3. Välj fliken Innehållsfilter och välj sedan Skapa innehållsfilter.

  4. Under Grundläggande information ger du innehållsfiltret ett namn.

  5. Under Anslutning väljer du anslutningen till den Azure AI Services-resurs som är ansluten till projektet.

  6. Under Indatafilter konfigurerar du filtret beroende på dina krav. Den här konfigurationen tillämpas innan begäran når själva modellen.

  7. Under Utdatafilter konfigurerar du filtret beroende på dina krav. Den här konfigurationen tillämpas när modellen har körts och innehållet genereras.

  8. Välj Nästa.

  9. Du kan också associera en viss distribution med det skapade innehållsfiltret. Du kan när som helst ändra de modelldistributioner som är associerade.

  10. När distributionen är klar tillämpas det nya innehållsfiltret på modelldistributionen.

Konto för innehållsfiltrering i koden

När innehållsfiltrering har tillämpats på modelldistributionen kan begäranden fångas upp av tjänsten beroende på indata och utdata. När ett innehållsfilter utlöses returneras en 400-felkod med beskrivningen av regeln utlöst.

Installera paketet azure-ai-inference med hjälp av pakethanteraren, till exempel pip:

pip install azure-ai-inference>=1.0.0b5

Varning

Azure AI Services-resursen kräver versionen azure-ai-inference>=1.0.0b5 för Python.

Sedan kan du använda paketet för att använda modellen. I följande exempel visas hur du skapar en klient för att använda chattavslutningar:

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Utforska våra exempel och läs API-referensdokumentationen för att komma igång.

I följande exempel visas svaret på en begäran om chattavslut som har utlöst innehållssäkerhet.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Följ metodtipsen

Vi rekommenderar att du informerar dina beslut om innehållsfiltrering genom en iterativ identifiering (till exempel red team-testning, stresstestning och analys) och mätningsprocess för att åtgärda potentiella skador som är relevanta för en specifik modell, ett visst program och distributionsscenario. När du har implementerat åtgärder som innehållsfiltrering upprepar du mätningen för att testa effektiviteten.

Rekommendationer och metodtips för ansvarsfull AI för Azure OpenAI, som finns i Microsoft Responsible AI Standard, finns i Översikt över ansvarsfull AI för Azure OpenAI.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Innehållsfiltreringssystemet som är integrerat i Azure AI Services körs tillsammans med kärnmodellerna. Den använder en ensemble av klassificeringsmodeller med flera klasser för att upptäcka fyra kategorier av skadligt innehåll (våld, hat, sexuellt och självskadebeteende) på fyra allvarlighetsnivåer (säkra, låga, medelstora och höga). Den erbjuder valfria binära klassificerare för att identifiera risk för jailbreak, befintlig text och kod i offentliga lagringsplatser. Läs mer om innehållskategorier, allvarlighetsnivåer och beteendet för innehållsfiltreringssystemet i följande artikel

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 av innehållsskador för både prompter och slutföranden. Därför filtreras innehåll som identifieras på allvarlighetsnivå medel eller hög, medan innehåll som identifieras på allvarlighetsgrad låg eller säker inte filtreras.

Innehållsfilter kan konfigureras på resursnivå och associeras med en eller flera distributioner.

Förutsättningar

För att slutföra den här artikeln behöver du:

Lägga till en modelldistribution med anpassad innehållsfiltrering

Vi rekommenderar att du skapar innehållsfilter med antingen Azure AI Foundry-portalen eller i kod med hjälp av Bicep. Det går inte att skapa anpassade innehållsfilter eller tillämpa dem på distributioner med hjälp av Azure CLI.

Konto för innehållsfiltrering i koden

När innehållsfiltrering har tillämpats på modelldistributionen kan begäranden fångas upp av tjänsten beroende på indata och utdata. När ett innehållsfilter utlöses returneras en 400-felkod med beskrivningen av regeln utlöst.

Installera paketet azure-ai-inference med hjälp av pakethanteraren, till exempel pip:

pip install azure-ai-inference>=1.0.0b5

Varning

Azure AI Services-resursen kräver versionen azure-ai-inference>=1.0.0b5 för Python.

Sedan kan du använda paketet för att använda modellen. I följande exempel visas hur du skapar en klient för att använda chattavslutningar:

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Utforska våra exempel och läs API-referensdokumentationen för att komma igång.

I följande exempel visas svaret på en begäran om chattavslut som har utlöst innehållssäkerhet.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Följ metodtipsen

Vi rekommenderar att du informerar dina beslut om innehållsfiltrering genom en iterativ identifiering (till exempel red team-testning, stresstestning och analys) och mätningsprocess för att åtgärda potentiella skador som är relevanta för en specifik modell, ett visst program och distributionsscenario. När du har implementerat åtgärder som innehållsfiltrering upprepar du mätningen för att testa effektiviteten.

Rekommendationer och metodtips för ansvarsfull AI för Azure OpenAI, som finns i Microsoft Responsible AI Standard, finns i Översikt över ansvarsfull AI för Azure OpenAI.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Innehållsfiltreringssystemet som är integrerat i Azure AI Services körs tillsammans med kärnmodellerna. Den använder en ensemble av klassificeringsmodeller med flera klasser för att upptäcka fyra kategorier av skadligt innehåll (våld, hat, sexuellt och självskadebeteende) på fyra allvarlighetsnivåer (säkra, låga, medelstora och höga). Den erbjuder valfria binära klassificerare för att identifiera risk för jailbreak, befintlig text och kod i offentliga lagringsplatser. Läs mer om innehållskategorier, allvarlighetsnivåer och beteendet för innehållsfiltreringssystemet i följande artikel

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 av innehållsskador för både prompter och slutföranden. Därför filtreras innehåll som identifieras på allvarlighetsnivå medel eller hög, medan innehåll som identifieras på allvarlighetsgrad låg eller säker inte filtreras.

Innehållsfilter kan konfigureras på resursnivå och associeras med en eller flera distributioner.

Förutsättningar

För att slutföra den här artikeln behöver du:

  • Installera Azure CLI.

  • Identifiera följande information:

    • ditt prenumerations-ID för Azure

    • Ditt Azure AI Services-resursnamn.

    • Resursgruppen där Azure AI Services-resursen distribueras.

    • Modellnamnet, providern, versionen och SKU:n som du vill distribuera. Du kan använda Azure AI Foundry-portalen eller Azure CLI för att identifiera den. I det här exemplet distribuerar vi följande modell:

      • Modellnamn:: Phi-3.5-vision-instruct
      • Provider: Microsoft
      • Version: 2
      • Distributionstyp: Global standard

Lägga till en modelldistribution med anpassad innehållsfiltrering

  1. Använd mallen ai-services-content-filter-template.bicep för att beskriva innehållsfilterprincipen:

    ai-services-content-filter-template.bicep

    @description('Name of the Azure AI Services account where the policy will be created')
    param accountName string
    
    @description('Name of the policy to be created')
    param policyName string
    
    @allowed(['Asynchronous_filter', 'Blocking', 'Default', 'Deferred'])
    param mode string = 'Default'
    
    @description('Base policy to be used for the new policy')
    param basePolicyName string = 'Microsoft.DefaultV2'
    
    param contentFilters array = [
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Jailbreak'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Indirect Attack'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Text'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Code'
          blocking: false
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Completion'
      }
    ]
    
    resource raiPolicy 'Microsoft.CognitiveServices/accounts/raiPolicies@2024-06-01-preview' = {
        name: '${accountName}/${policyName}'
        properties: {
            mode: mode
            basePolicyName: basePolicyName
            contentFilters: contentFilters
        }
    }
    
  2. Använd mallen ai-services-deployment-template.bicep för att beskriva modelldistributioner:

    ai-services-deployment-template.bicep

    @description('Name of the Azure AI services account')
    param accountName string
    
    @description('Name of the model to deploy')
    param modelName string
    
    @description('Version of the model to deploy')
    param modelVersion string
    
    @allowed([
      'AI21 Labs'
      'Cohere'
      'Core42'
      'Meta'
      'Microsoft'
      'Mistral AI'
      'OpenAI'
    ])
    @description('Model provider')
    param modelPublisherFormat string
    
    @allowed([
        'GlobalStandard'
        'Standard'
        'GlobalProvisioned'
        'Provisioned'
    ])
    @description('Model deployment SKU name')
    param skuName string = 'GlobalStandard'
    
    @description('Content filter policy name')
    param contentFilterPolicyName string = 'Microsoft.DefaultV2'
    
    @description('Model deployment capacity')
    param capacity int = 1
    
    resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2024-04-01-preview' = {
      name: '${accountName}/${modelName}'
      sku: {
        name: skuName
        capacity: capacity
      }
      properties: {
        model: {
          format: modelPublisherFormat
          name: modelName
          version: modelVersion
        }
        raiPolicyName: contentFilterPolicyName == null ? 'Microsoft.Nill' : contentFilterPolicyName
      }
    }
    
  3. Skapa huvuddistributionsdefinitionen:

    main.bicep

    param accountName string
    param modelName string
    param modelVersion string
    param modelPublisherFormat string
    param contentFilterPolicyName string
    
    module raiPolicy 'ai-services-content-filter-template.bicep' = {
      name: 'raiPolicy'
      scope: resourceGroup(resourceGroupName)
      params: {
        accountName: accountName
        policyName: contentFilterPolicyName
      }
    }
    
    module modelDeployment 'ai-services-deployment-template.bicep' = {
        name: 'modelDeployment'
        scope: resourceGroup(resourceGroupName)
        params: {
            accountName: accountName
            modelName: modelName
            modelVersion: modelVersion
            modelPublisherFormat: modelPublisherFormat
            contentFilterPolicyName: contentFilterPolicyName
        }
        dependsOn: [
            raiPolicy
        ]
    }
    
  4. Kör distributionen:

    RESOURCE_GROUP="<resource-group-name>"
    ACCOUNT_NAME="<azure-ai-model-inference-name>" 
    MODEL_NAME="Phi-3.5-vision-instruct"
    PROVIDER="Microsoft"
    VERSION=2
    RAI_POLICY_NAME="custom-policy"
    
    az deployment group create \
        --resource-group $RESOURCE_GROUP \
        --template-file main.bicep \
        --parameters accountName=$ACCOUNT_NAME raiPolicyName=$RAI_POLICY_NAME modelName=$MODEL_NAME modelVersion=$VERSION modelPublisherFormat=$PROVIDER
    

Konto för innehållsfiltrering i koden

När innehållsfiltrering har tillämpats på modelldistributionen kan begäranden fångas upp av tjänsten beroende på indata och utdata. När ett innehållsfilter utlöses returneras en 400-felkod med beskrivningen av regeln utlöst.

Installera paketet azure-ai-inference med hjälp av pakethanteraren, till exempel pip:

pip install azure-ai-inference>=1.0.0b5

Varning

Azure AI Services-resursen kräver versionen azure-ai-inference>=1.0.0b5 för Python.

Sedan kan du använda paketet för att använda modellen. I följande exempel visas hur du skapar en klient för att använda chattavslutningar:

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Utforska våra exempel och läs API-referensdokumentationen för att komma igång.

I följande exempel visas svaret på en begäran om chattavslut som har utlöst innehållssäkerhet.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Följ metodtipsen

Vi rekommenderar att du informerar dina beslut om innehållsfiltrering genom en iterativ identifiering (till exempel red team-testning, stresstestning och analys) och mätningsprocess för att åtgärda potentiella skador som är relevanta för en specifik modell, ett visst program och distributionsscenario. När du har implementerat åtgärder som innehållsfiltrering upprepar du mätningen för att testa effektiviteten.

Rekommendationer och metodtips för ansvarsfull AI för Azure OpenAI, som finns i Microsoft Responsible AI Standard, finns i Översikt över ansvarsfull AI för Azure OpenAI.

Nästa steg