Início Rápido: Respostas Personalizadas a Perguntas (CQA)

Este guia de início rápido orienta você pelas etapas essenciais necessárias para criar, testar e implantar um projeto de 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 CQA rápida e bem-sucedida.

Nota

  • Se você já tiver um recurso de linguagem Azure nas Ferramentas de Foundry ou recurso multisserviço — seja usado por conta própria 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.
  • É altamente recomendável que você use um recurso Fábrica na Fábrica; 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. Navegue até o Foundry.

  2. Se você ainda não estiver conectado, o portal solicitará que você faça isso com suas credenciais de 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.

Criar sua tarefa de ajuste fino do CQA

Na Foundry, uma tarefa de ajuste de precisão serve como seu espaço de trabalho para suas soluções CQA. Anteriormente, uma tarefa de ajuste fino era conhecida como um projeto 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 Foundry a ser usado para este Início Rápido, selecione ajuste fino no menu de navegação à esquerda.

    Captura de tela da seleção do menu de ajustes detalhados 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 fino , escolha a guia Resposta à pergunta personalizada e selecione Avançar.

    Captura de tela da aba de respostas 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, consulteConfigure 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 conhecimento CQA estruturada é um conjunto de pares de perguntas e respostas otimizados para IA conversacional. 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 gerenciar fontes 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 origem , vamos escolher Amigável.

    Captura de tela do botão de seleção de origem e do botão de adicionar no Foundry.

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

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

    Captura de tela da lista de gerenciamento de fontes na Foundry.

Testar sua 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 . 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 (Resposta a 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.
  • Azure assinatura – Criar uma gratuitamente
  • A resposta a perguntas personalizadas requer um recurso Language com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
  • Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se 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 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 Surface como uma 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ê escreverá suas credenciais em variáveis de ambiente no computador local que executa o aplicativo.

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

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

Importante

Recomendamos a autenticação Microsoft Entra ID com identidades gerenciadas para os recursos Azure para evitar armazenar credenciais nos seus aplicativos que são executados na nuvem.

Use chaves de API com cuidado. Não inclua a chave de API diretamente em seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança em Azure Key Vault, gire as chaves regularmente e restrinja o acesso a 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 API com Azure Key Vault.

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

setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota

Se você precisar acessar apenas as variáveis de ambiente no console em execução atual, poderá 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 você estiver usando Visual Studio como editor, reinicie Visual Studio 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 Keys & Endpoint ao examinar seu 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 Keys & Endpoint ao examinar seu recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre mantenha duas chaves válidas para uma rotação de chaves segura sem interrupção. O valor da chave faz parte da solicitação de exemplo.
Project O nome do projeto de resposta a perguntas personalizadas.
Deployment Há dois valores possíveis: teste production.

O comando cURL é executado de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso, valores JSON e 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}'

Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá 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": []
      }
    }
  ]
}

O 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 você quiser excluir respostas em que a pontuação de confiança está abaixo de um determinado limite, você pode adicionar o confidenceScoreThreshold parâmetro.

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

Consultar texto 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.
  • Obtenha uma resposta de um corpo de texto que você envia junto com sua pergunta.
  • Obtenha a pontuação de confiança para a resposta à sua pergunta.

Documentação de Referência | Pacote (NuGet) | Exemplos | Código-fonte da Biblioteca

Pré-requisitos

  • Azure assinatura – Criar uma gratuitamente
  • A versão Visual Studio IDE ou atual do .NET Core.
  • A resposta a perguntas personalizadas requer um recurso Language com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
  • Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se 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 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 Microsoft Foundry. Ou adicione um projeto que use essa URL do Guia do Usuário Surface como uma 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ê escreverá suas credenciais em variáveis de ambiente no computador local que executa o aplicativo.

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

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

Importante

Recomendamos a autenticação Microsoft Entra ID com identidades gerenciadas para os recursos Azure para evitar armazenar credenciais nos seus aplicativos que são executados na nuvem.

