Compartir vía


Inicio rápido: Uso de la detección de suelo (versión preliminar)

Esta guía le muestra cómo utilizar la API de detección de fundamentos. Esta característica detecta y corrige automáticamente el texto sin fundamento basándose en los documentos de origen proporcionados, lo que garantiza que el contenido generado se alinee a las referencias factuales o previstas. A continuación, exploraremos varios escenarios comunes para ayudarle a comprender cómo y cuándo aplicar estas características para lograr los mejores resultados.

Requisitos previos

  • Una suscripción a Azure: cree una cuenta gratuita.
  • Una vez que tenga la suscripción de Azure, cree un recurso de Content Safety en Azure Portal para obtener la clave y el punto de conexión. Escriba un nombre único para el recurso, seleccione la suscripción y seleccione un grupo de recursos, región admitiday plan de tarifa admitido. Seleccione Crear.
  • El recurso tarda unos minutos en implementarse. Una vez que lo haya hecho, vaya al nuevo recurso. En el panel de la izquierda, en Administración de recursos, seleccione Claves y puntos de conexión de API. Copie uno de los valores de las claves de suscripción y el punto de conexión en una ubicación temporal para su uso posterior.
  • (Opcional) Si desea usar la característica de razonamiento, cree un recurso de Azure OpenAI Service con un modelo GPT implementado.
  • cURL o Python instalado.

Comprobación de la base sin razonamiento

En el caso simple sin la función de razonamiento, la API de detección de conexión a tierra clasifica la falta de conexión a tierra del contenido enviado como true o false.

En esta sección se muestra una solicitud de ejemplo con cURL. Pegue el comando siguiente en un editor de texto y realice los cambios siguientes.

  1. Reemplace <endpoint> por la dirección URL del punto de conexión asociada con el recurso.

  2. Reemplace <your_subscription_key> por una de las claves del recurso.

  3. Opcionalmente, reemplace los campos "query" o "text" del cuerpo por el texto que le gustaría analizar.

    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 un símbolo del sistema y ejecute el comando de cURL.

Para probar una tarea de resumen en lugar de una tarea de respuesta a preguntas (QnA), use el siguiente cuerpo JSON de ejemplo:

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

Los campos siguientes deben incluirse en la dirección URL:

Nombre Obligatorio Descripción Tipo
Versión de la API Obligatorio Esta es la versión de la API que se va a usar. La versión actual es: api-version=2024-09-15-preview. Ejemplo: <endpoint>/contentsafety/text:detectGroundedness?api-version=2024-09-15-preview String

Los parámetros del cuerpo de la solicitud se definen en esta tabla:

Nombre Description Tipo
dominio (Opcional) MEDICAL o GENERIC. Valor predeterminado: GENERIC. Enum
task (Opcional) Tipo de tarea: QnA, Summarization. Valor predeterminado: Summarization. Enum
qna (Opcional) Contiene datos de preguntas y respuestas cuando el tipo de tarea es QnA. Cadena
- query (Opcional) Esto representa la pregunta en una tarea de preguntas y respuestas. Límite de caracteres: 7500. Cadena
texto (Obligatorio) Texto de salida de LLM que se va a comprobar. Límite de caracteres: 7500. Cadena
groundingSources (Obligatorio) Usa una matriz de orígenes de base para validar el texto generado por IA. Consulta Requisitos de entrada para conocer los límites. Matriz de cadenas
razonamiento (Opcional) Especifica si se va a usar la característica de razonamiento. El valor predeterminado es false. En caso de ser true, debe traer su propio GPT4o de Azure OpenAI (versión 0513, 0806) para proporcionar una explicación. Tenga cuidado: el uso del razonamiento aumenta el tiempo de procesamiento. Booleano

Interpretación de la respuesta de la API

Después de enviar la solicitud, recibirá una respuesta JSON que refleja el análisis de la base realizado. Un resultado típico tendrá una apariencia similar a la siguiente:

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

Los objetos JSON de la salida se definen aquí:

