Получение ответа из базы знаний QNA Maker
Примечание.
Поддержка службы QnA Maker будет прекращена 31 марта 2025 г. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure. Сведения о возможностях ответов на вопросы в службе Языка см. в статье с ответами на вопросы. С 1 октября 2022 г. вы не сможете создавать ресурсы QnA Maker. Сведения о переносе существующих баз знаний QnA Maker в функцию вопросов и ответов см. в руководстве по миграции.
Примечание.
Эта документация не относится к последнему выпуску. Чтобы узнать об использовании новейших API функции ответов на вопросы, ознакомьтесь с руководством по созданию ответа на вопрос.
В этом кратком руководстве описывается, как получить ответ из базы знаний с помощью cURL.
Необходимые компоненты
- Необходимо иметь
- Последние cURL.
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Ресурс QnA Maker, созданный на портале Azure Помните идентификатор Microsoft Entra, подписку, имя ресурса QnA, выбранное при создании ресурса.
- Обученная и опубликованная база знаний с вопросами и ответами, на основе предыдущего краткого руководства, с настроенными метаданными и беседой.
Примечание.
Когда вы будете готовы создать ответ на вопрос из базы знаний, вам будет нужно обучить и опубликовать эту базу знаний. После публикации базы знаний на странице публикации отображаются параметры запроса HTTP для создания ответа. Вкладка cURL отображает параметры, необходимые для создания ответа из командной строки.
Применение метаданных для фильтрации ответов
Используйте базу знаний из предыдущего краткого руководства, чтобы запросить ответ на основе метаданных.
На странице Параметры базы знаний выберите вкладку CURL, чтобы увидеть пример команды cURL, используемой для создания ответа из базы знаний.
Скопируйте эту команду в редактируемую среду (например, текстовый файл), чтобы изменить ее. Измените значение вопроса следующим образом, чтобы метаданные
service:qna_maker
использовались в качестве фильтра для пар вопросов и ответов.curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'top':30, 'question':'size','strictFilters': [{'name':'service','value':'qna_maker'}]}"
Этот вопрос состоит всего из одного слова (
size
), по которому может возвращаться любая из двух пар вопросов и ответов. МассивstrictFilters
указывает, что ответ нужно сократить доqna_maker
ответов.Ответ включает только тот ответ, который соответствует критериям фильтра. Следующий ответ cURL был отформатирован для удобства чтения:
{ "answers": [ { "questions": [ "How large a knowledge base can I create?", "What is the max size of a knowledge base?", "How many GB of data can a knowledge base hold?" ], "answer": "The size of the knowledge base depends on the SKU of Azure search you choose when creating the QnA Maker service. Read [here](../concepts/azure-resources.md) for more details.", "score": 68.76, "id": 3, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [ { "name": "link_in_answer", "value": "true" }, { "name": "service", "value": "qna_maker" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null }
Если существует пара вопроса и ответа, которая не соответствует поисковому запросу, но соответствует фильтру, она не будет возвращена. Вместо этого возвращается общий ответ
No good match found in KB.
.
Использование свойства debug в запросе
Примечание.
Мы не рекомендуем использовать свойство debug для всех зависимостей. Это свойство было добавлено только для того, чтобы помочь разработчикам в устранении неполадок.
Отладочная информация поможет понять, как был определен возвращаемый ответ. Это иногда полезно, но необязательно. Чтобы создать ответ с отладочной информацией, добавьте свойство debug
:
Debug: {Enable:true}
Отредактируйте команду cURL, чтобы включить свойство отладки для получения дополнительной информации.
curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'question':'size', 'Debug':{'Enable':true}}"
Ответ включает необходимые сведения об ответе. В следующих выходных данных JSON, некоторые отладочные сведения заменены многоточием для краткости.
{ "answers": [ { "questions": [ "How do I share a knowledge base with others?" ], "answer": "Sharing works at the level of a QnA Maker service, that is, all knowledge bases in the service will be shared.", "score": 56.07, "id": 5, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": { "userQuery": { "question": "How do I programmatically update my Knowledge Base?", "top": 1, "userId": null, "strictFilters": [], "isTest": false, "debug": { "enable": true, "recordL1SearchLatency": false, "mockQnaL1Content": null }, "rankerType": 0, "context": null, "qnaId": 0, "scoreThreshold": 0.0 }, "rankerInfo": { "specialFuzzyQuery": "how do i programmatically~6 update my knowledge base", "synonyms": "what s...", "rankerLanguage": "English", "rankerFileName": "https://qnamakerstore.blob.core.windows.net/qnamakerdata/rankers/ranker-English.ini", "rankersDirectory": "D:\\home\\site\\wwwroot\\Data\\QnAMaker\\rd0003ffa60fc45.24.0\\RankerData\\Rankers", "allQnAsfeatureValues": { "WordnetSimilarity": { "5": 0.54706300120043716,... }, ... }, "rankerVersion": "V2", "rankerModelType": "TreeEnsemble", "rankerType": 0, "indexResultsCount": 25, "reRankerResultsCount": 1 }, "runtimeVersion": "5.24.0", "indexDebugInfo": { "indexDefinition": { "name": "064a4112-bd65-42e8-b01d-141c4c9cd09e", "fields": [... ], "scoringProfiles": [], "defaultScoringProfile": null, "corsOptions": null, "suggesters": [], "analyzers": [], "tokenizers": [], "tokenFilters": [], "charFilters": [], "@odata.etag": "\"0x8D7A920EA5EE6FE\"" }, "qnaCount": 117, "parameters": {}, "azureSearchResult": { "continuationToken": null, "@odata.count": null, "@search.coverage": null, "@search.facets": null, "@search.nextPageParameters": null, "value": [...], "@odata.nextLink": null } }, "l1SearchLatencyInMs": 0, "qnaL1Results": {...} }, "activeLearningEnabled": true }
Использование тестовой базы знаний
Если вы хотите получить ответ от тестовой базы знаний, используйте в тексте свойство isTest
.
Свойство является логическим значением.
isTest:true
Команда cURL выглядит следующим образом:
curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'question':'size', 'IsTest':true}"
В ответе в формате JSON используется та же схема, что и в запросе к опубликованной базе знаний.
Примечание.
Если тестовая и опубликованная базы знаний полностью совпадают, то незначительные вариации могут возникать из-за того, что тестовый индекс является общим для всех баз знаний в ресурсе.
Использование cURL для запроса ответа в беседе
В окне терминала с поддержкой cURL используйте оператор завершения общения с ботом со стороны пользователя, например ответом
Thank you
, в качестве вопроса. Других свойств устанавливать не нужно.curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'question':'thank you'}"
Выполните команду cURL и получите ответ JSON, включающий оценку и ответ.
{ "answers": [ { "questions": [ "I thank you", "Oh, thank you", "My sincere thanks", "My humblest thanks to you", "Marvelous, thanks", "Marvelous, thank you kindly", "Marvelous, thank you", "Many thanks to you", "Many thanks", "Kthx", "I'm grateful, thanks", "Ahh, thanks", "I'm grateful for that, thank you", "Perfecto, thanks", "I appreciate you", "I appreciate that", "I appreciate it", "I am very thankful for that", "How kind, thank you", "Great, thanks", "Great, thank you", "Gracias", "Gotcha, thanks", "Gotcha, thank you", "Awesome thanks!", "I'm grateful for that, thank you kindly", "thank you pal", "Wonderful, thank you!", "Wonderful, thank you very much", "Why thank you", "Thx", "Thnx", "That's very kind", "That's great, thanks", "That is lovely, thanks", "That is awesome, thanks!", "Thanks bot", "Thanks a lot", "Okay, thanks!", "Thank you so much", "Perfect, thanks", "Thank you my friend", "Thank you kindly", "Thank you for that", "Thank you bot", "Thank you", "Right on, thanks very much", "Right on, thanks a lot", "Radical, thanks", "Rad, thanks", "Rad thank you", "Wonderful, thanks!", "Thanks" ], "answer": "You're welcome.", "score": 100.0, "id": 75, "source": "qna_chitchat_Professional.tsv", "metadata": [ { "name": "editorial", "value": "chitchat" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null, "activeLearningEnabled": true }
Так как вопрос
Thank you
точно соответствует вопросу в беседе, достоверность QnA Maker составляет 100 %. QnA Maker также возвращал все связанные вопросы и свойство метаданных, содержащее сведения о теге метаданных беседы.
Использование порога и ответа по умолчанию
Вы можете запросить минимальный порог для возвращаемого ответа. Если указанное пороговое значение не достигается, возвращается ответ по умолчанию.
Добавьте свойство
threshold
, чтобы запросить ответ наsize
с пороговым значением 80 % или выше. База знаний не должна найти этот ответ, так как показатель вопроса равен 71 %. Результат возвращает ответ по умолчанию, указанный при создании базы знаний.curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'question':'size', 'scoreThreshold':80.00}"
Выполните команду cURL и получите ответ JSON.
{ "answers": [ { "questions": [], "answer": "No good match found in KB.", "score": 0.0, "id": -1, "source": null, "metadata": [] } ], "debugInfo": null, "activeLearningEnabled": true }
QnA Maker возвращает оценку
0
. Это означает, что достоверного ответа нет, но также возвращается ответ по умолчанию.Измените пороговое значение на 60 % и повторите запрос.
curl -X POST https://replace-with-your-resource-name.azurewebsites.net/qnamaker/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer -H "Authorization: EndpointKey replace-with-your-endpoint-key" -H "Content-type: application/json" -d "{'question':'size', 'scoreThreshold':60.00}"
Теперь JSON возвращает найденный ответ.
{ "answers": [ { "questions": [ "How large a knowledge base can I create?", "What is the max size of a knowledge base?", "How many GB of data can a knowledge base hold?" ], "answer": "The size of the knowledge base depends on the SKU of Azure search you choose when creating the QnA Maker service. Read [here](../concepts/azure-resources.md) for more details.", "score": 71.1, "id": 3, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [ { "name": "link_in_answer", "value": "true" }, { "name": "server", "value": "qna_maker" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null, "activeLearningEnabled": true }
Использование источников неструктурированных данных
Теперь поддерживается возможность добавления неструктурированных документов, которые нельзя использовать для извлечения QnA. Пользователь может выбрать включение или исключение неструктурированных наборов данных в API GenerateAnswer при получении ответа на запрос. В общедоступной службе не поддерживаются неструктурированные наборы данных, они включаются только в пользовательские ответы на вопросы.
В этом кратком руководстве по расширению клиента REST Для Visual Studio Code описано, как получить ответ от база знаний.
Необходимые компоненты
- Необходимо иметь
- Последнее расширение клиента REST Для Visual Studio Code.
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Ресурс QnA Maker, созданный на портале Azure Помните идентификатор Microsoft Entra, подписку, имя ресурса QnA, выбранное при создании ресурса.
- Обученная и опубликованная база знаний с вопросами и ответами, на основе предыдущего краткого руководства, с настроенными метаданными и беседой.
Примечание.
Когда вы будете готовы создать ответ на вопрос из базы знаний, вам будет нужно обучить и опубликовать эту базу знаний. После публикации базы знаний на странице публикации отображаются параметры запроса HTTP для создания ответа. На вкладке Postman отображаются параметры, необходимые для создания ответа.
Настройка расширения REST Клиента Visual Studio Code для запросов
В этом кратком руководстве используются те же параметры для запроса POST клиента REST Для Visual Studio Code, а затем настраивается текст POST JSON, отправляемый службе на основе того, что вы пытаетесь запросить.
Используйте эту процедуру для настройки расширения REST Клиента Visual Studio Code, а затем прочитайте каждый последующий раздел, чтобы настроить JSON текста POST.
На странице Параметры для базы знаний щелкните вкладку Postman, чтобы увидеть конфигурацию, используемую для создания ответа из базы знаний. Скопируйте приведенные ниже сведения для использования в расширении REST Клиента Visual Studio Code.
Имя Параметр Цель и значение POST
/knowledgebases/replace-with-your-knowledge-base-id/generateAnswer
Это метод HTTP и маршрут для URL-адреса. Host
https://YOUR-RESOURCE_NAME.azurewebsites.net/qnamaker
Это узел URL-адреса. Объедините значения Host и Post, чтобы получить полный URL-адрес generateAnswer. Authorization
EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Значение заголовка для авторизации запроса в Azure. Content-type
application/json
Значение заголовка для содержимого. {"question":"<Your question>"}
Текст запроса POST в формате объекта JSON. Это значение будет изменяться в каждом из следующих разделов в зависимости от того, для чего предназначен очередной запрос. Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
Используйте расширение REST Client Visual Studio Code для создания нового базового запроса POST с опубликованными параметрами база знаний. В следующих разделах JSON в теле POST будет изменяться в соответствии с новыми запросами к базе знаний.
Применение метаданных для фильтрации ответов
При работе с предыдущим кратким руководством мы добавили метаданные в две пары "вопрос — ответ", чтобы различать два разных вопроса. Добавьте метаданные в запрос, чтобы отфильтровать только одну нужную нам пару "вопрос — ответ".
В расширении REST Client Visual Studio Code измените только json запроса, добавив
strictFilters
свойство с паройservice:qna_maker
"имя-значение". Теперь текст JSON будет выглядеть так:{ 'question':'size', 'strictFilters': [ { 'name':'service','value':'qna_maker' } ] }
Этот вопрос состоит всего из одного слова (
size
), по которому может возвращаться любая пара из вопроса и ответа. МассивstrictFilters
указывает, что ответ нужно сократить доqna_maker
ответов.Ответ включает только тот ответ, который соответствует критериям фильтра.
Следующий ответ был отформатирован для удобства чтения:
{ "answers": [ { "questions": [ "How large a knowledge base can I create?", "What is the max size of a knowledge base?", "How many GB of data can a knowledge base hold?" ], "answer": "The size of the knowledge base depends on the SKU of Azure search you choose when creating the QnA Maker service. Read [here](../concepts/azure-resources.md) for more details.", "score": 68.76, "id": 3, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [ { "name": "link_in_answer", "value": "true" }, { "name": "service", "value": "qna_maker" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null }
Если существует пара вопроса и ответа, которая не соответствует поисковому запросу, но соответствует фильтру, она не будет возвращена. Вместо этого возвращается общий ответ
No good match found in KB.
.
Использование свойства debug в запросе
Примечание.
Мы не рекомендуем использовать свойство debug для всех зависимостей. Это свойство было добавлено только для того, чтобы помочь разработчикам в устранении неполадок.
Отладочная информация поможет понять, как был определен возвращаемый ответ. Это иногда полезно, но необязательно. Чтобы создать ответ с отладочной информацией, добавьте свойство debug
:
В расширении REST Клиента Visual Studio Code измените только текст JSON, добавив
debug
это свойство. Теперь JSON будет выглядеть так:{ 'question':'size', 'Debug': { 'Enable':true } }
Ответ включает необходимые сведения об ответе. В следующих выходных данных JSON некоторые отладочные сведения заменены многоточиями.
{ "answers": [ { "questions": [ "How do I share a knowledge base with others?" ], "answer": "Sharing works at the level of a QnA Maker service, that is, all knowledge bases in the service will be shared.", "score": 56.07, "id": 5, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": { "userQuery": { "question": "How do I programmatically update my Knowledge Base?", "top": 1, "userId": null, "strictFilters": [], "isTest": false, "debug": { "enable": true, "recordL1SearchLatency": false, "mockQnaL1Content": null }, "rankerType": 0, "context": null, "qnaId": 0, "scoreThreshold": 0.0 }, "rankerInfo": { "specialFuzzyQuery": "how do i programmatically~6 update my knowledge base", "synonyms": "what s...", "rankerLanguage": "English", "rankerFileName": "https://qnamakerstore.blob.core.windows.net/qnamakerdata/rankers/ranker-English.ini", "rankersDirectory": "D:\\home\\site\\wwwroot\\Data\\QnAMaker\\rd0003ffa60fc45.24.0\\RankerData\\Rankers", "allQnAsfeatureValues": { "WordnetSimilarity": { "5": 0.54706300120043716,... }, ... }, "rankerVersion": "V2", "rankerModelType": "TreeEnsemble", "rankerType": 0, "indexResultsCount": 25, "reRankerResultsCount": 1 }, "runtimeVersion": "5.24.0", "indexDebugInfo": { "indexDefinition": { "name": "064a4112-bd65-42e8-b01d-141c4c9cd09e", "fields": [... ], "scoringProfiles": [], "defaultScoringProfile": null, "corsOptions": null, "suggesters": [], "analyzers": [], "tokenizers": [], "tokenFilters": [], "charFilters": [], "@odata.etag": "\"0x8D7A920EA5EE6FE\"" }, "qnaCount": 117, "parameters": {}, "azureSearchResult": { "continuationToken": null, "@odata.count": null, "@search.coverage": null, "@search.facets": null, "@search.nextPageParameters": null, "value": [...], "@odata.nextLink": null } }, "l1SearchLatencyInMs": 0, "qnaL1Results": {...} }, "activeLearningEnabled": true }
Использование тестовой базы знаний
Если вы хотите получить ответ от тестовой базы знаний, используйте в тексте свойство isTest
.
В расширении REST Клиента Visual Studio Code измените только текст JSON, добавив isTest
это свойство. Теперь JSON будет выглядеть так:
{
'question':'size',
'isTest': true
}
В ответе в формате JSON используется та же схема, что и в запросе к опубликованной базе знаний.
Примечание.
Если тестовая и опубликованная базы знаний полностью совпадают, то незначительные вариации могут возникать из-за того, что тестовый индекс является общим для всех баз знаний в ресурсе.
Запрос ответа в беседе
В расширении REST Client Visual Studio Code измените только текст JSON на инструкцию окончания диалога от пользователя. Теперь JSON будет выглядеть так:
{ 'question':'thank you' }
Результат содержит оценку и ответ.
{ "answers": [ { "questions": [ "I thank you", "Oh, thank you", "My sincere thanks", "My humblest thanks to you", "Marvelous, thanks", "Marvelous, thank you kindly", "Marvelous, thank you", "Many thanks to you", "Many thanks", "Kthx", "I'm grateful, thanks", "Ahh, thanks", "I'm grateful for that, thank you", "Perfecto, thanks", "I appreciate you", "I appreciate that", "I appreciate it", "I am very thankful for that", "How kind, thank you", "Great, thanks", "Great, thank you", "Gracias", "Gotcha, thanks", "Gotcha, thank you", "Awesome thanks!", "I'm grateful for that, thank you kindly", "thank you pal", "Wonderful, thank you!", "Wonderful, thank you very much", "Why thank you", "Thx", "Thnx", "That's very kind", "That's great, thanks", "That is lovely, thanks", "That is awesome, thanks!", "Thanks bot", "Thanks a lot", "Okay, thanks!", "Thank you so much", "Perfect, thanks", "Thank you my friend", "Thank you kindly", "Thank you for that", "Thank you bot", "Thank you", "Right on, thanks very much", "Right on, thanks a lot", "Radical, thanks", "Rad, thanks", "Rad thank you", "Wonderful, thanks!", "Thanks" ], "answer": "You're welcome.", "score": 100.0, "id": 75, "source": "qna_chitchat_Professional.tsv", "metadata": [ { "name": "editorial", "value": "chitchat" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null, "activeLearningEnabled": true }
Так как вопрос
Thank you
точно соответствует вопросу в беседе, достоверность QnA Maker составляет 100 %. QnA Maker также возвращал все связанные вопросы и свойство метаданных, содержащее сведения о теге метаданных беседы.
Использование порога и ответа по умолчанию
Вы можете запросить минимальный порог для возвращаемого ответа. Если указанное пороговое значение не достигается, возвращается ответ по умолчанию.
В расширении REST Client Visual Studio Code измените только текст JSON на инструкцию окончания диалога от пользователя. Теперь JSON будет выглядеть так:
{ 'question':'size', 'scoreThreshold':80.00 }
База знаний не должна найти этот ответ, так как оценка вопроса составляет всего 71 %, поэтому вместо него возвращается ответ по умолчанию, указанный при создании базы знаний.
Ответ JSON, содержащий оценку и ответ, будет выглядеть так:
{ "answers": [ { "questions": [], "answer": "No good match found in KB.", "score": 0.0, "id": -1, "source": null, "metadata": [] } ], "debugInfo": null, "activeLearningEnabled": true }
QnA Maker возвращает оценку
0
. Это означает, что достоверного ответа нет, но также возвращается ответ по умолчанию.Измените пороговое значение на 60 % и повторите запрос.
{ 'question':'size', 'scoreThreshold':60.00 }
Теперь JSON возвращает найденный ответ.
{ "answers": [ { "questions": [ "How large a knowledge base can I create?", "What is the max size of a knowledge base?", "How many GB of data can a knowledge base hold?" ], "answer": "The size of the knowledge base depends on the SKU of Azure search you choose when creating the QnA Maker service. Read [here](../concepts/azure-resources.md) for more details.", "score": 71.1, "id": 3, "source": "https://learn.microsoft.com/azure/ai-services/qnamaker/troubleshooting", "metadata": [ { "name": "link_in_answer", "value": "true" }, { "name": "server", "value": "qna_maker" } ], "context": { "isContextOnly": false, "prompts": [] } } ], "debugInfo": null, "activeLearningEnabled": true }
Использование источников неструктурированных данных.
Теперь поддерживается возможность добавления неструктурированных документов, которые нельзя использовать для извлечения QnA. Пользователь может выбрать включение или исключение неструктурированных наборов данных в API GenerateAnswer при получении ответа на запрос. В службе GA неструктурированные наборы данных не поддерживаются. Они поддерживаются только в пользовательских ответах на вопросы.
Следующие шаги
Узнайте больше о метаданных: