Início Rápido: respostas às perguntas personalizadas

Observação

O OpenAI do Azure Em Seus Dados utiliza modelos de linguagem grandes (LLMs) para produzir resultados semelhantes aos da resposta personalizada a perguntas. Se você deseja conectar um projeto existente de Resposta a Perguntas Personalizadas ao OpenAI do Azure Em Seus Dados, consulte nosso guia.

Observação

Deseja migrar suas cargas de trabalho do QnA Maker? Confira nosso guia de migração para obter informações sobre comparações de recursos e etapas de migração.

Introdução à biblioteca de clientes de respostas às perguntas personalizadas. Siga essas etapas para instalar o pacote e testar o código de exemplo para tarefas básicas.

Você pode criar um projeto de respostas às perguntas personalizadas com base em seu próprio conteúdo, como perguntas frequentes ou manuais de produto. Este artigo inclui um exemplo de como criar um projeto de respostas às perguntas personalizadas a partir de um manual de produto para responder a perguntas.

Pré-requisitos

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Um recurso de linguagem com o recurso de respostas às perguntas personalizadas habilitado. Lembre-se de seu Microsoft Entra ID, assinatura e nome do recurso de linguagem selecionado ao criar o recurso.

Criar seu primeiro projeto de respostas às perguntas personalizadas

  1. Faça logon no Language Studio com sua conta do Azure.

  2. Role até a seção Responder perguntas e selecione Abrir respostas às perguntas personalizadas.

    Abrir respostas às perguntas personalizadas

  3. Se o recurso ainda não estiver conectado a Azure Search, selecione Conexão com o Azure Search. Isso abrirá uma nova guia do navegador no painel Recursos do seu recurso no portal do Azure.

    Conectar-se ao Azure Search

  4. Selecione Habilitar respostas às perguntas personalizadas, escolha o recurso do Azure Search ao qual vincular e, em seguida, selecione Aplicar.

    Habilitar respostas às perguntas personalizadas

  5. Retorne para a guia do Language Studio. Talvez seja necessário atualizar esta página para que ele registre a alteração em seu recurso. Selecione Criar novo projeto.

  6. Escolha a opção Eu quero definir a linguagem para todos os projetos criados neste recurso> selecione Inglês> Selecione Próximo.

  7. Insira um nome de projeto de Projeto de exemplo, uma descrição de Meu primeiro projeto de respostas às perguntas e deixe a resposta padrão com uma configuração de Nenhuma resposta encontrada.

  8. Revise suas escolhas e, em seguida, selecione Criar projeto

  9. Na página Gerenciar fontes, selecione Adicionar>URLS de origem.

  10. Selecione Adicionar URL insira os seguintes valores e, em seguida, selecione Adicionar todos:

    Nome da URL Valor de URL
    Surface Book Guia do usuário https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    O processo de extração leva alguns instantes para ler o documento e identificar perguntas e respostas.

    Depois de adicionar a fonte, você poderá editar o conteúdo de fonte para adicionar mais conjuntos de respostas de pergunta personalizadas.

Testar seu projeto

  1. Selecione o link para sua fonte, isso abrirá a página de edição do projeto.

  2. Selecione Testar na barra de menus > Inserir pergunta Como configurar meu Surface Book?. Uma resposta será gerada com base nos pares de respostas da pergunta que foram identificados e extraídos automaticamente da URL de origem:

    Interface do chat de perguntas de teste

    Se você marcar a caixa para incluir resposta de resposta curta, você também verá uma resposta precisa, se disponível, junto com a passagem de resposta no painel de teste quando fizer uma pergunta.

  3. Selecione Inspecionar para examinar a resposta mais detalhadamente. A janela de teste é usada para testar as alterações em seu projeto antes de implantá-lo.

    Ver o intervalo de confiança

    Na interface Inspecionar, você pode ver o nível de confiança que essa resposta responderá à pergunta e editar diretamente um determinado par de perguntas e respostas.

Implantar o projeto

  1. Selecione o ícone Implantar projeto para entrar no menu do projeto de implantação.

    Implantar projeto

    Quando você implanta um projeto, o conteúdo do projeto passa do test índice para um prodíndice no Azure Search.

  2. Selecione Implantar> e, quando solicitado, selecione novamente Implantar.

    Implantação bem-sucedida

    Seu projeto foi implantado. Você pode usar o ponto de extremidade para responder a perguntas em seu próprio aplicativo personalizado de respostas ou em um bot.

