Guia de início rápido: usar a deteção de aterramento (visualização)

Este guia mostra como usar a API de deteção de aterramento. Este recurso deteta e corrige automaticamente texto sem fundamento com base nos documentos de origem fornecidos, garantindo que o conteúdo gerado esteja alinhado com referências factuais ou pretendidas. Abaixo, exploramos vários cenários comuns para ajudá-lo a entender como e quando aplicar esses recursos para obter os melhores resultados.

Pré-requisitos

  • Uma assinatura do Azure - Crie uma gratuitamente
  • Depois de ter sua assinatura do Azure, crie um recurso de Segurança de Conteúdo no portal do Azure para obter sua chave e ponto de extremidade. Introduza um nome exclusivo para o seu recurso, selecione a sua subscrição e selecione um grupo de recursos, uma região suportada e um escalão de preços suportado. Depois, selecione Criar.
  • O recurso leva alguns minutos para ser implantado. Em seguida, aceda ao novo recurso. No painel esquerdo, em Gerenciamento de Recursos, selecione Chaves e Pontos de Extremidade da API. Copie um dos valores de chave de assinatura e ponto de extremidade para um local temporário para uso posterior.
  • (Opcional) Se você quiser usar o recurso de raciocínio, crie um recurso do Serviço OpenAI do Azure com um modelo GPT implantado.
  • cURL ou Python instalado.

Verifique a fundamentação sem raciocínio

No caso simples, sem o recurso de raciocínio, a API de deteção de fundamentação classifica a falta de fundamento do conteúdo enviado como true ou false.

Esta seção percorre uma solicitação de exemplo com cURL. Cole o comando abaixo em um editor de texto e faça as seguintes alterações.

  1. Substitua <endpoint> pela URL do ponto de extremidade associada ao seu recurso.

  2. Substitua <your_subscription_key> por uma das chaves do seu recurso.

  3. Opcionalmente, substitua os "query" campos ou "text" no corpo pelo seu próprio texto que você gostaria de analisar.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-09-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
    }'
    

Abra um prompt de comando e execute o comando cURL.

Para testar uma tarefa de resumo em vez de uma tarefa de resposta a perguntas (QnA), use o seguinte corpo JSON de exemplo:

{
  "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
}

Os seguintes campos devem ser incluídos no URL:

Nome Obrigatório Description Type
Versão da API Necessário Esta é a versão da API a ser usada. A versão atual é: api-version=2024-09-15-preview. Exemplo: <endpoint>/contentsafety/text:detectGroundedness?api-version=2024-09-15-preview String

Os parâmetros no corpo da solicitação são definidos nesta tabela:

Nome Descrição Type
domínio (Opcional) MEDICAL ou GENERIC. Valor predefinido: GENERIC. Enumeração
tarefa (Opcional) Tipo de tarefa: QnA, Summarization. Valor predefinido: Summarization. Enumeração
qna (Opcional) Mantém dados QnA quando o tipo de tarefa é QnA. String
- query (Opcional) Isso representa a pergunta em uma tarefa QnA. Limite de caracteres: 7.500. String
texto (Obrigatório) O texto de saída LLM a ser verificado. Limite de caracteres: 7.500. String
aterramentoFontes (Obrigatório) Usa uma matriz de fontes de aterramento para validar texto gerado por IA. Consulte Requisitos de entrada para limites. Matriz de cadeias de carateres
Fundamentação (Opcional) Especifica se o recurso de raciocínio deve ser usado. O valor predefinido é false. Se true, você precisa trazer seu próprio Azure OpenAI GPT4o (versão 0513, 0806) para fornecer uma explicação. Tenha cuidado: usar o raciocínio aumenta o tempo de processamento. Boolean

Interpretar a resposta da API

Depois de enviar sua solicitação, você receberá uma resposta JSON refletindo a análise de fundamentação realizada. Veja como é uma saída típica:

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

Os objetos JSON na saída são definidos aqui:

Nome Descrição Type
ungroundedDetected Indica se o texto apresenta falta de fundamento. Boolean
sem fundamentoPercentagem Especifica a proporção do texto identificado como não fundamentado, expressa como um número entre 0 e 1, em que 0 indica nenhum conteúdo não fundamentado e 1 indica conteúdo totalmente infundado. Float
ungroundedDetalhes Fornece informações sobre conteúdo não fundamentado com exemplos e porcentagens específicos. Matriz
-text O texto específico que não tem fundamento. String

Verifique a fundamentação com o raciocínio

