Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Nota
Você está procurando migrar suas cargas de trabalho do QnA Maker? Consulte nosso guia de migração para obter informações sobre comparações de recursos e etapas de migração.
Comece com a biblioteca de cliente de resposta a perguntas personalizadas. Siga estas etapas para instalar o pacote e experimentar o código de exemplo para tarefas básicas.
Você pode criar um projeto personalizado de resposta a perguntas a partir do seu próprio conteúdo, como perguntas frequentes ou manuais de produtos. Este artigo inclui um exemplo de criação de um projeto de resposta a perguntas personalizado a partir de um manual do produto, para responder a perguntas.
Pré-requisitos
- Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Um recurso de idioma com o recurso de resposta a perguntas personalizado habilitado. Lembre-se de sua ID do Microsoft Entra, Assinatura, nome do recurso de idioma que você selecionou quando criou o recurso.
Crie seu primeiro projeto personalizado de resposta a perguntas
Entre no Language Studio com suas credenciais do Azure.
Role para baixo até a seção Responder perguntas e selecione Abrir respostas personalizadas a perguntas.
Se o seu recurso ainda não estiver conectado à Pesquisa do Azure, selecione Conectar à Pesquisa do Azure. Isso abrirá uma nova guia do navegador para o painel de Funcionalidades do seu recurso no portal do Azure.
Selecione Habilitar resposta a perguntas personalizadas, escolha o recurso de Pesquisa do Azure ao qual vincular e selecione Aplicar.
Regresse ao separador Language Studio. Talvez seja necessário atualizar esta página para que ela registre a alteração no seu recurso. Selecione Criar novo projeto.
Escolha a opção >, selecione Inglês> Selecione Avançar.
Insira um nome de projeto de Sample-project, uma descrição de Meu primeiro projeto de resposta a perguntas e deixe a resposta padrão com a configuração "Nenhuma resposta encontrada".
Reveja as suas escolhas e selecione Criar projeto
Na página Gerenciar códigos-fonte, selecione Adicionar URLs de>.
Selecione Adicionar url , insira os seguintes valores e, em seguida, selecione Adicionar tudo:
Nome do URL Valor do URL Manual do Utilizador do Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf O processo de extração leva alguns minutos para ler o documento e identificar perguntas e respostas.
Depois de adicionar com êxito a fonte, você pode editar o conteúdo da fonte para adicionar mais conjuntos de respostas de perguntas personalizadas.
Teste o seu projeto
Selecione o link para a sua fonte, isso abrirá a página do projeto de edição.
Selecione Test na barra de menus. Introduza a pergunta Como configuro o meu Surface Book?. Uma resposta será gerada com base nos pares de respostas à pergunta que foram automaticamente identificados e extraídos do URL de origem:
Se você marcar a caixa para incluir resposta curta, você também verá uma resposta precisa, se disponível, juntamente com a passagem da resposta no painel de teste quando fizer uma pergunta.
Selecione Inspecionar para analisar a resposta de forma mais detalhada. A janela de teste é usada para testar as alterações no projeto antes de implantá-lo.
Na interface Inspecionar, você pode ver o nível de confiança de que essa resposta responderá à pergunta e editará diretamente um determinado par de perguntas e respostas.
Implante seu projeto
Selecione o ícone Implantar projeto para entrar no menu implantar projeto.
Quando você implanta um projeto, o conteúdo do seu projeto é movido do
test
índice para umprod
índice na Pesquisa do Azure.Selecione Implantar> e, quando solicitado, selecione Implantar novamente.
Seu projeto agora foi implantado com êxito. Pode usar o endpoint para responder a perguntas no seu próprio aplicativo personalizado ou num bot.
Pré-requisitos
- A versão atual do cURL. Várias opções de linha de comando são usadas nos inícios rápidos, que são anotados 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ê precisará da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código abaixo mais adiante no início rápido.
- Para criar um recurso de idioma com a CLI do Azure, forneça as seguintes propriedades adicionais:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- Um projeto existente para consultar. Se você não tiver configurado um projeto, você pode seguir as instruções no início rápido do Language Studio. 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, substituayour-key
por uma das chaves do seu recurso. - Para definir a variável de
LANGUAGE_ENDPOINT
ambiente, substituayour-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. Como alternativa, pode encontrar o valor em Language Studio>respostas a perguntas>Implantar projeto>Obter URL de previsão. Um exemplo de ponto de extremidade é: https://southcentralus.api.cognitive.microsoft.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. Sempre tendo duas chaves válidas sempre para rotação segura de chaves com zero tempo de inatividade. Como alternativa, você pode encontrar o valor em Language Studio>question answering>Implantar projeto>Obter URL de previsã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 .
production depende de ter implantado o seu projeto a partir do Language Studio>resposta a perguntas>Deploy project. |
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.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
Ao executar o código acima, se você estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta semelhante à seguinte:
{
"answers": [
{
"questions": [
"Check battery level"
],
"answer": "If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.",
"confidenceScore": 0.9185,
"id": 101,
"source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
"metadata": {},
"dialog": {
"isContextOnly": false,
"prompts": []
}
}
]
}
O confidenceScore
retorna um valor entre 0 e 1. Você pode pensar nisso como uma porcentagem e multiplicar por 100, então uma pontuação de confiança de 0,9185 significa que a resposta personalizada à pergunta está 91,85% confiante de que esta é a resposta correta para a pergunta com base no projeto.
Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, 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.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
Como sabemos, pela execução anterior do código, que nossa pontuação de confiança é: .9185
definir o limite para .95
resultará no retorno da resposta padrão.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
Consultar texto sem um projeto
Você também pode usar 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.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'
Este exemplo retornará um resultado de:
{
"answers": [
{
"answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.9118788838386536,
"id": "doc1",
"answerSpan": {
"text": "two to four hours",
"confidenceScore": 0.9850527,
"offset": 27,
"length": 18
},
"offset": 0,
"length": 243
},
{
"answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.052793052047491074,
"id": "doc1",
"answerSpan": {
"text": "longer",
"confidenceScore": 0.6694634,
"offset": 11,
"length": 7
},
"offset": 109,
"length": 134
},
{
"answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
"confidenceScore": 0.017600709572434425,
"id": "doc2",
"answerSpan": {
"text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
"confidenceScore": 0.1544854,
"offset": 15,
"length": 165
},
"offset": 0,
"length": 280
}
]
}
Use este 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ência | Pacote (NuGet) | Exemplos adicionais | 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 de linguagem com a funcionalidade de resposta a perguntas personalizadas ativada para gerar uma chave de API e um ponto de extremidade.
- Após o recurso de idioma ser implantado, selecione Ir para o recurso. Você precisará da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código abaixo mais adiante no início rápido.
- Para criar um recurso de idioma com a CLI do Azure, forneça as seguintes propriedades adicionais:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- Um projeto existente para consultar. Se você não configurou um projeto, você pode seguir as instruções no início rápido do Language Studio. 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, substituayour-key
por uma das chaves do seu recurso. - Para definir a variável de
LANGUAGE_ENDPOINT
ambiente, substituayour-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 abaixo permitirá que você consulte um projeto usando GetAnswers
para obter uma resposta à sua pergunta.
Você precisará atualizar o código abaixo e fornecer seus próprios valores para as variáveis a seguir.
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. Como alternativa, pode encontrar o valor em Language Studio>question answering>Implantar projeto>Obter URL de previsão. Um exemplo de ponto de extremidade é: https://southcentralus.api.cognitive.microsoft.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 rotação segura de chaves sem tempo de inatividade. Como alternativa, pode encontrar o valor no Language Studio>question answering>Implantar projeto>Obter URL de previsã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 .
production depende de ter implantado o seu projeto a partir do Language Studio>de perguntas e respostas>Implantar projeto. |
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.
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
com o código acima 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 terá a seguinte aparência:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Para obter informações sobre o quão confiante é a resposta à pergunta personalizada sobre se esta é a resposta correta, adicione uma declaração print adicional abaixo das declarações print existentes.
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
Se você executar dotnet run
novamente, você receberá um resultado com uma pontuação de confiança:
Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)
A pontuação de confiança retorna um valor entre 0 e 1. Você pode pensar nisso como uma porcentagem e multiplicar por 100, então uma pontuação de confiança de 0,9185 significa que a resposta personalizada à pergunta está 91,85% confiante de que esta é a resposta correta para a pergunta com base no 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
Como sabemos, pela execução anterior do código, que nossa pontuação de confiança é: .9185
definir o limite para .95
resultará no retorno da resposta padrão.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
Consultar texto sem um projeto
Você também pode usar perguntas personalizadas e respostas sem um projeto com GetAnswersFromText
. Nesse caso, você fornece respostas personalizadas a perguntas com uma pergunta e os registros de texto associados que você gostaria de procurar 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}.api.cognitive.microsoft.com/");
AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
IEnumerable<TextDocument> records = new[]
{
new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
};
AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);
foreach (TextAnswer answer in response.Value.Answers)
{
if (answer.Confidence > .9)
{
string BestAnswer = response.Value.Answers[0].Answer;
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine($"A:{BestAnswer}");
Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy.
break;
}
else
{
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine("No answers met the requested confidence score.");
break;
}
}
}
}
}
Para executar o código acima, substitua o Program.cs
pelo conteúdo do bloco de script acima e modifique as 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 | adicionaisCódigo fonte da biblioteca
Pré-requisitos
- Subscrição do Azure - Criar uma gratuitamente
- Python 3.x
- A resposta a perguntas personalizadas requer um recurso de linguagem com a função ativada de resposta a perguntas personalizadas para gerar uma chave de API e um ponto de extremidade.
- Após o recurso de idioma ser implantado, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole a sua chave e o endpoint no código abaixo posteriormente no guia de início rápido.
- Para criar um recurso de idioma com a CLI do Azure, forneça as seguintes outras propriedades:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- Um projeto existente para consultar. Se você não configurou um projeto, você pode seguir as instruções no início rápido do Language Studio. 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 abaixo permitirá que você consulte um projeto usando get_answers para obter uma resposta à sua pergunta. Você pode copiar esse código em um arquivo de .py dedicado ou em uma célula no Jupyter Notebook/Lab.
Você precisa atualizar o código abaixo 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. Como alternativa, pode encontrar o valor em Language Studio>perguntas e respostas>Implementar projeto>Obter a URL de previsão. Um exemplo de ponto de extremidade é: https://southcentralus.api.cognitive.microsoft.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. Sempre tendo duas chaves válidas sempre para rotação segura de chaves com zero tempo de inatividade. Como alternativa, pode encontrar o valor em Language Studio>, na secção de respostas a perguntas>, em Implementar projeto> e depois em Obter URL de previsã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 depende de teres implementado o teu projeto a partir da funcionalidade de Language Studio>question answering>Implementar projeto. |
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 o artigo de segurança dos serviços de IA do Azure.
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How much battery life do I have left?"
output = client.get_answers(
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
if __name__ == '__main__':
main()
Enquanto estamos 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 acima, se estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta semelhante à seguinte:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Para obter informações sobre a confiança da resposta personalizada à pergunta como sendo a correta, adicione outra instrução de impressão abaixo das instruções de impressão existentes:
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
Agora você receberá um resultado com uma pontuação de confiança:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185
A pontuação de confiança retorna um valor entre 0 e 1. Você pode pensar nisso como uma porcentagem e multiplicar por 100, então uma pontuação de confiança de 0,9185 significa que a resposta personalizada à pergunta está 91,85% confiante de que esta é a resposta correta para a pergunta com base no projeto.
Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, 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, você fornece uma resposta personalizada a uma pergunta, incluindo os registros de texto associados, nos quais gostaria de procurar uma resposta assim que a solicitação for 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}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How long does it takes to charge a surface?"
input = qna.AnswersFromTextOptions(
question=question,
text_documents=[
"Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
]
)
output = client.get_answers_from_text(input)
best_answer = [a for a in output.answers if a.confidence > 0.9][0]
print(u"Q: {}".format(input.question))
print(u"A: {}".format(best_answer.answer))
print("Confidence Score: {}".format(output.answers[0].confidence))
if __name__ == '__main__':
main()
Você pode copiar esse código em um arquivo .py dedicado ou em uma nova célula 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
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.
Explorar a API REST
Para saber mais sobre como automatizar seu pipeline de resposta a perguntas personalizadas, consulte a documentação da API REST. Atualmente, a funcionalidade de criação só está disponível por meio da API REST:
- Referência da API de autoria
- Exemplos de cURL da API de autoria
- Referência da API de tempo de execução