Pré-requisitos

  • A versão atual do cURL. Várias opções de linha de comando são usadas nos inícios rápidos, indicadas na documentação do cURL.
  • Assinatura do Azure – Criar uma gratuitamente
  • As respostas às perguntas personalizadas exigem um recurso de linguagem com o recurso de respostas às perguntas personalizadas habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Linguagem, selecione Ir para o recurso. Você precisará da chave e do ponto de extremidade do recurso criado para conectar o aplicativo à API. Cole a chave e o ponto de extremidade no código abaixo, mais adiante no início rápido.
  • Para criar um recurso de idioma com a CLI do Azure, forneça as seguintes propriedades adicionais: --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>
  • Um projeto existente a ser consultado. Se você não configurou um projeto, siga as instruções no Início rápido do Language Studio. Ou adicione um projeto que usa este URL do Guia do Usuário do Surface como fonte de dados.

Configurando

Criar variáveis de ambiente

Seu aplicativo deve ser autenticado para enviar solicitações de API. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Neste exemplo, você gravará suas credenciais em variáveis de ambiente no computador local que está executando o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira o artigo de segurança dos serviços de IA do Azure para obter mais opções de autenticação como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de linguagem, abra uma janela do console e siga as instruções para o seu sistema operacional e ambiente de desenvolvimento.

  1. Para definir a variável de ambiente LANGUAGE_KEY, substitua your-key por uma das chaves do recurso.
  2. Para definir a variável de ambiente LANGUAGE_ENDPOINT, substitua your-endpoint pelo ponto de extremidade do recurso.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Observação

Se for necessário acessar somente as variáveis de ambiente no console em execução no momento, você pode definir a variável de ambiente com set em vez de setx.

Após adicionar as variáveis de ambiente, é aconselhável reiniciar todos os programas em execução que precisarem ler as variáveis de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.

Consultar um projeto

Gerar uma resposta de um projeto

Para consultar um projeto de respostas às perguntas personalizadas com as APIs REST e cURL, você precisará das seguintes informações:

Nome da variável Valor
Endpoint Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. Um ponto de extremidade de exemplo é: https://southcentralus.api.cognitive.microsoft.com/
API-Key Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre tenha duas chaves válidas para uma rotação de chaves segura sem tempo de inatividade. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. O valor da chave faz parte da solicitação de exemplo.
Project O nome do projeto de respostas às perguntas personalizadas.
Deployment Há dois valores possíveis: test e production. production depende de você ter implantado seu projeto a partir do Language Studio>respostas às perguntas>Implantar projeto.

O comando cURL é executado em um shell BASH. Edite esse comando com os valores de nome de recurso, chave de recurso e JSON e o tamanho do 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}'

Ao executar o código acima, se você estiver usando a fonte de dados dos pré-requisitos, receberá uma resposta semelhante à seguinte:

{
"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 retorna um valor entre 0 e 1. Você pode considerar isso como uma porcentagem e multiplicar por 100, portanto, uma pontuação de confiança de 0,9185 significa que as respostas às perguntas personalizadas tem 91,85% de garantia de que essa é a resposta correta para a pergunta com base no projeto.

Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, adicione o 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}'

Como sabemos com base na execução anterior do código que a pontuação de confiança é .9185, definir o limite como .95 fará com que a resposta padrão seja retornada.

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

Texto de consulta sem um projeto

Você também pode usar as respostas às perguntas personalizadas sem um projeto com a API REST de respostas às perguntas personalizadas predefinida, que é chamada por meio de query-text. Nesse caso, você fornece à respostas às perguntas uma pergunta e os registros de texto associados nos quais gostaria de pesquisar uma resposta no momento em que a solicitação for enviada.

Para este exemplo, você só precisa modificar as variáveis para API KEY e 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 exemplo retornará um 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
    }
  ]
}

Use este início rápido para a biblioteca de clientes de respostas às perguntas personalizadas para .NET para:

  • Obtenha uma resposta de um projeto.
  • Obter uma resposta de um corpo de texto que você envia com sua pergunta.
  • Obter a pontuação de confiança da resposta à sua pergunta.

Documentação de referência | Pacote (NuGet) | Amostras adicionais | Código-fonte da biblioteca

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • O IDE do Visual Studio ou a versão atual do .NET Core.
  • As respostas às perguntas personalizadas exigem um recurso de linguagem com o recurso de respostas às perguntas personalizadas habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Linguagem, selecione Ir para o recurso. Você precisará da chave e do ponto de extremidade do recurso criado para conectar o aplicativo à API. Cole a chave e o ponto de extremidade no código abaixo, mais adiante no início rápido.
  • Para criar um recurso de idioma com a CLI do Azure, forneça as seguintes propriedades adicionais: --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>
  • Um projeto existente a ser consultado. Se você não configurou um projeto, siga as instruções no Início rápido do Language Studio. Ou adicione um projeto que usa este URL do Guia do Usuário do Surface como fonte de dados.

