Guia de início rápido: biblioteca de cliente do QnA Maker

Nota

O Azure Open AI On Your Data utiliza grandes modelos de linguagem (LLMs) para produzir resultados semelhantes ao QnA Maker. Se você deseja migrar seu projeto QnA Maker para o Azure Open AI On Your Data, confira nosso guia.

Introdução à biblioteca de cliente do QnA Maker. Siga estas etapas para instalar o pacote e experimentar o código de exemplo para tarefas básicas.

Nota

O serviço QnA Maker será desativado no dia 31 de março de 2025. Uma versão mais recente do recurso de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure. Para obter os recursos de resposta a perguntas no Serviço Linguístico, consulte Resposta a perguntas. A partir de 1º de outubro de 2022, você não poderá criar novos recursos do QnA Maker. Para obter informações sobre como migrar bases de conhecimento existentes do QnA Maker para responder a perguntas, consulte o guia de migração.

Pré-requisitos

Nota

Esta documentação não se aplica à versão mais recente. Para saber mais sobre como usar a API REST com a versão mais recente, consulte a pergunta que responde ao início rápido da API REST

  • A versão atual do cURL. Várias opções de linha de comando são usadas nos inícios rápidos, que são anotados na documentação do cURL.

  • Você deve ter um recurso QnA Maker para usar a chave e o nome do recurso. Você inseriu o nome do recurso durante a criação do recurso e, em seguida, a chave foi criada para você. O nome do recurso é usado como o subdomínio para seu ponto de extremidade. Para recuperar a chave e o nome do recurso, selecione Guia de início rápido para seu recurso no portal do Azure. O nome do recurso é o primeiro subdomínio da URL do ponto de extremidade:

    https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0

Atenção

Os exemplos de BASH a seguir usam o caractere de continuação de \ linha. Se o console ou terminal usar um caractere de continuação de linha diferente, use esse caractere.

Criar uma base de dados de conhecimento

Para criar uma base de dados de conhecimento com as APIs REST e cURL, você precisa ter as seguintes informações:

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
Chave de recurso do QnA Maker -h param para Ocp-Apim-Subscription-Key cabeçalho Autenticar no serviço QnA Maker
JSON descrevendo a base de dados de conhecimento -d param Exemplos de JSON
Tamanho do JSON em bytes -h param para Content-Size cabeçalho

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso e valores JSON e tamanho de JSON.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/create \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:107" \
-d '{ name: "QnA Maker FAQ",urls: [ "https://learn.microsoft.com/azure/ai-services/qnamaker/faqs"]}'

A resposta cURL do QnA Maker inclui o operationId , que é necessário para obter o status da operação.

{
  "operationState": "NotStarted",
  "createdTimestamp": "2020-02-27T04:11:22Z",
  "lastActionTimestamp": "2020-02-27T04:11:22Z",
  "userId": "9596077b3e0441eb93d5080d6a15c64b",
  "operationId": "95a4f700-9899-4c98-bda8-5449af9faef8"
}

Obter o status da operação

Quando você cria uma base de dados de conhecimento, porque a operação é assíncrona, a resposta inclui informações para determinar o status.

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
ID da operação Rota de URL /operations/REPLACE-WITH-YOUR-OPERATION-ID
Chave de recurso do QnA Maker -h param para Ocp-Apim-Subscription-Key cabeçalho Autenticar no serviço QnA Maker

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso e ID de operação.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/operations/REPLACE-WITH-YOUR-OPERATION-ID \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

A resposta cURL inclui o status. Se o estado da operação for bem-sucedido, o resourceLocation inclui o ID da base de dados de conhecimento.

{
   "operationState": "Succeeded",
   "createdTimestamp": "2020-02-27T04:54:07Z",
   "lastActionTimestamp": "2020-02-27T04:54:19Z",
   "resourceLocation": "/knowledgebases/fe3971b7-cfaa-41fa-8d9f-6ceb673eb865",
   "userId": "f596077b3e0441eb93d5080d6a15c64b",
   "operationId": "f293f218-d080-48f0-a766-47993e9b26a8"
}

Publicar base de dados de conhecimento

Antes de consultar a base de dados de conhecimento, você precisa:

  • Publicar base de dados de conhecimento
  • Obter a chave do ponto de extremidade do tempo de execução

Esta tarefa publica a base de conhecimento. Obter a chave do ponto de extremidade do tempo de execução é uma tarefa separada.

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
Chave de recurso do QnA Maker -h param para Ocp-Apim-Subscription-Key cabeçalho Autenticar no serviço QnA Maker
ID da base de dados de conhecimento Rota de URL /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso e ID da base de dados de conhecimento.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-v \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
--data-raw ''

O estado da resposta é 204 sem resultados. Use o parâmetro de linha de comando para ver a -v saída detalhada para o comando cURL. Isso incluirá o status HTTP.

Obter a chave de ponto de extremidade de tempo de execução da base de dados de conhecimento publicada

Antes de consultar a base de dados de conhecimento, você precisa:

  • Publicar base de dados de conhecimento
  • Obter a chave do ponto de extremidade do tempo de execução

Esta tarefa obtém a chave do ponto de extremidade do tempo de execução. Publicar a base de dados de conhecimento é uma tarefa separada.

A chave de ponto de extremidade de tempo de execução é a mesma chave para todas as bases de conhecimento que usam o recurso QnA Maker.

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
Chave de recurso do QnA Maker -h param para Ocp-Apim-Subscription-Key cabeçalho Autenticar no serviço QnA Maker

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/endpointkeys \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

A resposta cURL inclui as chaves de ponto de extremidade de tempo de execução. Use apenas uma das chaves ao consultar para obter uma resposta da base de dados de conhecimento.

{
  "primaryEndpointKey": "93e88a14-694a-44d5-883b-184a68aa8530",
  "secondaryEndpointKey": "92c98c16-ca31-4294-8626-6c57454a5063",
  "installedVersion": "4.0.5",
  "lastStableVersion": "4.0.6"
}

Consulta de resposta da base de dados de conhecimento publicada

Obter uma resposta do conhecimento é feito a partir de um tempo de execução separado do que gerenciar a base de conhecimento. Como é um tempo de execução separado, você precisa autenticar com uma chave de tempo de execução.

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
Chave de tempo de execução do QnA Maker -h param para Authorization cabeçalho A chave faz parte de uma cadeia de caracteres que inclui a palavra Endpointkey . Autenticar no serviço QnA Maker
ID da base de dados de conhecimento Rota de URL /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID
JSON descrevendo consulta -d param Parâmetros do corpo da solicitação e exemplos de JSON
Tamanho do JSON em bytes -h param para Content-Size cabeçalho

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso e ID da base de dados de conhecimento.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.azurewebsites.net/qnamaker/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID/generateAnswer \
-X POST \
-H "Authorization: EndpointKey REPLACE-WITH-YOUR-RUNTIME-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:159" \
-d '{"question": "How are QnA Maker and LUIS used together?","top": 6,"isTest": true,  "scoreThreshold": 20, "strictFilters": [], "userId": "sd53lsY="}'

Uma resposta bem-sucedida inclui a resposta principal, juntamente com outras informações que um aplicativo cliente, como um bot de chat, precisa para exibir uma resposta ao usuário.

Excluir base de dados de conhecimento

Quando terminar a base de dados de conhecimento, exclua-a.

Informação Configuração de cURL Propósito
Nome do recurso do QnA Maker URL usado para construir URL
Chave de recurso do QnA Maker -h param para Ocp-Apim-Subscription-Key cabeçalho Autenticar no serviço QnA Maker
ID da base de dados de conhecimento Rota de URL /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID

O comando cURL é executado a partir de um shell BASH. Edite este comando com seu próprio nome de recurso, chave de recurso e ID da base de dados de conhecimento.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-X DELETE \
-v \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

O estado da resposta é 204 sem resultados. Use o parâmetro de linha de comando para ver a -v saída detalhada para o comando cURL. Isso incluirá o status HTTP.

Recursos adicionais

Use a biblioteca de cliente do QnA Maker para .NET para:

  • Criar uma base de conhecimento
  • Atualizar uma base de conhecimento
  • Publicar uma base de conhecimento
  • Obter chave de ponto de extremidade de tempo de execução de previsão
  • Aguarde uma tarefa de longa duração
  • Faça o download de uma base de conhecimento
  • Obtenha uma resposta de uma base de conhecimento
  • Excluir uma base de dados de conhecimento

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

Nota

Novos recursos criados após 1º de julho de 2019 usarão nomes de subdomínio personalizados. Para obter mais informações e uma lista completa de pontos de extremidade regionais, consulte Nomes de subdomínio personalizados para serviços de IA do Azure.

Pré-requisitos

Nota

Esta documentação não se aplica à versão mais recente. Para saber mais sobre como usar a API do C# com a versão mais recente, consulte a pergunta que responde ao início rápido do C#.

  • Subscrição do Azure - Criar uma gratuitamente
  • O IDE do Visual Studio ou a versão atual do .NET Core.
  • Depois de ter sua assinatura do Azure, crie um recurso do QnA Maker no portal do Azure para obter sua chave de criação e o nome do recurso. Depois de implantar, selecione Ir para recurso.
    • Você precisará da chave e do nome do recurso criado para conectar seu aplicativo à API do QnA Maker. Cole a chave e o nome do recurso no código abaixo mais adiante no início rápido.
    • Você pode usar o nível de preço gratuito (F0) para experimentar o serviço e atualizar posteriormente para um nível pago para produção.

Configuração

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 qna-maker-quickstart. Este comando cria um projeto C# "Hello World" simples com um único arquivo de origem: program.cs.

dotnet new console -n qna-maker-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 do QnA Maker para .NET com o seguinte comando:

dotnet add package Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker --version 2.0.1

Gorjeta

Quer ver todo o ficheiro de código do início rápido de uma vez? Pode encontrá-lo no GitHub, que contém os exemplos de código deste início rápido.

Utilização de diretivas

No diretório do projeto, abra o arquivo program.cs e adicione as seguintes using diretivas:

using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker;
using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

Chave de subscrição e pontos de extremidade de recursos

No método do Main aplicativo, adicione variáveis e código, mostrados na seção a seguir, para usar as tarefas comuns neste início rápido.

  • Utilizamos a chave de subscrição e a chave de criação de forma intercambiável. Para obter mais detalhes sobre a chave de criação, siga Chaves no QnA Maker.

  • O valor de QNA_MAKER_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Chaves e Ponto de Extremidade , em Gerenciamento de recursos, para localizar a chave de Criação (Assinatura) e o QnA Maker Endpoint.

Ponto de extremidade de criação do QnA Maker

  • O valor de QNA_MAKER_RUNTIME_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.azurewebsites.net. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Exportar modelo , em Automação para localizar o ponto de extremidade de tempo de execução.

Ponto de extremidade de tempo de execução do QnA Maker

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. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais informações.

var authoringKey = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
var authoringURL = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
var queryingURL = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Modelos de objeto

O QnA Maker usa dois modelos de objeto diferentes:

  • QnAMakerClient é o objeto para criar, gerenciar, publicar e baixar a base de conhecimento.
  • QnAMakerRuntime é o objeto para consultar a base de dados de conhecimento com a API GenerateAnswer e enviar novas perguntas sugeridas usando a API Train (como parte da aprendizagem ativa).

Usando este exemplo de base de dados de conhecimento

A base de conhecimento neste início rápido começa com 2 pares QnA conversacionais, isso é feito de propósito para simplificar o exemplo e ter Ids altamente previsíveis para usar no método Update, associando prompts de acompanhamento com perguntas a novos pares. Isso foi planejado e implementado em uma ordem específica para este início rápido.

Se você planeja desenvolver sua base de dados de conhecimento ao longo do tempo com prompts de acompanhamento que dependem de pares QnA existentes, você pode escolher:

  • Para bases de dados de conhecimento maiores, gerencie a base de dados de conhecimento em um editor de texto ou ferramenta TSV que ofereça suporte à automação e, em seguida, substitua completamente a base de conhecimento de uma só vez por uma atualização.
  • Para bases de conhecimento menores, gerencie os prompts de acompanhamento inteiramente no portal do QnA Maker.

Detalhes sobre os pares QnA usados neste guia de início rápido:

  • Tipos de par QnA - existem 2 tipos de pares QnA nesta base de conhecimento, após a atualização: chitchat e informações específicas do domínio. Isso é típico se sua base de conhecimento estiver vinculada a um aplicativo de conversação, como um chatbot.
  • Embora as respostas da base de conhecimento possam ser filtradas por metadados ou usar prompts de acompanhamento, este início rápido não mostra isso. Procure os exemplos de generateAnswer agnósticos de linguagem aqui.
  • O texto da resposta é markdown e pode conter uma grande variedade de markdown , como imagens (imagens baseadas na Internet disponíveis publicamente), links (para URLs disponíveis publicamente) e bullet points, este início rápido não usa essa variedade.

Modelo de objeto QnAMakerClient

O cliente QnA Maker de criação é um objeto QnAMakerClient que se autentica no Azure usando Microsoft.Rest.ServiceClientCredentials, que contém sua chave.

Depois que o cliente for criado, use a propriedade Base de dados de conhecimento para criar, gerenciar e publicar sua base de dados de conhecimento.

Gerencie sua base de dados de conhecimento enviando um objeto JSON. Para operações imediatas, um método geralmente retorna um objeto JSON indicando status. Para operações de longa duração, a resposta é o ID da operação. Ligue para o cliente. Método Operations.GetDetailsAsync com a ID da operação para determinar o status da solicitação.

Modelo de objeto QnAMakerRuntimeClient

O cliente QnA Maker de previsão é um objeto QnAMakerRuntimeClient que se autentica no Azure usando Microsoft.Rest.ServiceClientCredentials, que contém sua chave de tempo de execução de previsão, retornada da chamada do cliente de criação, client.EndpointKeys.GetKeys depois que a base de dados de conhecimento é publicada.

Use o método GenerateAnswer para obter uma resposta do tempo de execução da consulta.

Exemplos de código

Esses trechos de código mostram como fazer o seguinte com a biblioteca de cliente do QnA Maker para .NET:

Autenticar o cliente para criar a base de dados de conhecimento

Instancie um objeto cliente com sua chave e use-o com seu recurso para construir o ponto de extremidade para criar um QnAMakerClient com seu ponto de extremidade e chave. Crie um objeto ServiceClientCredentials .

var client = new QnAMakerClient(new ApiKeyServiceClientCredentials(authoringKey))
{ Endpoint = authoringURL };

Criar uma base de dados de conhecimento

Uma base de dados de conhecimento armazena pares de perguntas e respostas para o objeto CreateKbDTO de três fontes:

  • Para conteúdo editorial, use o objeto QnADTO .
    • Para usar metadados e prompts de acompanhamento, use o contexto editorial, porque esses dados são adicionados no nível de par QnA individual.
  • Para arquivos, use o objeto FileDTO . O FileDTO inclui o nome do arquivo e a URL pública para acessar o arquivo.
  • Para URLs, use uma lista de cadeias de caracteres para representar URLs disponíveis publicamente.

A etapa de criação também inclui propriedades para a base de conhecimento:

  • defaultAnswerUsedForExtraction - o que é devolvido quando não é encontrada resposta
  • enableHierarchicalExtraction - criar automaticamente relações rápidas entre pares QnA extraídos
  • language - ao criar a primeira base de conhecimento de um recurso, defina o idioma a ser usado no índice da Pesquisa do Azure.

Chame o método CreateAsync e passe o ID da operação retornada para o método MonitorOperation para pesquisar o status.

A linha final do código a seguir retorna o ID da base de dados de conhecimento da resposta de MonitorOperation.

private static async Task<string> CreateSampleKb(IQnAMakerClient client)
{
    var qna1 = new QnADTO
    {
        Answer = "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        Questions = new List<string> { "How do I manage my knowledgebase?" },
        Metadata = new List<MetadataDTO> {
            new MetadataDTO { Name = "Category", Value = "api" },
            new MetadataDTO { Name = "Language", Value = "REST" }
        },

    };

    var qna2 = new QnADTO
    {
        Answer = "Yes, You can use our [.NET SDK](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker) with the [.NET Reference Docs](https://docs.microsoft.com/dotnet/api/microsoft.azure.cognitiveservices.knowledge.qnamaker?view=azure-dotnet) to manage your knowledge base.",
        Questions = new List<string> { "Can I program with C#?" },
        Metadata = new List<MetadataDTO> {
            new MetadataDTO { Name = "Category", Value = "api" },
            new MetadataDTO { Name = "Language", Value = ".NET" }
        }
    };

    var file1 = new FileDTO
    {
        FileName = "myfile.tsv",
        FileUri = "https://mydomain/myfile.tsv"

    };

    var createKbDto = new CreateKbDTO
    {
        Name = "QnA Maker .NET SDK Quickstart",
        QnaList = new List<QnADTO> { qna1, qna2 },
        //Files = new List<FileDTO> { file1 }

    };

    var createOp = await client.Knowledgebase.CreateAsync(createKbDto);
    createOp = await MonitorOperation(client, createOp);

    return createOp.ResourceLocation.Replace("/knowledgebases/", string.Empty);
}

Certifique-se de incluir a MonitorOperation função, referenciada no código acima, para criar com êxito uma base de dados de conhecimento.

Atualizar uma base de dados de conhecimento

Você pode atualizar uma base de dados de conhecimento passando a ID da base de dados de conhecimento e um UpdatekbOperationDTO contendo adicionar, atualizar e excluir objetos DTO para o método UpdateAsync . Use o método MonitorOperation para determinar se a atualização foi bem-sucedida.

private static async Task UpdateKB(IQnAMakerClient client, string kbId)
{

    var urls = new List<string> {
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    };

    var updateOp = await client.Knowledgebase.UpdateAsync(kbId, new UpdateKbOperationDTO
    {
        // Create JSON of changes
        Add = new UpdateKbOperationDTOAdd
        {
            QnaList = new List<QnADTO> {
                new QnADTO {
                    Questions = new List<string> {
                        "bye",
                        "end",
                        "stop",
                        "quit",
                        "done"
                    },
                    Answer = "goodbye",
                    Metadata = new List<MetadataDTO> {
                        new MetadataDTO { Name = "Category", Value="Chitchat" },
                        new MetadataDTO { Name = "Chitchat", Value = "end" },
                    }
                },
                new QnADTO {
                    Questions = new List<string> {
                        "hello",
                        "hi",
                        "start"
                    },
                    Answer = "Hello, please select from the list of questions or enter a new question to continue.",
                    Metadata = new List<MetadataDTO> {
                        new MetadataDTO { Name = "Category", Value="Chitchat" },
                        new MetadataDTO { Name = "Chitchat", Value = "begin" }
                    },
                    Context = new QnADTOContext
                    {
                        IsContextOnly = false,
                        Prompts = new List<PromptDTO>
                        {
                            new PromptDTO
                            {
                                DisplayOrder =1,
                                DisplayText= "Use REST",
                                QnaId=1

                            },
                            new PromptDTO
                            {
                                DisplayOrder =2,
                                DisplayText= "Use .NET NuGet package",
                                QnaId=2

                            },
                        }
                    }
                },
            },
            Urls = urls
        },
        Update = null,
        Delete = null
    }); ;

    // Loop while operation is success
    updateOp = await MonitorOperation(client, updateOp);
}

Certifique-se de incluir a MonitorOperation função, referenciada no código acima, para atualizar com êxito uma base de dados de conhecimento.

Transferir uma base de dados de conhecimento

Use o método DownloadAsync para baixar o banco de dados como uma lista de QnADocumentsDTO. Isso não é equivalente à exportação do portal QnA Maker da página Configurações porque o resultado desse método não é um arquivo.

private static async Task DownloadKb(IQnAMakerClient client, string kbId)
{
    var kbData = await client.Knowledgebase.DownloadAsync(kbId, EnvironmentType.Prod);
    Console.WriteLine("KB Downloaded. It has {0} QnAs.", kbData.QnaDocuments.Count);

    // Do something meaningful with data
}

Publicar uma base de dados de conhecimento

Publique a base de dados de conhecimento usando o método PublishAsync . Isso usa o modelo salvo e treinado atual, referenciado pelo ID da base de dados de conhecimento, e o publica no seu ponto de extremidade. Esta é uma etapa necessária para consultar sua base de conhecimento.

private static async Task PublishKb(IQnAMakerClient client, string kbId)
{
    await client.Knowledgebase.PublishAsync(kbId);
}

Obter chave de tempo de execução de consulta

Depois que uma base de conhecimento é publicada, você precisa da chave de tempo de execução da consulta para consultar o tempo de execução. Essa não é a mesma chave usada para criar o objeto de cliente original.

Use o método EndpointKeys para obter a classe EndpointKeysDTO .

Use qualquer uma das propriedades de chave retornadas no objeto para consultar a base de conhecimento.

private static async Task<String> GetQueryEndpointKey(IQnAMakerClient client)
{
    var endpointKeysObject = await client.EndpointKeys.GetKeysAsync();

    return endpointKeysObject.PrimaryEndpointKey;
}

Uma chave de tempo de execução é necessária para consultar sua base de conhecimento.

Autenticar o tempo de execução para gerar uma resposta

Crie um QnAMakerRuntimeClient para consultar a base de dados de conhecimento para gerar uma resposta ou treinar a partir da aprendizagem ativa.

var runtimeClient = new QnAMakerRuntimeClient(new EndpointKeyServiceClientCredentials(primaryQueryEndpointKey))
{ RuntimeEndpoint = queryingURL };

Use o QnAMakerRuntimeClient para:

  • Obtenha uma resposta da Base de Conhecimento
  • para enviar novas perguntas sugeridas para a base de conhecimento para a aprendizagem ativa.

Gerar uma resposta a partir da base de dados de conhecimento

Gere uma resposta a partir de uma base de conhecimento publicada usando o RuntimeClient.Método GenerateAnswerAsync . Este método aceita o ID da base de dados de conhecimento e o QueryDTO. Acesse propriedades adicionais do QueryDTO, como Top e Context para usar em seu bot de chat.

private static async Task GenerateAnswer(IQnAMakerRuntimeClient runtimeClient, string kbId)
{
    var response = await runtimeClient.Runtime.GenerateAnswerAsync(kbId, new QueryDTO { Question = "How do I manage my knowledgebase?" });
    Console.WriteLine("Endpoint Response: {0}.", response.Answers[0].Answer);

    // Do something meaningful with answer
}

Este é um exemplo simples de consulta à base de conhecimento. Para compreender os cenários de consulta avançada, reveja outros exemplos de consulta.

Eliminar uma base de dados de conhecimento

Exclua a base de conhecimento usando o método DeleteAsync com um parâmetro da ID da base de dados de conhecimento.

private static async Task DeleteKB(IQnAMakerClient client, string kbId)
{
    await client.Knowledgebase.DeleteAsync(kbId);
}

Obter o status de uma operação

Alguns métodos, como criar e atualizar, podem levar tempo suficiente para que, em vez de esperar pela conclusão do processo, uma operação seja retornada. Use o ID da operação para sondar (com lógica de repetição) para determinar o status do método original.

O loop e Task.Delay o bloco de código a seguir são usados para simular a lógica de repetição. Estes devem ser substituídos pela sua própria lógica de repetição.

private static async Task<Operation> MonitorOperation(IQnAMakerClient client, Operation operation)
{
    // Loop while operation is success
    for (int i = 0;
        i < 20 && (operation.OperationState == OperationStateType.NotStarted || operation.OperationState == OperationStateType.Running);
        i++)
    {
        Console.WriteLine("Waiting for operation: {0} to complete.", operation.OperationId);
        await Task.Delay(5000);
        operation = await client.Operations.GetDetailsAsync(operation.OperationId);
    }

    if (operation.OperationState != OperationStateType.Succeeded)
    {
        throw new Exception($"Operation {operation.OperationId} failed to completed.");
    }
    return operation;
}

Executar a aplicação

Execute o aplicativo com o dotnet run comando do diretório do aplicativo.

dotnet run

O código-fonte deste exemplo pode ser encontrado no GitHub.

Use a biblioteca de cliente do QnA Maker para Node.js para:

  • Criar uma base de conhecimento
  • Atualizar uma base de conhecimento
  • Publicar uma base de conhecimento
  • Obter chave de ponto de extremidade de tempo de execução de previsão
  • Aguarde uma tarefa de longa duração
  • Faça o download de uma base de conhecimento
  • Obtenha uma resposta de uma base de conhecimento
  • Excluir base de dados de conhecimento

Pacote de documentação | de referência (npm) | Node.js Amostras

Nota

Novos recursos criados após 1º de julho de 2019 usarão nomes de subdomínio personalizados. Para obter mais informações e uma lista completa de pontos de extremidade regionais, consulte Nomes de subdomínio personalizados para serviços de IA do Azure.

Pré-requisitos

  • Subscrição do Azure - Criar uma gratuitamente
  • A versão atual do Node.js.
  • Depois de ter sua assinatura do Azure, crie um recurso do QnA Maker no portal do Azure para obter sua chave de criação e recurso. Depois de implantar, selecione Ir para recurso.
    • Você precisará da chave e do nome do recurso criado para conectar seu aplicativo à API do QnA Maker. Cole a chave e o nome do recurso no código abaixo mais adiante no início rápido.
    • Você pode usar o nível de preço gratuito (F0) para experimentar o serviço e atualizar posteriormente para um nível pago para produção.

Configuração

Criar uma nova aplicação Node.js

Numa janela de consola (como cmd, PowerShell ou Bash), crie um novo diretório para a sua aplicação e navegue para a mesma.

mkdir qnamaker_quickstart && cd qnamaker_quickstart

Execute o comando npm init -y para criar uma aplicação de nó com um ficheiro package.json.

npm init -y

Instalar a biblioteca de cliente

Instale os seguintes pacotes NPM:

npm install @azure/cognitiveservices-qnamaker
npm install @azure/cognitiveservices-qnamaker-runtime
npm install @azure/ms-rest-js

O arquivo do package.json seu aplicativo é atualizado com as dependências.

Crie um arquivo chamado index.js e importe as seguintes bibliotecas:

const msRest = require("@azure/ms-rest-js");
const qnamaker = require("@azure/cognitiveservices-qnamaker");
const qnamaker_runtime = require("@azure/cognitiveservices-qnamaker-runtime");

Crie uma variável para a chave do Azure e o nome do recurso do seu recurso.

  • Utilizamos a chave de subscrição e a chave de criação de forma intercambiável. Para obter mais detalhes sobre a chave de criação, siga Chaves no QnA Maker.

  • O valor de QNA_MAKER_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Chaves e Ponto de Extremidade , em Gerenciamento de recursos, para localizar a chave de Criação (Assinatura) e o QnA Maker Endpoint.

Ponto de extremidade de criação do QnA Maker

  • O valor de QNA_MAKER_RUNTIME_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.azurewebsites.net. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Exportar modelo , em Automação para localizar o ponto de extremidade de tempo de execução.

Ponto de extremidade de tempo de execução do QnA Maker

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. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais informações.

const subscription_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
const endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
const runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Modelos de objeto

O QnA Maker usa dois modelos de objeto diferentes:

  • QnAMakerClient é o objeto para criar, gerenciar, publicar e baixar a base de conhecimento.
  • QnAMakerRuntime é o objeto para consultar a base de dados de conhecimento com a API GenerateAnswer e enviar novas perguntas sugeridas usando a API Train (como parte da aprendizagem ativa).

Modelo de objeto QnAMakerClient

O cliente QnA Maker de criação é um objeto QnAMakerClient que se autentica no Azure usando suas credenciais, que contém sua chave.

Depois que o cliente for criado, use a base de conhecimento para criar, gerenciar e publicar sua base de dados de conhecimento.

Gerencie sua base de dados de conhecimento enviando um objeto JSON. Para operações imediatas, um método geralmente retorna um objeto JSON indicando status. Para operações de longa duração, a resposta é o ID da operação. Chame o método client.operations.getDetails com a ID da operação para determinar o status da solicitação.

Modelo de objeto QnAMakerRuntimeClient

O cliente QnA Maker de previsão é um objeto QnAMakerRuntimeClient que se autentica no Azure usando Microsoft.Rest.ServiceClientCredentials, que contém sua chave de tempo de execução de previsão, retornada da chamada do cliente de criação, cliente. EndpointKeys.getKeys após a publicação da base de conhecimento.

Exemplos de código

Esses trechos de código mostram como fazer o seguinte com a biblioteca de cliente do QnA Maker para .NET:

Autenticar o cliente para criar a base de dados de conhecimento

Instancie um cliente com seu ponto de extremidade e chave. Crie um objeto ServiceClientCredentials com sua chave e use-o com seu ponto de extremidade para criar um objeto QnAMakerClient .

const creds = new msRest.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': subscription_key } });
const qnaMakerClient = new qnamaker.QnAMakerClient(creds, endpoint);
const knowledgeBaseClient = new qnamaker.Knowledgebase(qnaMakerClient);

Criar uma base de dados de conhecimento

Uma base de dados de conhecimento armazena pares de perguntas e respostas para o objeto CreateKbDTO de três fontes:

  • Para conteúdo editorial, use o objeto QnADTO .
    • Para usar metadados e prompts de acompanhamento, use o contexto editorial, porque esses dados são adicionados no nível de par QnA individual.
  • Para arquivos, use o objeto FileDTO . O FileDTO inclui o nome do arquivo e a URL pública para acessar o arquivo.
  • Para URLs, use uma lista de cadeias de caracteres para representar URLs disponíveis publicamente.

A etapa de criação também inclui propriedades para a base de conhecimento:

  • defaultAnswerUsedForExtraction - o que é devolvido quando não é encontrada resposta
  • enableHierarchicalExtraction - criar automaticamente relações rápidas entre pares QnA extraídos
  • language - ao criar a primeira base de conhecimento de um recurso, defina o idioma a ser usado no índice da Pesquisa do Azure.

Chame o método create com as informações da base de dados de conhecimento. As informações da base de dados de conhecimento são basicamente um objeto JSON.

Quando o método create retornar, passe a ID da operação retornada para o método wait_for_operation para pesquisar o status. O método wait_for_operation retorna quando a operação é concluída. Analise o resourceLocation valor do cabeçalho da operação retornada para obter a nova ID da base de dados de conhecimento.

const createKnowledgeBase = async (qnaClient, kbclient) => {

    console.log(`Creating knowledge base...`)

    const qna1 = {
        answer: "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        questions: ["How do I manage my knowledgebase?"],
        metadata: [
            { name: "Category", value: "api" },
            { name: "Language", value: "REST" }
        ]
    };

    const qna2 = {
        answer: "Yes, You can use our JS SDK on NPM for [authoring](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker), [query runtime](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker-runtime), and [the reference docs](https://docs.microsoft.com/en-us/javascript/api/@azure/cognitiveservices-qnamaker/?view=azure-node-latest) to manage your knowledge base.",
        questions: ["How do I manage my knowledgebase?"],
        metadata: [
            { name: "Category", value: "api" },
            { name: "Language", value: "JavaScript" }
        ]
    };

    const create_kb_payload = {
        name: 'QnA Maker JavaScript SDK Quickstart',
        qnaList: [
            qna1,
            qna2
        ],
        urls: [],
        files: [
            /*{
                fileName: "myfile.md",
                fileUri: "https://mydomain/myfile.md"
            }*/
        ],
        defaultAnswerUsedForExtraction: "No answer found.",
        enableHierarchicalExtraction: true,
        language: "English"
    };

    const results = await kbclient.create(create_kb_payload)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Create request failed - HTTP status ${results._response.status}`)
        return
    }

    const operationResult = await wait_for_operation(qnaClient, results.operationId)

    if (!operationResult || !operationResult.operationState || !(operationResult.operationState = "Succeeded") || !operationResult.resourceLocation) {
        console.log(`Create operation state failed - HTTP status ${operationResult._response.status}`)
        return
    }

    // parse resourceLocation for KB ID
    const kbID = operationResult.resourceLocation.replace("/knowledgebases/", "");

    return kbID;
}

Certifique-se de incluir a wait_for_operation função, referenciada no código acima, para criar com êxito uma base de dados de conhecimento.

Atualizar uma base de dados de conhecimento

Você pode atualizar uma base de dados de conhecimento passando a ID da base de dados de conhecimento e um UpdateKbOperationDTO contendo adicionar, atualizar e excluir objetos DTO para o método de atualização . Os DTOs também são basicamente objetos JSON. Use o método wait_for_operation para determinar se a atualização foi bem-sucedida.

const updateKnowledgeBase = async (qnaClient, kbclient, kb_id) => {

    console.log(`Updating knowledge base...`)

    const urls = [
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    ]

    const qna3 = {
        answer: "goodbye",
        questions: [
            "bye",
            "end",
            "stop",
            "quit",
            "done"
        ],
        metadata: [
            { name: "Category", value: "Chitchat" },
            { name: "Chitchat", value: "end" }
        ]
    };

    const qna4 = {
        answer: "Hello, please select from the list of questions or enter a new question to continue.",
        questions: [
            "hello",
            "hi",
            "start"
        ],
        metadata: [
            { name: "Category", value: "Chitchat" },
            { name: "Chitchat", value: "begin" }
        ],
        context: {
            isContextOnly: false,
            prompts: [
                {
                    displayOrder: 1,
                    displayText: "Use REST",
                    qna: null,
                    qnaId: 1
                },
                {
                    displayOrder: 2,
                    displayText: "Use JS NPM package",
                    qna: null,
                    qnaId: 2
                },
            ]
        }
    };

    console.log(JSON.stringify(qna4))

    // Add new Q&A lists, URLs, and files to the KB.
    const kb_add_payload = {
        qnaList: [
            qna3,
            qna4
        ],
        urls: urls,
        files: []
    };

    // Bundle the add, update, and delete requests.
    const update_kb_payload = {
        add: kb_add_payload,
        update: null,
        delete: null,
        defaultAnswerUsedForExtraction: "No answer found. Please rephrase your question."
    };

    console.log(JSON.stringify(update_kb_payload))

    const results = await kbclient.update(kb_id, update_kb_payload)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Update request failed - HTTP status ${results._response.status}`)
        return false
    }

    const operationResult = await wait_for_operation(qnaClient, results.operationId)

    if (operationResult.operationState != "Succeeded") {
        console.log(`Update operation state failed - HTTP status ${operationResult._response.status}`)
        return false
    }

    console.log(`Update operation state ${operationResult._response.status} - HTTP status ${operationResult._response.status}`)
    return true
}

Certifique-se de incluir a wait_for_operation função, referenciada no código acima, para atualizar com êxito uma base de dados de conhecimento.

Transferir uma base de dados de conhecimento

Use o método de download para baixar o banco de dados como uma lista de QnADocumentsDTO. Isso não é equivalente à exportação do portal QnA Maker da página Configurações porque o resultado desse método não é um arquivo TSV.

const downloadKnowledgeBase = async (KBclient, kb_id) => {

    console.log(`Downloading knowledge base...`)

    var kbData = await KBclient.download(kb_id, "Prod");
    console.log(`Knowledge base downloaded. It has ${kbData.qnaDocuments.length} QnAs.`);

    // Do something meaningful with data
}

Publicar uma base de dados de conhecimento

Publique a base de dados de conhecimento usando o método publishing . Isso usa o modelo salvo e treinado atual, referenciado pelo ID da base de dados de conhecimento, e o publica em um ponto de extremidade. Verifique o código de resposta HTTP para validar se a publicação foi bem-sucedida.

const publishKnowledgeBase = async (kbclient, kb_id) => {

    console.log(`Publishing knowledge base...`)

    const results = await kbclient.publish(kb_id)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Publish request failed - HTTP status ${results._response.status}`)
        return false
    }

    console.log(`Publish request succeeded - HTTP status ${results._response.status}`)

    return true
}

Consultar uma base de dados de conhecimento

Obter chave de tempo de execução de consulta

Depois que uma base de conhecimento é publicada, você precisa da chave de tempo de execução da consulta para consultar o tempo de execução. Essa não é a mesma chave usada para criar o objeto de cliente original.

Use o método EndpointKeys.getKeys para obter a classe EndpointKeysDTO .

Use qualquer uma das propriedades de chave retornadas no objeto para consultar a base de conhecimento.

const getEndpointKeys = async (qnaClient) => {

    console.log(`Getting runtime endpoint keys...`)

    const runtimeKeysClient = await qnaClient.endpointKeys;
    const results = await runtimeKeysClient.getKeys()

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`GetEndpointKeys request failed - HTTP status ${results._response.status}`)
        return null
    }

    console.log(`GetEndpointKeys request succeeded - HTTP status ${results._response.status} - primary key ${results.primaryEndpointKey}`)

    return results.primaryEndpointKey
}

Autenticar o tempo de execução para gerar uma resposta

Crie um QnAMakerRuntimeClient para consultar a base de dados de conhecimento para gerar uma resposta ou treinar a partir da aprendizagem ativa.

const queryRuntimeCredentials = new msRest.ApiKeyCredentials({ inHeader: { 'Authorization': 'EndpointKey ' + primaryQueryRuntimeKey } });
const runtimeClient = new qnamaker_runtime.QnAMakerRuntimeClient(queryRuntimeCredentials, runtime_endpoint);

Use o QnAMakerRuntimeClient para obter uma resposta do conhecimento ou para enviar novas perguntas sugeridas para a base de conhecimento para aprendizagem ativa.

Gerar uma resposta a partir da base de dados de conhecimento

Gere uma resposta a partir de uma base de dados de conhecimento publicada usando o método RuntimeClient.runtime.generateAnswer. Este método aceita o ID da base de dados de conhecimento e o QueryDTO. Acesse propriedades adicionais do QueryDTO, como Top e Context para usar em seu bot de chat.

const generateAnswer = async (runtimeClient, runtimeKey, kb_id) => {

    console.log(`Querying knowledge base...`)

    const requestQuery = await runtimeClient.runtime.generateAnswer(
        kb_id,
        {
            question: "How do I manage my knowledgebase?",
            top: 1,
            strictFilters: [
                { name: "Category", value: "api" }
            ]
        }
    );
    console.log(JSON.stringify(requestQuery));

}

Este é um exemplo simples de consulta à base de dados de conhecimento. Para compreender os cenários de consulta avançada, reveja outros exemplos de consulta.

Eliminar uma base de dados de conhecimento

Exclua a base de dados de conhecimento usando o método delete com um parâmetro da ID da base de dados de conhecimento.

const deleteKnowledgeBase = async (KBclient, kb_id) => {

    console.log(`Deleting knowledge base...`)

    const results = await KBclient.deleteMethod(kb_id)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Delete operation state failed - HTTP status ${results._response.status}`)
        return false
    }

    console.log(`Delete operation state succeeded - HTTP status ${results._response.status}`)
    return true
}

Obter o status de uma operação

Alguns métodos, como criar e atualizar, podem levar tempo suficiente para que, em vez de esperar pela conclusão do processo, uma operação seja retornada. Use o ID da operação para sondar (com lógica de repetição) para determinar o status do método original.

A chamada delayTimer no bloco de código a seguir é usada para simular a lógica de repetição. Substitua isso por sua própria lógica de repetição.

const wait_for_operation = async (qnaClient, operation_id) => {

    let state = "NotStarted"
    let operationResult = undefined

    while ("Running" === state || "NotStarted" === state) {

        operationResult = await qnaClient.operations.getDetails(operation_id)
        state = operationResult.operationState;

        console.log(`Operation state - ${state}`)

        await delayTimer(1000);
    }

    return operationResult;
}
const delayTimer = async (timeInMs) => {
    return await new Promise((resolve) => {
        setTimeout(resolve, timeInMs);
    });
}

Executar a aplicação

Execute o aplicativo com node index.js o comando do diretório do aplicativo.

node index.js

O código-fonte deste exemplo pode ser encontrado no GitHub.

Use a biblioteca de cliente do QnA Maker para Python para:

  • Criar uma base de conhecimento
  • Atualizar uma base de conhecimento
  • Publicar uma base de conhecimento
  • Obter chave de ponto de extremidade de tempo de execução de previsão
  • Aguarde uma tarefa de longa duração
  • Faça o download de uma base de conhecimento
  • Obtenha uma resposta de uma base de conhecimento
  • Excluir base de dados de conhecimento

Documentação | de referência Exemplos de código-fonte | da biblioteca Pacote (PyPi)Python |

Nota

Novos recursos criados após 1º de julho de 2019 usarão nomes de subdomínio personalizados. Para obter mais informações e uma lista completa de pontos de extremidade regionais, consulte Nomes de subdomínio personalizados para serviços de IA do Azure.

Pré-requisitos

Nota

Esta documentação não se aplica à versão mais recente. Para saber mais sobre como usar a API Python com a versão mais recente, consulte a pergunta que responde ao início rápido do Python.

  • Subscrição do Azure - Criar uma gratuitamente
  • Python 3.x
  • Depois de ter sua assinatura do Azure, crie um recurso do QnA Maker no portal do Azure para obter sua chave de criação e ponto de extremidade. Depois de implantar, selecione Ir para recurso.
    • Você precisará da chave e do ponto de extremidade do recurso criado para conectar seu aplicativo à API do QnA Maker. Você colará sua chave e ponto de extremidade no código abaixo mais adiante no início rápido.
    • Você pode usar o nível de preço gratuito (F0) para experimentar o serviço e atualizar posteriormente para um nível pago para produção.

Configuração

Instalar a biblioteca de cliente

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

pip install azure-cognitiveservices-knowledge-qnamaker==0.2.0

Criar uma aplicação Python nova

Crie um novo arquivo Python chamado quickstart-file.py e importe as seguintes bibliotecas.

import os
import time

from azure.cognitiveservices.knowledge.qnamaker.authoring import QnAMakerClient
from azure.cognitiveservices.knowledge.qnamaker.runtime import QnAMakerRuntimeClient
from azure.cognitiveservices.knowledge.qnamaker.authoring.models import QnADTO, MetadataDTO, CreateKbDTO, OperationStateType, UpdateKbOperationDTO, UpdateKbOperationDTOAdd, EndpointKeysDTO, QnADTOContext, PromptDTO
from azure.cognitiveservices.knowledge.qnamaker.runtime.models import QueryDTO
from msrest.authentication import CognitiveServicesCredentials

Crie variáveis para o ponto final e a chave do Azure do seu recurso.

  • Utilizamos a chave de subscrição e a chave de criação de forma intercambiável. Para obter mais detalhes sobre a chave de criação, siga Chaves no QnA Maker.

  • O valor de QNA_MAKER_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Chaves e Ponto de Extremidade , em Gerenciamento de recursos, para localizar a chave de Criação (Assinatura) e o QnA Maker Endpoint.

Ponto de extremidade de criação do QnA Maker

  • O valor de QNA_MAKER_RUNTIME_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.azurewebsites.net. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Exportar modelo , em Automação para localizar o ponto de extremidade de tempo de execução.

Ponto de extremidade de tempo de execução do QnA Maker

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. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais informações.

subscription_key = 'PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE'

authoring_endpoint = 'PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE'

runtime_endpoint = 'PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE'

Modelos de objeto

O QnA Maker usa dois modelos de objeto diferentes:

  • QnAMakerClient é o objeto para criar, gerenciar, publicar e baixar a base de conhecimento.
  • QnAMakerRuntime é o objeto para consultar a base de dados de conhecimento com a API GenerateAnswer e enviar novas perguntas sugeridas usando a API Train (como parte da aprendizagem ativa).

Usando este exemplo de base de dados de conhecimento

A base de conhecimento neste início rápido começa com 2 pares QnA conversacionais, isso é feito de propósito para simplificar o exemplo e ter Ids altamente previsíveis para usar no método Update, associando prompts de acompanhamento com perguntas a novos pares. Isso foi planejado e implementado em uma ordem específica para este início rápido.

Se você planeja desenvolver sua base de dados de conhecimento ao longo do tempo com prompts de acompanhamento que dependem de pares QnA existentes, você pode escolher:

  • Para bases de dados de conhecimento maiores, gerencie a base de dados de conhecimento em um editor de texto ou ferramenta TSV que ofereça suporte à automação e, em seguida, substitua completamente a base de conhecimento de uma só vez por uma atualização.
  • Para bases de conhecimento menores, gerencie os prompts de acompanhamento inteiramente no portal do QnA Maker.

Detalhes sobre os pares QnA usados neste guia de início rápido:

  • Tipos de par QnA - existem 2 tipos de pares QnA nesta base de conhecimento, após a atualização: chitchat e informações específicas do domínio. Isso é típico se sua base de conhecimento estiver vinculada a um aplicativo de conversação, como um chatbot.
  • Embora as respostas da base de conhecimento possam ser filtradas por metadados ou usar prompts de acompanhamento, este início rápido não mostra isso. Procure os exemplos de generateAnswer agnósticos de linguagem aqui.
  • O texto da resposta é markdown e pode conter uma grande variedade de markdown , como imagens (imagens baseadas na Internet disponíveis publicamente), links (para URLs disponíveis publicamente) e bullet points, este início rápido não usa essa variedade.

Modelo de objeto QnAMakerClient

O cliente QnA Maker de criação é um objeto QnAMakerClient que se autentica no Azure usando Microsoft.Rest.ServiceClientCredentials, que contém sua chave.

Depois que o cliente for criado, use a propriedade Base de dados de conhecimento para criar, gerenciar e publicar sua base de dados de conhecimento.

Gerencie sua base de dados de conhecimento enviando um objeto JSON. Para operações imediatas, um método geralmente retorna um objeto JSON indicando status. Para operações de longa duração, a resposta é o ID da operação. Chame o método operations.get_details com o ID da operação para determinar o status da solicitação.

Modelo de objeto QnAMakerRuntimeClient

O cliente QnA Maker de previsão é um QnAMakerRuntimeClient objeto que se autentica no Azure usando Microsoft.Rest.ServiceClientCredentials, que contém sua chave de tempo de execução de previsão, retornada da chamada de cliente de criação, cliente. EndpointKeysOperations.get_keys após a publicação da base de conhecimento.

Use o generate_answer método para obter uma resposta do tempo de execução da consulta.

Autenticar o cliente para criar a base de dados de conhecimento

Instancie um cliente com seu ponto de extremidade e chave. Crie um objeto CognitiveServicesCredentials com sua chave e use-o com seu ponto de extremidade para criar um objeto QnAMakerClient .

client = QnAMakerClient(endpoint=authoring_endpoint, credentials=CognitiveServicesCredentials(subscription_key))

Criar uma base de dados de conhecimento

Use o objeto client para obter um objeto de operações da base de dados de conhecimento.

Uma base de dados de conhecimento armazena pares de perguntas e respostas para o objeto CreateKbDTO de três fontes:

  • Para conteúdo editorial, use o objeto QnADTO .
    • Para usar metadados e prompts de acompanhamento, use o contexto editorial, porque esses dados são adicionados no nível de par QnA individual.
  • Para arquivos, use o objeto FileDTO . O FileDTO inclui o nome do arquivo e a URL pública para acessar o arquivo.
  • Para URLs, use uma lista de cadeias de caracteres para representar URLs disponíveis publicamente.

Chame o método create e, em seguida, passe o ID da operação retornada para o método Operations.getDetails para pesquisar o status.

A linha final do código a seguir retorna o ID da base de dados de conhecimento da resposta de MonitorOperation.

def create_kb(client):
    print ("Creating knowledge base...")

    qna1 = QnADTO(
        answer="Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        questions=["How do I manage my knowledgebase?"],
        metadata=[
            MetadataDTO(name="Category", value="api"),
            MetadataDTO(name="Language", value="REST"),
        ]
    )

    qna2 = QnADTO(
        answer="Yes, You can use our [Python SDK](https://pypi.org/project/azure-cognitiveservices-knowledge-qnamaker/) with the [Python Reference Docs](https://docs.microsoft.com/python/api/azure-cognitiveservices-knowledge-qnamaker/azure.cognitiveservices.knowledge.qnamaker?view=azure-python) to manage your knowledge base.",
        questions=["Can I program with Python?"],
        metadata=[
            MetadataDTO(name="Category", value="api"),
            MetadataDTO(name="Language", value="Python"),
        ]
    )

    urls = []
    files = [
        FileDTO(
            file_name = "structured.docx",
            file_uri = "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/qna-maker/data-source-formats/structured.docx"
        )]

    create_kb_dto = CreateKbDTO(
        name="QnA Maker Python SDK Quickstart",
        qna_list=[
            qna1,
            qna2
        ],
        urls=urls,
        files=[],
        enable_hierarchical_extraction=True,
        default_answer_used_for_extraction="No answer found.",
        language="English"
    )
    create_op = client.knowledgebase.create(create_kb_payload=create_kb_dto)

    create_op_monitor = _monitor_operation(client=client, operation=create_op)

    # Get knowledge base ID from resourceLocation HTTP header
    knowledge_base_ID = create_op_monitor.resource_location.replace("/knowledgebases/", "")
    print("Created KB with ID: {}".format(knowledge_base_ID))

    return knowledge_base_ID

Certifique-se de incluir a _monitor_operation função, referenciada no código acima, para criar com êxito uma base de dados de conhecimento.

Atualizar uma base de dados de conhecimento

Você pode atualizar uma base de dados de conhecimento passando a ID da base de dados de conhecimento e um UpdateKbOperationDTO contendo adicionar, atualizar e excluir objetos DTO para o método de atualização . Use o método Operation.getDetail para determinar se a atualização foi bem-sucedida.

def update_kb(client, kb_id):
    print ("Updating knowledge base...")

    qna3 = QnADTO(
        answer="goodbye",
        questions=[
            "bye",
            "end",
            "stop",
            "quit",
            "done"
            ],
        metadata=[
            MetadataDTO(name="Category", value="Chitchat"),
            MetadataDTO(name="Chitchat", value="end"),
        ]
    )

    qna4 = QnADTO(
        answer="Hello, please select from the list of questions or enter a new question to continue.",
        questions=[
            "hello",
            "hi",
            "start"
        ],
        metadata=[
            MetadataDTO(name="Category", value="Chitchat"),
            MetadataDTO(name="Chitchat", value="begin"),
        ],
        context = QnADTOContext(

            is_context_only = False,
            prompts = [

                PromptDTO(
                    display_order =1,
                    display_text= "Use REST",
                    qna_id=1

                ),
                PromptDTO(
                    display_order =2,
                    display_text= "Use .NET NuGet package",
                    qna_id=2
                ),
            ]
        )

    )

    urls = [
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    ]



    update_kb_operation_dto = UpdateKbOperationDTO(
        add=UpdateKbOperationDTOAdd(
            qna_list=[
                qna3,
                qna4
            ],
            urls = urls,
            files=[]
        ),
        delete=None,
        update=None
    )
    update_op = client.knowledgebase.update(kb_id=kb_id, update_kb=update_kb_operation_dto)
    _monitor_operation(client=client, operation=update_op)
    print("Updated knowledge base.")

Certifique-se de incluir a _monitor_operation função, referenciada no código acima, para atualizar com êxito uma base de dados de conhecimento.

Transferir uma base de dados de conhecimento

Use o método de download para baixar o banco de dados como uma lista de QnADocumentsDTO. Isso não é equivalente à exportação do portal QnA Maker da página Configurações porque o resultado desse método não é um arquivo TSV.

def download_kb(client, kb_id):
    print("Downloading knowledge base...")
    kb_data = client.knowledgebase.download(kb_id=kb_id, environment="Prod")
    print("Downloaded knowledge base. It has {} QnAs.".format(len(kb_data.qna_documents)))

Publicar uma base de dados de conhecimento

Publique a base de dados de conhecimento usando o método publishing . Isso usa o modelo salvo e treinado atual, referenciado pelo ID da base de dados de conhecimento, e o publica em um ponto de extremidade.

def publish_kb(client, kb_id):
    print("Publishing knowledge base...")
    client.knowledgebase.publish(kb_id=kb_id)
    print("Published knowledge base.")

Consultar uma base de dados de conhecimento

Obter chave de tempo de execução de consulta

