Język konwersacyjny (CLU), funkcja języka AI platformy Azure, to zaktualizowana wersja usługi LUIS.
Aby uzyskać więcej informacji na temat obsługi języka w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.
Możliwość zrozumienia, co użytkownik oznacza konwersację i kontekstowo, może być trudnym zadaniem, ale może zapewnić botowi bardziej naturalne uczucie konwersacji. Language Understanding (LUIS) to oparta na chmurze usługa interfejsu API, która umożliwia wykonanie tych czynności, dzięki czemu bot może rozpoznać intencję komunikatów użytkownika, umożliwić uzyskanie większego języka naturalnego od użytkownika i lepsze kierowanie przepływu konwersacji.
W tym temacie opisano proces dodawania usługi LUIS do aplikacji rezerwacji lotów w celu rozpoznawania różnych intencji i jednostek zawartych w danych wejściowych użytkownika.
Uwaga
Zestawy SDK języka JavaScript, C# i Python platformy Bot Framework będą nadal obsługiwane, jednak zestaw SDK języka Java jest wycofywany z ostatecznym długoterminowym wsparciem kończącym się w listopadzie 2023 r.
Istniejące boty utworzone za pomocą zestawu JAVA SDK będą nadal działać.
Znajomość podstaw botai przetwarzania języka naturalnego.
Informacje o tym przykładzie
Ten podstawowy przykład bota przedstawia przykład aplikacji do rezerwacji lotów lotniskowych. Używa ona usługi LUIS do rozpoznawania danych wejściowych użytkownika i zwracania rozpoznanej intencji usługi LUIS.
Model językowy zawiera trzy intencje: Book Flight, Canceli None. Usługa LUIS użyje tych intencji, aby zrozumieć, co oznacza użytkownik podczas wysyłania komunikatu do bota. Model językowy definiuje również jednostki, które usługa LUIS może wyodrębnić z danych wejściowych użytkownika, takich jak lotnisko początkowe lub docelowe.
Po każdym przetworzeniu danych wejściowych DialogBot użytkownika zapisze bieżący stan zarówno , jak UserState i ConversationState. Po zebraniu wszystkich wymaganych informacji przykład kodu tworzy rezerwację rezerwacji lotów demonstracyjnych. W tym artykule omówimy aspekty usługi LUIS w tym przykładzie. Jednak ogólny przepływ próbki to:
OnMembersAddedAsync jest wywoływany, gdy nowy użytkownik jest połączony i wyświetla kartę powitalną.
OnMessageActivityAsync parametr jest wywoływany dla każdego odebranych danych wejściowych użytkownika.
Moduł OnMessageActivityAsync uruchamia odpowiednie okno dialogowe za pomocą metody rozszerzenia okna dialogowego Run . Następnie główne okno dialogowe wywołuje pomocnika usługi LUIS, aby znaleźć intencję użytkownika oceniającego. Jeśli górna intencja danych wejściowych użytkownika zwraca wartość "BookFlight", pomocnik wypełnia informacje od użytkownika zwróconego przez usługę LUIS. Następnie główne okno dialogowe uruchamia BookingDialogelement , który uzyskuje dodatkowe informacje zgodnie z potrzebami od użytkownika, takie jak:
Origin miasto źródłowe
TravelDate data rezerwacji lotu
Destination miasto docelowe
Po każdym przetworzeniu danych wejściowych dialogBot użytkownika zapisze bieżący stan zarówno , jak userState i conversationState. Po zebraniu wszystkich wymaganych informacji przykład kodu tworzy rezerwację rezerwacji lotów demonstracyjnych. W tym artykule omówimy aspekty usługi LUIS w tym przykładzie. Jednak ogólny przepływ próbki to:
onMembersAdded jest wywoływany, gdy nowy użytkownik jest połączony i wyświetla kartę powitalną.
OnMessage parametr jest wywoływany dla każdego odebranych danych wejściowych użytkownika.
Moduł onMessage uruchamia mainDialogmoduł , który zbiera dane wejściowe użytkownika.
Następnie główne okno dialogowe wywołuje pomocnika FlightBookingRecognizer usługi LUIS, aby znaleźć intencję użytkownika oceniającego. Jeśli górna intencja danych wejściowych użytkownika zwraca wartość "BookFlight", pomocnik wypełnia informacje od użytkownika zwróconego przez usługę LUIS.
Po powrocie mainDialog odpowiedzi zachowuje informacje dla użytkownika zwrócone przez usługę LUIS i uruchamia polecenie bookingDialog. bookingDialog uzyskuje dodatkowe informacje zgodnie z potrzebami od użytkownika, takie jak
destination miasto docelowe.
origin miasto źródłowe.
travelDate data zarezerwowania lotu.
Po każdym przetworzeniu danych wejściowych DialogBot użytkownika zapisze bieżący stan zarówno , jak UserState i ConversationState.
Po zebraniu wszystkich wymaganych informacji przykład kodu tworzy rezerwację rezerwacji lotów demonstracyjnych.
W tym artykule omówimy aspekty usługi LUIS w tym przykładzie. Jednak ogólny przepływ próbki to:
onMembersAdded jest wywoływany, gdy nowy użytkownik jest połączony i wyświetla kartę powitalną.
onMessageActivity parametr jest wywoływany dla każdego odebranych danych wejściowych użytkownika.
Moduł onMessageActivity uruchamia odpowiednie okno dialogowe za pomocą metody rozszerzenia okna dialogowego run . Następnie główne okno dialogowe wywołuje pomocnika usługi LUIS, aby znaleźć intencję użytkownika oceniającego. Jeśli górna intencja danych wejściowych użytkownika zwraca wartość "BookFlight", pomocnik wypełnia informacje od użytkownika zwróconego przez usługę LUIS. Następnie główne okno dialogowe uruchamia BookingDialogelement , który uzyskuje dodatkowe informacje zgodnie z potrzebami od użytkownika, takie jak:
Origin miasto źródłowe
TravelDate data rezerwacji lotu
Destination miasto docelowe
Po każdym przetworzeniu danych wejściowych DialogBot użytkownika zapisze bieżący stan zarówno , jak user_state i conversation_state. Po zebraniu wszystkich wymaganych informacji przykład kodu tworzy rezerwację rezerwacji lotów demonstracyjnych. W tym artykule omówimy aspekty usługi LUIS w tym przykładzie. Jednak ogólny przepływ próbki to:
on_members_added_activity jest wywoływany, gdy nowy użytkownik jest połączony i wyświetla kartę powitalną.
on_message_activity parametr jest wywoływany dla każdego odebranych danych wejściowych użytkownika.
Moduł on_message_activity uruchamia odpowiednie okno dialogowe za pomocą metody rozszerzenia okna dialogowego run_dialog . Następnie główne wywołania LuisHelper okna dialogowego w celu znalezienia intencji użytkownika oceniania. Jeśli górna intencja danych wejściowych użytkownika zwraca wartość "BookFlight", funkcja pomocnika wypełnia informacje od użytkownika zwróconego przez usługę LUIS. Następnie główne okno dialogowe uruchamia BookingDialogelement , który uzyskuje dodatkowe informacje zgodnie z potrzebami od użytkownika, takie jak:
Na stronie Aplikacje konwersacji w usłudze LUIS wybierz pozycję Importuj, a następnie pozycję Importuj jako kod JSON.
W oknie dialogowym Importowanie nowej aplikacji :
Wybierz plik FlightBooking.json w folderze CognitiveModels przykładu.
Wprowadź FlightBooking jako opcjonalną nazwę aplikacji, a następnie wybierz pozycję Gotowe.
W witrynie można wyświetlić okno dialogowe Jak utworzyć efektywną aplikację usługi LUIS i uaktualnić jednostki złożone. Możesz odrzucić te okna dialogowe i kontynuować.
Wytrenuj aplikację, a następnie opublikuj aplikację w środowisku produkcyjnym .
Aby uzyskać więcej informacji, zobacz dokumentację usługi LUIS dotyczącą sposobu trenowania i publikowania aplikacji.
Dlaczego warto używać jednostek
Jednostki usługi LUIS umożliwiają botowi zrozumienie zdarzeń poza standardowymi intencjami. Dzięki temu można zbierać od użytkowników dodatkowe informacje, dzięki czemu bot może zadawać pytania i reagować inteligentniej. Wraz z definicjami trzech intencji usługi LUIS "Book Flight", "Cancel" i "None" plik FlightBooking.json zawiera również zestaw jednostek, takich jak "From.Airport" i "To.Airport". Te jednostki umożliwiają usłudze LUIS wykrywanie i zwracanie dodatkowych informacji zawartych w oryginalnych danych wejściowych użytkownika podczas żądania nowej rezerwacji podróży.
Uzyskiwanie wartości w celu nawiązania połączenia z aplikacją usługi LUIS
Po opublikowaniu aplikacji LUIS możesz uzyskać do niej dostęp z bota. Aby uzyskać dostęp do aplikacji usługi LUIS z poziomu bota, musisz zarejestrować kilka wartości. Te informacje można pobrać za pomocą portalu usługi LUIS.
Pobieranie informacji o aplikacji z portalu LUIS.ai
Plik ustawień (appsettings.json.envlub config.py) działa jako miejsce, aby połączyć wszystkie odwołania do usługi w jednym miejscu. Pobrane informacje zostaną dodane do tego pliku w następnej sekcji.
Wybierz opublikowaną aplikację usługi LUIS z luis.ai.
Po otwarciu opublikowanej aplikacji LUIS wybierz kartę ZARZĄDZAJ .
Wybierz kartę Ustawienia po lewej stronie i zapisz wartość wyświetlaną dla pozycji Identyfikator aplikacji jako <YOUR_APP_ID>.
Wybierz pozycję Zasoby platformy Azure, a następnie zasób przewidywania. Zapisz wartość wyświetlaną dla pozycji Lokalizacja jako <YOUR_REGION> i Klucz podstawowy jako <YOUR_AUTHORING_KEY>.
Alternatywnie możesz użyć regionu i klucza podstawowego dla zasobu tworzenia.
Dodaj informacje wymagane do uzyskania dostępu do aplikacji luis, w tym identyfikator aplikacji, klucz tworzenia i region do appsettings.json pliku. W poprzednim kroku pobrano te wartości z opublikowanej aplikacji usługi LUIS. Nazwa hosta interfejsu API powinna mieć format <your region>.api.cognitive.microsoft.com.
Dodaj informacje wymagane do uzyskania dostępu do aplikacji luis, w tym identyfikator aplikacji, klucz tworzenia i region do .env pliku. W poprzednim kroku pobrano te wartości z opublikowanej aplikacji usługi LUIS. Nazwa hosta interfejsu API powinna mieć format <your region>.api.cognitive.microsoft.com.
Dodaj informacje wymagane do uzyskania dostępu do aplikacji luis, w tym identyfikator aplikacji, klucz tworzenia i region do application.properties pliku. W poprzednim kroku pobrano te wartości z opublikowanej aplikacji usługi LUIS. Nazwa hosta interfejsu API powinna mieć format <your region>.api.cognitive.microsoft.com.
Dodaj informacje wymagane do uzyskania dostępu do aplikacji luis, w tym identyfikator aplikacji, klucz tworzenia i region do config.py pliku. W poprzednim kroku pobrano te wartości z opublikowanej aplikacji usługi LUIS. Nazwa hosta interfejsu API powinna mieć format <your region>.api.cognitive.microsoft.com.
Upewnij się, że pakiet NuGet Microsoft.Bot.Builder.AI.Luis jest zainstalowany dla projektu.
Aby nawiązać połączenie z usługą LUIS, bot pobiera informacje dodane do pliku appsetting.json. Klasa FlightBookingRecognizer zawiera kod z ustawieniami z pliku appsetting.json i wysyła zapytanie do usługi LUIS przez wywołanie RecognizeAsync metody .
FlightBookingRecognizer.cs
public class FlightBookingRecognizer : IRecognizer
{
private readonly LuisRecognizer _recognizer;
public FlightBookingRecognizer(IConfiguration configuration)
{
var luisIsConfigured = !string.IsNullOrEmpty(configuration["LuisAppId"]) && !string.IsNullOrEmpty(configuration["LuisAPIKey"]) && !string.IsNullOrEmpty(configuration["LuisAPIHostName"]);
if (luisIsConfigured)
{
var luisApplication = new LuisApplication(
configuration["LuisAppId"],
configuration["LuisAPIKey"],
"https://" + configuration["LuisAPIHostName"]);
// Set the recognizer options depending on which endpoint version you want to use.
// More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
{
PredictionOptions = new Bot.Builder.AI.LuisV3.LuisPredictionOptions
{
IncludeInstanceData = true,
}
};
_recognizer = new LuisRecognizer(recognizerOptions);
}
}
// Returns true if luis is configured in the appsettings.json and initialized.
public virtual bool IsConfigured => _recognizer != null;
public virtual async Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
=> await _recognizer.RecognizeAsync(turnContext, cancellationToken);
public virtual async Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
where T : IRecognizerConvert, new()
=> await _recognizer.RecognizeAsync<T>(turnContext, cancellationToken);
}
Zawiera FlightBookingEx.cs logikę wyodrębniania z, do i travelDate; rozszerza klasę FlightBooking.cs częściową używaną do przechowywania wyników usługi LUIS podczas wywoływania FlightBookingRecognizer.RecognizeAsync<FlightBooking> z klasy MainDialog.cs.
CognitiveModels\FlightBookingEx.cs
// Extends the partial FlightBooking class with methods and properties that simplify accessing entities in the luis results
public partial class FlightBooking
{
public (string From, string Airport) FromEntities
{
get
{
var fromValue = Entities?._instance?.From?.FirstOrDefault()?.Text;
var fromAirportValue = Entities?.From?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
return (fromValue, fromAirportValue);
}
}
public (string To, string Airport) ToEntities
{
get
{
var toValue = Entities?._instance?.To?.FirstOrDefault()?.Text;
var toAirportValue = Entities?.To?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
return (toValue, toAirportValue);
}
}
// This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop the Time part.
// TIMEX is a format that represents DateTime expressions that include some ambiguity. e.g. missing a Year.
public string TravelDate
=> Entities.datetime?.FirstOrDefault()?.Expressions.FirstOrDefault()?.Split('T')[0];
}
Aby korzystać z usługi LUIS, projekt musi zainstalować pakiet botbuilder-ai npm.
Aby nawiązać połączenie z usługą LUIS, bot używa informacji dodanych .env do pliku. Klasa flightBookingRecognizer.js zawiera kod, który importuje ustawienia z .env pliku i wysyła zapytanie do usługi LUIS przez wywołanie recognize() metody .
okna dialogowe/flightBookingRecognizer.js
class FlightBookingRecognizer {
constructor(config) {
const luisIsConfigured = config && config.applicationId && config.endpointKey && config.endpoint;
if (luisIsConfigured) {
// Set the recognizer options depending on which endpoint version you want to use e.g v2 or v3.
// More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
const recognizerOptions = {
apiVersion: 'v3'
};
this.recognizer = new LuisRecognizer(config, recognizerOptions);
}
}
get isConfigured() {
return (this.recognizer !== undefined);
}
/**
* Returns an object with preformatted LUIS results for the bot's dialogs to consume.
* @param {TurnContext} context
*/
async executeLuisQuery(context) {
return await this.recognizer.recognize(context);
}
getFromEntities(result) {
let fromValue, fromAirportValue;
if (result.entities.$instance.From) {
fromValue = result.entities.$instance.From[0].text;
}
if (fromValue && result.entities.From[0].Airport) {
fromAirportValue = result.entities.From[0].Airport[0][0];
}
return { from: fromValue, airport: fromAirportValue };
}
getToEntities(result) {
let toValue, toAirportValue;
if (result.entities.$instance.To) {
toValue = result.entities.$instance.To[0].text;
}
if (toValue && result.entities.To[0].Airport) {
toAirportValue = result.entities.To[0].Airport[0][0];
}
return { to: toValue, airport: toAirportValue };
}
/**
* This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop the Time part.
* TIMEX is a format that represents DateTime expressions that include some ambiguity. e.g. missing a Year.
*/
getTravelDate(result) {
const datetimeEntity = result.entities.datetime;
if (!datetimeEntity || !datetimeEntity[0]) return undefined;
const timex = datetimeEntity[0].timex;
if (!timex || !timex[0]) return undefined;
const datetime = timex[0].split('T')[0];
return datetime;
}
}
Logika wyodrębniania z, Do i TravelDate jest implementowana jako metody pomocnicze wewnątrz flightBookingRecognizer.jselementu . Te metody są używane po wywołaniu flightBookingRecognizer.executeLuisQuery() metody z mainDialog.js
Upewnij się, że pakiet com.microsoft.bot.bot-ai-luis-v3 został dodany do pliku pom.xml.
Aby nawiązać połączenie z usługą LUIS, bot pobiera informacje dodane do pliku application.properties. Klasa FlightBookingRecognizer zawiera kod z ustawieniami z pliku application.properties i wysyła zapytanie do usługi LUIS za pomocą metody wywołującej recognize .
FlightBookingRecognizer.java
/**
* The constructor of the FlightBookingRecognizer class.
*
* @param configuration The Configuration object to use.
*/
public FlightBookingRecognizer(Configuration configuration) {
Boolean luisIsConfigured = StringUtils.isNotBlank(configuration.getProperty("LuisAppId"))
&& StringUtils.isNotBlank(configuration.getProperty("LuisAPIKey"))
&& StringUtils.isNotBlank(configuration.getProperty("LuisAPIHostName"));
if (luisIsConfigured) {
LuisApplication luisApplication = new LuisApplication(
configuration.getProperty("LuisAppId"),
configuration.getProperty("LuisAPIKey"),
String.format("https://%s", configuration.getProperty("LuisAPIHostName"))
);
// Set the recognizer options depending on which endpoint version you want to use.
// More details can be found in
// https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
LuisRecognizerOptionsV3 recognizerOptions = new LuisRecognizerOptionsV3(luisApplication);
recognizerOptions.setIncludeInstanceData(true);
this.recognizer = new LuisRecognizer(recognizerOptions);
}
}
/**
* Runs an utterance through a recognizer and returns a generic recognizer result.
*
* @param turnContext Turn context.
* @return Analysis of utterance.
*/
@Override
public CompletableFuture<RecognizerResult> recognize(TurnContext turnContext) {
return this.recognizer.recognize(turnContext);
}
Zawiera FlightBookingRecognizer.cs logikę wyodrębniania z, do i travelDate, i jest wywoływana z , aby zdekodować MainDialog.java wyniki wyniku zapytania usługi Luis.
FlightBookingRecognizer.java
/**
* Gets the From data from the entities which is part of the result.
*
* @param result The recognizer result.
* @return The object node representing the From data.
*/
public ObjectNode getFromEntities(RecognizerResult result) {
String fromValue = "", fromAirportValue = "";
if (result.getEntities().get("$instance").get("From") != null) {
fromValue = result.getEntities().get("$instance").get("From").get(0).get("text")
.asText();
}
if (!fromValue.isEmpty()
&& result.getEntities().get("From").get(0).get("Airport") != null) {
fromAirportValue = result.getEntities().get("From").get(0).get("Airport").get(0).get(0)
.asText();
}
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
ObjectNode entitiesNode = mapper.createObjectNode();
entitiesNode.put("from", fromValue);
entitiesNode.put("airport", fromAirportValue);
return entitiesNode;
}
/**
* Gets the To data from the entities which is part of the result.
*
* @param result The recognizer result.
* @return The object node representing the To data.
*/
public ObjectNode getToEntities(RecognizerResult result) {
String toValue = "", toAirportValue = "";
if (result.getEntities().get("$instance").get("To") != null) {
toValue = result.getEntities().get("$instance").get("To").get(0).get("text").asText();
}
if (!toValue.isEmpty() && result.getEntities().get("To").get(0).get("Airport") != null) {
toAirportValue = result.getEntities().get("To").get(0).get("Airport").get(0).get(0)
.asText();
}
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
ObjectNode entitiesNode = mapper.createObjectNode();
entitiesNode.put("to", toValue);
entitiesNode.put("airport", toAirportValue);
return entitiesNode;
}
/**
* This value will be a TIMEX. And we are only interested in a Date so grab the first result and
* drop the Time part. TIMEX is a format that represents DateTime expressions that include some
* ambiguity. e.g. missing a Year.
*
* @param result A {link RecognizerResult}
* @return The Timex value without the Time model
*/
public String getTravelDate(RecognizerResult result) {
JsonNode datetimeEntity = result.getEntities().get("datetime");
if (datetimeEntity == null || datetimeEntity.get(0) == null) {
return null;
}
JsonNode timex = datetimeEntity.get(0).get("timex");
if (timex == null || timex.get(0) == null) {
return null;
}
String datetime = timex.get(0).asText().split("T")[0];
return datetime;
}
Upewnij się, że pakiet botbuilder-ai PyPI jest zainstalowany dla projektu.
Aby nawiązać połączenie z usługą LUIS, bot używa informacji dodanych config.py do pliku. Klasa FlightBookingRecognizer zawiera kod, który importuje ustawienia z config.py pliku i wysyła zapytanie do usługi LUIS przez wywołanie recognize() metody .
flight_booking_recognizer.py
class FlightBookingRecognizer(Recognizer):
def __init__(self, configuration: DefaultConfig):
self._recognizer = None
luis_is_configured = (
configuration.LUIS_APP_ID
and configuration.LUIS_API_KEY
and configuration.LUIS_API_HOST_NAME
)
if luis_is_configured:
# Set the recognizer options depending on which endpoint version you want to use e.g v2 or v3.
# More details can be found in https://docs.microsoft.com/azure/cognitive-services/luis/luis-migration-api-v3
luis_application = LuisApplication(
configuration.LUIS_APP_ID,
configuration.LUIS_API_KEY,
"https://" + configuration.LUIS_API_HOST_NAME,
)
self._recognizer = LuisRecognizer(luis_application)
@property
def is_configured(self) -> bool:
# Returns true if luis is configured in the config.py and initialized.
return self._recognizer is not None
async def recognize(self, turn_context: TurnContext) -> RecognizerResult:
return await self._recognizer.recognize(turn_context)
Logika wyodrębniania z, do i travel_date jest implementowana jako metody pomocnicze z LuisHelper klasy wewnątrz luis_helper.pyklasy . Te metody są używane po wywołaniu LuisHelper.execute_luis_query() metody z main_dialog.py
pomocnicy/luis_helper.py
class LuisHelper:
@staticmethod
async def execute_luis_query(
luis_recognizer: LuisRecognizer, turn_context: TurnContext
) -> (Intent, object):
"""
Returns an object with preformatted LUIS results for the bot's dialogs to consume.
"""
result = None
intent = None
try:
recognizer_result = await luis_recognizer.recognize(turn_context)
intent = (
sorted(
recognizer_result.intents,
key=recognizer_result.intents.get,
reverse=True,
)[:1][0]
if recognizer_result.intents
else None
)
if intent == Intent.BOOK_FLIGHT.value:
result = BookingDetails()
# We need to get the result from the LUIS JSON which at every level returns an array.
to_entities = recognizer_result.entities.get("$instance", {}).get(
"To", []
)
if len(to_entities) > 0:
if recognizer_result.entities.get("To", [{"$instance": {}}])[0][
"$instance"
]:
result.destination = to_entities[0]["text"].capitalize()
else:
result.unsupported_airports.append(
to_entities[0]["text"].capitalize()
)
from_entities = recognizer_result.entities.get("$instance", {}).get(
"From", []
)
if len(from_entities) > 0:
if recognizer_result.entities.get("From", [{"$instance": {}}])[0][
"$instance"
]:
result.origin = from_entities[0]["text"].capitalize()
else:
result.unsupported_airports.append(
from_entities[0]["text"].capitalize()
)
# This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop
# the Time part. TIMEX is a format that represents DateTime expressions that include some ambiguity.
# e.g. missing a Year.
date_entities = recognizer_result.entities.get("datetime", [])
if date_entities:
timex = date_entities[0]["timex"]
if timex:
datetime = timex[0].split("T")[0]
result.travel_date = datetime
else:
result.travel_date = None
except Exception as exception:
print(exception)
return intent, result
Usługa LUIS jest teraz skonfigurowana i połączona z botem.
Uruchom przykład lokalnie na maszynie. Jeśli potrzebujesz instrukcji, zapoznaj się z plikiem README przykładu języka C#, przykładu JS lub przykładu języka Python.
W emulatorze wpisz komunikat, taki jak "podróż do paryża" lub "przejście z paryża do Berlina". Użyj dowolnej wypowiedzi znalezionej w pliku FlightBooking.json do szkolenia intencji "Zarezerwuj lot".
Jeśli górna intencja zwrócona z usługi LUIS zostanie rozpoznana jako "Lot książki", bot zadawa więcej pytań, dopóki nie będzie miał wystarczającej ilości informacji przechowywanych w celu utworzenia rezerwacji podróży. W tym momencie zwróci te informacje o rezerwacji z powrotem do użytkownika.
W tym momencie logika bota kodu zostanie zresetowana i będzie można nadal tworzyć więcej rezerwacji.
Dodatkowe informacje
Aby uzyskać więcej informacji na temat usługi LUIS, zobacz dokumentację usługi LUIS:
Różne części zestawu SDK definiują oddzielne klasy jednostek lub elementy.
Aby uzyskać informacje o jednostkach komunikatów, zobacz Jednostki i typy działań.