Nombre Description Tipo
ungroundedDetected Indica si el texto muestra una ausencia de base. Booleano
ungroundedPercentage Especifica la proporción del texto identificado como sin base, expresado como un número entre 0 y 1, donde 0 indica que no hay contenido sin base y 1 indica la presencia de contenido completamente sin base. Flotante
ungroundedDetails Proporciona información sobre el contenido sin base con ejemplos y porcentajes específicos. Matriz
-text Texto específico sin base. Cadena

Comprobación de la base con razonamiento

La API de detección de la base proporciona la opción de incluir razonamiento en la respuesta de la API. Con el razonamiento habilitado, la respuesta incluye un campo "reasoning" que detalla instancias y explicaciones específicas de cualquier ausencia de base detectada.

Conecte su propia implementación de GPT

Sugerencia

Solo se admiten recursos de **Azure OpenAI GPT4o (versión 0513, 0806)** y no se admiten otros tipos de GPT. Tiene la flexibilidad de implementar los recursos de Azure OpenAI GPT4o (versión 0513, 0806) en cualquier región. Sin embargo, para minimizar la latencia potencial y evitar cualquier problema de privacidad y riesgo de los datos de límites geográficos, se recomienda colocarlos en la misma región que los recursos de seguridad de contenido. Para obtener información detallada sobre la privacidad de los datos, consulte las directrices sobre datos, privacidad y seguridad para Azure OpenAI Service y datos, privacidad y seguridad para Seguridad del contenido de Azure AI.

Para usar el recurso de Azure OpenAI GPT4o (versión 0513, 0806) para habilitar la característica de razonamiento, use Identidad administrada para permitir que el recurso de Seguridad de contenido acceda al recurso de Azure OpenAI:

  1. Habilite la identidad administrada para la Seguridad del contenido de Azure AI.

    Vaya a la instancia de Seguridad del contenido de Azure AI en Azure Portal. Busque la sección Identidad en la categoría Configuración. Habilite la identidad administrada asignada por el sistema. Esta acción concede a la instancia de Seguridad del contenido de Azure AI una identidad que se puede reconocer y usar en Azure para acceder a otros recursos.

    Captura de pantalla de un recurso de identidad de seguridad del contenido en Azure Portal.

  2. Asigna un rol a la identidad administrada.

    Vaya a la instancia de Azure OpenAI y seleccione Agregar asignación de roles para iniciar el proceso de asignación de un rol de Azure OpenAI a la identidad de seguridad del contenido de Azure AI.

    Captura de pantalla de la adición de asignación de roles en Azure Portal

    Elija el rol Usuario o Colaborador.

    Captura de pantalla de Azure Portal con los roles Colaborador y Usuario que se muestran en una lista.

Realización de la solicitud de la API

En la solicitud a la API de detección de la base, establezca el parámetro del cuerpo "reasoning" en true y proporcione los demás parámetros necesarios:


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

En esta sección se muestra una solicitud de ejemplo con cURL. Pegue el comando siguiente en un editor de texto y realice los cambios siguientes.

  1. Reemplace <endpoint> por la dirección URL del punto de conexión asociada al recurso de seguridad del contenido de Azure AI.

  2. Reemplace <your_subscription_key> por una de las claves del recurso.

  3. Reemplace <your_OpenAI_endpoint> por la dirección URL del punto de conexión asociada al recurso de Azure OpenAI.

  4. Reemplace <your_deployment_name> por el nombre de la implementación de Azure OpenAI.

  5. Opcionalmente, reemplace los campos "query" o "text" del cuerpo por el texto que le gustaría analizar.

    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 un símbolo del sistema y ejecute el comando de cURL.

Los parámetros del cuerpo de la solicitud se definen en esta tabla:

Nombre Description Tipo
dominio (Opcional) MEDICAL o GENERIC. Valor predeterminado: GENERIC. Enum
task (Opcional) Tipo de tarea: QnA, Summarization. Valor predeterminado: Summarization. Enum
qna (Opcional) Contiene datos de preguntas y respuestas cuando el tipo de tarea es QnA. Cadena
- query (Opcional) Esto representa la pregunta en una tarea de preguntas y respuestas. Límite de caracteres: 7500. Cadena
texto (Obligatorio) Texto de salida de LLM que se va a comprobar. Límite de caracteres: 7500. Cadena
groundingSources (Obligatorio) Usa una matriz de orígenes de base para validar el texto generado por IA. Consulta Requisitos de entrada para conocer los límites, Matriz de cadenas
razonamiento (Opcional) Si se establece en true, el servicio usa recursos de Azure OpenAI para proporcionar una explicación. Tenga cuidado: el uso del razonamiento aumenta el tiempo de procesamiento y conlleva tarifas adicionales. Booleano
llmResource (Obligatorio) Si desea usar su propio recurso de Azure OpenAI GPT4o (0513, versión 0806) para habilitar el razonamiento, agregue este campo e incluya los subcampos para los recursos usados. Cadena
- resourceType Especifica el tipo de recurso que se está usando. Actualmente solo permite AzureOpenAI. Solo se admiten recursos de Azure OpenAI GPT4o (versión 0513, 0806) y no se admiten otros tipos de GPT. Enum
- azureOpenAIEndpoint Dirección URL del punto de conexión para el Azure OpenAI Service. Cadena
- azureOpenAIDeploymentName Nombre de la implementación de GPT específica que se va a usar. Cadena

Interpretación de la respuesta de la API

Después de enviar la solicitud, recibirá una respuesta JSON que refleja el análisis de la base realizado. Un resultado típico tendrá una apariencia similar a la siguiente:

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

Los objetos JSON de la salida se definen aquí:

Nombre Description Tipo
ungroundedDetected Indica si el texto muestra una ausencia de base. Booleano
ungroundedPercentage Especifica la proporción del texto identificado como sin base, expresado como un número entre 0 y 1, donde 0 indica que no hay contenido sin base y 1 indica la presencia de contenido completamente sin base. Flotante
ungroundedDetails Proporciona información sobre el contenido sin base con ejemplos y porcentajes específicos. Matriz
-text Texto específico sin base. Cadena
-offset Objeto que describe la posición del texto sin base en varias codificaciones. Cadena
- offset > utf8 Posición de desplazamiento del texto sin base con codificación UTF-8. Entero
- offset > utf16 Posición de desplazamiento del texto sin base con codificación UTF-16. Entero
- offset > codePoint Posición de desplazamiento del texto sin base en términos de puntos de código Unicode. Entero
-length Objeto que describe la longitud del texto sin base en varias codificaciones. (utf8, utf16, codePoint), similar al desplazamiento. Object
- length > utf8 Longitud del texto sin base con codificación UTF-8. Entero
- length > utf16 Longitud del texto sin base con codificación UTF-16. Entero
- length > codePoint Longitud del texto sin base en términos de puntos de código Unicode. Entero
-reason Ofrece explicaciones de la ausencia de base detectada. Cadena

Comprobación del fundamento con la característica de corrección

La API de detección de fundamentos incluye una característica de corrección que corrige automáticamente cualquier falta de fundamentos detectada en el texto basándose en las fuentes de fundamentos proporcionadas. Cuando la característica de corrección está habilitada, la respuesta incluye un campo "correction Text" que presenta el texto corregido alineado con las fuentes de los fundamentos.

Conecte su propia implementación de GPT

Sugerencia

Actualmente, la característica de corrección solo admite recursos de **Azure OpenAI GPT4o (versión 0513, 0806)**. Para minimizar la latencia y cumplir las directrices de privacidad de datos, se recomienda implementar Azure OpenAI GPT4o (versión 0513, 0806) en la misma región que los recursos de seguridad de contenidos. Para obtener más detalles sobre la privacidad de los datos, consulte las Directrices sobre datos, privacidad y seguridad para Azure OpenAI Service y Datos, privacidad y seguridad para Seguridad del contenido de Azure AI.

Para usar el recurso de Azure OpenAI GPT4o (0513, versión 0806) para habilitar la característica de corrección, use Identidad administrada para permitir que el recurso de Seguridad de contenido acceda al recurso de Azure OpenAI. Siga los pasos de la sección anterior para configurar la identidad administrada.

