Краткое руководство. Ответы на настраиваемые вопросы
Примечание.
Хотите перенести рабочие нагрузки из QnA Maker? Ознакомьтесь с нашим руководством по миграции для получения сведений о сравнениях функций и шагах миграции.
Начало работы с клиентской библиотекой пользовательских ответов на вопросы Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.
Вы можете создать пользовательский проект ответа на вопросы из собственного содержимого, например часто задаваемых вопросов или руководств по продуктам. В этой статье приведен пример создания пользовательского проекта ответа на вопросы из руководства по продукту.
Необходимые компоненты
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Языковой ресурс со включенной функцией пользовательских ответов на вопросы. Помните идентификатор Microsoft Entra, подписку, имя ресурса языка, выбранное при создании ресурса.
Создание первого пользовательского проекта ответа на вопросы
Войдите в Language Studio с помощью учетных данных Azure.
Прокрутите вниз до раздела Ответы на вопросы и выберите Открыть настраиваемые ответы на вопросы.
Если ресурс еще не подключен к службе поиска Azure, выберите Подключиться к службе поиска Azure. Откроется новая вкладка браузера с областью Возможности ресурса на портале Azure.
Нажмите Включить настраиваемые ответы на вопросы, выберите ресурс службы поиска Azure, с которым необходимо установить связь, а затем нажмите кнопку Применить.
Вернитесь на вкладку Language Studio. Может потребоваться обновить эту страницу, чтобы зарегистрировать изменение в ресурсе. Выберите команду Создать проект.
Выберите вариант Я хочу задать язык для всех проектов, созданных в этом ресурсе> выберите Английский> Нажмите кнопку Далее.
Введите имя проекта Sample-project, описание Мой первый проект "Ответы на вопросы" и оставьте ответ по умолчанию с параметром Ответы не найдены.
Просмотрите выбранные параметры и нажмите Создать проект.
На странице Управление источниками щелкните Добавить источник > URL-адреса.
Выберите Добавить URL-адрес, введите следующие значения, а затем выберите Добавить все:
Имя URL-адреса Значение URL-адреса Руководство пользователя Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf Процесс извлечения, во время которого прочитывается документ и определяются вопросы и ответы, занимает несколько минут.
После успешного добавления источника можно изменить его содержимое и добавить дополнительные наборы настраиваемых ответов на вопросы.
Тестирование проекта
Выберите ссылку на источник, откроется страница редактирования проекта.
Выберите Тестировать в строке меню > Введите вопрос Как настроить Surface Book?. На основе пар вопросов и ответов, которые были автоматически идентифицированы и извлечены из URL-адреса источника, будет создан ответ.
Если установить флажок Включить короткий ответ, при задании вопроса вы увидите точный ответ (при наличии), а также текст ответа в области тестирования.
Выберите Inspect (Проверить), чтобы более подробно изучить ответ. Окно тестирования используется для проверки изменений в проекте перед его развертыванием.
В интерфейсе проверки отображается доверительный уровень для данного ответа на вопрос, а также можно отредактировать заданную пару "вопрос — ответ".
Развертывание проекта
Щелкните значок "Развернуть проект", чтобы ввести меню развертывания проекта.
При развертывании проекта его содержимое перемещается из индекса
test
в индексprod
в службе поиска Azure.Выберите Развернуть>, а затем в ответ на запрос еще раз щелкните Развернуть.
Теперь проект успешно развернут. Вы можете использовать конечную точку для ответа на вопросы в пользовательском приложении или боте.
Необходимые компоненты
- Текущая версия cURL. В этом кратком руководстве используются несколько параметров командной строки, которые указаны в документации cURL.
- Подписка Azure — создайте бесплатную учетную запись.
- Для ответа на настраиваемые вопросы требуется ресурс языка с функцией пользовательского ответа на вопросы, включенной для создания ключа API и конечной точки.
- Разверните языковой ресурс и нажмите Перейти к ресурсу. Для подключения к API требуется ключ и конечная точка из созданного ресурса. Вставьте ключ и конечную точку в код, приведенный ниже в этом кратком руководстве.
- Чтобы создать ресурс языка с помощью Azure CLI , укажите следующие дополнительные свойства:
--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>
- Существующий проект для запроса. Если вы не настроили проект, следуйте инструкциям в кратком руководстве по Языковой студии. Или добавьте проект, использующий ЭТОТ URL-адрес руководства пользователя Surface в качестве источника данных.
Установка
Создание переменной среды
Приложение должно пройти проверку подлинности для отправки запросов API. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным,. В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.
Чтобы задать переменную среды для ключа ресурса языка, откройте окно консоли и следуйте инструкциям в вашей операционной системе и среде разработки.
- Чтобы задать
LANGUAGE_KEY
переменную среды, заменитеyour-key
одним из ключей ресурса. - Чтобы задать переменную среды, замените
your-endpoint
конечнойLANGUAGE_ENDPOINT
точкой ресурса.
Внимание
Если вы используете ключ API, сохраните его в другом месте, например в Azure Key Vault. Не включайте ключ API непосредственно в код и никогда не публикуйте его.
Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Примечание.
Если вам нужно получить доступ только к переменным среды в текущей работающей консоли, можно задать переменную set
среды вместо setx
.
После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые потребуются для чтения переменных среды, включая окно консоли. Например, если вы используете Visual Studio в качестве редактора, перезапустите Visual Studio перед запуском примера.
Запрос проекта
Создание ответа из проекта
Чтобы запросить проект пользовательского ответа на вопросы с помощью REST API и cURL, вам потребуется следующая информация:
Имя переменной | Значение |
---|---|
Endpoint |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Пример конечной точки: https://southcentralus.api.cognitive.microsoft.com/ . |
API-Key |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Можно использовать Key1 или Key2. Предусмотрите наличие двух действительных ключей для безопасной смены ключей с нулевым временем простоя. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Значение ключа является частью примера запроса. |
Project |
Имя настраиваемого проекта ответа на вопросы. |
Deployment |
Возможные значения: test и production . production зависит от того, что вы развернули проект из Language Studio>, отвечая на вопросы о развертывании>проекта. |
Команда cURL выполняется из оболочки BASH. Измените эту команду, указав собственные имя ресурса, ключ ресурса, значения и размер 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}'
При выполнении приведенного выше кода с использованием источника данных из необходимых компонентов вы получите ответ, который выглядит следующим образом:
{
"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": []
}
}
]
}
confidenceScore
возвращает значение в диапазоне от 0 до 1. Вы можете подумать об этом как процент и умножить на 100, чтобы оценка достоверности 0,9185 означает, что пользовательский ответ на вопрос составляет 91,85% уверен, что это правильный ответ на вопрос на основе проекта.
Если вы хотите исключить ответы, для которых оценка достоверности будет ниже определенного порогового значения, можно добавить параметр confidenceScoreThreshold
.
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}'
Так как при предыдущем выполнении кода мы узнали, что наша оценка достоверности равна .9185
, установка порога, равного .95
, приведет к возврату ответа по умолчанию.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
Запрос текста без проекта
Вы также можете использовать настраиваемые ответы на вопросы без проекта с предварительно созданным настраиваемым ответом на вопросы REST API, который вызывается через query-text
. В этом случае вы предоставляете службе ответов на вопросы вопрос и связанные текстовые записи для поиска ответа во время отправки запроса.
В этом примере необходимо изменить только переменные для API KEY
и 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'
В этом примере будет возвращен такой результат:
{
"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
}
]
}
Используйте это краткое руководство для пользовательской клиентской библиотеки ответов на вопросы для .NET:
- Получение ответа из проекта.
- получить ответ из текста, который вы отправляете вместе с вопросом;
- получить оценку достоверности для ответа на ваш вопрос.
Справочная документация | Пакет (NuGet) | Дополнительные примеры | Исходный код библиотеки
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- IDE Visual Studio или текущая версия .NET Core.
- Для ответа на настраиваемые вопросы требуется ресурс языка с функцией пользовательского ответа на вопросы, включенной для создания ключа API и конечной точки.
- Разверните языковой ресурс и нажмите Перейти к ресурсу. Для подключения к API требуется ключ и конечная точка из созданного ресурса. Вставьте ключ и конечную точку в код, приведенный ниже в этом кратком руководстве.
- Чтобы создать ресурс языка с помощью Azure CLI , укажите следующие дополнительные свойства:
--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>
- Существующий проект для запроса. Если вы не настроили проект, следуйте инструкциям в кратком руководстве по Языковой студии. Или добавьте проект, использующий ЭТОТ URL-адрес руководства пользователя Surface в качестве источника данных.
Установка
Создание переменной среды
Приложение должно пройти проверку подлинности для отправки запросов API. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным,. В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.
Чтобы задать переменную среды для ключа ресурса языка, откройте окно консоли и следуйте инструкциям в вашей операционной системе и среде разработки.
- Чтобы задать
LANGUAGE_KEY
переменную среды, заменитеyour-key
одним из ключей ресурса. - Чтобы задать переменную среды, замените
your-endpoint
конечнойLANGUAGE_ENDPOINT
точкой ресурса.
Внимание
Если вы используете ключ API, сохраните его в другом месте, например в Azure Key Vault. Не включайте ключ API непосредственно в код и никогда не публикуйте его.
Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Примечание.
Если вам нужно получить доступ только к переменным среды в текущей работающей консоли, можно задать переменную set
среды вместо setx
.
После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые потребуются для чтения переменных среды, включая окно консоли. Например, если вы используете Visual Studio в качестве редактора, перезапустите Visual Studio перед запуском примера.
CLI
В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new
, чтобы создать консольное приложение с именем question-answering-quickstart
. Эта команда создает простой проект "Hello World" на языке C# с одним файлом исходного кода: program.cs.
dotnet new console -n question-answering-quickstart
Измените каталог на созданную папку приложения. Чтобы создать приложение, выполните следующую команду:
dotnet build
Выходные данные сборки не должны содержать предупреждений или ошибок.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
В каталоге приложения установите клиентскую библиотеку пользовательской службы "Ответы на вопросы" для .NET с помощью следующей команды:
dotnet add package Azure.AI.Language.QuestionAnswering
Запрос проекта
Создание ответа из проекта
В приведенном ниже примере вы сможете запросить проект с помощью GetAnswers
ответа на ваш вопрос.
Необходимо обновить приведенный ниже код и предоставить собственные значения для следующих переменных.
Имя переменной | Значение |
---|---|
endpoint |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Пример конечной точки: https://southcentralus.api.cognitive.microsoft.com/ . |
credential |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Можно использовать Key1 или Key2. Предусмотрите наличие двух действительных ключей для безопасной смены ключей с нулевым временем простоя. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Значение ключа является частью примера запроса. |
projectName |
Имя настраиваемого проекта ответа на вопросы. |
deploymentName |
Возможные значения: test и production . production зависит от того, что вы развернули проект из Language Studio>, отвечая на вопросы о развертывании>проекта. |
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
В каталоге проекта откройте файл program.cs и замените содержимое следующим кодом:
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}");
}
}
}
}
Пока мы прописали в коде переменные для примера. Для рабочей среды рекомендуется использовать безопасный способ хранения и доступа к учетным данным. Например, Azure Key Vault предоставляет безопасное хранилище ключей.
Вы изменили Program.cs
с использованием приведенного выше кода и подстановки правильных значений переменных. Запустите приложение с помощью команды dotnet run
из каталога приложения.
dotnet run
Пример ответа:
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.
Сведения о том, насколько уверенный пользовательский ответ на вопрос заключается в том, что это правильный ответ, добавьте дополнительную инструкцию печати в соответствии с существующими операторами печати:
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
При повторном выполнении dotnet run
вы получите результат с рейтингом достоверности:
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)
Оценка достоверности возвращает значение от 0 до 1. Вы можете подумать об этом как процент и умножить на 100, чтобы оценка достоверности 0,9185 означает, что пользовательский ответ на вопрос составляет 91,85% уверен, что это правильный ответ на вопрос на основе проекта.
Если вы хотите исключить ответы, для которых оценка достоверности будет ниже определенного порогового значения, используйте AnswerOptions
, чтобы добавить свойство ConfidenceScoreThreshold
.
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
Так как при предыдущем выполнении кода мы узнали, что наша оценка достоверности равна .9185
, установка порога, равного .95
, приведет к возврату ответа по умолчанию.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
Запрос текста без проекта
Вы также можете использовать настраиваемые ответы на вопросы без проекта GetAnswersFromText
. В этом случае вы предоставляете настраиваемые ответы на вопросы как с вопросом, так и связанными текстовыми записями, которые вы хотите найти ответ во время отправки запроса.
В этом примере необходимо изменить только переменные для endpoint
и 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;
}
}
}
}
}
Чтобы выполнить приведенный выше код, измените Program.cs
на содержимое блока скрипта выше и измените переменные endpoint
и credential
, чтобы они соответствовали ресурсу Языка, созданному в рамках предварительных требований.
В этом случае будет выполнена итерация всех ответов с возвратом ответа с наивысшей оценкой достоверности, которая больше 0,9. См. дополнительные сведения о параметрах, доступных в GetAnswersFromText
.
Используйте это краткое руководство для пользовательской клиентской библиотеки ответов на вопросы для Python:
- Получение ответа из проекта.
- получить ответ из текста, который вы отправляете вместе с вопросом;
- получить оценку достоверности для ответа на ваш вопрос.
Справочная документация | Пакет (PyPI) | Дополнительные примеры | Исходный код библиотеки
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Python 3.x
- Для ответа на настраиваемые вопросы требуется ресурс языка с функцией пользовательского ответа на вопросы, включенной для создания ключа API и конечной точки.
- Разверните языковой ресурс и нажмите Перейти к ресурсу. Для подключения к API требуется ключ и конечная точка из ресурса, создаваемого вами. Вставьте ключ и конечную точку в код, приведенный ниже в этом кратком руководстве.
- Чтобы создать ресурс языка с помощью Azure CLI , укажите следующие другие свойства:
--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>
- Существующий проект для запроса. Если вы не настроили проект, следуйте инструкциям в кратком руководстве по Языковой студии. Или добавьте проект, использующий ЭТОТ URL-адрес руководства пользователя Surface в качестве источника данных.
Установка
Установка клиентской библиотеки
После установки Python вы можете установить клиентскую библиотеку с помощью следующей команды:
pip install azure-ai-language-questionanswering
Запрос проекта
Создание ответа из проекта
В приведенном ниже примере вы сможете запросить проект с помощью get_answers , чтобы получить ответ на ваш вопрос. Этот код можно скопировать в выделенный PY-файл или в ячейку в записной книжке Jupyter Notebook либо лаборатории.
Необходимо обновить приведенный ниже код и указать собственные значения для следующих переменных.
Имя переменной | Значение |
---|---|
endpoint |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Пример конечной точки: https://southcentralus.api.cognitive.microsoft.com/ . |
credential |
Это значение можно найти в разделе Ключи и конечная точка при просмотре ресурса на портале Azure. Можно использовать Key1 или Key2. Предусмотрите наличие двух действительных ключей для безопасной смены ключей с нулевым временем простоя. Кроме того, можно найти значение в Language Studio>, отвечая>на вопросы развертывания проекта>Get прогнозирования URL-адрес. Значение ключа является частью примера запроса. |
knowledge_base_project |
Имя проекта ответов на вопросы. |
deployment |
Возможные значения: test и production . production зависит от того, что вы развернули проект из Language Studio>, отвечая на вопросы о развертывании>проекта. |
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб искусственного интеллекта 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()
Хотя мы жестко закодируем переменные для нашего примера. Для рабочей среды рекомендуется использовать безопасный способ хранения и доступа к учетным данным. Например, Azure Key Vault предоставляет безопасное хранилище ключей.
При выполнении приведенного выше кода при использовании источника данных из предварительных требований вы получите ответ, который выглядит следующим образом:
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.
Сведения о том, насколько уверенный пользовательский ответ на вопрос является правильным ответом, добавьте еще одну инструкцию печати под существующими операторами печати:
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
Теперь вы получите результат с оценкой достоверности:
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
Оценка достоверности возвращает значение от 0 до 1. Вы можете подумать об этом как процент и умножить на 100, чтобы оценка достоверности 0,9185 означает, что пользовательский ответ на вопрос составляет 91,85% уверен, что это правильный ответ на вопрос на основе проекта.
Если вы хотите исключить ответы, для которых оценка достоверности будет ниже определенного порога, вы можете изменить AnswerOptions, чтобы добавить параметр confidence_threshold
.
output = client.get_answers(
confidence_threshold = 0.95, #add this line
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
Так как мы знаем из предыдущего выполнения кода, что наша оценка достоверности: .9185
установка порогового значения для .95
получения возвращаемого ответа по умолчанию.
Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0
Запрос текста без проекта
Вы также можете использовать настраиваемые ответы на вопросы без проекта с get_answers_from_text. В этом случае вы предоставляете настраиваемые ответы на вопросы как с вопросом, так и связанными текстовыми записями, которые вы хотите найти ответ во время отправки запроса.
В этом примере необходимо изменить только переменные для endpoint
и 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()
Этот код можно скопировать в выделенный PY-файл или в новую ячейку в записной книжке Jupyter Notebook либо лаборатории. В этом примере возвращается результат:
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
В этом случае будет выполнена итерация всех ответов с возвратом ответа с наивысшей оценкой достоверности, которая больше 0,9. Чтобы узнать больше о вариантах, доступных с помощью get_answers_from_text, изучите параметры AnswersFromTextOptions.
Очистка ресурсов
Если вы хотите очистить и удалить подписку на службы искусственного интеллекта Azure, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы.
Знакомство с REST API
Чтобы узнать об автоматизации пользовательского конвейера ответа на вопросы, обратитесь к документации по REST API. В настоящее время функции разработки доступны только через REST API: