Udostępnij za pośrednictwem


Szybki start: wykrywanie naziemności (wersja zapoznawcza)

Postępuj zgodnie z tym przewodnikiem, aby użyć wykrywania bezpieczeństwa zawartości sztucznej inteligencji platformy Azure, aby sprawdzić, czy odpowiedzi tekstowe dużych modeli językowych (LLM) są uziemione w materiałach źródłowych dostarczonych przez użytkowników.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób Bezpieczeństwo zawartości w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Wprowadź unikatową nazwę zasobu, wybierz subskrypcję i wybierz grupę zasobów, obsługiwany region (Wschodnie stany USA, Wschodnie stany USA 2, Zachodnie stany USA, Szwecja Środkowa) i obsługiwaną warstwę cenową. Następnie wybierz Utwórz.
  • Wdrożenie zasobu trwa kilka minut. Po jego zakończeniu przejdź do nowego zasobu. W okienku po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Klucze interfejsu API i punkty końcowe. Skopiuj jedną z wartości klucza subskrypcji i punktu końcowego do lokalizacji tymczasowej do późniejszego użycia.
  • (Opcjonalnie) Jeśli chcesz użyć funkcji rozumowania , utwórz zasób usługi Azure OpenAI z wdrożonym modelem GPT.
  • Zainstalowano bibliotekę cURL lub python .

Sprawdzanie uziemienia bez rozumowania

W prostym przypadku bez funkcji rozumowania interfejs API wykrywania naziemności klasyfikuje nieprzyziemność przesłanej zawartości jako true lub false.

W tej sekcji przedstawiono przykładowe żądanie z biblioteką cURL. Wklej poniższe polecenie do edytora tekstów i wprowadź następujące zmiany.

  1. Zastąp ciąg <endpoint> adresem URL punktu końcowego skojarzonym z zasobem.

  2. Zastąp <your_subscription_key> element jednym z kluczy zasobu.

  3. Opcjonalnie zastąp "query" pola lub "text" w treści własnym tekstem, który chcesz przeanalizować.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview' \
    --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "domain": "Generic",
      "task": "QnA",
      "qna": {
           "query": "How much does she currently get paid per hour at the bank?"
      },
      "text": "12/hour",
      "groundingSources": [
        "I'm 21 years old and I need to make a decision about the next two years of my life. Within a week. I currently work for a bank that requires strict sales goals to meet. IF they aren't met three times (three months) you're canned. They pay me 10/hour and it's not unheard of to get a raise in 6ish months. The issue is, **I'm not a salesperson**. That's not my personality. I'm amazing at customer service, I have the most positive customer service \"reports\" done about me in the short time I've worked here. A coworker asked \"do you ask for people to fill these out? you have a ton\". That being said, I have a job opportunity at Chase Bank as a part time teller. What makes this decision so hard is that at my current job, I get 40 hours and Chase could only offer me 20 hours/week. Drive time to my current job is also 21 miles **one way** while Chase is literally 1.8 miles from my house, allowing me to go home for lunch. I do have an apartment and an awesome roommate that I know wont be late on his portion of rent, so paying bills with 20hours a week isn't the issue. It's the spending money and being broke all the time.\n\nI previously worked at Wal-Mart and took home just about 400 dollars every other week. So I know i can survive on this income. I just don't know whether I should go for Chase as I could definitely see myself having a career there. I'm a math major likely going to become an actuary, so Chase could provide excellent opportunities for me **eventually**."
      ],
      "reasoning": false
    }'
    

Otwórz wiersz polecenia i uruchom polecenie cURL.

Aby przetestować zadanie podsumowania zamiast zadania odpowiedzi na pytania (QnA), użyj następującej przykładowej treści JSON:

{
    "domain": "Medical",
    "task": "Summarization",
    "text": "Ms Johnson has been in the hospital after experiencing a stroke.",
    "groundingSources": ["Our patient, Ms. Johnson, presented with persistent fatigue, unexplained weight loss, and frequent night sweats. After a series of tests, she was diagnosed with Hodgkin’s lymphoma, a type of cancer that affects the lymphatic system. The diagnosis was confirmed through a lymph node biopsy revealing the presence of Reed-Sternberg cells, a characteristic of this disease. She was further staged using PET-CT scans. Her treatment plan includes chemotherapy and possibly radiation therapy, depending on her response to treatment. The medical team remains optimistic about her prognosis given the high cure rate of Hodgkin’s lymphoma."],
    "reasoning": false
}

Adres URL musi zawierać następujące pola:

Nazwisko Wymagania opis Type
Wersja interfejsu API Wymagania Jest to wersja interfejsu API, która ma być używana. Bieżąca wersja to: api-version=2024-02-15-preview. Przykład: <endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview String

Parametry w treści żądania są zdefiniowane w tej tabeli:

Nazwa/nazwisko opis Type
domena (Opcjonalnie) MEDICAL lub GENERIC. Wartość domyślna: GENERIC. Wyliczenie
zadanie (Opcjonalnie) Typ zadania: QnA, Summarization. Wartość domyślna: Summarization. Wyliczenie
qna (Opcjonalnie) Przechowuje dane usługi QnA, gdy typ zadania to QnA. String
- query (Opcjonalnie) Reprezentuje to pytanie w zadaniu pytań i odpowiedzi. Limit znaków: 7500. String
text (Wymagane) Tekst wyjściowy llM, który ma zostać sprawdzony. Limit znaków: 7500. String
groundingSources (Wymagane) Używa tablicy źródeł uziemienia do weryfikowania tekstu generowanego przez sztuczną inteligencję. Zobacz Wymagania dotyczące danych wejściowych, aby uzyskać informacje o limitach. Tablica ciągów
Rozumowanie (Opcjonalnie) Określa, czy należy używać funkcji rozumowania. Domyślna wartość to false. Jeśli truechcesz udostępnić własne zasoby usługi Azure OpenAI GPT-4 Turbo (1106-preview), aby przedstawić wyjaśnienie. Należy zachować ostrożność: użycie rozumowania zwiększa czas przetwarzania. Wartość logiczna

Interpretowanie odpowiedzi interfejsu API

Po przesłaniu żądania otrzymasz odpowiedź JSON odzwierciedlając wykonaną analizę groundedness. Oto jak wyglądają typowe dane wyjściowe:

{
    "ungroundedDetected": true,
    "ungroundedPercentage": 1,
    "ungroundedDetails": [
        {
            "text": "12/hour."
        }
    ]
}

Obiekty JSON w danych wyjściowych są zdefiniowane tutaj:

Nazwa/nazwisko opis Type
ungroundedDetected Wskazuje, czy tekst wykazuje nieprzyziemność. Wartość logiczna
ungroundedPercentage Określa proporcję tekstu zidentyfikowanego jako nieziemierny, wyrażony jako liczba z zakresu od 0 do 1, gdzie wartość 0 nie wskazuje zawartości nieprzystawionej, a 1 oznacza całkowicie nieprzyziemną zawartość. Liczba zmiennoprzecinkowa
ungroundedDetails Udostępnia szczegółowe informacje na temat zawartości bez planu z określonymi przykładami i wartościami procentowymi. Tablica
-text Określony tekst, który jest nieprzystawiony. String

Sprawdzanie uziemienia z rozumowaniem

Interfejs API wykrywania naziemności udostępnia opcję uwzględniania rozumowania w odpowiedzi interfejsu API. Po włączeniu rozumowania odpowiedź zawiera "reasoning" pole, które zawiera szczegółowe informacje o określonych wystąpieniach i wyjaśnieniach dotyczących wszelkich wykrytych nieprzystawień.

Wdrażanie własnego zestawu GPT

Napiwek

Obecnie obsługujemy tylko zasoby usługi Azure OpenAI GPT-4 Turbo (1106-preview) i nie obsługują innych typów GPT. Masz elastyczność wdrażania zasobów GPT-4 Turbo (1106-preview) w dowolnym regionie. Jednak aby zminimalizować potencjalne opóźnienia i uniknąć wszelkich problemów związanych z prywatnością danych i ryzykiem granic geograficznych, zalecamy usiąść je w tym samym regionie co zasoby bezpieczeństwa zawartości. Aby uzyskać szczegółowe informacje na temat prywatności danych, zapoznaj się z wytycznymi dotyczącymi danych, prywatności i zabezpieczeń dla usługi Azure OpenAI Service i danych, prywatności i zabezpieczeń bezpieczeństwa zawartości usługi Azure AI.

Aby użyć zasobu Azure OpenAI GPT4-Turbo (1106-preview), aby włączyć funkcję rozumowania, użyj tożsamości zarządzanej, aby zezwolić zasobowi Bezpieczeństwo zawartości na dostęp do zasobu usługi Azure OpenAI:

  1. Włącz tożsamość zarządzaną dla bezpieczeństwa zawartości usługi Azure AI.

    Przejdź do wystąpienia bezpieczeństwa zawartości usługi Azure AI w witrynie Azure Portal. Znajdź sekcję Tożsamość w kategorii Ustawienia . Włącz tożsamość zarządzaną przypisaną przez system. Ta akcja umożliwia wystąpieniu bezpieczeństwa zawartości usługi Azure AI tożsamość, która może być rozpoznawana i używana na platformie Azure do uzyskiwania dostępu do innych zasobów.

    Zrzut ekranu przedstawiający zasób tożsamości Bezpieczeństwo zawartości w witrynie Azure Portal.

  2. Przypisz rolę do tożsamości zarządzanej.

    Przejdź do wystąpienia usługi Azure OpenAI, wybierz pozycję Dodaj przypisanie roli, aby rozpocząć proces przypisywania roli usługi Azure OpenAI do tożsamości bezpieczeństwa zawartości usługi Azure AI.

    Zrzut ekranu przedstawiający dodawanie przypisania roli w witrynie Azure Portal.

    Wybierz rolę Użytkownik lub Współautor.

    Zrzut ekranu witryny Azure Portal z rolami Współautor i Użytkownik wyświetlanymi na liście.

Wysyłanie żądania interfejsu API

W żądaniu do interfejsu API wykrywania naziemności ustaw "reasoning" parametr treści na true, a następnie podaj inne wymagane parametry:

 {
  "reasoning": true,
  "llmResource": {
    "resourceType": "AzureOpenAI",
    "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
    "azureOpenAIDeploymentName": "<your_deployment_name>"
  }
}

W tej sekcji przedstawiono przykładowe żądanie z biblioteką cURL. Wklej poniższe polecenie do edytora tekstów i wprowadź następujące zmiany.

  1. Zastąp ciąg <endpoint> adresem URL punktu końcowego skojarzonym z zasobem.

  2. Zastąp <your_subscription_key> element jednym z kluczy zasobu.

  3. Opcjonalnie zastąp "query" pola lub "text" w treści własnym tekstem, który chcesz przeanalizować.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-02-15-preview' \
    --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "domain": "Generic",
      "task": "QnA",
      "qna": {
           "query": "How much does she currently get paid per hour at the bank?"
      },
      "text": "12/hour",
      "groundingSources": [
        "I'm 21 years old and I need to make a decision about the next two years of my life. Within a week. I currently work for a bank that requires strict sales goals to meet. IF they aren't met three times (three months) you're canned. They pay me 10/hour and it's not unheard of to get a raise in 6ish months. The issue is, **I'm not a salesperson**. That's not my personality. I'm amazing at customer service, I have the most positive customer service \"reports\" done about me in the short time I've worked here. A coworker asked \"do you ask for people to fill these out? you have a ton\". That being said, I have a job opportunity at Chase Bank as a part time teller. What makes this decision so hard is that at my current job, I get 40 hours and Chase could only offer me 20 hours/week. Drive time to my current job is also 21 miles **one way** while Chase is literally 1.8 miles from my house, allowing me to go home for lunch. I do have an apartment and an awesome roommate that I know wont be late on his portion of rent, so paying bills with 20hours a week isn't the issue. It's the spending money and being broke all the time.\n\nI previously worked at Wal-Mart and took home just about 400 dollars every other week. So I know i can survive on this income. I just don't know whether I should go for Chase as I could definitely see myself having a career there. I'm a math major likely going to become an actuary, so Chase could provide excellent opportunities for me **eventually**."
      ],
      "reasoning": true,
      "llmResource": {
            "resourceType": "AzureOpenAI",
            "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
            "azureOpenAIDeploymentName": "<your_deployment_name>"
    }'
    
  4. Otwórz wiersz polecenia i uruchom polecenie cURL.

Parametry w treści żądania są zdefiniowane w tej tabeli:

