Personalizar Estados e fluxos para casos de uso de varejo
Você pode personalizar Estados e fluxos do Dialog Manager para seus casos de uso específicos. Em nosso exemplo de varejo, temos os quatro arquivos yaml a seguir para direcionar a conversa de acordo com diferentes intenções.
A seguinte lista de nomes de arquivo e descrição de cada arquivo:
-
main_flow.yml
: Define os fluxos e estados da conversa principal e direciona o fluxo para os outros três arquivos yaml quando necessário. -
retail_flow.yml
: Contém estados relacionados com questões de varejo ou pontos de interesse. O sistema fornece as informações da loja mais próxima ou o preço de um determinado item. -
weather_flow.yml
: Contém estados relacionados com questões meteorológicas. Se a localização não puder ser determinada, o sistema faz uma pergunta de acompanhamento para esclarecer. -
error_flow.yml
: Lida com casos em que as intenções do usuário não se enquadram nos três arquivos yaml acima. Depois de exibir uma mensagem de erro, o sistema redireciona para aceitar perguntas do usuário.as seções a seguir contêm as definições detalhadas para esses arquivos yaml.
main_flow.yml
name: JarvisRetail intent_transitions: jarvis_error: error price_check: retail_price_check inventory_check: retail_inventory_check store_location: retail_store_location weather.weather: weather weather.temperature: temperature weather.sunny: sunny weather.cloudy: cloudy weather.snow: snow weather.rainfall: rain weather.snow_yes_no: snowfall weather.rainfall_yes_no: rainfall weather.temperature_yes_no: tempyesno weather.humidity: humidity weather.humidity_yes_no: humidity navigation.startnavigationpoi: retail # Transitions should be context and slot based. Redirecting for now. navigation.geteta: retail navigation.showdirection: retail navigation.showmappoi: idk_what_you_talkin_about nomatch.none: idk_what_you_talkin_about states: init: type: message_text properties: text: "Hi, welcome to NARA retail and weather service. How can I help you?" input_intent: type: input_context properties: nlp_type: jarvis entities: intent: dontcare # This state is executed if the intent was not understood dont_get_the intent: type: message_text_random properties: responses: - "Sorry I didn't get that! Please come again." - "I beg your pardon! Say that again?" - "Are we talking about weather? What would you like to know?" - "Sorry I know only about the weather" - "You can ask me about the weather, the rainfall, the temperature, I don't know much more" delay: 0 transitions: next_state: input_intent idk_what_you_talkin_about: type: message_text_random properties: responses: - "Sorry I didn't get that! Please come again." - "I beg your pardon! Say that again?" - "Are we talking about retail or weather? What would you like to know?" - "Sorry I know only about retail and the weather" - "You can ask me about retail information or the weather, the rainfall, the temperature. I don't know much more." delay: 0 transitions: next_state: input_intent error: type: change_context properties: update_keys: intent: 'error' transitions: flow: error_flow retail_inventory_check: type: change_context properties: update_keys: intent: 'retail_inventory_check' transitions: flow: retail_flow retail_price_check: type: change_context properties: update_keys: intent: 'check_item_price' transitions: flow: retail_flow retail_store_location: type: change_context properties: update_keys: intent: 'find_the_store' transitions: flow: retail_flow weather: type: change_context properties: update_keys: intent: 'weather' transitions: flow: weather_flow temperature: type: change_context properties: update_keys: intent: 'temperature' transitions: flow: weather_flow rainfall: type: change_context properties: update_keys: intent: 'rainfall' transitions: flow: weather_flow sunny: type: change_context properties: update_keys: intent: 'sunny' transitions: flow: weather_flow cloudy: type: change_context properties: update_keys: intent: 'cloudy' transitions: flow: weather_flow snow: type: change_context properties: update_keys: intent: 'snow' transitions: flow: weather_flow rain: type: change_context properties: update_keys: intent: 'rain' transitions: flow: weather_flow snowfall: type: change_context properties: update_keys: intent: 'snowfall' transitions: flow: weather_flow tempyesno: type: change_context properties: update_keys: intent: 'tempyesno' transitions: flow: weather_flow humidity: type: change_context properties: update_keys: intent: 'humidity' transitions: flow: weather_flow end_state: type: reset transitions: next_state: init
retail_flow.yml
name: retail_flow states: store_location: type: conditional_exists properties: key: '{{location}}' transitions: exists: retail_state notexists: ask_retail_location retail_state: type: Retail properties: transitions: next_state: output_retail output_retail: type: message_text properties: text: '{{retail_status}}' transitions: next_state: input_intent ask_retail_location: type: message_text properties: text: "For which location? I can find the closest store near you." transitions: next_state: input_retail_location input_retail_location: type: input_user properties: nlp_type: jarvis entities: slot: location require_match: true transitions: match: retail_state notmatch: check_retail_jarvis_error output_retail_acknowledge: type: message_text_random properties: responses: - 'ok in {{location}}' - 'the store in {{location}}' - 'I always wanted to shop in {{location}}' delay: 0 transitions: next_state: retail_state output_retail_notlocation: type: message_text properties: text: "I did not understand the location. Can you please repeat?" transitions: next_state: input_intent check_rerail_jarvis_error: type: conditional_exists properties: key: '{{jarvis_error}}' transitions: exists: show_retail_jarvis_api_error notexists: output_retail_notlocation show_retail_jarvis_api_error: type: message_text properties: text: "I am having troubled understanding right now. Come again on that?" transitions: next_state: input_intent
weather_flow.yml
name: weather_flow states: check_weather_location: type: conditional_exists properties: key: '{{location}}' transitions: exists: weather_state notexists: ask_weather_location weather_state: type: Weather properties: transitions: next_state: output_weather output_weather: type: message_text properties: text: '{{weather_status}}' transitions: next_state: input_intent ask_weather_location: type: message_text properties: text: "For which location?" transitions: next_state: input_weather_location input_weather_location: type: input_user properties: nlp_type: jarvis entities: slot: location require_match: true transitions: match: weather_state notmatch: check_jarvis_error output_weather_acknowledge: type: message_text_random properties: responses: - 'ok in {{location}}' - 'the weather in {{location}}' - 'I always wanted to go in {{location}}' delay: 0 transitions: next_state: weather_state output_weather_notlocation: type: message_text properties: text: "I did not understand the location, can you please repeat?" transitions: next_state: input_intent check_jarvis_error: type: conditional_exists properties: key: '{{jarvis_error}}' transitions: exists: show_jarvis_api_error notexists: output_weather_notlocation show_jarvis_api_error: type: message_text properties: text: "I am having troubled understanding right now. Come again on that, else check jarvis services?" transitions: next_state: input_intent
error_flow.yml
name: error_flow states: error_state: type: message_text_random properties: responses: - "Sorry I didn't get that!" - "Are we talking about retail or weather? What would you like to know?" - "Sorry I know only about retail information or the weather" - "You can ask me about retail information or the weather, the rainfall, the temperature. I don't know much more" - "Let's talk about retail or the weather!" delay: 0 transitions: next_state: input_intent