Microsoft LUIS: невозможно установить часовой пояс (datetimeReference) для объектов datetimeV2 - PullRequest
1 голос
/ 07 мая 2020

Я использую API V3 для получения прогнозов от конечной точки LUIS, и мне нужен способ сообщить LUIS мой часовой пояс, чтобы выражения относительного времени (например, «за последние два часа», «через 10 минут») были разрешается должным образом с помощью объекта datetimeV2.

Все работает отлично, если я использую API V2 с параметром timezoneOffset, но я не могу заставить API V3 работать с новым параметром datetimeReference (который должен заменить timezoneOffset) . На самом деле, я даже не мог понять, какое значение мне следует установить для datetimeReference (целое число? Datetime?).

Вот мои попытки с Python. Может ли кто-нибудь сказать мне, что что-то не так?

from datetime import datetime
import requests

appId           = # my app id
subscriptionKey = # my subscription key

query = "tra 10 minuti" # = "in 10 minutes" (my app speaks Italian)

# ATTEMPT 1
# based on https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-concept-data-alteration?tabs=V2#change-time-zone-of-prebuilt-datetimev2-entity,
# assuming it works the same way as timezoneOffset
endpoint = 'https://westeurope.api.cognitive.microsoft.com/luis/prediction/v3.0/apps/{appId}/slots/staging/predict?datetimeReference=120&subscription-key={subscriptionKey}&query={query}'
endpoint = endpoint.format(appId = appId, subscriptionKey = subscriptionKey, query = query)

response = requests.get(endpoint)

# ATTEMPT 2
# according to https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-migration-api-v3
endpoint = 'https://westeurope.api.cognitive.microsoft.com/luis/prediction/v3.0/apps/{appId}/slots/staging/predict?'
endpoint = endpoint.format(appId = appId)

json = {
    "query" : query,
    "options":{
        "datetimeReference": datetime.now().strftime("%Y-%m-%dT%H:%M:%S"), # e.g. "2020-05-07T13:54:33". Not clear if that's what it wants
        "preferExternalEntities": True
    },
    "externalEntities":[],
    "dynamicLists":[]
}

response = requests.post(endpoint, json, headers = {'Ocp-Apim-Subscription-Key' : subscriptionKey})

ОБНОВЛЕНИЕ: правильный способ отправки запроса в ATTEMPT 2 -

response = requests.post(endpoint, json = json, headers = {'Ocp-Apim-Subscription-Key' : subscriptionKey})

1 Ответ

0 голосов
/ 11 мая 2020

Как вы обнаружили, ваш JSON должен go в аргументе json, а не в аргументе data:

response = requests.post(endpoint, json = json, headers = {'Ocp-Apim-Subscription-Key' : subscriptionKey})
...