Bahasa Rasa

Persistence of Slots during Coexistence#

In Coexistence of NLU-based and CALM systems the action action_reset_routing resets all slots and hides events from featurization for the NLU-based system policies to prevent them from seeing events that originated while CALM was active. However, you might want to share some slots that both CALM and the NLU-based system should be able to use. One use case for these slots are basic user profile slots. Both the NLU-based system and CALM should likely be able to know whether a user is logged in or not, what their user name is, or what channel they are using. If you are storing this kind of data in slots you can annotate those slot definitions with the option shared_for_coexistence: True.

shared_for_coexistence: True

shared_for_coexistence: True

In the coexistence mode, if the option shared_for_coexistence is NOT set to true, it invalidates the reset_after_flow_ends: False property in the flow definition. In order for the slot value to be retained throughout the conversation, the shared_for_coexistence must be set to true.

Session configuration#

A conversation session represents the dialogue between the assistant and the user. Conversation sessions can begin in three ways:

the user begins the conversation with the assistant,

the user sends their first message after a configurable period of inactivity, or

a manual session start is triggered with the /session_start intent message.

You can define the period of inactivity after which a new conversation session is triggered in the domain under the session_config key.

Available parameters are:

The default session configuration looks as follows:

session_expiration_time: 60 # value in minutes, 0 means infinitely long

carry_over_slots_to_new_session: true # set to false to forget slots between sessions

This means that if a user sends their first message after 60 minutes of inactivity, a new conversation session is triggered, and that any existing slots are carried over into the new session. Setting the value of session_expiration_time to 0 means that sessions will not end (note that the action_session_start action will still be triggered at the very beginning of conversations).

A session start triggers the default action action_session_start. Its default implementation moves all existing slots into the new session. Note that all conversations begin with an action_session_start. Overriding this action could for instance be used to initialize the tracker with slots from an external API call, or to start the conversation with a bot message. The docs on Customizing the session start action shows you how to do that.

The config key in the domain file maintains the store_entities_as_slots parameter. This parameter is used only in the context of reading stories and turning them into trackers. If the parameter is set to True, this will result in slots being implicitly set from entities if applicable entities are present in the story. When an entity matches the from_entity slot mapping, store_entities_as_slots defines whether the entity value should be placed in that slot. Therefore, this parameter skips adding an explicit slot_was_set step manually in the story. By default, this behaviour is switched on.

You can turn off this functionality by setting the store_entities_as_slots parameter to false:

store_entities_as_slots: false

If you're looking for information on the config.yml file, check out the docs on Model Configuration.

A story is a representation of a conversation between a user and an AI assistant, converted into a specific format where user inputs are expressed as intents (and entities when necessary), while the assistant's responses and actions are expressed as action names.

Here's an example of a dialogue in the Rasa story format:

- story: collect restaurant booking info # name of the story - just for debugging

- intent: greet # user message with no entities

- action: utter_ask_howcanhelp

- intent: inform # user message with entities

- action: utter_on_it # action that the bot should execute

- action: utter_ask_cuisine

- action: utter_ask_num_people

While writing stories, you do not have to deal with the specific contents of the messages that the users send. Instead, you can take advantage of the output from the NLU pipeline, which lets you use just the combination of an intent and entities to refer to all the possible messages the users can send to mean the same thing.

It is important to include the entities here as well because the policies learn to predict the next action based on a combination of both the intent and entities (you can, however, change this behavior using the use_entities attribute).

All actions executed by the bot, including responses are listed in stories under the action key.

You can use a response from your domain as an action by listing it as one in a story. Similarly, you can indicate that a story should call a custom action by including the name of the custom action from the actions list in your domain.

During training, Rasa does not call the action server. This means that your assistant's dialogue management model doesn't know which events a custom action will return.

Because of this, events such as setting a slot or activating/deactivating a form have to be explicitly written out as part of the stories. For more info, see the documentation on Events.

Slot events are written under slot_was_set in a story. If this slot is set inside a custom action, add the slot_was_set event immediately following the custom action call. If your custom action resets a slot value to None, the corresponding event for that would look like this:

- story: set slot to none

# ... other story steps

- action: my_custom_action

There are three kinds of events that need to be kept in mind while dealing with forms in stories.

A form action event (e.g. - action: restaurant_form) is used in the beginning when first starting a form, and also while resuming the form action when the form is already active.

A form activation event (e.g. - active_loop: restaurant_form) is used right after the first form action event.

A form deactivation event (e.g. - active_loop: null), which is used to deactivate the form.

In order to get around the pitfall of forgetting to add events, the recommended way to write these stories is to use interactive learning.

Custom Slot Mappings#

You can define custom slot mappings using slot validation actions when none of the predefined mappings fit your use case. You must define this slot mapping to be of type custom, for example:

action: action_calculate_day_of_week

You can also use the custom slot mapping to list slots that will be filled by arbitrary custom actions in the course of a conversation, by listing the type and no specific action. For example:

This slot will not be updated on every user turn, but only once a custom action that returns a SlotSet event for it is predicted.

You can provide an initial value for a slot in your domain file:

Responses are actions that send a message to a user without running any custom code or returning events. These responses can be defined directly in the domain file under the responses key and can include rich content such as buttons and attachments. For more information on responses and how to define them, see Responses.

Forms are a special type of action meant to help your assistant collect information from a user. Define forms under the forms key in your domain file. For more information on form and how to define them, see Forms.

Actions are the things your bot can actually do. For example, an action could:

All custom actions should be listed in your domain, except responses which need not be listed under actions: as they are already listed under responses:.

Calling Responses as Actions#

If the name of the response starts with utter_, the response can directly be used as an action, without being listed in the actions section of your domain. You would add the response to the domain:

- text: "Hey! How are you?"

You can use that same response as an action in your stories:

- action: utter_greet

When the utter_greet action runs, it will send the message from the response back to the user.

If you want to change the text, or any other part of the response, you need to retrain the assistant before these changes will be picked up.

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Unjuk rasa atau demonstrasi (disingkat menjadi "demo") adalah sebuah gerakan protes yang dilakukan sekumpulan orang di hadapan umum. Unjuk rasa biasanya dilakukan untuk menyatakan pendapat kelompok tersebut atau penentang kebijakan yang dilaksanakan suatu pihak atau dapat pula dilakukan sebagai sebuah upaya penekanan secara politik oleh kepentingan kelompok.

Unjuk rasa umumnya dilakukan oleh kelompok mahasiswa dan orang-orang yang tidak setuju dengan pemeritah dan yang menentang kebijakan pemerintah. Namun unjuk rasa juga dilakukan oleh kelompok-kelompok lainnya dengan tujuan lainnya.

Di Indonesia, unjuk rasa menjadi hal yang umum sejak jatuhnya rezim kekuasaan Soeharto pada tahun 1998, dan unjuk rasa menjadi simbol kebebasan berekspresi di negara ini. Unjuk rasa terjadi hampir setiap hari di berbagai bagian di Indonesia, khususnya Jakarta.

adjar.id - Dalam bahasa Inggris, terdapat berbagai istilah yang bisa digunakan untuk mendeskripsikan rasa makanan atau food flavour.

Contohnya untuk mendeskripsikan rasa asam, kita bisa menggunakan kata acidic untuk rasa yang sangat asam.

Sedangkan rasa asam yang wajar, kita bisa menggunakan istilah sour.

Nah, rasa asam yang cenderung sedikit atau tipis, kita bisa menggunakan istilah tart.

Apa lagi istilah yang bisa digunakan untuk mendeskripsikan rasa makanan dalam bahasa Inggris, ya?

Istilah Bahasa Inggris untuk Mendeskripsikan Rasa Makanan

Pahit = Rasa tajam yang kuat yang tidak manis

Baca Juga: 20 Tekstur Makanan atau Food Texture dalam Bahasa Inggris

Pahit manis = Mencicipi pahit dan manis pada saat bersamaan

Pedas = Mengandung banyak bumbu yang menimbulkan rasa panas di mulut

Kuat = Dibiarkan mengembangkan rasa kuat yang menyenangkan

Ringan = Tidak memiliki rasa yang kuat

Matang = Memiliki rasa yang kuat

Baca Juga: Contoh Percakapan Mendeskripsikan Makanan dalam Bahasa Inggris

Kuat dan kaya rasa = Memiliki banyak rasa

Gurih = Terasa garam atau bumbu dan tidak manis

Dibumbui dengan baik = Mengandung bumbu untuk meningkatkan cita rasa

Tajam = Memiliki rasa yang kuat dan pahit

Asam = Rasa asam seperti lemon

Pedas = Memiliki rasa pedas yang kuat

Baca Juga: Percakapan Memesan Makanan dengan Menggunakan Bahasa Inggris

Manis dan asam = Mengandung rasa manis dan asam

Seperti sirup = Kental, manis, dan lengket

Asam = Rasa yang sedikit asam

Tidak asin = Tidak dibumbui dengan garam

Berair = Pucat atau tidak kuat rasa

Itu dia beberapa istilah yang bisa digunakan untuk mendeskripsikan rasa makanan, Adjarian.

Baca Juga: Cara Memuji Rasa Makanan dalam Bahasa Inggris serta Contoh Percakapannya

In Rasa, your domain defines the universe in which your assistant operates. Specifically, it lists:

If you are building an NLU-based assistant, refer to the Domain documentation to see how intents, entities, slot mappings, and slot featurization can be configured in your domain.

Checkpoints and OR statements#

Checkpoints and OR statements should be used with caution, if at all. There is usually a better way to achieve what you want by using Rules or the ResponseSelector.

You can use checkpoints to modularize and simplify your training data. Checkpoints can be useful, but do not overuse them. Using lots of checkpoints can quickly make your example stories hard to understand, and will slow down training.

Here is an example of stories that contain checkpoints:

- story: beginning of flow

- action: action_ask_user_question

- checkpoint: check_asked_question

- story: handle user affirm

- checkpoint: check_asked_question

- action: action_handle_affirmation

- checkpoint: check_flow_finished

- story: handle user deny

- checkpoint: check_asked_question

- action: action_handle_denial

- checkpoint: check_flow_finished

- checkpoint: check_flow_finished

- action: utter_goodbye

Unlike regular stories, checkpoints are not restricted to starting with user input. As long as the checkpoint is inserted at the right points in the main stories, the first event can be a custom action or a response as well.

Another way to write shorter stories, or to handle multiple intents or slot events the same way, is to use an or statement. For example, if you ask the user to confirm something, and you want to treat the affirm and thankyou intents in the same way. The story below will be converted into two stories at training time:

- action: utter_ask_confirm

- action: action_handle_affirmation

You can also use or statements with slot events. The following means the story requires that the current value for the name slot is set and is either joe or bob:

- action: utter_greet

or statements can be useful, but if you are using a lot of them, it is probably better to restructure your domain and/or intents. Overusing OR statements will slow down training.

Channel-Specific Response Variations#

To specify different response variations depending on which channel the user is connected to, use channel-specific response variations.

In the following example, the channel key makes the first response variation channel-specific for the slack channel while the second variation is not channel-specific:

- text: "Which game would you like to play on Slack?"

- text: "Which game would you like to play?"

Make sure the value of the channel key matches the value returned by the name() method of your input channel. If you are using a built-in channel, this value will also match the channel name used in your credentials.yml file.

When your assistant looks for suitable response variations under a given response name, it will first try to choose from channel-specific variations for the current channel. If there are no such variations, the assistant will choose from any response variations which are not channel-specific.

In the above example, the second response variation has no channel specified and can be used by your assistant for all channels other than slack.

For each response, try to have at least one response variation without the channel key. This allows your assistant to properly respond in all environments, such as in new channels, in the shell and in interactive learning.

Select which actions should receive domain#

You can control if an action should receive a domain or not.

To do this you must first enable selective domain in you endpoint configuration for action_endpoint in endpoints.yml.

url: "http://localhost:5055/webhook" # URL to your action server

enable_selective_domain: true

After selective domain for custom actions is enabled, domain will be sent only to those custom actions which have specifically stated that they need it. Custom actions inheriting from rasa-sdk FormValidationAction parent class are an exception to this rule as they will always have the domain sent to them. To specify if an action needs the domain add {send_domain: true} to custom action in the list of actions in domain.yml:

- action_hello_world: {send_domain: True} # will receive domain

- action_calculate_mass_of_sun # will not receive domain

- validate_my_form # will receive domain

Responses go under the responses key in your domain file or in a separate "responses.yml" file. Each response name should start with utter_. For example, you could add responses for greeting and saying goodbye under the response names utter_greet and utter_bye:

If you are using retrieval intents in your assistant, you also need to add responses for your assistant's replies to these intents:

utter_chitchat/ask_name:

- text: Oh yeah, I am called the retrieval bot.

utter_chitchat/ask_weather:

- text: Oh, it does look sunny right now in Berlin.

Notice the special format of response names for retrieval intents. Each name starts with utter_, followed by the retrieval intent's name (here chitchat) and finally a suffix specifying the different response keys (here ask_name and ask_weather). See the documentation for NLU training examples to learn more.

Multiple Domain Files#

The domain can be defined as a single YAML file or split across multiple files in a directory. When split across multiple files, the domain contents will be read and automatically merged together.

Using the command line interface, you can train a model with split domain files by running:

rasa train --domain path_to_domain_directory

The intents key in your domain file lists all intents used in your NLU data and conversation training data.

Ignoring Entities for Certain Intents#

To ignore all entities for certain intents, you can add the use_entities: [] parameter to the intent in your domain file like this:

To ignore some entities or explicitly take only certain entities into account you can use this syntax:

You can only use_entities or ignore_entities for any single intent.

Excluded entities for those intents will be unfeaturized and therefore will not impact the next action predictions. This is useful when you have an intent where you don't care about the entities being picked up.

If you list your intents without a use_entities or ignore_entities parameter, the entities will be featurized as normal.

It is also possible to ignore an entity for all intents by setting the influence_conversation flag to false for the entity itself. See the entities section for details.

Excluded entities for intents will be unfeaturized and therefore will not impact the next action predictions. This is useful when you have an intent where you don't care about the entities being picked up.

If you list your intents without this parameter, and without setting influence_conversation to false for any entities, all entities will be featurized as normal.

If you want these entities not to influence action prediction via slots either, set the influence_conversation: false parameter for slots with the same name.

As of 3.1, you can use the influence_conversation flag under entities. The flag can be set to false to declare that an entity should not be featurized for any intents. It is a shorthand syntax for adding an entity to the ignore_entities list of every intent in the domain. The flag is optional and default behaviour remains unchanged.

The entities section lists all entities that can be extracted by any entity extractor in your NLU pipeline.

- PERSON # entity extracted by SpacyEntityExtractor

- time # entity extracted by DucklingEntityExtractor

- membership_type # custom entity extracted by DIETClassifier

- priority # custom entity extracted by DIETClassifier

When using multiple domain files, entities can be specified in any domain file, and can be used or ignored by any intent in any domain file.

If you are using the feature Entity Roles and Groups you also need to list the roles and groups of an entity in this section.

- city: # custom entity extracted by DIETClassifier

- topping: # custom entity extracted by DIETClassifier

- size: # custom entity extracted by DIETClassifier

By default, entities influence action prediction. To prevent extracted entities from influencing the conversation for specific intents you can ignore entities for certain intents. To ignore an entity for all intents, without having to list it under the ignore_entities flag of each intent, you can set the flag influence_conversation to false under the entity:

influence_conversation: false

This syntax has the same effect as adding the entity to the ignore_entities list for every intent in the domain.

Explicitly setting influence_conversation: true does not change any behaviour. This is the default setting.

Slots are your bot's memory. They act as a key-value store which can be used to store information the user provided (e.g their home city) as well as information gathered about the outside world (e.g. the result of a database query).

Slots are defined in the slots section of your domain with their name, type and if and how they should influence the assistant's behavior. The following example defines a slot with name "slot_name", type text and predefined slot mapping from_entity.