
μ΄λ² κΈμμλ Rasaλ₯Ό νμ©ν λνν μ±λ΄ κ°λ° μ€ κ²ͺμλ Form Validation μ΄μμ μ΄λ₯Ό μ΄λ»κ² ν΄κ²°νλμ§μ λν΄ μ 리νμ΅λλ€.
Rasaλ₯Ό νμ©ν΄ μ¬ν μΌμ μ μμ§νλ μ±λ΄μ κ°λ°νκ³ μμμ΅λλ€. λν νλ¦μ λ€μκ³Ό κ°μμ΅λλ€:
utter_ask_days)λ¬Έμ :
days μ¬λ‘―μ΄ μ μμ μΌλ‘ μ±μμ§μ§ μμμ΅λλ€.actions.pyμ μμ±ν validate_days ν¨μκ° νΈμΆλμ§ μμμ΅λλ€.Regex ν¨ν΄ μ κ²:
NLU λ°μ΄ν° λΆμ‘±:
Action Server μ€μ μ€λ₯:
endpoints.yml μ€μ μ΄ λλ½λμ΄ μμκ³ , μ΄λ‘ μΈν΄ μ‘μ
μλ² νΈμΆμ΄ λμ§ μμμ΅λλ€.Form Validation λ‘μ§ λΆμ¬:
1λ² λ°©λ²μΌλ‘λ λ¬Έμ κ° ν΄κ²°λμ§ μμμ΅λλ€. 2λ² λ°©λ²μΌλ‘ λ°μ΄ν°λ₯Ό μΆκ°νκ³ μ¬νμ΅μ μ§ννμ λ, μ μμ μΌλ‘ λμνμ΅λλ€.
νμ§λ§ 2λ² λ°©λ²μ λ무 μ½κ³ , λ°μ΄ν°κ° λΆνμνκ² λ°©λν΄μ§λ€κ³ νλ¨νμ΅λλ€.
κ·Έλμ action μλ²κ° νΈμΆλμ§ μλ λ¬Έμ λ₯Ό ν΄κ²°(3λ²)νκ³ 4λ² λ°©λ²μΌλ‘ λ¬Έμ ν΄κ²°μ μ§ννμ΅λλ€.
endpoints.yml μ€μ μΆκ°action_endpoint:
url: "http://localhost:5055/webhook"
rasa run actions λͺ
λ Ήμ΄λ‘ μ‘μ
μλ²λ₯Ό μ€νν©λλ€.actions.py μμ (Validation μ‘μ
μΆκ°)from typing import Any, Text, Dict
from rasa_sdk import Tracker, FormValidationAction
from rasa_sdk.executor import CollectingDispatcher
import re
class ValidateTravelForm(FormValidationAction):
def name(self) -> Text:
return "validate_travel_form"
async def validate_days(
self,
slot_value: Any,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any],
) -> Dict[Text, Any]:
match = re.search(r"\d+", str(slot_value))
if match:
return {"days": match.group(0)}
else:
dispatcher.utter_message(text="μ νν μΌμλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ. μ: 3μΌ, 5μΌ")
return {"days": None}
validate_days ν¨μλ μ¬μ©μ μ
λ ₯μμ μ«μλ₯Ό μΆμΆνμ¬ days μ¬λ‘―μ μ μ₯ν©λλ€.domain.yml μ€μ 보μforms:
travel_form:
required_slots:
- location
- days
actions:
- validate_travel_form
slots:
days:
type: text
influence_conversation: true
mappings:
- type: from_entity
entity: days
- type: from_text
conditions:
- active_loop: travel_form
requested_slot: days
actions μΉμ
μ validate_travel_formμ λ±λ‘ν©λλ€.from_text λ§€νμ μΆκ°νμ¬ μ§§μ μ
λ ₯λ μ¬λ‘―μ μ μ₯λ μ μλλ‘ νμ΅λλ€.rasa train
rasa run actions
rasa shell
validate_days ν¨μκ° μ μμ μΌλ‘ νΈμΆλμμ΅λλ€.days μ¬λ‘―μ μ μ₯λμμ΅λλ€.μμ λν νλ¦:
μ¬μ©μ: μμΈλ‘ μ¬ν κ°κ³ μΆμ΄
λ΄: λͺ μΌλμ 머무λ₯Ό μμ μ΄μΌ?π§
μ¬μ©μ: 5μΌ
λ΄: μ’μμπ μμΈμΌλ‘ 5μΌλμ μ¬νν μΌμ μ κ³νν΄λ³Όκ²μπ
μ‘μ μλ² μ€μ μ μ€μμ±:
endpoints.yml μ€μ μ΄ λλ½λλ©΄ 컀μ€ν
μ‘μ
μ΄ μ€νλμ§ μμ΅λλ€.Validation μ‘μ μ μ νν λ§€ν:
validate_<slot_name> νμμΌλ‘ ν¨μ μ΄λ¦μ μ§μ ν΄μΌ μλ νΈμΆλ©λλ€.μ μ°ν μ¬λ‘― λ§€ν:
from_entityμ from_textλ₯Ό ν¨κ» μ¬μ©νλ©΄ λ€μν μ
λ ₯ ν¨ν΄μ μ²λ¦¬ν μ μμ΅λλ€.λλ²κΉ μ ν:
--debug λͺ¨λλ₯Ό νμ©νλ©΄ νΌ νμ±ν λ° μ‘μ
νΈμΆ κ³Όμ μ μμΈν νμΈν μ μμ΅λλ€.μ΄λ² κ²½νμ ν΅ν΄ Rasaμ Form Validation λ‘μ§μ κΉμ΄ μ΄ν΄ν μ μμμ΅λλ€. μ±λ΄ κ°λ° μ€ μ μ¬ν μ΄μκ° λ°μνλ€λ©΄ μ΄ κΈμ΄ λμμ΄ λκΈ°λ₯Ό λ°λλλ€. π