Nazwa/nazwisko opis Type
domena (Opcjonalnie) MEDICAL lub GENERIC. Wartość domyślna: GENERIC. Wyliczenie
zadanie (Opcjonalnie) Typ zadania: QnA, Summarization. Wartość domyślna: Summarization. Wyliczenie
qna (Opcjonalnie) Przechowuje dane usługi QnA, gdy typ zadania to QnA. String
- query (Opcjonalnie) Reprezentuje to pytanie w zadaniu pytań i odpowiedzi. Limit znaków: 7500. String
text (Wymagane) Tekst wyjściowy llM, który ma zostać sprawdzony. Limit znaków: 7500. String
groundingSources (Wymagane) Używa tablicy źródeł uziemienia do weryfikowania tekstu generowanego przez sztuczną inteligencję. Zobacz Wymagania dotyczące danych wejściowych dotyczące limitów, Tablica ciągów
Rozumowanie (Opcjonalnie) Ustaw wartość na true, usługa używa zasobów usługi Azure OpenAI w celu udostępnienia wyjaśnienia. Należy zachować ostrożność: użycie rozumowania zwiększa czas przetwarzania i wiąże się z dodatkowymi opłatami. Wartość logiczna
llmResource (Wymagane) Jeśli chcesz użyć własnego zasobu usługi Azure OpenAI GPT4-Turbo (1106-preview), aby włączyć rozumowanie, dodaj to pole i dołącz pola podrzędne dla używanych zasobów. String
- resourceType Określa typ używanego zasobu. Obecnie zezwala tylko na AzureOpenAI. Obsługujemy tylko zasoby usługi Azure OpenAI GPT-4 Turbo (1106-preview) i nie obsługują innych typów GPT. Wyliczenie
- azureOpenAIEndpoint Adres URL punktu końcowego dla usługi Azure OpenAI. String
- azureOpenAIDeploymentName Nazwa określonego wdrożenia GPT do użycia. String

Interpretowanie odpowiedzi interfejsu API

Po przesłaniu żądania otrzymasz odpowiedź JSON odzwierciedlając wykonaną analizę groundedness. Oto jak wyglądają typowe dane wyjściowe:

{
    "ungroundedDetected": true,
    "ungroundedPercentage": 1,
    "ungroundedDetails": [
        {
            "text": "12/hour.",
            "offset": {
                "utf8": 0,
                "utf16": 0,
                "codePoint": 0
            },
            "length": {
                "utf8": 8,
                "utf16": 8,
                "codePoint": 8
            },
            "reason": "None. The premise mentions a pay of \"10/hour\" but does not mention \"12/hour.\" It's neutral. "
        }
    ]
}

Obiekty JSON w danych wyjściowych są zdefiniowane tutaj:

Nazwa/nazwisko opis Type
ungroundedDetected Wskazuje, czy tekst wykazuje nieprzyziemność. Wartość logiczna
ungroundedPercentage Określa proporcję tekstu zidentyfikowanego jako nieziemierny, wyrażony jako liczba z zakresu od 0 do 1, gdzie wartość 0 nie wskazuje zawartości nieprzystawionej, a 1 oznacza całkowicie nieprzyziemną zawartość. Liczba zmiennoprzecinkowa
ungroundedDetails Udostępnia szczegółowe informacje na temat zawartości bez planu z określonymi przykładami i wartościami procentowymi. Tablica
-text Określony tekst, który jest nieprzystawiony. String
-offset Obiekt opisujący położenie tekstu bez pola w różnych kodowaniu. String
- offset > utf8 Położenie przesunięcia tekstu bez pola w kodowaniu UTF-8. Integer
- offset > utf16 Położenie przesunięcia tekstu bez pola w kodowaniu UTF-16. Integer
- offset > codePoint Położenie przesunięcia tekstu bez pola pod względem punktów kodu Unicode. Integer
-length Obiekt opisujący długość tekstu bez pola w różnych kodowaniu. (utf8, utf16, codePoint), podobnie jak przesunięcie. Objekt
- length > utf8 Długość tekstu bez pola w kodowaniu UTF-8. Integer
- length > utf16 Długość tekstu bez pola w kodowaniu UTF-16. Integer
- length > codePoint Długość tekstu bez pola pod względem punktów kodu Unicode. Integer
-reason Oferuje wyjaśnienia dotyczące wykrytej nieziemności. String

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję usług Azure AI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Następne kroki

Połącz wykrywanie uziemienia z innymi funkcjami bezpieczeństwa LLM, takimi jak Prompt Shields.