Inicio rápido: respuesta a preguntas personalizada

Nota:

Azure Open AI en los datos utiliza modelos de lenguaje grande (LLM) para generar resultados similares para respuesta a preguntas personalizadas. Si desea conectar un proyecto de respuesta a preguntas personalizadas existente a Azure Open AI en sus datos, consulte nuestra guía.

Nota:

¿Quiere migrar las cargas de trabajo desde QnA Maker? Consulte nuestra guía de migración para obtener información sobre las comparaciones de características y los pasos de migración.

Introducción a la biblioteca cliente de respuesta a preguntas personalizada. Siga estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas básicas.

Puede crear un proyecto de respuesta a preguntas personalizado a partir de su propio contenido, como preguntas frecuentes o manuales de productos. En este artículo se incluye un ejemplo de creación de un proyecto de respuesta a preguntas personalizado a partir de un manual de producto para responder preguntas.

Requisitos previos

  • Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • Un recurso de lenguaje con la característica de respuesta a preguntas personalizada habilitada. Recuerde su Microsoft Entra ID, la suscripción y el nombre de recurso de lenguaje que seleccionó al crear el recurso.

Creación del primer proyecto de respuesta a preguntas personalizado

  1. Inicie sesión en Language Studio con las credenciales de Azure.

  2. Desplácese hacia abajo hasta la sección Answer questions (Responder a las preguntas) y seleccione Open custom question answering (Abrir respuesta a preguntas personalizadas).

    Apertura de respuesta a preguntas personalizada

  3. Si el recurso aún no está conectado a Azure Search, seleccione Connect to Azure Search (Conexión con Azure Search). Se abrirá una nueva pestaña del explorador que conducirá al panel Características del recurso en Azure Portal.

    Conexión con Azure Search

  4. Seleccione Enable custom question answering (Habilitar respuesta a preguntas personalizada), elija el recurso de Azure Search al que desea vincular y, a continuación, seleccione Apply (Aplicar).

    Habilitación de la respuesta a preguntas personalizada

  5. Vuelva a la pestaña de Language Studio. Es posible que tenga que actualizar la página para que se registre el cambio realizado en el recurso. Seleccione Create new project (Crear proyecto).

  6. Elija la opción I want to set the language for all projects created in this resource> (Quiero establecer el idioma de todos los proyectos creados en este recurso) Inglés> y, a continuación, seleccione Siguiente.

  7. Escriba el nombre de proyecto Sample-project, la descripción Mi primer proyecto de respuesta de preguntas y deje la respuesta predeterminada con un valor de No answer found (No se encuentra respuesta).

  8. Revise las opciones elegidas y seleccione Create project (Crear proyecto).

  9. En la página Manage sources (Administrar orígenes), seleccione Add source>URLS (Agregar origen > Direcciones URL).

  10. Seleccione Add url (Agregar URL), escriba los siguientes valores y seleccione Add all (Agregar todo):

    Nombre de dirección URL Valor de dirección URL
    Guía de usuario de Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    El proceso de extracción tarda unos minutos en leer el documento e identificar las preguntas y respuestas.

    Después de agregar correctamente el origen, puede editar el contenido del mismo para agregar más conjuntos de respuestas a preguntas personalizadas.

Prueba del proyecto

  1. Seleccione el vínculo al origen y se abrirá la página de edición del proyecto.

  2. Seleccione Test (Probar) en la barra de menús y > escriba la pregunta ¿Cómo puedo configurar mi Surface Book? Se generará una respuesta en función de los pares de respuestas a preguntas que se identificaron y extrajeron automáticamente de la dirección URL de origen:

    Prueba de la interfaz del chat de preguntas

    Si marca la casilla para incluir respuesta a pregunta corta, también verá una respuesta precisa, si está disponible, junto con el fragmento de respuesta en el panel de prueba al hacer una pregunta.

  3. Haga clic en Inspect (Inspeccionar) para examinar la respuesta con más detalle. La ventana de prueba se usa para probar los cambios realizados en el proyecto antes de implementar el proyecto.

    Consulta del intervalo de confianza

    En la interfaz de Inspect (Inspeccionar), puede ver el nivel de confianza de esta respuesta a la pregunta y editará directamente un par de pregunta y respuesta determinado.