Realización de la solicitud de la API

En la solicitud a la API de detección de fundamentos, establezca el parámetro cuerpo "correction" a true y proporcione los demás parámetros necesarios:

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

En esta sección se muestra una solicitud de ejemplo mediante cURL. Reemplace los marcadores de posición según sea necesario:

  • Reemplace <endpoint> por la dirección URL del punto de conexión del recurso.
  • Reemplace <your_subscription_key> por la clave de suscripción.
  • Opcionalmente, reemplace el campo "texto" por el texto que desea analizar.
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>"
  }
}'

Los parámetros del cuerpo de la solicitud se definen en esta tabla:

Nombre Description Tipo
dominio (Opcional) MEDICAL o GENERIC. Valor predeterminado: GENERIC. Enum
task (Opcional) Tipo de tarea: QnA, Summarization. Valor predeterminado: Summarization. Enum
qna (Opcional) Contiene datos de preguntas y respuestas cuando el tipo de tarea es QnA. Cadena
- query (Opcional) Esto representa la pregunta en una tarea de preguntas y respuestas. Límite de caracteres: 7500. Cadena
texto (Obligatorio) Texto de salida de LLM que se va a comprobar. Límite de caracteres: 7500. Cadena
groundingSources (Obligatorio) Usa una matriz de orígenes de base para validar el texto generado por IA. Consulta Requisitos de entrada para conocer los límites. Matriz de cadenas
corrección (Opcional) Establézcalo en true, el servicio usa recursos de Azure OpenAI para proporcionar el texto corregido, lo que garantiza la coherencia con los orígenes de fundamentos. Tenga cuidado: el uso de la corrección aumenta el tiempo de procesamiento e incurre en cargos adicionales. Booleano
llmResource (Obligatorio) Si desea usar su propio recurso de Azure OpenAI GPT4o (0513, versión 0806) para habilitar el razonamiento, agregue este campo e incluya los subcampos para los recursos usados. Cadena
- resourceType Especifica el tipo de recurso que se está usando. Actualmente solo permite AzureOpenAI. Solo se admiten recursos de Azure OpenAI GPT4o (versión 0513, 0806) y no se admiten otros tipos de GPT. Enum
- azureOpenAIEndpoint Dirección URL del punto de conexión para el Azure OpenAI Service. Cadena
- azureOpenAIDeploymentName Nombre de la implementación de GPT específica que se va a usar. Cadena

Interpretación de la respuesta de la API

La respuesta incluye un campo "correction Text" que contiene el texto corregido, lo que garantiza la coherencia con los orígenes de fundamentos proporcionados.

La característica de corrección detecta que Kevin no está fundamentado porque entra en conflicto con el origen del fundamento Jane. La API devuelve el texto corregido: "The patient name is Jane."

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

Los objetos JSON de la salida se definen aquí:

Nombre Description Tipo
ungroundedDetected Indica si se detectó contenido sin fundamento. Booleano
ungroundedPercentage Proporción de contenido sin fundamento o en el texto. Flotante
ungroundedDetails Detalles del contenido sin fundamento, incluidos segmentos de texto específicos. Matriz
-text Texto específico sin base. Cadena
-offset Objeto que describe la posición del texto sin base en varias codificaciones. Cadena
- offset > utf8 Posición de desplazamiento del texto sin base con codificación UTF-8. Entero
- offset > utf16 Posición de desplazamiento del texto sin base con codificación UTF-16. Entero
-length Objeto que describe la longitud del texto sin base en varias codificaciones. (utf8, utf16, codePoint), similar al desplazamiento. Object
- length > utf8 Longitud del texto sin base con codificación UTF-8. Entero
- length > utf16 Longitud del texto sin base con codificación UTF-16. Entero
- length > codePoint Longitud del texto sin base en términos de puntos de código Unicode. Entero
-correction Text Texto corregido, lo que garantiza la coherencia con los orígenes del fundamento. Cadena

Limpieza de recursos

Si quiere limpiar y eliminar una suscripción de servicios de Azure AI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.