Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este início rápido guia-o pelos passos essenciais necessários para criar, testar e implementar um projeto personalizado de resposta a perguntas (CQA) no Microsoft Foundry. Quer esteja a fazer a transição do Language Studio ou a começar do zero, este guia de início rápido é para si. Ele fornece instruções claras e acionáveis para alcançar uma implantação de projeto CQA rápida e bem-sucedida.
Nota
- Se já tem uma Linguagem Azure nas Foundry Tools ou um recurso multi-serviço — seja usado isoladamente ou através do Language Studio — pode continuar a usar esses recursos existentes dentro do portal Foundry. Para mais informações, consulte Como usar as Ferramentas de Fundição no portal da Fundição.
- Recomendamos vivamente que utilize um recurso do Foundry no Foundry; no entanto, também pode seguir estas instruções usando um recurso de linguagem.
Pré-requisitos
Antes de começar, você precisa dos seguintes recursos e permissões:
- Uma assinatura ativa do Azure. Se você não tiver um, crie um gratuitamente.
- Permissões necessárias. Certifique-se de que a pessoa que cria a conta e o projeto tem a função de Proprietário da Conta do Azure AI atribuída ao nível da subscrição. Como alternativa, ter a função de Colaborador ou Colaborador de Serviços Cognitivos no escopo da assinatura também atende a esse requisito. Para obter mais informações, consulteControle de acesso baseado em função (RBAC).
- Um recurso da Foundry ou um recurso linguístico.
- Um recurso de Pesquisa de IA do Azure (necessário para acessar o CQA). Para mais informações sobre como ligar o seu recurso Azure AI Search, consulteConfigurar ligações no Foundry
- Um projeto de fundição criado na fundição. Para mais informações, consulteo projeto Criar uma Fundição.
Introdução
Navega até à Fundição.
Se você ainda não estiver conectado, o portal solicitará que você faça isso com suas credenciais do Azure.
Depois de iniciar sessão, pode criar ou aceder aos seus projetos existentes dentro do Foundry.
Se você ainda não estiver no seu projeto para esta tarefa, selecione-o.
Crie sua tarefa de ajuste fino do CQA
Na Foundry, uma tarefa de ajuste fino serve como o seu ambiente de trabalho para as suas soluções CQA. Anteriormente, uma tarefa de ajuste fino era chamada de projeto CQA. Você pode encontrar ambos os termos usados indistintamente na documentação mais antiga do CQA.
Depois de selecionar o projeto Foundry para este início rápido, selecione ajuste fino no menu de navegação à esquerda.
Na janela principal, selecione a guia Ajuste fino do Serviço AI e, em seguida, o botão + Ajustar.
Na janela Criar ajuste fino do serviço , escolha a guia Resposta personalizada à pergunta e selecione Avançar.
Selecione seu recurso Connected Azure AI Search na janela de tarefas Criar ajuste fino do CQA . Para obter mais informações, consulteConfigurar conexões de recursos do Azure.
Em seguida, preencha os campos Nome e Idioma . Para este projeto, você pode deixar o campo Resposta padrão quando nenhuma resposta for retornada como está (Nenhuma resposta encontrada).
Selecione o botão Criar.
Adicionar uma fonte da base de dados de conhecimento CQA
Uma base de conhecimento CQA é um conjunto estruturado de pares de perguntas e respostas otimizados para IA conversacional. A base de conhecimento usa processamento de linguagem natural para interpretar consultas do usuário e retornar respostas precisas e sensíveis ao contexto de um conjunto de dados específico.
No menu Introdução , selecione Gerenciar fontes.
Na janela principal, selecione o menu suspenso + Adicionar fonte .
No menu suspenso, você pode selecionar Adicionar bate-papo, Adicionar URLs ou Adicionar arquivos.
Para este projeto, vamos escolher Adicionar chitchat.
Na janela Adicionar nova fonte , vamos escolher Amigável.
Por fim, selecione Adicionar. Pode levar alguns minutos para que a fonte seja criada.
Uma vez criada, a fonte é listada na janela Gerenciar fontes .
Teste a sua base de conhecimento
Selecione Testar base de dados de conhecimento no menu Introdução .
Digite o seguinte no campo Digite sua pergunta e selecione Executar.
Hello! How are you doing today?Na interface de inspeção, você pode revisar o nível de confiança da resposta e escolher a resposta mais adequada.
Implante sua base de dados de conhecimento
Implantar uma base de conhecimento CQA significa publicar seu conteúdo de perguntas e respostas selecionado como um ponto de extremidade ao vivo e pesquisável. Esse processo move seu projeto de uma fase de teste para um ambiente de produção, permitindo que os aplicativos clientes o usem para vários projetos e soluções, incluindo chatbots.
Quando a inspeção estiver concluída, escolha a seção Implantar base de dados de conhecimento no menu Introdução .
Selecione o botão Implantar primeiro na janela principal da base de dados de conhecimento Implantar e, em seguida, na janela pop-up Implantar este projeto . Leva alguns minutos para implantar.
Após a conclusão da implantação, seu projeto implantado é listado na janela Implantar base de dados de conhecimento .
É isso! Sua base de conhecimento CQA (Custom Question Answering) fornece uma interface de linguagem natural para seus dados, permitindo que os usuários interajam com as informações de forma conversacional. Ao implantar essa solução, você pode criar chatbots avançados e agentes interativos que compreendem as perguntas do usuário, fornecem respostas precisas e se ajustam às mudanças nos requisitos informativos.
Pré-requisitos
- A versão atual do cURL. Várias opções de linha de comando são usadas nas instruções rápidas, que estão mencionadas na documentação do cURL.
- Subscrição do Azure - Criar uma gratuitamente
- A resposta a perguntas personalizadas requer um recurso linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
- Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
- Crie um recurso de idioma com a CLI do Azure e forneça as seguintes propriedades:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - Um projeto existente para consultar. Se ainda não configuraste um projeto, podes seguir as instruções no quickstart do Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.
Configuração
Criar variáveis de ambiente
Seu aplicativo deve ser autenticado para enviar solicitações de API. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Neste exemplo, você gravará suas credenciais em variáveis de ambiente na máquina local que executa o aplicativo.
Para definir a variável de ambiente para sua chave de recurso de idioma, abra uma janela de console e siga as instruções para seu sistema operacional e ambiente de desenvolvimento.
- Para definir a
LANGUAGE_KEYvariável de ambiente, substituayour-keypor uma das chaves do seu recurso. - Para definir a variável de
LANGUAGE_ENDPOINTambiente, substituayour-endpointpelo ponto de extremidade do seu recurso.
Importante
Recomendamos a autenticação do Microsoft Entra ID com identidades gerenciadas para recursos do Azure para evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.
Use chaves de API com cuidado. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança no Cofre de Chaves do Azure, gire as chaves regularmente e restrinja o acesso ao Cofre de Chaves do Azure usando controle de acesso baseado em função e restrições de acesso à rede. Para obter mais informações sobre como usar chaves de API com segurança em seus aplicativos, consulte Chaves de API com o Cofre de Chaves do Azure.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Nota
Se você só precisar acessar as variáveis de ambiente no console em execução atual, poderá definir a variável de ambiente com set em vez de setx.
Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão ler as variáveis de ambiente, incluindo a janela do console. Por exemplo, se você estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.
Consultar um projeto
Gerar uma resposta a partir de um projeto
Para consultar um projeto de resposta a perguntas personalizado com as APIs REST e cURL, você precisa das seguintes informações:
| Nome da variável | Valor |
|---|---|
Endpoint |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/ |
API-Key |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves sem interrupção. O valor da chave faz parte da solicitação de exemplo. |
Project |
O nome do seu projeto de resposta a perguntas personalizadas. |
Deployment |
Há dois valores possíveis: test, e production. |
O comando cURL é executado a partir de um shell BASH. Edite este comando com o seu próprio nome do recurso, a sua chave do recurso, os valores JSON e o tamanho do JSON.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?"
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta com a seguinte aparência:
{
"answers": [
{
"questions": [
"Check battery level"
],
"answer": "If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.",
"confidenceScore": 0.9185,
"id": 101,
"source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
"metadata": {},
"dialog": {
"isContextOnly": false,
"prompts": []
}
}
]
}
O confidenceScore retorna um valor entre 0 e 1. Considere o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 91,85% confiante de que sua resposta está correta com base nas informações do projeto.
Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, você pode adicionar o confidenceScoreThreshold parâmetro.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?",
"confidenceScoreThreshold": "0.95",
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
Uma vez que sabemos, pela nossa execução anterior do código, que a nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
Consultar texto sem um projeto
Você também pode usar a resposta a perguntas personalizada sem um projeto com a API REST de resposta a perguntas personalizada pré-criada, que é chamada via query-text. No caso em questão, forneces tanto a pergunta quanto os registos de texto associados nos quais gostarias de procurar uma resposta, no momento em que a solicitação é enviada.
Neste exemplo, você só precisa modificar as variáveis para API KEY e ENDPOINT.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com/language/:query-text?&api-version=2021-10-01'
Este exemplo retorna um resultado de:
{
"answers": [
{
"answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.9118788838386536,
"id": "doc1",
"answerSpan": {
"text": "two to four hours",
"confidenceScore": 0.9850527,
"offset": 27,
"length": 18
},
"offset": 0,
"length": 243
},
{
"answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.052793052047491074,
"id": "doc1",
"answerSpan": {
"text": "longer",
"confidenceScore": 0.6694634,
"offset": 11,
"length": 7
},
"offset": 109,
"length": 134
},
{
"answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
"confidenceScore": 0.017600709572434425,
"id": "doc2",
"answerSpan": {
"text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
"confidenceScore": 0.1544854,
"offset": 15,
"length": 165
},
"offset": 0,
"length": 280
}
]
}
Use este guia de início rápido para a biblioteca de cliente de resposta a perguntas personalizadas para .NET para:
- Obtenha uma resposta de um projeto.
- Obtenha uma resposta a partir de um corpo de texto que envia juntamente com a sua pergunta.
- Obtenha a pontuação de confiança para a resposta à sua pergunta.
Documentação | de referênciaPacote (NuGet) | Amostras | Código fonte da biblioteca
Pré-requisitos
- Subscrição do Azure - Criar uma gratuitamente
- O IDE do Visual Studio ou a versão atual do .NET Core.
- A resposta a perguntas personalizadas requer um recurso linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
- Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
- Crie um recurso de idioma com a CLI do Azure e forneça as seguintes propriedades:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - Um projeto existente para consultar. Se não tiver um projeto, pode seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.
Configuração
Criar variáveis de ambiente
Seu aplicativo deve ser autenticado para enviar solicitações de API. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Neste exemplo, você gravará suas credenciais em variáveis de ambiente na máquina local que executa o aplicativo.
Para definir a variável de ambiente para sua chave de recurso de idioma, abra uma janela de console e siga as instruções para seu sistema operacional e ambiente de desenvolvimento.
- Para definir a
LANGUAGE_KEYvariável de ambiente, substituayour-keypor uma das chaves do seu recurso. - Para definir a variável de
LANGUAGE_ENDPOINTambiente, substituayour-endpointpelo ponto de extremidade do seu recurso.
Importante
Recomendamos a autenticação do Microsoft Entra ID com identidades gerenciadas para recursos do Azure para evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.
Use chaves de API com cuidado. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente. Se estiver usando chaves de API, armazene-as com segurança no Cofre de Chaves do Azure, gire as chaves regularmente e restrinja o acesso ao Cofre de Chaves do Azure usando controle de acesso baseado em função e restrições de acesso à rede. Para obter mais informações sobre como usar chaves de API com segurança em seus aplicativos, consulte Chaves de API com o Cofre de Chaves do Azure.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Nota
Se você só precisar acessar as variáveis de ambiente no console em execução atual, poderá definir a variável de ambiente com set em vez de setx.
Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão ler as variáveis de ambiente, incluindo a janela do console. Por exemplo, se você estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.
CLI
Em uma janela de console (como cmd, PowerShell ou Bash), use o dotnet new comando para criar um novo aplicativo de console com o nome question-answering-quickstart. Este comando cria um projeto C# "Hello World" simples com um único arquivo de origem: program.cs.
dotnet new console -n question-answering-quickstart
Altere seu diretório para a pasta do aplicativo recém-criada. Você pode criar o aplicativo com:
dotnet build
A saída da compilação não deve conter avisos ou erros.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Dentro do diretório do aplicativo, instale a biblioteca de cliente de resposta a perguntas personalizada para .NET com o seguinte comando:
dotnet add package Azure.AI.Language.QuestionAnswering
Consultar um projeto
Gerar uma resposta a partir de um projeto
O exemplo a seguir permite que você consulte um projeto usando GetAnswers para obter uma resposta à sua pergunta.
Você precisa atualizar o código e fornecer seus próprios valores para as seguintes variáveis:
| Nome da variável | Valor |
|---|---|
endpoint |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/ |
credential |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves sem interrupção. O valor da chave faz parte da solicitação de exemplo. |
projectName |
O nome do seu projeto de resposta a perguntas personalizadas. |
deploymentName |
Há dois valores possíveis: test, e production. |
Importante
Lembre-se de remover a chave do seu código quando terminar e nunca publicá-la publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações, consulte Segurança das Ferramentas de Fundição.
No diretório do projeto, abra o arquivo program.cs e substitua pelo seguinte código:
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
namespace question_answering
{
class Program
{
static void Main(string[] args)
{
// This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
string projectName = "{YOUR-PROJECT-NAME}";
string deploymentName = "production";
string question = "How long should my Surface battery last?";
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
Response<AnswersResult> response = client.GetAnswers(question, project);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
}
}
}
}
Enquanto estamos codificando as variáveis para o nosso exemplo. Para produção, considere usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o cofre de chaves do Azure fornece armazenamento seguro de chaves.
Após atualização Program.cs e substituição nos valores corretos das variáveis. Execute o aplicativo com o dotnet run comando do diretório do aplicativo.
dotnet run
A resposta tem a seguinte aparência:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Para obter informações sobre pontuações de confiança, adicione a seguinte instrução de impressão abaixo das instruções de impressão existentes:
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
Se você executar dotnet run novamente, receberá um resultado com uma pontuação de confiança:
Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)
Considere o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 91,85% confiante de que sua resposta está correta com base nas informações do projeto.
Se quiser excluir respostas em que a pontuação de confiança fique abaixo de um determinado limite, use AnswerOptions para adicionar a ConfidenceScoreThreshold propriedade.
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line
Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter
Uma vez que sabemos, pela nossa execução anterior do código, que a nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
Consultar texto sem um projeto
Você também pode usar perguntas personalizadas e respostas sem um projeto com GetAnswersFromText. Nesse caso, fornece-se respostas personalizadas a perguntas, com uma pergunta e os registos de texto associados que deseja procurar para obter uma resposta no momento em que a solicitação é enviada.
Neste exemplo, você só precisa modificar as variáveis para endpoint e credential.
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;
namespace questionansweringcsharp
{
class Program
{
static void Main(string[] args)
{
Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
IEnumerable<TextDocument> records = new[]
{
new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
};
AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);
foreach (TextAnswer answer in response.Value.Answers)
{
if (answer.Confidence > .9)
{
string BestAnswer = response.Value.Answers[0].Answer;
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine($"A:{BestAnswer}");
Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy.
break;
}
else
{
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine("No answers met the requested confidence score.");
break;
}
}
}
}
}
Para executar o código, substitua o Program.cs pelo conteúdo do bloco de script e modifique as endpoint variáveis e credential para corresponder ao recurso de linguagem que você criou como parte dos pré-requisitos.
Neste caso, repetimos todas as respostas e só retornamos a resposta com a maior pontuação de confiança superior a 0,9. Para entender mais sobre as opções disponíveis com GetAnswersFromText.
Use este início rápido para a biblioteca de cliente de resposta a perguntas personalizada para Python para:
- Obtenha uma resposta de um projeto.
- Obtenha uma resposta a partir de um corpo de texto que envia juntamente com a sua pergunta.
- Obtenha a pontuação de confiança para a resposta à sua pergunta.
Pacote (PyPI) | Amostras | Código fonte da biblioteca
Pré-requisitos
- Subscrição do Azure - Criar uma gratuitamente
- Python 3.x
- A resposta a perguntas personalizadas requer um recurso linguístico com a funcionalidade de resposta a perguntas personalizada ativada para gerar uma chave de API e um ponto de acesso.
- Após a implantação do recurso de idioma, selecione Ir para o recurso. Você precisa da chave e do ponto de extremidade do recurso criado para se conectar à API. Cole sua chave e ponto de extremidade no código mais tarde no início rápido.
- Crie um recurso de idioma com a CLI do Azure e forneça as seguintes propriedades:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - Um projeto existente para consultar. Se não tiver um projeto, pode seguir as instruções no início rápido do Microsoft Foundry. Ou adicione um projeto que utilize este URL do Guia do Utilizador do Surface como origem de dados.
Configuração
Instalar a biblioteca de cliente
Depois de instalar o Python, pode instalar a biblioteca de cliente com:
pip install azure-ai-language-questionanswering
Consultar um projeto
Gerar uma resposta a partir de um projeto
O exemplo permite que você consulte um projeto usando get_answers para obter uma resposta à sua pergunta. Você pode copiar esse código em um arquivo de .py dedicado ou em uma célula no Jupyter Notebook/Lab.
Você precisa atualizar o código e fornecer seus próprios valores para as seguintes variáveis.
| Nome da variável | Valor |
|---|---|
endpoint |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Um exemplo de ponto de extremidade é: https://southcentralus.cognitiveservices.azure.com/ |
credential |
Este valor pode ser encontrado na secção Chaves e Ponto Final ao examinar o recurso no portal do Azure. Você pode usar Key1 ou Key2. Ter sempre duas chaves válidas para uma troca segura de chaves sem interrupção. O valor da chave faz parte da solicitação de exemplo. |
knowledge_base_project |
O nome do seu projeto de resposta a perguntas. |
deployment |
Há dois valores possíveis: test, e production.
production. |
Importante
Lembre-se de remover a chave do seu código quando terminar e nunca publicá-la publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para mais informações, consulte o artigo sobre segurança da Foundry Tools.
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = "https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How much battery life do I have left?"
output = client.get_answers(
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
if __name__ == '__main__':
main()
Enquanto estamos codificando as variáveis para o nosso exemplo. Para produção, considere usar uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, o cofre de chaves do Azure fornece armazenamento seguro de chaves.
Quando você executa o código, se estiver usando a fonte de dados dos pré-requisitos, obterá uma resposta com a seguinte aparência:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Para obter informações sobre pontuações confiáveis, adicione as seguintes instruções impressas:
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
Você recebe um resultado com uma pontuação de confiança:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185
Considere o índice de confiança como uma porcentagem multiplicando-o por 100. Por exemplo, uma pontuação de confiança de 0,9185 indica que o sistema personalizado de resposta a perguntas é de 91,85% confiante de que sua resposta está correta com base nas informações do projeto.
Se quiser excluir respostas em que a pontuação de confiança fica abaixo de um determinado limite, você pode modificar as AnswerOptions para adicionar o confidence_threshold parâmetro.
output = client.get_answers(
confidence_threshold = 0.95, #add this line
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
Uma vez que sabemos, pela nossa execução anterior do código, que a nossa pontuação de confiança é: .9185 definir o limite para .95 resultar no retorno da resposta padrão.
Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0
Consultar texto sem um projeto
Você também pode usar respostas personalizadas a perguntas sem um projeto com get_answers_from_text. Nesse caso, fornece-se respostas personalizadas a perguntas, com uma pergunta e os registos de texto associados que deseja procurar para obter uma resposta no momento em que a solicitação é enviada.
Neste exemplo, você só precisa modificar as variáveis para endpoint e credential.
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna
endpoint = "https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How long does it takes to charge a surface?"
input = qna.AnswersFromTextOptions(
question=question,
text_documents=[
"Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
]
)
output = client.get_answers_from_text(input)
best_answer = [a for a in output.answers if a.confidence > 0.9][0]
print(u"Q: {}".format(input.question))
print(u"A: {}".format(best_answer.answer))
print("Confidence Score: {}".format(output.answers[0].confidence))
if __name__ == '__main__':
main()
Você pode copiar esse código em um arquivo .py dedicado ou em uma nova célula no Jupyter Notebook/Lab. Este exemplo retorna um resultado de:
Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695
Neste caso, repetimos todas as respostas e só retornamos a resposta com a maior pontuação de confiança superior a 0,9. Para entender mais sobre as opções disponíveis com o get_answers_from_text, revise os parâmetros AnswersFromTextOptions.
Limpar recursos
Para limpar e remover um recurso de IA do Azure, você pode excluir o recurso individual ou todo o grupo de recursos. Se você excluir o grupo de recursos, todos os recursos contidos também serão excluídos.
Explorar a API REST
- Referência da API de autoria
- Exemplos de cURL da API de autoria
- Referência da API de tempo de execução