A API de deteção de aterramento fornece a opção de incluir o raciocínio na resposta da API. Com o raciocínio ativado, a resposta inclui um "reasoning" campo que detalha instâncias específicas e explicações para qualquer falta de fundamento detetada.

Conecte sua própria implantação GPT

Gorjeta

Suportamos apenas **Azure OpenAI GPT4o (versão 0513, 0806) ** recursos e não suportamos outros tipos de GPT. Você tem a flexibilidade de implantar seus recursos do Azure OpenAI GPT4o (versão 0513, 0806) em qualquer região. No entanto, para minimizar a latência potencial e evitar qualquer limite geográfico, privacidade de dados e preocupações de risco, recomendamos situá-los na mesma região que seus recursos de segurança de conteúdo. Para obter detalhes abrangentes sobre privacidade de dados, consulte as diretrizes de dados, privacidade e segurança para o Serviço OpenAI do Azure e Dados, privacidade e segurança para Segurança de Conteúdo do Azure AI.

Para usar seu recurso Azure OpenAI GPT4o (0513, versão 0806) para habilitar o recurso de raciocínio, use a Identidade Gerenciada para permitir que seu recurso de Segurança de Conteúdo acesse o recurso do Azure OpenAI:

  1. Habilite a Identidade Gerenciada para a Segurança de Conteúdo do Azure AI.

    Navegue até sua instância de Segurança de Conteúdo do Azure AI no portal do Azure. Encontre a seção Identidade na categoria Configurações. Habilite a identidade gerenciada atribuída ao sistema. Esta ação concede à sua instância de Segurança de Conteúdo do Azure AI uma identidade que pode ser reconhecida e usada no Azure para acessar outros recursos.

    Captura de ecrã de um recurso de identidade de Segurança de Conteúdo no portal do Azure.

  2. Atribua função à Identidade Gerenciada.

    Navegue até sua instância do Azure OpenAI, selecione Adicionar atribuição de função para iniciar o processo de atribuição de uma função do Azure OpenAI à identidade de Segurança de Conteúdo do Azure AI.

    Captura de ecrã a mostrar a adição de atribuição de função no portal do Azure.

    Escolha a função Usuário ou Colaborador .

    Captura de ecrã do portal do Azure com as funções de Colaborador e Utilizador apresentadas numa lista.

Fazer a solicitação de API

Em sua solicitação à API de deteção de aterramento, defina o "reasoning" parâmetro body como truee forneça os outros parâmetros necessários:


{
  "domain": "Medical",
  "task": "Summarization",
  "text": "The patient name is Kevin.",
  "groundingSources": [
    "The patient name is Jane."
  ],
  "reasoning": true,
  "llmResource": {
    "resourceType": "AzureOpenAI",
    "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
    "azureOpenAIDeploymentName": "<your_deployment_name>"
  }
}

Esta seção percorre uma solicitação de exemplo com cURL. Cole o comando abaixo em um editor de texto e faça as seguintes alterações.

  1. Substitua <endpoint> pela URL do ponto de extremidade associada ao seu recurso de Segurança de Conteúdo do Azure AI.

  2. Substitua <your_subscription_key> por uma das chaves do seu recurso.

  3. Substitua <your_OpenAI_endpoint> pela URL do ponto de extremidade associada ao seu recurso do Azure OpenAI.

  4. Substitua <your_deployment_name> pelo nome da sua implantação do Azure OpenAI.

  5. Opcionalmente, substitua os "query" campos ou "text" no corpo pelo seu próprio texto que você gostaria de analisar.

    curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-09-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>"
    }'
    
  6. Abra um prompt de comando e execute o comando cURL.

Os parâmetros no corpo da solicitação são definidos nesta tabela:

Nome Descrição Type
domínio (Opcional) MEDICAL ou GENERIC. Valor predefinido: GENERIC. Enumeração
tarefa (Opcional) Tipo de tarefa: QnA, Summarization. Valor predefinido: Summarization. Enumeração
qna (Opcional) Mantém dados QnA quando o tipo de tarefa é QnA. String
- query (Opcional) Isso representa a pergunta em uma tarefa QnA. Limite de caracteres: 7.500. String
texto (Obrigatório) O texto de saída LLM a ser verificado. Limite de caracteres: 7.500. String
aterramentoFontes (Obrigatório) Usa uma matriz de fontes de aterramento para validar texto gerado por IA. Consulte Requisitos de entrada para limites, Matriz de cadeias de carateres
Fundamentação (Opcional) Definido como true, o serviço usa recursos do Azure OpenAI para fornecer uma explicação. Tenha cuidado: usar o raciocínio aumenta o tempo de processamento e incorre em taxas extras. Boolean
llmRecurso (Obrigatório) Se você quiser usar seu próprio recurso Azure OpenAI GPT4o (0513, versão 0806) para habilitar o raciocínio, adicione este campo e inclua os subcampos para os recursos usados. String
- resourceType Especifica o tipo de recurso que está sendo usado. Atualmente só permite AzureOpenAI. Suportamos apenas recursos do Azure OpenAI GPT4o (versão 0513, 0806) e não suportamos outros tipos de GPT. Enumeração
- azureOpenAIEndpoint Sua URL de ponto de extremidade para o serviço Azure OpenAI. String
- azureOpenAIDeploymentName O nome da implantação GPT específica a ser usada. String

Interpretar a resposta da API

Depois de enviar sua solicitação, você receberá uma resposta JSON refletindo a análise de fundamentação realizada. Veja como é uma saída típica:

{
  "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. "
    }
  ]
}

Os objetos JSON na saída são definidos aqui:

Nome Descrição Type
ungroundedDetected Indica se o texto apresenta falta de fundamento. Boolean
sem fundamentoPercentagem Especifica a proporção do texto identificado como não fundamentado, expressa como um número entre 0 e 1, em que 0 indica nenhum conteúdo não fundamentado e 1 indica conteúdo totalmente infundado. Float
ungroundedDetalhes Fornece informações sobre conteúdo não fundamentado com exemplos e porcentagens específicos. Matriz
-text O texto específico que não tem fundamento. String
-offset Um objeto que descreve a posição do texto sem fundamento em várias codificações. String
- offset > utf8 A posição de deslocamento do texto sem fundamento na codificação UTF-8. Número inteiro
- offset > utf16 A posição de deslocamento do texto sem fundamento na codificação UTF-16. Número inteiro
- offset > codePoint A posição de deslocamento do texto sem fundamento em termos de pontos de código Unicode. Número inteiro
-length Um objeto que descreve o comprimento do texto sem fundamento em várias codificações. (utf8, utf16, codePoint), semelhante ao offset. Object
- length > utf8 O comprimento do texto sem fundamento na codificação UTF-8. Número inteiro
- length > utf16 O comprimento do texto sem fundamento na codificação UTF-16. Número inteiro
- length > codePoint O comprimento do texto sem fundamento em termos de pontos de código Unicode. Número inteiro
-reason Oferece explicações para a falta de fundamento detetada. String

Verifique a fundamentação com o recurso de correção

A API de deteção de aterramento inclui um recurso de correção que corrige automaticamente qualquer falta de fundamento detetada no texto com base nas fontes de aterramento fornecidas. Quando o recurso de correção está ativado, a resposta inclui um "correction Text" campo que apresenta o texto corrigido alinhado com as fontes de aterramento.

Conecte sua própria implantação GPT

Gorjeta

Atualmente, o recurso de correção suporta apenas **Azure OpenAI GPT4o (0513, versão 0806) ** recursos. Para minimizar a latência e aderir às diretrizes de privacidade de dados, é recomendável implantar seu Azure OpenAI GPT4o (versão 0513, 0806) na mesma região que seus recursos de segurança de conteúdo. Para obter mais detalhes sobre privacidade de dados, consulte as diretrizes de dados, privacidade e segurança para o Serviço OpenAI do Azure e Dados, privacidade e segurança para Segurança de Conteúdo do Azure AI.

Para usar seu recurso Azure OpenAI GPT4o (0513, versão 0806) para habilitar o recurso de correção, use a Identidade Gerenciada para permitir que seu recurso de Segurança de Conteúdo acesse o recurso do Azure OpenAI. Siga as etapas na seção anterior para configurar a Identidade Gerenciada.

Fazer a solicitação de API

Em sua solicitação para a API de deteção de aterramento, defina o "correction" parâmetro body como true, e forneça os outros parâmetros necessários:

{
  "domain": "Medical",
  "task": "Summarization",
  "text": "The patient name is Kevin.",
  "groundingSources": [
    "The patient name is Jane."
  ],
  "correction": true,
  "llmResource": {
    "resourceType": "AzureOpenAI",
    "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
    "azureOpenAIDeploymentName": "<your_deployment_name>"
  }
}