Configurando

Criar variáveis de ambiente

Seu aplicativo deve ser autenticado para enviar solicitações de API. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Neste exemplo, você gravará suas credenciais em variáveis de ambiente no computador local que está executando o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira o artigo de segurança dos serviços de IA do Azure para obter mais opções de autenticação como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de linguagem, abra uma janela do console e siga as instruções para o seu sistema operacional e ambiente de desenvolvimento.

  1. Para definir a variável de ambiente LANGUAGE_KEY, substitua your-key por uma das chaves do recurso.
  2. Para definir a variável de ambiente LANGUAGE_ENDPOINT, substitua your-endpoint pelo ponto de extremidade do recurso.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Observação

Se for necessário acessar somente as variáveis de ambiente no console em execução no momento, você pode definir a variável de ambiente com set em vez de setx.

Após adicionar as variáveis de ambiente, é aconselhável reiniciar todos os programas em execução que precisarem ler as variáveis de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.

CLI

Em uma janela de console (como cmd, PowerShell ou Bash), use o comando dotnet new para criar um novo aplicativo do console com o nome question-answering-quickstart. Esse comando cria um projeto simples em C# do tipo "Olá, Mundo" com um arquivo de origem único: program.cs.

dotnet new console -n question-answering-quickstart

Altere o diretório para a pasta do aplicativo recém-criado. É possível criar o aplicativo com:

dotnet build

A saída de compilação não deve conter nenhum aviso ou erro.

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

No diretório do aplicativo, instale a biblioteca de cliente de resposta às perguntas personalizadas para .NET com o seguinte comando:

dotnet add package Azure.AI.Language.QuestionAnswering

Consultar um projeto

Gerar uma resposta de um projeto

O exemplo abaixo permitirá que você consulte um projeto usando GetAnswers para obter uma resposta à sua pergunta.

Você precisará atualizar o código abaixo e fornecer seus valores para as variáveis.

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. Um ponto de extremidade de exemplo é: https://southcentralus.api.cognitive.microsoft.com/
credential Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre tenha duas chaves válidas para uma rotação de chaves segura sem tempo de inatividade. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. O valor da chave faz parte da solicitação de exemplo.
projectName O nome do projeto de respostas às perguntas personalizadas.
deploymentName Há dois valores possíveis: test e production. production depende de você ter implantado seu projeto a partir do Language Studio>respostas às perguntas>Implantar projeto.

Importante

Lembre-se de remover a chave do seu código quando terminar e nunca poste-a publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Confira o artigo sobre segurança dos serviços de IA do Azure para obter mais informações.

No diretório do projeto, abra o arquivo program.cs e substitua pelo seguinte código:

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}");
            }
        }
    }
}

Enquanto estamos embutindo as variáveis em código em nosso exemplo. Para produção, considere o uso de uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o Azure Key Vault fornece armazenamento de chaves seguro.

Depois de atualizar Program.cs com o código acima e substituir os valores de variável corretos. Execute o aplicativo com o comando dotnet run do seu próprio diretório de aplicativo.

dotnet run

A resposta terá a seguinte aparência:

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 obter informações sobre o nível de confiança de respostas às perguntas personalizadas de que se trata da resposta correta, adicione uma instrução print abaixo das instruções print existentes:

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

Se executar dotnet run novamente, agora você receberá um resultado com uma pontuação de confiança:

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)

A pontuação de confiança retorna um valor entre 0 e 1. Você pode considerar isso como uma porcentagem e multiplicar por 100, portanto, uma pontuação de confiança de 0,9185 significa que as respostas às perguntas personalizadas tem 91,85% de garantia de que essa é a resposta correta para a pergunta com base no projeto.

Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, use AnswerOptions para adicionar a propriedade 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

Como sabemos com base na execução anterior do código que a pontuação de confiança é .9185, definir o limite como .95 fará com que a resposta padrão seja retornada.

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

Texto de consulta sem um projeto

Você também pode usar as respostas às perguntas personalizadas sem um projeto com GetAnswersFromText. Nesse caso, você fornece à respostas às perguntas personalizadas uma pergunta e os registros de texto associados nos quais gostaria de pesquisar uma resposta no momento em que a solicitação é enviada.

Para este exemplo, você só precisa modificar as variáveis para endpoint e 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 executar o código acima, substitua o Program.cs pelo conteúdo do bloco de script acima e modifique as variáveis endpoint e credential para que correspondam ao recurso de linguagem criado como parte dos pré-requisitos.

Nesse caso, iteramos por todas as respostas e retornamos apenas a resposta com a pontuação de confiança mais alta, que é maior que 0,9. Para entender mais sobre as opções disponíveis com GetAnswersFromText.

