Поделиться через


Краткое руководство. Ответы на настраиваемые вопросы

Примечание.

Хотите перенести рабочие нагрузки из QnA Maker? Ознакомьтесь с нашим руководством по миграции для получения сведений о сравнениях функций и шагах миграции.

Начало работы с клиентской библиотекой пользовательских ответов на вопросы Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.

Вы можете создать пользовательский проект ответа на вопросы из собственного содержимого, например часто задаваемых вопросов или руководств по продуктам. В этой статье приведен пример создания пользовательского проекта ответа на вопросы из руководства по продукту.

Необходимые компоненты

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
  • Языковой ресурс со включенной функцией пользовательских ответов на вопросы. Помните идентификатор Microsoft Entra, подписку, имя ресурса языка, выбранное при создании ресурса.

Создание первого пользовательского проекта ответа на вопросы

  1. Войдите в Language Studio с помощью учетных данных Azure.

  2. Прокрутите вниз до раздела Ответы на вопросы и выберите Открыть настраиваемые ответы на вопросы.

    Открыть

  3. Если ресурс еще не подключен к службе поиска Azure, выберите Подключиться к службе поиска Azure. Откроется новая вкладка браузера с областью Возможности ресурса на портале Azure.

    Подключение к службе

  4. Нажмите Включить настраиваемые ответы на вопросы, выберите ресурс службы поиска Azure, с которым необходимо установить связь, а затем нажмите кнопку Применить.

    Включение функции

  5. Вернитесь на вкладку Language Studio. Может потребоваться обновить эту страницу, чтобы зарегистрировать изменение в ресурсе. Выберите команду Создать проект.

  6. Выберите вариант Я хочу задать язык для всех проектов, созданных в этом ресурсе> выберите Английский> Нажмите кнопку Далее.

  7. Введите имя проекта Sample-project, описание Мой первый проект "Ответы на вопросы" и оставьте ответ по умолчанию с параметром Ответы не найдены.

  8. Просмотрите выбранные параметры и нажмите Создать проект.

  9. На странице Управление источниками щелкните Добавить источник > URL-адреса.

  10. Выберите Добавить URL-адрес, введите следующие значения, а затем выберите Добавить все:

    Имя URL-адреса Значение URL-адреса
    Руководство пользователя Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Процесс извлечения, во время которого прочитывается документ и определяются вопросы и ответы, занимает несколько минут.

    После успешного добавления источника можно изменить его содержимое и добавить дополнительные наборы настраиваемых ответов на вопросы.

Тестирование проекта

  1. Выберите ссылку на источник, откроется страница редактирования проекта.

  2. Выберите Тестировать в строке меню > Введите вопрос Как настроить Surface Book?. На основе пар вопросов и ответов, которые были автоматически идентифицированы и извлечены из URL-адреса источника, будет создан ответ.

    Тестирование интерфейса чата для ответа на вопросы

    Если установить флажок Включить короткий ответ, при задании вопроса вы увидите точный ответ (при наличии), а также текст ответа в области тестирования.

  3. Выберите Inspect (Проверить), чтобы более подробно изучить ответ. Окно тестирования используется для проверки изменений в проекте перед его развертыванием.

    Просмотр доверительного уровня

    В интерфейсе проверки отображается доверительный уровень для данного ответа на вопрос, а также можно отредактировать заданную пару "вопрос — ответ".

Развертывание проекта

  1. Щелкните значок "Развернуть проект", чтобы ввести меню развертывания проекта.

    Развернуть проект

    При развертывании проекта его содержимое перемещается из индекса test в индекс prod в службе поиска Azure.

  2. Выберите Развернуть>, а затем в ответ на запрос еще раз щелкните Развернуть.

    Развертывание завершено успешно

    Теперь проект успешно развернут. Вы можете использовать конечную точку для ответа на вопросы в пользовательском приложении или боте.

Необходимые компоненты

  • Текущая версия 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:

Следующие шаги