Guia de início rápido: respostas personalizadas a perguntas
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 no painel Recursos 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 Quero definir o idioma para todos os projetos criados neste recurso>, selecione Inglês> Selecione Avançar.
Insira um nome de projeto de Exemplo-projeto, uma descrição de Meu projeto de resposta à primeira pergunta e deixe a resposta padrão com uma configuração Nenhuma resposta encontrada.
Reveja as suas escolhas e selecione Criar projeto
Na página Gerenciar códigos-fonte, selecione Adicionar URLs de origem>.
Selecione Adicionar url , insira os seguintes valores e, em seguida, selecione Adicionar tudo:
Nome do URL Valor do URL Surface Book Manual do Utilizador 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 Testar na barra > de menus Introduza a pergunta Como posso configurar o meu livro de superfícies?. 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. Você pode usar o ponto de extremidade para responder a perguntas em seu próprio aplicativo personalizado para responder ou em um 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 de idioma com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
- Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você 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
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
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, você pode encontrar o valor na pergunta do Language Studio>respondendo>a 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 na pergunta do Language Studio>respondendo>a 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 você ter implantado seu projeto a partir da pergunta do Language Studio>respondendo ao>projeto Deploy. |
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 -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
. Nesse caso, você fornece a resposta à pergunta 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 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 idioma com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
- Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você 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
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
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, você pode encontrar o valor na pergunta do Language Studio>respondendo>a 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. 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 na pergunta do Language Studio>respondendo>a 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 você ter implantado seu projeto a partir da pergunta do Language Studio>respondendo ao>projeto Deploy. |
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 personalizada à pergunta de que esta é a resposta correta, adicione uma instrução de impressão adicional abaixo das instruções de impressão existentes:
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
Se você executar dotnet run
novamente, 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 fica abaixo de um determinado limite, use AnswerOptions
para adicionar o ConfidenceScoreThreshold
estabelecimento.
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 a resposta personalizada a perguntas sem um projeto com GetAnswersFromText
o . 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
o .
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 de documentação | de referência (PyPI) | Exemplos | adicionais Código fonte da biblioteca
Pré-requisitos
- Subscrição do Azure - Criar uma gratuitamente
- Python 3.x
- A resposta a perguntas personalizadas requer um recurso de idioma com o recurso de resposta a perguntas personalizado habilitado para gerar uma chave de API e um ponto de extremidade.
- Depois que o recurso de idioma for implantado, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole 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 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, você pode encontrar o valor na pergunta do Language Studio>respondendo>a 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. 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 na pergunta do Language Studio>respondendo>a Implantar projeto>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 à pergunta. |
deployment |
Há dois valores possíveis: test , e production . production depende de você ter implantado seu projeto a partir da pergunta do Language Studio>respondendo ao>projeto Deploy. |
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 o quão confiante é a resposta personalizada à pergunta de que esta é a resposta 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 de perguntas personalizadas sem um projeto com get_answers_from_text. 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
.
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.
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.
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 criação
- Exemplos de cURL da API de criação
- Referência da API de tempo de execução