Use chaves de API com cuidado. Não inclua a chave de API diretamente em seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança em Azure Key Vault, gire as chaves regularmente e restrinja o acesso a 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 API com Azure Key Vault.

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

setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota

Se você precisar acessar apenas as variáveis de ambiente no console em execução atual, poderá 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 você estiver usando Visual Studio como editor, reinicie Visual Studio antes de executar o exemplo.

CLI

Em uma janela do console (como cmd, PowerShell ou Bash), use o dotnet new comando para criar um novo aplicativo de 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 seu diretório para a pasta de aplicativo recém-criada. Você pode criar o aplicativo com:

dotnet build

A saída de build não deve conter avisos ou erros.

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

No diretório do aplicativo, instale a biblioteca de clientes de resposta a 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 permite que você consulte um projeto usando GetAnswers para obter uma resposta para sua pergunta.

Você precisa atualizar o código e fornecer seus próprios valores para as seguintes variáveis:

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Keys & Endpoint ao examinar seu 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 Keys & Endpoint ao examinar seu recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre mantenha duas chaves válidas para uma rotação de chaves segura sem interrupção. O valor da chave faz parte da solicitação de exemplo.
projectName O nome do projeto de resposta a perguntas personalizadas.
deploymentName Há dois valores possíveis: teste production.

Importante

Lembre-se de remover a chave do código quando terminar e nunca postá-la publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como Azure Key Vault. Para obter mais informações, consulte Segurança do Foundry Tools.

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 usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, Azure key vault fornece armazenamento seguro de chaves.

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

dotnet run

A resposta tem 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 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 você executar dotnet run novamente, agora 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 você quiser excluir respostas em que a pontuação de confiança fique abaixo de um determinado limite, você usará AnswerOptions para adicionar a ConfidenceScoreThreshold propriedade.

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)

Consultar texto 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 corresponder ao recurso de idioma que você criou como parte dos pré-requisitos.

Nesse caso, iteramos todas as respostas e retornamos apenas a resposta com a maior pontuação de confiança 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.
  • Obtenha uma resposta de um corpo de texto que você envia junto com sua pergunta.
  • Obtenha a pontuação de confiança para a resposta à sua pergunta.

Package (PyPI) | Samples | Library source code

Pré-requisitos

  • Azure assinatura – Criar uma gratuitamente
  • Python 3.x
  • A resposta a perguntas personalizadas requer um recurso Language com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
    • Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se 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 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 Microsoft Foundry. Ou adicione um projeto que use essa URL do Guia do Usuário Surface como uma fonte de dados.

Configurando

Instalar a biblioteca de clientes

Depois de instalar 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 para sua pergunta. Você pode copiar esse código em um arquivo de .py dedicado ou em uma célula em Jupyter Notebook/Lab.

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

Nome da variável Valor
endpoint Esse valor pode ser encontrado na seção Keys & Endpoint ao examinar seu 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 Keys & Endpoint ao examinar seu recurso no portal do Azure. Você pode usar Key1 ou Key2. Sempre mantenha duas chaves válidas para uma rotação de chaves segura sem interrupção. O valor da chave faz parte da solicitação de exemplo.
knowledge_base_project O nome do seu projeto de resposta a perguntas.
deployment Há dois valores possíveis: teste production. production.

Importante

Lembre-se de remover a chave do código quando terminar e nunca postá-la publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como 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 usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, Azure key vault fornece armazenamento seguro de chaves.

Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá 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 

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

Consultar texto sem um projeto

Você também pode usar a função get_answers_from_text para respostas de perguntas personalizadas sem um projeto. 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 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 todas as respostas e retornamos apenas a resposta com a maior pontuação de confiança maior que 0,9. Para entender mais sobre as opções disponíveis com get_answers_from_text, examine os parâmetros AnswersFromTextOptions.

Limpar recursos

Para limpar e remover um recurso de IA 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