JSON
# Семантический фрейм от NLU
nlu_output = {
'intent': 'бронирование_ресторана',
'entities': {
'название_ресторана': 'Итальяно',
'дата': 'завтра',
'время': '19:00',
'количество_персон': '4'
}
} PYTHON
# Компонент DM получает данные от NLU
current_intent = nlu_output['intent']
extracted_entities = nlu_output['entities'] PYTHON
slots = {
'restaurant_name': extracted_entities.get('название_ресторана'),
'date': extracted_entities.get('дата'),
'time': extracted_entities.get('время'),
'number_of_people': extracted_entities.get('количество_персон')
} PYTHON
# Список возможных намерений
intents = ['приветствие', 'бронирование_ресторана', 'заказ_еды', 'прощание']
# Кодирование намерения с помощью one-hot encoding
intent_vector = [1 if intent == current_intent else 0 for intent in intents]
# Вектор намерений: [0, 1, 0, 0] PYTHON
# Статус слотов (1, если слот заполнен, иначе 0)
slot_vector = [
1 if slots['restaurant_name'] else 0,
1 if slots['date'] else 0,
1 if slots['time'] else 0,
1 if slots['number_of_people'] else 0
]
# Вектор слотов: [1, 1, 1, 1] PYTHON
# Список возможных действий
actions = ['action_greet', 'action_ask_restaurant', 'action_ask_date', 'action_ask_time', 'action_ask_people', 'action_make_reservation', 'action_goodbye']
# История предыдущих действий (пуста)
previous_actions = ['action_listen', ''] # 'action_listen' — ожидание ввода пользователя
# Кодирование предыдущих действий
action_vectors = []
for action in previous_actions:
action_vector = [1 if act == action else 0 for act in actions]
action_vectors.append(action_vector)
# Вектор действий[0]: [0, 0, 0, 0, 0, 0, 0]
# Вектор_действий[1]: [0, 0, 0, 0, 0, 0, 0] PYTHON
# Объединение всех признаков в один входной тензор
input_tensor = intent_vector + slot_vector
for action_vector in action_vectors:
input_tensor += action_vector
# Получаем входной тензор, который отправляется в модель:
# [0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ml_model:PYTHON
# Вызов модели для предсказания следующего действия
action_probabilities = ml_model.predict([input_tensor]) # Модель возвращает вероятности действий PYTHON
action_probabilities = {
'action_make_reservation': 0.9,
'action_ask_missing_info': 0.05,
'action_default_fallback': 0.05
} 'action_make_reservation': 0.9.PYTHON
def action_make_reservation(slots):
# Извлечение значений слотов
restaurant_name = slots.get('restaurant_name')
date = slots.get('date')
time = slots.get('time')
number_of_people = slots.get('number_of_people')
# Логика бронирования (например, обращение к внешнему API)
reservation_success = make_reservation(
restaurant_name=restaurant_name,
date=date,
time=time,
number_of_people=number_of_people
)
return reservation_success
# Выполнение действия
reservation_success = action_make_reservation(slots) python -m ensurepip --upgradepip install virtualenvpython -m venv rasa_envsource rasa_env/bin/activate pip install rasa.pip install transformers.rasa --version Rasa Version : 3.6.20Minimum Compatible Version: 3.5.0Rasa SDK Version : 3.6.2 Python Version : 3.10.15 rasa init.