A Language Understanding (LUIS) 2025. október 1-jén megszűnik.
2023. április 1-től nem hozhat létre új LUIS-erőforrásokat.
Az Azure AI Language részeként már elérhető a nyelvértés újabb verziója.
Az Azure AI Language egyik funkciója, a beszélgetési nyelv megértése (CLU) a LUIS frissített verziója.
További információ a Bot Framework SDK nyelvfelismerési támogatásáról: Természetes nyelvfelismerés.
Nehéz feladat lehet megérteni, hogy a felhasználó mit jelent a beszélgetésben és a kontextusban, de természetesebb beszélgetési környezetet biztosíthat a robotnak. A Language Understanding (LUIS) egy felhőalapú API-szolgáltatás, amely lehetővé teszi, hogy a robot felismerje a felhasználói üzenetek szándékát, természetesebb nyelvet biztosíthasson a felhasználótól, és jobban irányíthassa a beszélgetési folyamatot.
Ez a témakör végigvezeti a LUIS hozzáadásán egy repülőjegy-foglalási alkalmazáshoz, hogy felismerje a felhasználói bemenetben található különböző szándékokat és entitásokat.
Feljegyzés
A Bot Framework JavaScript, C# és Python SDK-k továbbra is támogatottak lesznek, a Java SDK-t azonban 2023 novemberében végső hosszú távú támogatással kivonják.
A Java SDK-val létrehozott meglévő robotok továbbra is működni fognak.
Az új robotépítéshez fontolja meg a Microsoft Copilot Studio használatát, és olvassa el a megfelelő copilot-megoldás kiválasztását.
Ez az alapvető robotminta egy repülőtéri járatfoglalási alkalmazás példáját mutatja be. Luis-szolgáltatással ismeri fel a felhasználói bemenetet, és visszaadja a legjobban felismert LUIS-szándékot.
A nyelvi modell három szándékot tartalmaz: Book Flight, Cancelés None. A LUIS ezeket a szándékokat arra használja, hogy megértse, mit jelentett a felhasználó, amikor üzenetet küld a robotnak. A nyelvi modell meghatározza azokat az entitásokat is, amelyeket a LUIS kinyerhet a felhasználó bemenetéből, például a forrás- vagy célrepülőteret.
A felhasználói bemenetek DialogBot feldolgozása után a rendszer a jelenlegi állapotot is UserStateConversationStatementi. Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató repülőjegy foglalást. Ebben a cikkben a minta LUIS-szempontjait fogjuk lefedni. A minta általános folyamata azonban a következő:
OnMembersAddedAsync a rendszer meghívja, amikor egy új felhasználó csatlakozik, és üdvözlőkártyát jelenít meg.
OnMessageActivityAsync a rendszer minden fogadott felhasználói bemenethez meghívja.
A OnMessageActivityAsync modul a párbeszédpanel-bővítmény metódusán keresztül futtatja a megfelelő párbeszédpanelt Run . Ezután a fő párbeszédpanel meghívja a LUIS-segítőt, hogy keresse meg a legmagasabb pontszámú felhasználói szándékot. Ha a felhasználói bemenet fő szándéka a "BookFlight" értéket adja vissza, a segéd kitölti a LUIS által visszaadott felhasználó adatait. Ezután a fő párbeszédpanel elindítja a BookingDialogkövetkezőt, amely szükség szerint további információkat szerez be a felhasználótól, például:
Origin a kiinduló város
TravelDate a járat lefoglalásának dátuma
Destination a cél város
A felhasználói bemenetek dialogBot feldolgozása után a rendszer a jelenlegi állapotot is userStateconversationStatementi. Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató repülőjegy foglalást. Ebben a cikkben a minta LUIS-szempontjait fogjuk lefedni. A minta általános folyamata azonban a következő:
onMembersAdded a rendszer meghívja, amikor egy új felhasználó csatlakozik, és üdvözlőkártyát jelenít meg.
OnMessage a rendszer minden fogadott felhasználói bemenethez meghívja.
A onMessage modul a mainDialogfelhasználói bemenetet összegyűjtő modult futtatja.
Ezután a fő párbeszédpanel meghívja a LUIS-segítőt FlightBookingRecognizer , hogy keresse meg a legmagasabb pontszámú felhasználói szándékot. Ha a felhasználói bemenet fő szándéka a "BookFlight" értéket adja vissza, a segéd kitölti a LUIS által visszaadott felhasználó adatait.
A válasz visszalépése után megőrzi a LUIS által visszaadott felhasználó adatait, mainDialog és elindul bookingDialog. bookingDialog szükség szerint további információkat szerez be a felhasználótól, például
destination a cél város.
origin a kiinduló város.
travelDate a járat lefoglalásának dátuma.
A felhasználói bemenetek DialogBot feldolgozása után a rendszer a jelenlegi állapotot is UserStateConversationStatementi.
Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató repülőjegy foglalást.
Ebben a cikkben a minta LUIS-szempontjait fogjuk lefedni. A minta általános folyamata azonban a következő:
onMembersAdded a rendszer meghívja, amikor egy új felhasználó csatlakozik, és üdvözlőkártyát jelenít meg.
onMessageActivity a rendszer minden fogadott felhasználói bemenethez meghívja.
A onMessageActivity modul a párbeszédpanel-bővítmény metódusán keresztül futtatja a megfelelő párbeszédpanelt run . Ezután a fő párbeszédpanel meghívja a LUIS-segítőt, hogy keresse meg a legmagasabb pontszámú felhasználói szándékot. Ha a felhasználói bemenet fő szándéka a "BookFlight" értéket adja vissza, a segéd kitölti a LUIS által visszaadott felhasználó adatait. Ezután a fő párbeszédpanel elindítja a BookingDialogkövetkezőt, amely szükség szerint további információkat szerez be a felhasználótól, például:
Origin a kiinduló város
TravelDate a járat lefoglalásának dátuma
Destination a cél város
A felhasználói bemenetek DialogBot feldolgozása után a rendszer a jelenlegi állapotot is user_stateconversation_statementi. Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató repülőjegy foglalást. Ebben a cikkben a minta LUIS-szempontjait fogjuk lefedni. A minta általános folyamata azonban a következő:
on_members_added_activity a rendszer meghívja, amikor egy új felhasználó csatlakozik, és üdvözlőkártyát jelenít meg.
on_message_activity a rendszer minden fogadott felhasználói bemenethez meghívja.
A on_message_activity modul a párbeszédpanel-bővítmény metódusán keresztül futtatja a megfelelő párbeszédpanelt run_dialog . Ezután a fő párbeszédpanelen megkeresi LuisHelper a legmagasabb pontszámú felhasználói szándékot. Ha a felhasználói bemenet fő szándéka a "BookFlight" értéket adja vissza, a segédfüggvény kitölti a LUIS által visszaadott felhasználó adatait. Ezután a fő párbeszédpanel elindítja a BookingDialogkövetkezőt, amely szükség szerint további információkat szerez be a felhasználótól, például:
Válassza ki a FlightBooking.json fájlt a minta CognitiveModels mappájában.
Adja meg FlightBooking az alkalmazás opcionális nevét, és válassza a Kész lehetőséget.
A webhely megjelenítheti , hogyan hozhat létre hatékony LUIS-alkalmazást , és frissítheti az összetett entitások párbeszédpaneleit. Ezeket a párbeszédpaneleket bezárhatja, és folytathatja.
Betanítsa az alkalmazást, majd tegye közzé az alkalmazást az éles környezetben.
További információkért tekintse meg az alkalmazások betanítása és közzététele luis-dokumentációját.
Miért érdemes entitásokat használni?
A LUIS-entitások lehetővé teszik a robot számára, hogy megértse a szabványos szándékokon túli eseményeket. Ez lehetővé teszi, hogy további információkat gyűjtsön a felhasználóktól, így a robot kérdéseket tehet fel, és intelligensebben válaszolhat. A három LUIS-szándék , a "Book Flight", a "Cancel" és a "None" definícióival együtt a FlightBooking.json fájl olyan entitásokat is tartalmaz, mint a From.Airport és a To.Airport. Ezek az entitások lehetővé teszik a LUIS számára, hogy észlelje és visszaadja a felhasználó eredeti bemenetén belül található további információkat, amikor új utazási foglalást kérnek.
Értékek lekérése a LUIS-alkalmazáshoz való csatlakozáshoz
A LUIS-alkalmazás közzététele után a robotból érheti el. Több értéket kell rögzítenie, hogy hozzáférjen a LUIS-alkalmazáshoz a roboton belül. Ezeket az információkat a LUIS-portálon lehet lekérni.
Alkalmazásadatok lekérése a LUIS.ai portálról
A beállításfájl (appsettings.json.envvagy config.py) az összes szolgáltatáshivatkozás egy helyen való összevonásának helye. A lekért információk a következő szakaszban lesznek hozzáadva ehhez a fájlhoz.
Válassza ki a közzétett LUIS-alkalmazást a luis.ai.
A közzétett LUIS-alkalmazás megnyitása után válassza a MANAGE lapot.
Válassza a bal oldalon a Beállítások lapot, és rögzítse az alkalmazásazonosítóhoz <>YOUR_APP_ID megjelenített értéket.
Válassza ki az Azure-erőforrásokat, majd az előrejelzési erőforrást. A Hely értékének rögzítése YOUR_REGION> és <elsődleges kulcsként <YOUR_AUTHORING_KEY>.
Másik lehetőségként használhatja a régiót és az elsődleges kulcsot a szerzői erőforráshoz.
Adja hozzá a LUIS-alkalmazás eléréséhez szükséges információkat, beleértve az alkalmazásazonosítót, a szerzői kulcsot és a régiót a appsettings.json fájlba. Az előző lépésben lekérte ezeket az értékeket a közzétett LUIS-alkalmazásból. Az API-gazdagép nevének formátumában <your region>.api.cognitive.microsoft.comkell lennie.
Adja hozzá a LUIS-alkalmazás eléréséhez szükséges információkat, beleértve az alkalmazásazonosítót, a szerzői kulcsot és a régiót a .env fájlba. Az előző lépésben lekérte ezeket az értékeket a közzétett LUIS-alkalmazásból. Az API-gazdagép nevének formátumában <your region>.api.cognitive.microsoft.comkell lennie.
Adja hozzá a LUIS-alkalmazás eléréséhez szükséges információkat, beleértve az alkalmazásazonosítót, a szerzői kulcsot és a régiót a application.properties fájlba. Az előző lépésben lekérte ezeket az értékeket a közzétett LUIS-alkalmazásból. Az API-gazdagép nevének formátumában <your region>.api.cognitive.microsoft.comkell lennie.
Adja hozzá a LUIS-alkalmazás eléréséhez szükséges információkat, beleértve az alkalmazásazonosítót, a szerzői kulcsot és a régiót a config.py fájlba. Az előző lépésben lekérte ezeket az értékeket a közzétett LUIS-alkalmazásból. Az API-gazdagép nevének formátumában <your region>.api.cognitive.microsoft.comkell lennie.
Győződjön meg arról, hogy a Microsoft.Bot.Builder.AI.Luis NuGet csomag telepítve van a projekthez.
A LUIS szolgáltatáshoz való csatlakozáshoz a robot lekéri a appsetting.json fájlhoz hozzáadott adatokat. Az FlightBookingRecognizer osztály a appsetting.json fájlban található beállításokat tartalmazó kódot tartalmaz, és hívási RecognizeAsync metódussal lekérdezi a LUIS szolgáltatást.
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);
}
Ez FlightBookingEx.cs tartalmazza a kiolvasni kívánt logikát a From, a To és a TravelDate között; kiterjeszti a LUIS-eredmények tárolására használt részleges osztályt FlightBooking.cs a híváskor FlightBookingRecognizer.RecognizeAsync<FlightBooking> a 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];
}
A LUIS használatához a projektnek telepítenie kell a botbuilder-ai npm csomagot.
A LUIS szolgáltatáshoz való csatlakozáshoz a robot a fájlhoz .env hozzáadott információkat használja. Az flightBookingRecognizer.js osztály tartalmazza azt a kódot, amely importálja a beállításokat a .env fájlból, és hívási recognize() metódussal lekérdezi a LUIS szolgáltatást.
párbeszédpanelek/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;
}
}
A From, a To és a TravelDate kinyerendő logikája segédmeteként van implementálva.flightBookingRecognizer.js Ezeket a metódusokat a rendszer a következő forrásból való hívás flightBookingRecognizer.executeLuisQuery() után használja: mainDialog.js
Győződjön meg arról, hogy a com.microsoft.bot.bot-ai-luis-v3 csomag hozzá van adva a pom.xml fájlhoz.
A LUIS szolgáltatáshoz való csatlakozáshoz a robot lekéri az application.properties fájlhoz hozzáadott adatokat. Az FlightBookingRecognizer osztály az application.properties fájlban található beállításokat tartalmazó kódot tartalmaz, és hívási recognize metódussal lekérdezi a LUIS szolgáltatást.
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);
}
Ez FlightBookingRecognizer.cs tartalmazza a Kinyerni, a To és a TravelDate függvényből kinyerni kívánt logikát, és a MainDialog.java Luis-lekérdezés eredményének dekódolásához a rendszer meghívja a rendszer.
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;
}
Győződjön meg arról, hogy a botbuilder-ai PyPI csomag telepítve van a projekthez.
A LUIS szolgáltatáshoz való csatlakozáshoz a robot a fájlhoz config.py hozzáadott információkat használja. Az FlightBookingRecognizer osztály tartalmazza azt a kódot, amely importálja a beállításokat a config.py fájlból, és hívási recognize() metódussal lekérdezi a LUIS szolgáltatást.
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)
A Forrás, a Cél és a travel_date kinyerni kívánt logika segédmeteként van implementálva a LuisHelper belső luis_helper.pyosztályból. Ezeket a metódusokat a rendszer a következő forrásból való hívás LuisHelper.execute_luis_query() után használja: main_dialog.py
segítők/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
A LUIS most már konfigurálva van, és csatlakozik a robothoz.
Futtassa a mintát helyileg a számítógépen. Ha útmutatásra van szüksége, tekintse meg a README C#-minta, a JS-minta vagy a Python-minta fájljait.
Az Emulátorban írjon be egy üzenetet, például "utazás Párizsba" vagy "Párizsból Berlinbe". A "Könyvrepülés" szándék betanításához használja a fájlban található bármilyen kimondott szöveget FlightBooking.json.
Ha a LUIS által visszaadott fő szándék a "Foglalás", a robot további kérdéseket tesz fel, amíg nem rendelkezik elegendő információval az utazási foglalás létrehozásához. Ezen a ponton vissza fogja adni ezt a foglalási információt a felhasználónak.
Ezen a ponton a kódrobot logikája alaphelyzetbe áll, és továbbra is létrehozhat további foglalásokat.
További információk
A LUIS-ról további információt a LUIS dokumentációjában talál:
Az SDK különböző részei külön entitásosztályokat vagy elemeket határoznak meg.
Az üzenetentitásokról az Entitások és a tevékenységtípusok című témakörben olvashat.