Partilhar via


Guia de início rápido: respostas a perguntas personalizadas (CQA)

Este início rápido guia-o pelos passos essenciais necessários para criar, testar e implementar um projeto personalizado de resposta a perguntas (CQA) no Microsoft Foundry. Quer esteja a fazer a transição do Language Studio ou a começar do zero, este guia de início rápido é para si. Ele fornece instruções claras e acionáveis para alcançar uma implantação de projeto CQA rápida e bem-sucedida.

Nota

  • Se já tem uma Linguagem Azure nas Foundry Tools ou um recurso multi-serviço — seja usado isoladamente ou através do Language Studio — pode continuar a usar esses recursos existentes dentro do portal Foundry. Para mais informações, consulte Como usar as Ferramentas de Fundição no portal da Fundição.
  • Recomendamos vivamente que utilize um recurso do Foundry no Foundry; no entanto, 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. Navega até à Fundição.

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

  3. Depois de iniciar sessão, pode criar ou aceder aos seus projetos existentes dentro do Foundry.

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

Crie sua tarefa de ajuste fino do CQA

Na Foundry, uma tarefa de ajuste fino serve como o seu ambiente de trabalho para as suas soluções CQA. Anteriormente, uma tarefa de ajuste fino era chamada de projeto CQA. Você pode encontrar ambos os termos usados indistintamente na documentação mais antiga do CQA.

  1. Depois de selecionar o projeto Foundry para este início rápido, selecione ajuste fino no menu de navegação à esquerda.

    Captura de ecrã da seleção do menu de ajustes na Foundry.

  2. Na janela principal, selecione a guia Ajuste fino do Serviço AI e, em seguida, o botão + Ajustar.

    Captura de ecrã do botão de ajuste fino na Foundry.

  3. Na janela Criar ajuste fino do serviço , escolha a guia Resposta personalizada à pergunta e selecione Avançar.

    Captura de ecrã do separador de respostas a perguntas personalizadas na Foundry.

  4. Selecione seu recurso Connected Azure AI Search na janela de tarefas Criar ajuste fino do CQA . Para obter mais informações, consulteConfigurar conexões de recursos do Azure.

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

  6. Selecione o botão Criar.

Adicionar uma fonte da base de dados de conhecimento CQA

Uma base de conhecimento CQA é um conjunto estruturado de pares de perguntas e respostas otimizados para IA conversacional. A base de conhecimento usa processamento de linguagem natural para interpretar consultas do usuário e retornar respostas precisas e sensíveis ao contexto de um conjunto de dados específico.

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

    Captura de ecrã da gestão de 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 ecrã do menu suspenso de adicionar fonte no Foundry.

  4. Para este projeto, vamos escolher Adicionar chitchat.

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

    Captura de ecrã do botão de selecionar a fonte e adicionar no Foundry.

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

  7. Uma vez criada, a fonte é listada na janela Gerenciar fontes .

    Captura de ecrã da lista de gestão de fontes na Foundry.

Teste a sua base de conhecimento

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

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

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

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

Implante sua base de dados de conhecimento

Implantar uma base de conhecimento CQA significa publicar seu conteúdo de perguntas e respostas selecionado como um ponto de extremidade ao vivo e pesquisável. Esse processo move seu projeto de uma fase de teste para um ambiente de produção, permitindo que os aplicativos clientes o usem para vários projetos e soluções, incluindo chatbots.

  1. Quando a inspeção estiver 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 da base de dados de conhecimento Implantar e, em seguida, na janela pop-up Implantar este projeto . Leva alguns minutos para implantar.

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

É isso! Sua base de conhecimento CQA (Custom Question Answering) fornece uma interface de linguagem natural para seus dados, permitindo que os usuários interajam com as informações de forma conversacional. Ao implantar essa solução, você pode criar chatbots avançados e agentes interativos que compreendem 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 nas instruções rápidas, que estão mencionadas na documentação do cURL.
  • Subscrição do Azure - Criar uma gratuitamente
  • A resposta a perguntas personalizadas requer um recurso linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
    • Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
  • Crie um recurso de idioma 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 para consultar. Se ainda não configuraste um projeto, podes seguir as instruções no quickstart do Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.

Configuração

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 na máquina local que executa o aplicativo.

Para definir a variável de ambiente para sua chave de recurso de idioma, abra uma janela de 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 seu recurso.
  • Para definir a variável de LANGUAGE_ENDPOINT ambiente, substitua your-endpoint pelo ponto de extremidade do seu recurso.

Importante

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

Use chaves de API com cuidado. 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 Cofre de Chaves do Azure, gire as chaves regularmente e restrinja o acesso ao Cofre de Chaves do Azure 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 Chaves de API com o Cofre de Chaves do Azure.

Para obter mais informações sobre segurança de 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ê só precisar acessar 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 o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Consultar um projeto

Gerar uma resposta a partir de um projeto

Para consultar um projeto de resposta a perguntas personalizado com as APIs REST e cURL, você precisa das seguintes informações:

Nome da variável Valor
Endpoint Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/
API-Key Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves sem interrupção. O valor da chave faz parte da solicitação de exemplo.
Project O nome do seu projeto de resposta a perguntas personalizadas.
Deployment Há dois valores possíveis: test, e production.

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

Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta com a seguinte aparência:

{
"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 o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 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, 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}'

Uma vez que sabemos, pela nossa execução anterior do código, que a 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 a resposta a perguntas personalizada sem um projeto com a API REST de resposta a perguntas personalizada pré-criada, que é chamada via query-text. No caso em questão, forneces tanto a pergunta quanto os registos de texto associados nos quais gostarias de procurar uma resposta, no momento em que a solicitação é enviada.

Neste 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 este guia de início rápido para a biblioteca de cliente de resposta a perguntas personalizadas para .NET para:

  • Obtenha uma resposta de um projeto.
  • Obtenha uma resposta a partir de um corpo de texto que envia juntamente com a sua pergunta.
  • Obtenha a pontuação de confiança para a resposta à sua pergunta.

Documentação | de referênciaPacote (NuGet) | Amostras | Código fonte da biblioteca

Pré-requisitos

  • Subscrição 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 linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
    • Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
  • Crie um recurso de idioma 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 para consultar. Se não tiver um projeto, pode seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.

Configuração

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 na máquina local que executa o aplicativo.

Para definir a variável de ambiente para sua chave de recurso de idioma, abra uma janela de 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 seu recurso.
  • Para definir a variável de LANGUAGE_ENDPOINT ambiente, substitua your-endpoint pelo ponto de extremidade do seu recurso.

Importante

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

Use chaves de API com cuidado. 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 Cofre de Chaves do Azure, gire as chaves regularmente e restrinja o acesso ao Cofre de Chaves do Azure 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 Chaves de API com o Cofre de Chaves do Azure.

Para obter mais informações sobre segurança de 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ê só precisar acessar 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 o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

CLI

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

dotnet new console -n question-answering-quickstart

Altere seu diretório para a pasta do aplicativo recém-criada. Você pode criar o aplicativo com:

dotnet build

A saída da compilação não deve conter avisos ou erros.

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

Dentro do diretório do aplicativo, instale a biblioteca de cliente de resposta a perguntas personalizada para .NET com o seguinte comando:

dotnet add package Azure.AI.Language.QuestionAnswering

Consultar um projeto

Gerar uma resposta a partir de um projeto

O exemplo a seguir permite que você consulte um projeto usando GetAnswers para obter uma resposta à 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 Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/
credential Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves sem interrupção. O valor da chave faz parte da solicitação de exemplo.
projectName O nome do seu projeto de resposta a 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 publicá-la 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 de Fundição.

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 codificando as variáveis para o nosso exemplo. Para produção, considere usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o cofre de chaves do Azure fornece armazenamento seguro de chaves.

Após atualização Program.cs e substituição nos valores corretos das variáveis. 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, 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 o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 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 fique abaixo de um determinado limite, use 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

Uma vez que sabemos, pela nossa execução anterior do código, que a 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 perguntas personalizadas e respostas sem um projeto com GetAnswersFromText. Nesse caso, fornece-se respostas personalizadas a perguntas, com uma pergunta e os registos de texto associados que deseja procurar para obter uma resposta no momento em que a solicitação é enviada.

Neste 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 endpoint variáveis e credential para corresponder ao recurso de linguagem que você criou como parte dos pré-requisitos.

Neste caso, repetimos todas as respostas e só retornamos a resposta com a maior pontuação de confiança superior a 0,9. Para entender mais sobre as opções disponíveis com GetAnswersFromText.

Use este início rápido para a biblioteca de cliente de resposta a perguntas personalizada para Python para:

  • Obtenha uma resposta de um projeto.
  • Obtenha uma resposta a partir de um corpo de texto que envia juntamente com a sua pergunta.
  • Obtenha a pontuação de confiança para a resposta à sua pergunta.

Pacote (PyPI) | Amostras | Código fonte da biblioteca

Pré-requisitos

  • Subscrição do Azure - Criar uma gratuitamente
  • Python 3.x
  • A resposta a perguntas personalizadas requer um recurso linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
    • Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
  • Crie um recurso de idioma 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 para consultar. Se não tiver um projeto, pode seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.

Configuração

Instalar a biblioteca de cliente

Depois de instalar o Python, pode instalar a biblioteca de cliente com:

pip install azure-ai-language-questionanswering

Consultar um projeto

Gerar uma resposta a partir 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 próprios valores para as seguintes variáveis.

Nome da variável Valor
endpoint Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/
credential Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves 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: test, e production. production.

Importante

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

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 codificando as variáveis para o nosso exemplo. Para produção, considere usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o cofre de chaves do Azure fornece armazenamento seguro de chaves.

Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta com 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 confiáveis, adicione as seguintes instruções impressas:

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 o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 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, você pode modificar as 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
        )

Uma vez que sabemos, pela nossa execução anterior do código, que a 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 respostas personalizadas a perguntas sem um projeto com get_answers_from_text. Nesse caso, fornece-se respostas personalizadas a perguntas, com uma pergunta e os registos de texto associados que deseja procurar para obter uma resposta no momento em que a solicitação é enviada.

Neste 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 .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

Neste caso, repetimos todas as respostas e só retornamos a resposta com a maior pontuação de confiança superior a 0,9. Para entender mais sobre as opções disponíveis com o get_answers_from_text, revise os parâmetros AnswersFromTextOptions.

Limpar 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óximos passos