Use este início rápido para a biblioteca de clientes de respostas às perguntas personalizadas para Python para:

  • Obtenha uma resposta de um projeto.
  • Obter uma resposta de um corpo de texto que você envia com sua pergunta.
  • Obter a pontuação de confiança da resposta à sua pergunta.

Documentação de referência | Pacote (PyPI) | Amostras adicionais | Código-fonte da biblioteca

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • Python 3.x
  • As respostas às perguntas personalizadas exigem um recurso de linguagem com o recurso de respostas às perguntas personalizadas habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Linguagem, selecione Ir para o recurso. Você precisará da chave e do ponto de extremidade do recurso criado para conectar à API. Cole a chave e o ponto de extremidade no código abaixo, mais adiante no início rápido.
  • Para criar um recurso de linguagem com a CLI do Azure, forneça as seguintes outras propriedades: --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>
  • Um projeto existente a ser consultado. Se você não configurou um projeto, siga as instruções no Início rápido do Language Studio. Ou adicione um projeto que usa este URL do Guia do Usuário do Surface como fonte de dados.

Configurando

Instalar a biblioteca de clientes

Depois de instalar o Python, você pode instalar a biblioteca de clientes com:

pip install azure-ai-language-questionanswering

Consultar um projeto

Gerar uma resposta de um projeto

O exemplo abaixo permitirá que você consulte um projeto usando get_answers para obter uma resposta à sua pergunta. Você pode copiar esse código em um arquivo. py dedicado ou em uma célula em Jupyter Notebook/Lab.

Você precisará atualizar o código abaixo e fornecer seus valores para as variáveis.

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. Um ponto de extremidade de exemplo é: https://southcentralus.api.cognitive.microsoft.com/
credential Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre tenha duas chaves válidas para uma rotação de chaves segura sem tempo de inatividade. Como alternativa, é possível encontrar o valor em Language Studio>respostas às perguntas>Implantar projeto>Obter URL de previsão. O valor da chave faz parte da solicitação de exemplo.
knowledge_base_project O nome do projeto de respostas às perguntas.
deployment Há dois valores possíveis: test e production. production depende de você ter implantado seu projeto a partir do Language Studio>respostas às perguntas>Implantar projeto.

Importante

Lembre-se de remover a chave do seu código quando terminar e nunca poste-a publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações, confira o artigo sobre segurança dos serviços de IA do Azure.

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()

Enquanto estamos embutindo as variáveis em código em nosso exemplo. Para produção, considere o uso de uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o Azure Key Vault fornece armazenamento de chaves seguro.

Ao executar o código acima, se você estiver usando a fonte de dados dos pré-requisitos, receberá uma resposta semelhante à seguinte:

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 obter informações sobre o nível de confiança de respostas às perguntas personalizadas de que se trata da resposta correta, adicione outra instrução print abaixo das instruções print existentes:

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

Agora, você receberá um resultado com uma pontuação de confiança:

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

A pontuação de confiança retorna um valor entre 0 e 1. Você pode considerar isso como uma porcentagem e multiplicar por 100, portanto, uma pontuação de confiança de 0,9185 significa que as respostas às perguntas personalizadas tem 91,85% de garantia de que essa é a resposta correta para a pergunta com base no projeto.

Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, modifique AnswerOptions para adicionar o 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
        )

Como sabemos com base na execução anterior do código que a pontuação de confiança é: .9185, definir o limite como .95 fará com que a resposta padrão seja retornada.

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

Texto de consulta sem um projeto

Você também pode usar as respostas às perguntas personalizadas sem um projeto com get_answers_from_text. Nesse caso, você fornece à respostas às perguntas personalizadas uma pergunta e os registros de texto associados nos quais gostaria de pesquisar uma resposta no momento em que a solicitação é enviada.

Para este exemplo, você só precisa modificar as variáveis para endpoint e 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()

Você pode copiar esse código em um arquivo. py dedicado ou em uma nova célula em Jupyter Notebook/Lab. Este exemplo retorna um 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

Nesse caso, iteramos por todas as respostas e retornamos apenas a resposta com a pontuação de confiança mais alta, que é maior que 0,9. Para saber mais sobre as opções disponíveis com get_answers_from_text, revise os parâmetros de AnswersFromTextOptions.

Limpar os recursos

Se quiser limpar e remover uma assinatura dos Serviços de IA do Azure, você poderá excluir o recurso ou grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele.

Explorar a API REST

Para saber mais sobre como automatizar seu pipeline de respostas às perguntas personalizadas, consulte a documentação da API REST. Atualmente, a funcionalidade de criação só está disponível por meio da API REST:

Próximas etapas