Implementación del proyecto

  1. Seleccione el ícono Implementar proyecto para ingresar al menú de implementación de proyecto.

    Implementar proyecto

    Al implementar un proyecto, su contenido se mueve del índice test a un índice prod de Azure Search.

  2. Seleccione Implementar> y, después, cuando se le solicite vuelva a seleccionar Implementar.

    Implementación correcta

    El proyecto se ha implementado correctamente. Puede usar el punto de conexión para responder preguntas tanto en su propia aplicación personalizada para responder como en un bot.

Prerrequisitos

  • La versión actual de cURL. En las guías de inicio rápido se usan varios modificadores de línea de comandos, que se indican en la documentación de cURL.
  • Una suscripción a Azure: cree una cuenta gratuita
  • Las respuestas a preguntas personalizadas requieren un recurso de idioma con la característica de respuesta a preguntas personalizada habilitada para generar un punto de conexión y una clave de API.
    • Una vez implementado el recurso de idioma, seleccione Ir al recurso. Necesitará la clave y el punto de conexión del recurso que cree para conectarse a la API. Más adelante en este inicio rápido, debe pegar la clave y el punto de conexión en el código que se incluye a continuación.
  • Para crear un recurso de Lenguaje con la CLI de Azure, proporcione las siguientes propiedades adicionales: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Un proyecto existente que se va a consultar. Si no ha configurado un proyecto, puede seguir las instrucciones de la guía de inicio rápido de Language Studio. O bien, agregue un proyecto que use esta dirección URL de la guía del usuario de Surface como origen de datos.

Instalación

Creación de variables de entorno

La aplicación debe autenticarse para enviar solicitudes de API. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas. En este ejemplo, escribirá las credenciales en variables de entorno del equipo local que ejecuta la aplicación.

Sugerencia

No incluya la clave directamente en el código ni la exponga nunca públicamente. Consulte el artículo de Seguridad de los servicios de Azure AI para ver más opciones de autenticación, como Azure Key Vault.

Para establecer la variable de entorno para la clave del recurso de lenguaje, abra una ventana de consola y siga las instrucciones correspondientes a su sistema operativo y su entorno de desarrollo.

  1. Para establecer la variable de entorno LANGUAGE_KEY, reemplace your-key por una de las claves del recurso.
  2. Para establecer la variable de entorno LANGUAGE_ENDPOINT, reemplace your-endpoint por el punto de conexión del recurso.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota:

Si solo necesita acceder a las variables de entorno en la consola que se está ejecutando en este momento, puede establecer la variable de entorno con set en vez de con setx.

Después de agregar las variables de entorno, puede que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.

Consultar un proyecto

Generación de una respuesta desde un proyecto

Para realizar consultas en un proyecto de respuesta a preguntas personalizado con las API REST y cURL, debe tener la siguiente información:

Nombre de la variable Valor
Endpoint Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. Un punto de conexión de ejemplo es: https://southcentralus.api.cognitive.microsoft.com/
API-Key Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Puede usar Key1 o Key2. Tenga siempre dos claves válidas para poder realizar la rotación segura de claves sin tiempo de inactividad. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. El valor de clave forma parte de la solicitud de ejemplo.
Project Nombre del proyecto de respuesta a preguntas personalizado.
Deployment Hay dos posibles valores: test y production. production depende de que haya implementado su proyecto desde Language Studio>respuesta a preguntas>Implementar proyecto.

El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con su propio nombre de recurso, clave de recurso y valores y tamaño de JSON.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?"
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Al ejecutar el código anterior, si usa el origen de datos de los requisitos previos, recibirá una respuesta similar a la siguiente:

{
"answers": [
    {
      "questions": [
        "Check battery level"
      ],
      "answer": "If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.",
      "confidenceScore": 0.9185,
      "id": 101,
      "source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
      "metadata": {},
      "dialog": {
        "isContextOnly": false,
        "prompts": []
      }
    }
  ]
}

confidenceScore devuelve un valor entre 0 y 1. Puede pensar en este valor como un porcentaje y multiplicarlo por 100, por lo que una puntuación de confianza de 0,9185 significa que la respuesta a preguntas personalizada es un 91,85 % segura, ya que esta es la respuesta correcta a la pregunta en función del proyecto.

Si quiere excluir las respuestas en las que la puntuación de confianza está por debajo de un umbral determinado, puede agregar el parámetro confidenceScoreThreshold.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?",
  "confidenceScoreThreshold": "0.95",
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Puesto que sabemos por nuestra ejecución anterior del código que nuestra puntuación de confianza es .9185, establecer el umbral en .95 dará como resultado la respuesta predeterminada que se devuelve.

{
  "answers": [
    {
      "questions": [],
      "answer": "No good match found in KB",
      "confidenceScore": 0.0,
      "id": -1,
      "metadata": {}
    }
  ]
}

Texto de consulta sin un proyecto

También puede usar la respuesta a preguntas personalizada sin un proyecto con la API REST de respuesta a preguntas personalizada y precompilada, a la que se llama mediante query-text. En este caso, se proporciona la respuesta a la pregunta mediante una pregunta y los registros de texto asociados en los que le gustaría buscar una respuesta en el momento en que se envía la solicitud.

En este ejemplo, solo necesita modificar las variables para API KEY y ENDPOINT.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'

Este ejemplo devolverá un resultado de:

{  
"answers": [
    {
      "answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.9118788838386536,
      "id": "doc1",
      "answerSpan": {
        "text": "two to four hours",
        "confidenceScore": 0.9850527,
        "offset": 27,
        "length": 18
      },
      "offset": 0,
      "length": 243
    },
    {
      "answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.052793052047491074,
      "id": "doc1",
      "answerSpan": {
        "text": "longer",
        "confidenceScore": 0.6694634,
        "offset": 11,
        "length": 7
      },
      "offset": 109,
      "length": 134
    },
    {
      "answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
      "confidenceScore": 0.017600709572434425,
      "id": "doc2",
      "answerSpan": {
        "text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
        "confidenceScore": 0.1544854,
        "offset": 15,
        "length": 165
      },
      "offset": 0,
      "length": 280
    }
  ]
}

Utilice esta guía de inicio rápido para la biblioteca cliente de respuesta a preguntas personalizada de .NET para lo siguiente:

  • Generar una respuesta desde un proyecto.
  • Obtener una respuesta de un cuerpo de texto que envíe junto con la pregunta.
  • Obtener la puntuación de confianza para la respuesta a la pregunta.

Documentación de referencia | Paquete (NuGet) | Ejemplos adicionales | Código fuente de biblioteca

Prerrequisitos

  • Una suscripción a Azure: cree una cuenta gratuita
  • El IDE de Visual Studio o la versión actual de .NET Core.
  • Las respuestas a preguntas personalizadas requieren un recurso de idioma con la característica de respuesta a preguntas personalizada habilitada para generar un punto de conexión y una clave de API.
    • Una vez implementado el recurso de idioma, seleccione Ir al recurso. Necesitará la clave y el punto de conexión del recurso que cree para conectarse a la API. Más adelante en este inicio rápido, debe pegar la clave y el punto de conexión en el código que se incluye a continuación.
  • Para crear un recurso de Lenguaje con la CLI de Azure, proporcione las siguientes propiedades adicionales: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Un proyecto existente que se va a consultar. Si no ha configurado un proyecto, puede seguir las instrucciones de la guía de inicio rápido de Language Studio. O bien, agregue un proyecto que use esta dirección URL de la guía del usuario de Surface como origen de datos.

Instalación

Creación de variables de entorno

La aplicación debe autenticarse para enviar solicitudes de API. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas. En este ejemplo, escribirá las credenciales en variables de entorno del equipo local que ejecuta la aplicación.

Sugerencia

No incluya la clave directamente en el código ni la exponga nunca públicamente. Consulte el artículo de Seguridad de los servicios de Azure AI para ver más opciones de autenticación, como Azure Key Vault.

Para establecer la variable de entorno para la clave del recurso de lenguaje, abra una ventana de consola y siga las instrucciones correspondientes a su sistema operativo y su entorno de desarrollo.

  1. Para establecer la variable de entorno LANGUAGE_KEY, reemplace your-key por una de las claves del recurso.
  2. Para establecer la variable de entorno LANGUAGE_ENDPOINT, reemplace your-endpoint por el punto de conexión del recurso.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota:

Si solo necesita acceder a las variables de entorno en la consola que se está ejecutando en este momento, puede establecer la variable de entorno con set en vez de con setx.

Después de agregar las variables de entorno, puede que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.

CLI

En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new para crear una nueva aplicación de consola con el nombre question-answering-quickstart. Este comando crea un sencillo proyecto de C#, "Hola mundo", con un solo archivo de origen: program.cs.

dotnet new console -n question-answering-quickstart

Cambie el directorio a la carpeta de aplicaciones recién creada. Para compilar la aplicación:

dotnet build

La salida de la compilación no debe contener advertencias ni errores.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Dentro del directorio de aplicaciones, instale la biblioteca cliente de respuesta a preguntas personalizada para .NET con el siguiente comando:

dotnet add package Azure.AI.Language.QuestionAnswering

Consultar un proyecto

Generación de una respuesta desde un proyecto

En el ejemplo siguiente podrá consultar un proyecto mediante GetAnswers para obtener una respuesta a su pregunta.

Recuerde que deberá actualizar el código y proporcionar sus propios valores para las variables siguientes.

Nombre de la variable Valor
endpoint Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. Un punto de conexión de ejemplo es: https://southcentralus.api.cognitive.microsoft.com/
credential Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Puede usar Key1 o Key2. Tenga siempre dos claves válidas para poder realizar la rotación segura de claves sin tiempo de inactividad. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. El valor de clave forma parte de la solicitud de ejemplo.
projectName Nombre del proyecto de respuesta a preguntas personalizado.
deploymentName Hay dos posibles valores: test y production. production depende de que haya implementado su proyecto desde Language Studio>respuesta a preguntas>Implementar proyecto.

Importante

Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Consulte el artículo Seguridad de servicios de Azure AI para más información.

En el directorio del proyecto, abra el archivo program.cs y reemplácelo con el código siguiente:

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;

namespace question_answering
{
    class Program
    {
        static void Main(string[] args)
        {

            // This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
            Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
            AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
            string projectName = "{YOUR-PROJECT-NAME}";
            string deploymentName = "production";

            string question = "How long should my Surface battery last?";

            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
            QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);

            Response<AnswersResult> response = client.GetAnswers(question, project);

            foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
            {
                Console.WriteLine($"Q:{question}");
                Console.WriteLine($"A:{answer.Answer}");
            }
        }
    }
}

Aunque estamos codificando de forma rígida las variables para nuestro ejemplo. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Por ejemplo, Azure Key Vault proporciona almacenamiento de claves seguro.

Una vez actualizado Program.cs con el código anterior, sustitúyalo con los valores de variable correctos. Ejecute la aplicación con el comando dotnet run desde el directorio de la aplicación.

dotnet run

La respuesta tendrá el siguiente aspecto:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Para obtener información sobre la fiabilidad de la respuesta a la pregunta personalizada de si esta es la respuesta correcta, agregue una instrucción de impresión adicional debajo de las instrucciones impresas existentes:

Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line

Si vuelve a ejecutar dotnet run, recibirá un resultado con una puntuación de confianza:

Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)

La puntuación de confianza devuelve un valor entre 0 y 1. Puede pensar en este valor como un porcentaje y multiplicarlo por 100, por lo que una puntuación de confianza de 0,9185 significa que la respuesta a preguntas personalizada es un 91,85 % segura, ya que esta es la respuesta correcta a la pregunta en función del proyecto.

Si quiere excluir las respuestas en las que la puntuación de confianza está por debajo de un umbral determinado, puede usar AnswerOptions para agregar la propiedad ConfidenceScoreThreshold.

QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line

Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter

Puesto que sabemos por nuestra ejecución anterior del código que nuestra puntuación de confianza es .9185, establecer el umbral en .95 dará como resultado la respuesta predeterminada que se devuelve.

Q:How much battery life do I have left?
A:No good match found in KB
(0)

Texto de consulta sin un proyecto

También puede usar la respuesta a preguntas personalizada sin un proyecto con GetAnswersFromText. En este caso, se proporciona la respuesta a la pregunta personalizada mediante una pregunta y los registros de texto asociados en los que le gustaría buscar una respuesta en el momento en que se envía la solicitud.

En este ejemplo, solo necesita modificar las variables para endpoint y credential.

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;


namespace questionansweringcsharp
{
    class Program
    {
        static void Main(string[] args)
        {

            Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
            AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);

            IEnumerable<TextDocument> records = new[]
            {
                new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                         "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
                new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                         "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
            };

            AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
            Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);

           foreach (TextAnswer answer in response.Value.Answers)
            {
                if (answer.Confidence > .9)
                {
                    string BestAnswer = response.Value.Answers[0].Answer;

                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine($"A:{BestAnswer}");
                    Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy. 
                    break;
                }
                else
                {
                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine("No answers met the requested confidence score.");
                    break;
                }
            }

        }
    }
}

Para ejecutar el código anterior, reemplace Program.cs por el contenido del bloque de script anterior y modifique las variables endpoint y credential para que se correspondan con el recurso de lenguaje que creó como parte de los requisitos previos.

En este caso, se recorren en iteración todas las respuestas y solo se devuelve la respuesta con la puntuación de confianza más alta que sea mayor que 0,9. Para obtener más información sobre las opciones disponibles con GetAnswersFromText.

Utilice esta guía de inicio rápido para la biblioteca cliente de respuesta a preguntas personalizada de Python para lo siguiente:

  • Generar una respuesta desde un proyecto.
  • Obtener una respuesta de un cuerpo de texto que envíe junto con la pregunta.
  • Obtener la puntuación de confianza para la respuesta a la pregunta.

Documentación de referencia | Paquete (PyPI) | Ejemplos adicionales | Código fuente de biblioteca

Prerrequisitos

  • Una suscripción a Azure: cree una cuenta gratuita
  • Python 3.x
  • Las respuestas a preguntas personalizadas requieren un recurso de idioma con la característica de respuesta a preguntas personalizada habilitada para generar un punto de conexión y una clave de API.
    • Una vez implementado el recurso de idioma, seleccione Ir al recurso. Necesita la clave y el punto de conexión del recurso que cree para conectarse a la API. Más adelante en este inicio rápido, debe pegar la clave y el punto de conexión en el código que se incluye a continuación.
  • Para crear un recurso de Lenguaje con la CLI de Azure, proporcione las siguientes propiedades adicionales: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Un proyecto existente que se va a consultar. Si no ha configurado un proyecto, puede seguir las instrucciones de la guía de inicio rápido de Language Studio. O bien, agregue un proyecto que use esta dirección URL de la guía del usuario de Surface como origen de datos.

Instalación

Instalación de la biblioteca cliente

Después de instalar Python, puede instalar la biblioteca cliente con:

pip install azure-ai-language-questionanswering

Consultar un proyecto

Generación de una respuesta desde un proyecto

En el ejemplo siguiente, podrá consultar un proyecto mediante get_answers para obtener una respuesta a su pregunta. Puede copiar este código en un archivo .py dedicado o en una celda de Jupyter Notebook/Lab.

Necesita actualizar el siguiente código y proporcionar sus propios valores para las variables siguientes.

Nombre de la variable Valor
endpoint Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. Un punto de conexión de ejemplo es: https://southcentralus.api.cognitive.microsoft.com/
credential Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Puede usar Key1 o Key2. Tenga siempre dos claves válidas para poder realizar la rotación segura de claves sin tiempo de inactividad. También puede encontrar el valor en Language Studio>respuesta a preguntas>Implementar proyecto>Obtener la dirección URL de predicción. El valor de clave forma parte de la solicitud de ejemplo.
knowledge_base_project Nombre del proyecto de respuesta a preguntas.
deployment Hay dos posibles valores: test y production. production depende de que haya implementado su proyecto desde Language Studio>respuesta a preguntas>Implementar proyecto.

Importante

Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para más información, consulte el artículo sobre seguridad de servicios de Azure AI.

from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How much battery life do I have left?"
        output = client.get_answers(
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )
    print("Q: {}".format(question))
    print("A: {}".format(output.answers[0].answer))

if __name__ == '__main__':
    main()

Estamos codificando de forma rígida las variables para nuestro ejemplo. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Por ejemplo, Azure Key Vault proporciona almacenamiento de claves seguro.

Aún así, al ejecutar el código anterior, si usa el origen de datos de los requisitos previos, recibirá una respuesta similar a la siguiente:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Para obtener información sobre cuál es el grado de confianza de la respuesta a preguntas personalizada respecto de que esta sea la respuesta correcta, agregue otra instrucción de impresión debajo de las instrucciones de impresión existentes:

print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line 

Ahora recibirá un resultado con una puntuación de confianza:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185

La puntuación de confianza devuelve un valor entre 0 y 1. Puede pensar en este valor como un porcentaje y multiplicarlo por 100, por lo que una puntuación de confianza de 0,9185 significa que la respuesta a preguntas personalizada es un 91,85 % segura, ya que esta es la respuesta correcta a la pregunta en función del proyecto.

Si quiere excluir las respuestas en las que la puntuación de confianza está por debajo de un umbral determinado, puede modificar AnswerOptions para agregar el parámetro confidence_threshold.

        output = client.get_answers(
            confidence_threshold = 0.95, #add this line
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )

Puesto que sabemos por nuestra ejecución anterior del código que nuestra puntuación de confianza es .9185, establecer el umbral en .95 dará como resultado la respuesta predeterminada que se devuelve.

Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0

Texto de consulta sin un proyecto

También puede usar la respuesta a preguntas personalizada sin proyecto con get_answers_from_text. En este caso, se proporciona la respuesta a la pregunta personalizada mediante una pregunta y los registros de texto asociados en los que le gustaría buscar una respuesta en el momento en que se envía la solicitud.

En este ejemplo, solo necesita modificar las variables para endpoint y credential.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How long does it takes to charge a surface?"
        input = qna.AnswersFromTextOptions(
            question=question,
            text_documents=[
                "Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
                "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
            ]
        )


        output = client.get_answers_from_text(input)

    best_answer = [a for a in output.answers if a.confidence > 0.9][0]
    print(u"Q: {}".format(input.question))
    print(u"A: {}".format(best_answer.answer))
    print("Confidence Score: {}".format(output.answers[0].confidence))

if __name__ == '__main__':
    main()

Puede copiar este código en un archivo .py dedicado o en una celda nueva de Jupyter Notebook/Lab. En este ejemplo, se devuelve un resultado de:

Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695

En este caso, se recorren en iteración todas las respuestas y solo se devuelve la respuesta con la puntuación de confianza más alta que sea mayor que 0,9. Para obtener más información sobre las opciones disponibles con get_answers_from_text, revise los parámetros AnswersFromTextOptions.

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.

Exploración de la API REST

Para más información sobre cómo automatizar la canalización de respuesta a preguntas personalizada, consulte la documentación de la API REST. Actualmente, la funcionalidad de creación solo está disponible a través de la API REST:

Pasos siguientes