Depois que uma base de conhecimento é publicada, você precisa da chave de tempo de execução da consulta para consultar o tempo de execução. Essa não é a mesma chave usada para criar o objeto de cliente original.

Use o método EndpointKeysOperations.get_keys para obter a classe EndpointKeysDTO .

Use qualquer uma das propriedades de chave retornadas no objeto para consultar a base de conhecimento.

def getEndpointKeys_kb(client):
    print("Getting runtime endpoint keys...")
    keys = client.endpoint_keys.get_keys()
    print("Primary runtime endpoint key: {}.".format(keys.primary_endpoint_key))

    return keys.primary_endpoint_key

Autenticar o tempo de execução para gerar uma resposta

Crie um QnAMakerRuntimeClient para consultar a base de dados de conhecimento para gerar uma resposta ou treinar a partir da aprendizagem ativa.

runtimeClient = QnAMakerRuntimeClient(runtime_endpoint=runtime_endpoint, credentials=CognitiveServicesCredentials(queryRuntimeKey))

Use o QnAMakerRuntimeClient para obter uma resposta do conhecimento ou para enviar novas perguntas sugeridas para a base de conhecimento para aprendizagem ativa.

Gerar uma resposta a partir da base de dados de conhecimento

Gere uma resposta a partir de uma base de dados de conhecimento publicada usando o método QnAMakerRuntimeClient.runtime.generate_answer. Este método aceita o ID da base de dados de conhecimento e o QueryDTO. Acesse propriedades adicionais do QueryDTO, como Top e Context para usar em seu bot de chat.

def generate_answer(client, kb_id, runtimeKey):
    print ("Querying knowledge base...")

    authHeaderValue = "EndpointKey " + runtimeKey

    listSearchResults = client.runtime.generate_answer(kb_id, QueryDTO(question = "How do I manage my knowledgebase?"), dict(Authorization=authHeaderValue))

    for i in listSearchResults.answers:
        print(f"Answer ID: {i.id}.")
        print(f"Answer: {i.answer}.")
        print(f"Answer score: {i.score}.")

Este é um exemplo simples de consulta à base de dados de conhecimento. Para compreender os cenários de consulta avançada, reveja outros exemplos de consulta.

Eliminar uma base de dados de conhecimento

Exclua a base de dados de conhecimento usando o método delete com um parâmetro da ID da base de dados de conhecimento.

def delete_kb(client, kb_id):
    print("Deleting knowledge base...")
    client.knowledgebase.delete(kb_id=kb_id)
    print("Deleted knowledge base.")

Obter o status de uma operação

Alguns métodos, como criar e atualizar, podem levar tempo suficiente para que, em vez de esperar pela conclusão do processo, uma operação seja retornada. Use o ID da operação para sondar (com lógica de repetição) para determinar o status do método original.

A chamada setTimeout no bloco de código a seguir é usada para simular código assíncrono. Substitua isso pela lógica de repetição.

def _monitor_operation(client, operation):

    for i in range(20):
        if operation.operation_state in [OperationStateType.not_started, OperationStateType.running]:
            print("Waiting for operation: {} to complete.".format(operation.operation_id))
            time.sleep(5)
            operation = client.operations.get_details(operation_id=operation.operation_id)
        else:
            break
    if operation.operation_state != OperationStateType.succeeded:
        raise Exception("Operation {} failed to complete.".format(operation.operation_id))

    return operation

Executar a aplicação

Execute o aplicativo com o comando Python em seu arquivo de início rápido.

python quickstart-file.py

O código-fonte deste exemplo pode ser encontrado no GitHub.

Use a biblioteca de cliente do QnA Maker para Java para:

  • Criar uma base de conhecimento
  • Atualizar uma base de conhecimento
  • Publicar uma base de conhecimento
  • Obter chave de ponto de extremidade de tempo de execução de previsão
  • Aguarde uma tarefa de longa duração
  • Faça o download de uma base de conhecimento
  • Obtenha uma resposta de uma base de conhecimento
  • Excluir base de dados de conhecimento

Exemplos de pacotes | de código-fonte | da biblioteca

Nota

Novos recursos criados após 1º de julho de 2019 usarão nomes de subdomínio personalizados. Para obter mais informações e uma lista completa de pontos de extremidade regionais, consulte Nomes de subdomínio personalizados para serviços de IA do Azure.

Pré-requisitos

  • Subscrição do Azure - Criar uma gratuitamente
  • JDK
  • Depois de ter sua assinatura do Azure, crie um recurso do QnA Maker no portal do Azure para obter sua chave de criação e ponto de extremidade. Depois de implantar, selecione Ir para recurso.
    • Você precisará da chave e do ponto de extremidade do recurso criado para conectar seu aplicativo à API do QnA Maker. Cole sua chave e ponto de extremidade no código abaixo mais adiante no início rápido.
    • Você pode usar o nível de preço gratuito (F0) para experimentar o serviço e atualizar posteriormente para um nível pago para produção.

Configuração

Instalar as bibliotecas de cliente

Depois de instalar o Java, você pode instalar as bibliotecas de cliente usando o Maven a partir do repositório MVN.

Criar uma nova aplicação Java

Crie um novo arquivo com o nome quickstart.java e importe as seguintes bibliotecas.

/* Download the following files.
 * - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar
 * - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.pom
 * Move the downloaded .jar file to a folder named "lib" directly under the current folder.
 * Rename the downloaded file to pom.xml.
 * At the command line, run
 * mvn dependency:copy-dependencies
 * This will download the .jar files depended on by azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar to the folder "target/dependency" under the current folder. Move these .jar files to the "lib" folder as well.
 */
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.*;
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.models.*;

import java.io.*;
import java.lang.Object.*;
import java.time.format.DateTimeFormatter;  
import java.time.LocalDateTime; 
import java.util.*;
import java.net.*;

Crie variáveis para o ponto final e a chave do Azure do seu recurso.

  • Utilizamos a chave de subscrição e a chave de criação de forma intercambiável. Para obter mais detalhes sobre a chave de criação, siga Chaves no QnA Maker.

  • O valor de QNA_MAKER_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Chaves e Ponto de Extremidade , em Gerenciamento de recursos, para localizar a chave de Criação (Assinatura) e o QnA Maker Endpoint.

Ponto de extremidade de criação do QnA Maker

  • O valor de QNA_MAKER_RUNTIME_ENDPOINT tem o formato https://YOUR-RESOURCE-NAME.azurewebsites.net. Vá para o portal do Azure e localize o recurso QnA Maker que você criou nos pré-requisitos. Selecione a página Exportar modelo , em Automação para localizar o ponto de extremidade de tempo de execução.

Ponto de extremidade de tempo de execução do QnA Maker

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. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais informações.

private static String authoring_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
private static String authoring_endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
private static String runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Modelos de objeto

O QnA Maker usa dois modelos de objeto diferentes:

  • QnAMakerClient é o objeto para criar, gerenciar, publicar e baixar a base de conhecimento.
  • QnAMakerRuntime é o objeto para consultar a base de dados de conhecimento com a API GenerateAnswer e enviar novas perguntas sugeridas usando a API Train (como parte da aprendizagem ativa).

Usando este exemplo de base de dados de conhecimento

A base de conhecimento neste início rápido começa com 2 pares QnA conversacionais, isso é feito de propósito para simplificar o exemplo e ter Ids altamente previsíveis para usar no método Update, associando prompts de acompanhamento com perguntas a novos pares. Isso foi planejado e implementado em uma ordem específica para este início rápido.

Se você planeja desenvolver sua base de dados de conhecimento ao longo do tempo com prompts de acompanhamento que dependem de pares QnA existentes, você pode escolher:

  • Para bases de dados de conhecimento maiores, gerencie a base de dados de conhecimento em um editor de texto ou ferramenta TSV que ofereça suporte à automação e, em seguida, substitua completamente a base de conhecimento de uma só vez por uma atualização.
  • Para bases de conhecimento menores, gerencie os prompts de acompanhamento inteiramente no portal do QnA Maker.

Detalhes sobre os pares QnA usados neste guia de início rápido:

  • Tipos de par QnA - existem 2 tipos de pares QnA nesta base de conhecimento, após a atualização: chitchat e informações específicas do domínio. Isso é típico se sua base de conhecimento estiver vinculada a um aplicativo de conversação, como um chatbot.
  • Embora as respostas da base de conhecimento possam ser filtradas por metadados ou usar prompts de acompanhamento, este início rápido não mostra isso. Procure os exemplos de generateAnswer agnósticos de linguagem aqui.
  • O texto da resposta é markdown e pode conter uma grande variedade de markdown , como imagens (imagens baseadas na Internet disponíveis publicamente), links (para URLs disponíveis publicamente) e bullet points, este início rápido não usa essa variedade.

Modelo de objeto QnAMakerClient

O cliente QnA Maker de criação é um objeto QnAMakerClient que se autentica no Azure usando MsRest::ServiceClientCredentials, que contém sua chave.

Depois que o cliente for criado, use os métodos da propriedade Knowledgebases do cliente para criar, gerenciar e publicar sua base de dados de conhecimento.

Para operações imediatas, um método geralmente retorna o resultado, se houver. Para operações de longa duração, a resposta é um objeto Operation . Chame o método getDetails com o operation.operationId valor para determinar o status da solicitação.

Modelo de objeto QnAMakerRuntimeClient

O cliente QnA Maker de tempo de execução é um objeto QnAMakerRuntimeClient .

Depois de publicar sua base de dados de conhecimento usando o cliente de criação, use o método generateAnswer do cliente de tempo de execução para obter uma resposta da base de dados de conhecimento.

Você cria um cliente de tempo de execução chamando QnAMakerRuntimeManager.authenticate e passando uma chave de ponto de extremidade de tempo de execução. Para obter a chave do ponto de extremidade do tempo de execução, use o cliente de criação para chamar getKeys.

Autenticar o cliente para criar a base de dados de conhecimento

Instancie um cliente com seu ponto de extremidade de criação e chave de assinatura.

/* Note QnAMakerManager.authenticate() does not set the baseUrl paramater value
 * as the value for QnAMakerClient.endpoint, so we still need to call withEndpoint().
 */
QnAMakerClient authoring_client = QnAMakerManager.authenticate(authoring_key).withEndpoint(authoring_endpoint);
Knowledgebases kb_client = authoring_client.knowledgebases();
Operations ops_client = authoring_client.operations();
EndpointKeys keys_client = authoring_client.endpointKeys();

Criar uma base de dados de conhecimento

Uma base de dados de conhecimento armazena pares de perguntas e respostas para o objeto CreateKbDTO de três fontes:

  • Para conteúdo editorial, use o objeto QnADTO .
    • Para usar metadados e prompts de acompanhamento, use o contexto editorial, porque esses dados são adicionados no nível de par QnA individual.
  • Para arquivos, use o objeto FileDTO . O FileDTO inclui o nome do arquivo e a URL pública para acessar o arquivo.
  • Para URLs, use uma lista de cadeias de caracteres para representar URLs disponíveis publicamente.

Chame o método create e passe a operationId propriedade da operação retornada para o método getDetails para pesquisar o status.

A linha final do código a seguir retorna a ID da base de dados de conhecimento.

public String create_kb () throws Exception {
    System.out.println("Creating KB...");

    String name = "QnA Maker FAQ from quickstart";

    var metadata = new MetadataDTO()
        .withName ("Category")
        .withValue ("api");

    List<MetadataDTO> metadata_list = Arrays.asList(new MetadataDTO[]{ metadata });

    var qna = new QnADTO()
        .withAnswer ("You can use our REST APIs to manage your knowledge base.")
        .withQuestions ( Arrays.asList(new String[]{ "How do I manage my knowledgebase?" }))
        .withMetadata (metadata_list);

    List<QnADTO> qna_list = Arrays.asList(new QnADTO[]{ qna });

    var urls = Arrays.asList(new String[]{ "https://docs.microsoft.com/en-in/azure/cognitive-services/qnamaker/faqs" });

    var payload = new CreateKbDTO().withName(name).withQnaList(qna_list).withUrls(urls);

    var result = kb_client.create(payload);
    var kb_id = wait_for_operation(result);

    System.out.println("Created KB with ID: " + kb_id + ".\n");
    return kb_id;
}

Atualizar uma base de dados de conhecimento

Você pode atualizar uma base de dados de conhecimento chamando update e passando a ID da base de dados de conhecimento e um objeto UpdateKbOperationDTO . Esse objeto, por sua vez, pode conter:

Passe a operationId propriedade da operação retornada para o método getDetails para pesquisar o status.

public void update_kb (String kb_id) throws Exception {
    System.out.println("Updating KB...");

    var update = new UpdateKbOperationDTOUpdate().withName ("New KB name");

    var payload = new UpdateKbOperationDTO().withUpdate((UpdateKbOperationDTOUpdate)update);

    var result = kb_client.update(kb_id, payload);
    wait_for_operation(result);

    System.out.println("Updated KB.");
}

Transferir uma base de dados de conhecimento

Use o método de download para baixar o banco de dados como uma lista de QnADocumentsDTO. Isso não é equivalente à exportação do portal QnA Maker da página Configurações porque o resultado desse método não é um arquivo TSV.

public void download_kb(String kb_id) {
    System.out.println("Downloading KB...");

    var kb_data = kb_client.download(kb_id, EnvironmentType.PROD);
    System.out.println("KB Downloaded. It has " + kb_data.qnaDocuments().size() + " question/answer sets.");

    System.out.println("Downloaded KB.\n");
}

Publicar uma base de dados de conhecimento

Publique a base de dados de conhecimento usando o método publishing . Isso usa o modelo salvo e treinado atual, referenciado pelo ID da base de dados de conhecimento, e o publica em um ponto de extremidade.

public void publish_kb(String kb_id) {
    System.out.println("Publishing KB...");
    kb_client.publish(kb_id);
    System.out.println("KB published.\n");
}

Gerar uma resposta a partir da base de dados de conhecimento

Depois que uma base de dados de conhecimento é publicada, você precisa da chave de ponto de extremidade de tempo de execução para consultar a base de dados de conhecimento. Isso não é o mesmo que a chave de assinatura usada para criar o cliente de criação.

Use o método getKeys para obter um objeto EndpointKeysDTO .

Crie um cliente de tempo de execução chamando QnAMakerRuntimeManager.authenticate e passando uma chave de ponto de extremidade de tempo de execução do objeto EndpointKeysDTO.

Gere uma resposta a partir de uma base de dados de conhecimento publicada usando o método generateAnswer . Esse método aceita a ID da base de dados de conhecimento e um objeto QueryDTO .

public void query_kb(String kb_id) {
    System.out.println("Sending query to KB...");
    
    var runtime_key = keys_client.getKeys().primaryEndpointKey();
    QnAMakerRuntimeClient runtime_client = QnAMakerRuntimeManager.authenticate(runtime_key).withRuntimeEndpoint(runtime_endpoint);
    var query = (new QueryDTO()).withQuestion("How do I manage my knowledgebase?");
    var result = runtime_client.runtimes().generateAnswer(kb_id, query);
    System.out.println("Answers:");
    for (var answer : result.answers()) {
        System.out.println(answer.answer().toString());
    };
    System.out.println();
}

Este é um exemplo simples de consulta a uma base de dados de conhecimento. Para compreender os cenários de consulta avançada, reveja outros exemplos de consulta.

Eliminar uma base de dados de conhecimento

Exclua a base de dados de conhecimento usando o método delete com um parâmetro da ID da base de dados de conhecimento.

public void delete_kb(String kb_id) {
    System.out.println("Deleting KB...");
    kb_client.delete(kb_id);
    System.out.println("KB deleted.\n");
}

Obter o status de uma operação

Alguns métodos, como criar e atualizar, podem levar tempo suficiente para que, em vez de esperar pela conclusão do processo, uma operação seja retornada. Use o ID da operação para sondar (com lógica de repetição) para determinar o status do método original.

public String wait_for_operation(Operation op) throws Exception {
    System.out.println ("Waiting for operation to finish...");
    Boolean waiting = true;
    String result = "";
    while (true == waiting) {
        var op_ = ops_client.getDetails(op.operationId());
        var state = op_.operationState();
        if (OperationStateType.FAILED == state) {
            throw new Exception("Operation failed.");
        }
        if (OperationStateType.SUCCEEDED == state) {
            waiting = false;
            // Remove "/knowledgebases/" from the resource location.
            result = op_.resourceLocation().replace("/knowledgebases/", "");
        }
        if (true == waiting) {
            System.out.println("Waiting 10 seconds for operation to complete...");
            Thread.sleep(10000);
        }
    }
    return result;
}

Executar a aplicação

Aqui está o principal método para a aplicação.

    public static void main(String[] args) {
        try {
            Quickstart quickstart = new Quickstart();
            String kb_id = quickstart.create_kb();
//			quickstart.list_kbs();
            quickstart.update_kb(kb_id);
            quickstart.publish_kb(kb_id);
            quickstart.download_kb(kb_id);
            quickstart.query_kb(kb_id);
            quickstart.delete_kb(kb_id);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

Execute o aplicativo da seguinte maneira. Isso presume que seu nome de classe é Quickstart e suas dependências estão em uma subpasta nomeada lib abaixo da pasta atual.

javac Quickstart.java -cp .;lib\*
java -cp .;lib\* Quickstart

O código-fonte deste exemplo pode ser encontrado no GitHub.

Clean up resources (Limpar recursos)

Se quiser limpar e remover uma assinatura de serviços do Azure AI, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele.

Próximos passos