Compartilhar via


Início rápido: CQA (respostas às perguntas personalizadas)

Este guia de início rápido orienta você pelas etapas essenciais necessárias para criar, testar e implantar um projeto CQA (resposta a perguntas personalizadas) no Microsoft Foundry. Se você estiver fazendo a transição do Language Studio ou começando do zero, este início rápido é para você. Ele fornece instruções claras e acionáveis para obter uma implantação de projeto de CQA rápida e bem-sucedida.

Observação

  • Se você já tiver um idioma do Azure nas Ferramentas Foundry ou recurso de multi-serviços, seja sozinho ou por meio do Language Studio, poderá continuar a usar esses recursos de Linguagem existentes no portal do Foundry. Para obter mais informações, consulte Como usar as Ferramentas do Foundry no portal do Foundry.
  • Recomendamos fortemente que você use um recurso do Foundry no Foundry; no entanto, você também pode seguir estas instruções usando um recurso de Linguagem.

Pré-requisitos

Antes de começar, você precisa dos seguintes recursos e permissões:

Introdução

  1. Acesse o Foundry.

  2. Se você ainda não estiver conectado, o portal solicitará que você faça isso com suas credenciais do Azure.

  3. Depois de conectado, você pode criar ou acessar seus projetos existentes no Foundry.

  4. Se você ainda não estiver em seu projeto para esta tarefa, selecione-a.

Crie sua tarefa de ajuste do CQA

Na Foundry, uma tarefa de ajuste fino serve como seu espaço de trabalho para suas soluções CQA. Anteriormente, uma tarefa de ajuste era conhecida como um projeto de CQA. Você pode encontrar ambos os termos usados de forma intercambiável na documentação mais antiga do CQA.

  1. Depois de selecionar o projeto do Foundry a ser usado neste início rápido, selecione ajuste fino no menu de navegação à esquerda.

    Captura de tela da seleção de menu para ajuste fino na Foundry.

  2. Na janela principal, selecione a guia Ajuste do serviço de IA e, em seguida, o botão + Ajuste.

    Captura de tela do botão de ajuste fino no Foundry.

  3. Na janela Criar serviço de ajuste, escolha a guia Respostas às perguntas personalizadas e, em seguida, selecione Avançar.

    Captura de tela da aba de resposta a perguntas personalizadas na Foundry.

  4. Selecione o recurso de Pesquisa de IA do Azure conectado na janela Criar tarefa de ajuste do CQA. Para obter mais informações, consulteConfigurar conexões de recursos do Azure.

  5. Em seguida, conclua os campos Nome e Idioma. Para este projeto, você pode deixar a Resposta padrão quando nenhuma resposta é retornada no campo como está (Nenhuma resposta encontrada).

  6. Selecione o botão Criar.

Adicionar uma fonte de base de dados de conhecimento CQA

Uma base de dados de conhecimento CQA é um conjunto estruturado de pares de perguntas e respostas otimizados para IA de conversa. A base de dados de conhecimento usa o processamento de linguagem natural para interpretar consultas de usuário e retornar respostas precisas e com reconhecimento de contexto de um conjunto de dados específico.

  1. No menu Introdução, selecione Gerenciar fontes.

    Captura de tela da seleção de fontes gerenciadas na Foundry.

  2. Na janela principal, selecione o menu suspenso + Adicionar fonte.

  3. No menu suspenso, você pode selecionar Adicionar bate-papo, Adicionar URLs ou Adicionar Arquivos.

    Captura de tela do menu suspenso de adição de origem no Foundry.

  4. Para este projeto, vamos escolher Adicionar bate-papo.

  5. Na janela Adicionar nova fonte, vamos escolher Amigável.

    Captura de tela da seleção de origem e botão de adição no Foundry.

  6. Por fim, selecione Adicionar. Pode levar alguns minutos para a fonte ser criada.

  7. Depois de criada, a fonte é listada na janela Gerenciar fontes.

    Captura de tela da lista de fontes para gerenciar na Foundry.

Testar a base de dados de conhecimento

  1. Selecione Testar a base de dados de conhecimento no menu Introdução.

  2. Digite o seguinte no campo Digitar sua pergunta e selecione Executar.

      Hello! How are you doing today?
    
    
  3. Na interface de inspeção, você pode examinar o nível de confiança da resposta e escolher a resposta mais adequada.

    Captura de tela da interface de inspeção na Foundry.

Implantar sua base de dados de conhecimento

Implantar uma base de dados de conhecimento CQA significa publicar seu conteúdo de perguntas e respostas coletado como um ponto de extremidade dinâmico e que pode ser pesquisado. Esse processo move seu projeto de uma fase de teste para um ambiente de produção, permitindo que os aplicativos cliente o usem para vários projetos e soluções, incluindo chatbots.

  1. Depois que a inspeção for concluída, escolha a seção Implantar base de dados de conhecimento no menu Introdução.

  2. Selecione o botão Implantar primeiro na janela principal Implantar base de dados de conhecimento e, em seguida, na janela pop-up Implantar este projeto. Isso leva alguns minutos para ser implantado.

  3. Após a conclusão da implantação, o projeto implantado será listado na janela Implantar base de dados de conhecimento.

É isso! Sua base de dados de conhecimento CQA (Respostas às Perguntas Personalizadas) fornece uma interface de linguagem natural para seus dados, permitindo que os usuários interajam com informações de maneira conversacional. Ao implantar essa solução, você pode criar chatbots avançados e agentes interativos que compreendam as perguntas do usuário, fornecem respostas precisas e se ajustam às mudanças nos requisitos informativos.

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
  • A resposta a perguntas personalizadas requer um recurso de linguagem com o recurso de resposta de pergunta personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Idioma, 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 mais adiante no guia de início rápido.
  • Crie um recurso de linguagem com a CLI do Azure e forneça as seguintes 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 tiver configurado um projeto, poderá seguir as instruções no início rápido do Foundry. Ou adicione um projeto que use essa 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.

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.

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

Importante

Recomendamos a autenticação da ID do Microsoft Entra com identidades gerenciadas para recursos do Azure para evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.

Use as chaves de API com cautela. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança no Azure Key Vault, faça a rotação de chaves regularmente e restrinja o acesso ao Azure Key Vault usando controle de acesso baseado em função e restrições de acesso à rede. Para obter mais informações sobre como usar chaves de API com segurança em seus aplicativos, consulte as chaves de API com o Azure Key Vault.

Para obter mais informações sobre a segurança dos serviços de IA, consulte Autenticar solicitações para os serviços de IA do Azure.

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.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão 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 resposta a perguntas personalizadas com as APIs REST e cURL, você precisa das seguintes informações:

Nome da variável Valor
Endpoint Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar o recurso no portal do Azure. Um ponto de extremidade de exemplo é: https://southcentralus.cognitiveservices.azure.com/
API-Key Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar 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. 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.

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.cognitiveservices.azure.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Ao executar o código, 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. Considere a pontuação de confiança como uma porcentagem multiplicando-a por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é 91,85% confiante de que sua resposta está correta com base nas informações do 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.cognitiveservices.azure.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Como sabemos pela execução anterior do código que nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão .

{
  "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 respostas de perguntas personalizadas sem um projeto com a API REST de resposta à pergunta personalizada 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.cognitiveservices.azure.com/language/:query-text?&api-version=2021-10-01'

Este exemplo retorna 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 esse 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) | Exemplos | 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.
  • A resposta a perguntas personalizadas requer um recurso de linguagem com o recurso de resposta de pergunta personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Idioma, 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 mais adiante no guia de início rápido.
  • Crie um recurso de linguagem com a CLI do Azure e forneça as seguintes 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 tiver um projeto, poderá seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que use essa 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.

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.

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

Importante

Recomendamos a autenticação da ID do Microsoft Entra com identidades gerenciadas para recursos do Azure para evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.

Use as chaves de API com cautela. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança no Azure Key Vault, faça a rotação de chaves regularmente e restrinja o acesso ao Azure Key Vault usando controle de acesso baseado em função e restrições de acesso à rede. Para obter mais informações sobre como usar chaves de API com segurança em seus aplicativos, consulte as chaves de API com o Azure Key Vault.

Para obter mais informações sobre a segurança dos serviços de IA, consulte Autenticar solicitações para os serviços de IA do Azure.

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.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão 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 C# "Olá, Mundo" simples com um único arquivo de origem: 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 a seguir permitirá que você consulte um projeto usando GetAnswers para obter uma resposta à sua pergunta.

Você precisará atualizar o código e fornecer seus valores para as variáveis a seguir:

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar o recurso no portal do Azure. Um ponto de extremidade de exemplo é: https://southcentralus.cognitiveservices.azure.com/
credential Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar 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. 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.

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, consulte segurança das ferramentas Foundry.

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 cofre de chaves do Azure fornece armazenamento seguro de chaves.

Depois de atualizar Program.cs 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 é a 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 pontuações de confiança, adicione a seguinte instrução de impressão abaixo das instruções de impressão existentes:

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

Se executar dotnet run novamente, 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)

Considere a pontuação de confiança como uma porcentagem multiplicando-a por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é 91,85% confiante de que sua resposta está correta com base nas informações do 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 pela execução anterior do código que nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão .

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}.cognitiveservices.azure.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, substitua o Program.cs pelo conteúdo do bloco de script 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.

Pacote (PyPI) | Exemplos | Código-fonte da biblioteca

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • Python 3.x
  • A resposta a perguntas personalizadas requer um recurso de linguagem com o recurso de resposta de pergunta personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
    • Após a implantação do recurso de Idioma, 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 mais adiante no guia de início rápido.
  • Crie um recurso de linguagem com a CLI do Azure e forneça as seguintes 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 tiver um projeto, poderá seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que use essa 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 permite que você consulte um projeto usando get_answers para obter uma resposta à sua pergunta. Você pode copiar esse código em um arquivo de .py dedicado ou em uma célula no Jupyter Notebook/Lab.

Você precisa atualizar o código e fornecer seus valores para as variáveis a seguir.

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar o recurso no portal do Azure. Um ponto de extremidade de exemplo é: https://southcentralus.cognitiveservices.azure.com/
credential Esse valor pode ser encontrado na seção Chaves e Ponto de Extremidade ao analisar 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. 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.

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, consulte o artigo de segurança das Ferramentas Foundry.

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

endpoint = "https://{YOUR-ENDPOINT}.cognitiveservices.azure.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 cofre de chaves do Azure fornece armazenamento seguro de chaves.

Ao executar o código, 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 pontuações confiantes, adicione as seguintes instruções de impressão:

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

Agora, você recebe 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

Considere a pontuação de confiança como uma porcentagem multiplicando-a por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é 91,85% confiante de que sua resposta está correta com base nas informações do projeto.

Se você quiser excluir respostas em que a pontuação de confiança está abaixo de um determinado limite, você pode modificar o AnswerOptions para adicionar o confidence_threshold parâmetro.

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

Como sabemos pela execução anterior do código que nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão .

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}.cognitiveservices.azure.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 de .py dedicado ou em uma nova célula no 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 entender mais sobre as opções disponíveis com get_answers_from_text, examine os parâmetros AnswersFromTextOptions.

Limpar os recursos

Para limpar e remover um recurso de IA do Azure, você pode excluir o recurso individual ou todo o grupo de recursos. Se você excluir o grupo de recursos, todos os recursos contidos também serão excluídos.

Explorar a API REST

Próximas etapas