Esta seção demonstra uma solicitação de exemplo usando cURL. Substitua os espaços reservados conforme necessário:

  • Substitua <endpoint> pelo URL do ponto de extremidade do seu recurso.
  • Substitua <your_subscription_key> pela sua chave de subscrição.
  • Opcionalmente, substitua o campo "texto" pelo texto que deseja analisar.
curl --location --request POST '<endpoint>/contentsafety/text:detectGroundedness?api-version=2024-09-15-preview' \
--header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "domain": "Generic",
  "task": "Summarization",
  "text": "The patient name is Kevin.",
  "groundingSources": [
    "The patient name is Jane."
  ],
  "correction": true,
  "llmResource": {
        "resourceType": "AzureOpenAI",
        "azureOpenAIEndpoint": "<your_OpenAI_endpoint>",
        "azureOpenAIDeploymentName": "<your_deployment_name>"
  }
}'

Os parâmetros no corpo da solicitação são definidos nesta tabela:

Nome Descrição Type
domínio (Opcional) MEDICAL ou GENERIC. Valor predefinido: GENERIC. Enumeração
tarefa (Opcional) Tipo de tarefa: QnA, Summarization. Valor predefinido: Summarization. Enumeração
qna (Opcional) Mantém dados QnA quando o tipo de tarefa é QnA. String
- query (Opcional) Isso representa a pergunta em uma tarefa QnA. Limite de caracteres: 7.500. String
texto (Obrigatório) O texto de saída LLM a ser verificado. Limite de caracteres: 7.500. String
aterramentoFontes (Obrigatório) Usa uma matriz de fontes de aterramento para validar texto gerado por IA. Consulte Requisitos de entrada para limites. Matriz de cadeia de caracteres
correção (Opcional) Definido como true, o serviço usa recursos do Azure OpenAI para fornecer o texto corrigido, garantindo a consistência com as fontes de aterramento. Tenha cuidado: usar a correção aumenta o tempo de processamento e incorre em taxas extras. Boolean
llmRecurso (Obrigatório) Se você quiser usar seu próprio recurso Azure OpenAI GPT4o (0513, versão 0806) para habilitar o raciocínio, adicione este campo e inclua os subcampos para os recursos usados. String
- resourceType Especifica o tipo de recurso que está sendo usado. Atualmente só permite AzureOpenAI. Suportamos apenas recursos do Azure OpenAI GPT4o (versão 0513, 0806) e não suportamos outros tipos de GPT. Enumeração
- azureOpenAIEndpoint Sua URL de ponto de extremidade para o serviço Azure OpenAI. String
- azureOpenAIDeploymentName O nome da implantação GPT específica a ser usada. String

Interpretar a resposta da API

A resposta inclui um "correction Text" campo contendo o texto corrigido, garantindo a coerência com as fontes de fundamentação fornecidas.

O recurso de correção deteta que Kevin não está fundamentado porque está em conflito com a fonte Janede aterramento. A API retorna o texto corrigido: "The patient name is Jane."

{
  "ungroundedDetected": true,
  "ungroundedPercentage": 1,
  "ungroundedDetails": [
    {
      "text": "The patient name is Kevin"
    }
  ],
  "correction Text": "The patient name is Jane"
}

Os objetos JSON na saída são definidos aqui:

Nome Descrição Type
ungroundedDetected Indica se foi detetado conteúdo sem fundamento. Boolean
sem fundamentoPercentagem A proporção de conteúdo não fundamentado no texto. Float
ungroundedDetalhes Detalhes de conteúdo não fundamentado, incluindo segmentos de texto específicos. Matriz
-text O texto específico que não tem fundamento. String
-offset Um objeto que descreve a posição do texto sem fundamento em várias codificações. String
- offset > utf8 A posição de deslocamento do texto sem fundamento na codificação UTF-8. Número inteiro
- offset > utf16 A posição de deslocamento do texto sem fundamento na codificação UTF-16. Número inteiro
-length Um objeto que descreve o comprimento do texto sem fundamento em várias codificações. (utf8, utf16, codePoint), semelhante ao offset. Object
- length > utf8 O comprimento do texto sem fundamento na codificação UTF-8. Número inteiro
- length > utf16 O comprimento do texto sem fundamento na codificação UTF-16. Número inteiro
- length > codePoint O comprimento do texto sem fundamento em termos de pontos de código Unicode. Número inteiro
-correction Text O texto corrigido, garantindo a coerência com as fontes de fundamentação. String

Clean up resources (Limpar recursos)

Se quiser limpar e remover uma assinatura de serviços do Azure AI, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele.