├── ask_weather ├── nlu_config.yml ├── endpoints.yml ├── models │ └── dialogue │ │ ├── policy_0_KerasPolicy │ │ ├── keras_policy.json │ │ ├── keras_model.h5 │ │ └── featurizer.json │ │ ├── policy_1_FallbackPolicy │ │ └── fallback_policy.json │ │ ├── policy_2_MemoizationPolicy │ │ ├── featurizer.json │ │ └── memorized_turns.json │ │ ├── domain.json │ │ ├── domain.yml │ │ └── policy_metadata.json ├── policy_config.yml ├── nlu.md ├── stories.md ├── action.py ├── code.txt └── domain.yml ├── .gitignore └── README.md /ask_weather/nlu_config.yml: -------------------------------------------------------------------------------- 1 | language: zh 2 | pipeline: tensorflow_embedding -------------------------------------------------------------------------------- /ask_weather/endpoints.yml: -------------------------------------------------------------------------------- 1 | action_endpoint: 2 | url: "http://localhost:5055/webhook" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /chinese_L-12_H-768_A-12 2 | tmp/ 3 | __pycache__/ 4 | .idea/ 5 | ask_weather/model/ 6 | -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_0_KerasPolicy/keras_policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "model": "keras_model.h5", 3 | "epochs": 100 4 | } -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_0_KerasPolicy/keras_model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/terrifyzhao/rasa-tutorial/HEAD/ask_weather/models/dialogue/policy_0_KerasPolicy/keras_model.h5 -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_1_FallbackPolicy/fallback_policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "nlu_threshold": 0.3, 3 | "core_threshold": 0.3, 4 | "fallback_action_name": "action_default_fallback" 5 | } -------------------------------------------------------------------------------- /ask_weather/policy_config.yml: -------------------------------------------------------------------------------- 1 | policies: 2 | - name: KerasPolicy 3 | epochs: 200 4 | batch_size: 50 5 | max_training_samples: 300 6 | - name: FallbackPolicy 7 | - name: MemoizationPolicy 8 | -------------------------------------------------------------------------------- /ask_weather/nlu.md: -------------------------------------------------------------------------------- 1 | ## intent:greet 2 | - 你好 3 | - 上午好 4 | - 下午好 5 | - 早上好 6 | - 晚上好 7 | 8 | ## intent:mood_happy 9 | - 很好 10 | - 我很好 11 | 12 | ## intent:mood_unhappy 13 | - 我很难受 14 | - 我心情很差 15 | 16 | ## intent:ask_weather 17 | - 今天天气怎么样 18 | - 今天天气 19 | 20 | 21 | ## intent:weather_city 22 | - 深圳 23 | -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_2_MemoizationPolicy/featurizer.json: -------------------------------------------------------------------------------- 1 | {"py/object": "rasa_core.featurizers.MaxHistoryTrackerFeaturizer", "max_history": 5, "remove_duplicates": true, "state_featurizer": {"py/object": "rasa_core.featurizers.SingleStateFeaturizer", "slot_feature_len": null, "user_feature_len": null}, "use_intent_probabilities": false} -------------------------------------------------------------------------------- /ask_weather/stories.md: -------------------------------------------------------------------------------- 1 | ## story_happy 2 | * greet 3 | - utter_greet 4 | * mood_happy 5 | - utter_happy 6 | 7 | ## story_unhappy 8 | * greet 9 | - utter_greet 10 | * mood_unhappy 11 | - utter_unhappy 12 | 13 | ## story_ask_weather 14 | * ask_weather 15 | - action_ask_weather 16 | * weather_city 17 | - utter_weather_good 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /ask_weather/action.py: -------------------------------------------------------------------------------- 1 | from rasa_core_sdk import Action 2 | from rasa_core_sdk.events import SlotSet 3 | 4 | 5 | class ActionAskWeather(Action): 6 | def name(self): 7 | return 'action_ask_weather' 8 | 9 | def run(self, dispatcher, tracker, domain): 10 | dispatcher.utter_message(f'您问的天气地点是哪里呢') 11 | return [SlotSet('city', '深圳')] 12 | -------------------------------------------------------------------------------- /ask_weather/code.txt: -------------------------------------------------------------------------------- 1 | python -m rasa_core.train -d domain.yml -s stories.md -o models/dialogue -c policy_config.yml 2 | 3 | python -m rasa_nlu.train -c nlu_config.yml --data nlu.md -o models --fixed_model_name nlu --project current --verbose 4 | 5 | python -m rasa_core_sdk.endpoint --actions action 6 | 7 | python -m rasa_core.run -d models/dialogue -u models/current/nlu --endpoints endpoints.yml 8 | 9 | -------------------------------------------------------------------------------- /ask_weather/domain.yml: -------------------------------------------------------------------------------- 1 | intents: 2 | - greet 3 | - mood_happy 4 | - mood_unhappy 5 | - ask_weather 6 | - weather_state 7 | 8 | entities: 9 | - city 10 | 11 | slots: 12 | city: 13 | type: text 14 | 15 | actions: 16 | - utter_greet 17 | - utter_happy 18 | - utter_unhappy 19 | - action_ask_weather 20 | - utter_weather_good 21 | 22 | 23 | templates: 24 | utter_greet: 25 | - text: "你好,你今天过的怎么样" 26 | 27 | utter_happy: 28 | - text: "那很棒棒哦" 29 | 30 | utter_unhappy: 31 | - text: "咋了,可以告诉我吗" 32 | 33 | utter_weather_good: 34 | - text: "{city}天气很好呢" 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ask_weather/models/dialogue/domain.json: -------------------------------------------------------------------------------- 1 | { 2 | "states": [ 3 | "intent_ask_weather", 4 | "intent_greet", 5 | "intent_mood_happy", 6 | "intent_mood_unhappy", 7 | "intent_weather_state", 8 | "entity_city", 9 | "slot_city_0", 10 | "prev_action_listen", 11 | "prev_action_restart", 12 | "prev_action_default_fallback", 13 | "prev_action_deactivate_form", 14 | "prev_action_revert_fallback_events", 15 | "prev_action_default_ask_affirmation", 16 | "prev_action_default_ask_rephrase", 17 | "prev_utter_greet", 18 | "prev_utter_happy", 19 | "prev_utter_unhappy", 20 | "prev_action_ask_weather", 21 | "prev_utter_weather_good" 22 | ] 23 | } -------------------------------------------------------------------------------- /ask_weather/models/dialogue/domain.yml: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | --- 3 | actions: 4 | - utter_greet 5 | - utter_happy 6 | - utter_unhappy 7 | - action_ask_weather 8 | - utter_weather_good 9 | config: 10 | store_entities_as_slots: true 11 | entities: 12 | - city 13 | forms: [] 14 | intents: 15 | - greet: 16 | use_entities: true 17 | - mood_happy: 18 | use_entities: true 19 | - mood_unhappy: 20 | use_entities: true 21 | - ask_weather: 22 | use_entities: true 23 | - weather_state: 24 | use_entities: true 25 | slots: 26 | city: 27 | auto_fill: true 28 | initial_value: null 29 | type: rasa_core.slots.TextSlot 30 | templates: 31 | utter_greet: 32 | - text: 你好,你今天过的怎么样 33 | utter_happy: 34 | - text: 那很棒棒哦 35 | utter_unhappy: 36 | - text: 咋了,可以告诉我吗 37 | utter_weather_good: 38 | - text: '{city}天气很好呢' 39 | -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "action_fingerprints": { 3 | "action_listen": { 4 | "slots": [] 5 | }, 6 | "utter_weather_good": { 7 | "slots": [] 8 | }, 9 | "utter_unhappy": { 10 | "slots": [] 11 | }, 12 | "utter_happy": { 13 | "slots": [] 14 | } 15 | }, 16 | "python": "3.6.8", 17 | "max_histories": [ 18 | 5, 19 | null, 20 | 5 21 | ], 22 | "ensemble_name": "rasa_core.policies.ensemble.SimplePolicyEnsemble", 23 | "policy_names": [ 24 | "rasa_core.policies.keras_policy.KerasPolicy", 25 | "rasa_core.policies.fallback.FallbackPolicy", 26 | "rasa_core.policies.memoization.MemoizationPolicy" 27 | ], 28 | "trained_at": "20190301-154823", 29 | "rasa_core": "0.13.2", 30 | "tensorflow": "1.12.0", 31 | "sklearn": "0.20.2" 32 | } -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_0_KerasPolicy/featurizer.json: -------------------------------------------------------------------------------- 1 | {"py/object": "rasa_core.featurizers.MaxHistoryTrackerFeaturizer", "max_history": 5, "remove_duplicates": true, "state_featurizer": {"py/object": "rasa_core.featurizers.BinarySingleStateFeaturizer", "input_state_map": {"entity_city": 5, "intent_ask_weather": 0, "intent_greet": 1, "intent_mood_happy": 2, "intent_mood_unhappy": 3, "intent_weather_state": 4, "prev_action_ask_weather": 17, "prev_action_deactivate_form": 10, "prev_action_default_ask_affirmation": 12, "prev_action_default_ask_rephrase": 13, "prev_action_default_fallback": 9, "prev_action_listen": 7, "prev_action_restart": 8, "prev_action_revert_fallback_events": 11, "prev_utter_greet": 14, "prev_utter_happy": 15, "prev_utter_unhappy": 16, "prev_utter_weather_good": 18, "slot_city_0": 6}, "num_features": 19, "slot_feature_len": 1, "user_feature_len": 6}, "use_intent_probabilities": false} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rasa中文demo 2 | 3 | 本文代码需配合以下博文使用,目前教程还在更新中,demo也会持续更新 4 | 5 | [Rasa使用指南01](https://terrifyzhao.github.io/2018/09/17/Rasa%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%9701.html) 6 | 7 | [Rasa使用指南02](https://terrifyzhao.github.io/2019/02/26/Rasa%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%9702.html) 8 | 9 | ### 如何使用 10 | 11 | cd 到对应的demo路径下执行以下命令 12 | 13 | 训练rasa_core 14 | ``` 15 | python -m rasa_core.train -d domain.yml -s stories.md -o models/dialogue -c policy_config.yml 16 | ``` 17 | 18 | 19 | 训练rasa_nlu 20 | ``` 21 | python -m rasa_nlu.train -c nlu_config.yml --data nlu.md -o models --fixed_model_name nlu --project current --verbose 22 | ``` 23 | 24 | 如果有自定义action,请执行此命令,注意把此处的`action_name`换成自定义的action的文件名,如果你的action文件叫做action.py,则写--actions action 25 | ``` 26 | python -m rasa_core_sdk.endpoint --actions action_name 27 | ``` 28 | 29 | 启动对话 30 | ``` 31 | python -m rasa_core.run -d models/dialogue -u models/current/nlu --endpoints endpoints.yml 32 | ``` 33 | -------------------------------------------------------------------------------- /ask_weather/models/dialogue/policy_2_MemoizationPolicy/memorized_turns.json: -------------------------------------------------------------------------------- 1 | { 2 | "max_history": 5, 3 | "lookup": { 4 | "eJyLzivNydFRwCSra2MBj0wJzQ==": 0, 5 | "eJyLzivNydFRQCara4E4M68kNa8kPrE4O748NbEkI7XISsFQz0BHoaAotSw+MbkkMz8vPiezGKgKLFEbCwDgEBov": 10, 6 | "eJyLzivNydFRgJDVtUCcmVeSmlcSn1icHV+emliSkVpkpWCoZ6CjUFCUWhafmFySmZ8Xn5NZDFQFliBaD7psbSwABzAskA==": 0, 7 | "eJyLzivNydFRqK4F4sy8ktS8kvjE4uz48tTEkozUIisFQz0DHYWCotSy+MTkksz8vPiczGKgKrAE0XrQZZE0QoXjkzNLKgnYFgsA5bY9bA==": 11, 8 | "eJyLrq7VUajOzCtJzSuJTyzOji9PTSzJSC2yUjDUM9BRKChKLYtPTC7JzM+Lz8ksBqoCSxCtB10WSSNUOD45s6SSaNtwaSotKQGKwmTT8/NTIDpjAXhJUGc=": 0, 9 | "eJyLrs7MK0nNK4lPLM6OL09NLMlILbJSMNQz0FEoKEoti09MLsnMz4vPySwGqgJL1OooEKcHXRZJI1Q4PjmzpJJo23BpKi0pAYrCZNPz81NIcyeybbEAY1BhjA==": 10, 10 | "eJyLrs7MK0nNK4lPLM6OL09NLMlILbJSMNQz0FEoKEoti09MLsnMz8OQrdVRgGmECscnZ5ZUYtGZk1kMVEasptKSEqAoTDY9Pz8FXSd+d2K3jUS/xQIAgHxjiw==": 0, 11 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSAhSFyabn56eg60wszobJE20bfj3oskQ4E4ttsQDyP2IG": 11, 12 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYsvLSkBisJk0/PzU8CytToKMJ2JxdkweWSNicklmfl58TmZxUBVpOlBl0XSiMuZeG0j1W+xAPsdZCU=": 0, 13 | "eJyLrs7MK0nNK4lPLM6OL09NLMlILbJSMNQz0FEoKEoti09MLsnMz4vPySwGqgJL1OooEKcHXRZJI1Q4PjmzpJJo23BpKi0pAYrCZNPz81PQdaYXpaaWELAnFgAQal8V": 7, 14 | "eJyLrs7MK0nNK4lPLM6OL09NLMlILbJSMNQz0FEoKEoti09MLsnMz8OQrdVRgGmECscnZ5ZUYtGZk1kMVEasptKSEqAoTDY9Pz8FXWd6UWpqCdH2YKiGWIAQro0FACvoW9w=": 0, 15 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSAhSFyabn56eg60wvSk0tIdoeDNUQCxDCSGpzgbbFl+ZlJBYUEPJILACLvFpi": 9, 16 | "eJyLzivNydFRQCara4E4M68kNa8kPr0oNbXESsFQz0BHoaAotSw+MbkkMz8vPiezGCgPlqiNBQA5dhe4": 7, 17 | "eJyLzivNydFRgJDVtUCcmVeSmlcSn16UmlpipWCoZ6CjUFCUWhafmFySmZ8Xn5NZDJQHS+BTXVpSklqEJFwbCwDHaiTh": 0, 18 | "eJyLzivNydFRqK4F4sy8ktS8kvj0otTUEisFQz0DHYWCotSy+MTkksz8vPiczGKgPFgCn+rSkpLUIiRhJLW5+fkp8RmJBQWVBIyPBQDEEjTl": 8, 19 | "eJyLrq7VUajOzCtJzSuJTy9KTS2xUjDUM9BRKChKLYtPTC7JzM+Lz8ksBsqDJfCpLi0pSS1CEkZSm5ufnxKfkVhQUEm08di1QOxACNfGAgAMz0Qy": 0, 20 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEoti09MLsnMz4vPySwGyoMlanUUcKouLSlJLUISRlKbm5+fEp+RWFBQSbTx2LVA7EAII2lILM6OL09NLMlILSJgSSwAot1VVw==": 10, 21 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEotiy8tKUktQhKu1VGAqc3Nz0+Jz0gsKKhE1pCYXJKZnxefk1kMVEScFogdCGEkDYnF2fHlqYklGalFRFuCXw+6bG0sAKxRWc0=": 0, 22 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LT0wuyczPi8/JLAYqAkvU6ijg11JaUpJahCSMpCGxODu+PDWxJCO1iGhL8OtBl0XSCBWOT84sIeSlWABWB12A": 11, 23 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LLy0pSS1CEq7VUYBpSCzOji9PTSzJSC1C1pGYXJKZnxefk1kMVEWaHnRZJI1Q4fjkzJJKom3DpQniKZhsOtDjEJ2xABHKYHc=": 0, 24 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSAhSFyabn56eg60wvSk0tIdoeDNUQCxDCSGpzgbbFZyQWFBDyRiwAz8xZfw==": 8, 25 | "eJyLzivNydFRqK4F4sy8ktS8kvj0otTUEisFQz0DHYWCotSy+MTkksz8vPiczGKgPFgCn+rSkpLUIiRhJLW5+fkp8aV5GYkFBZUELIgFADbONcg=": 9, 26 | "eJyLrq7VUajOzCtJzSuJTy9KTS2xUjDUM9BRKChKLYtPTC7JzM+Lz8ksBsqDJfCpLi0pSS1CEkZSm5ufnxJfmpeRWFBQSbQFuDRB7EGWqI0FAMnHRts=": 0, 27 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEoti09MLsnMz4vPySwGyoMlanUUcKouLSlJLUISRlKbm5+fEl+al5FYUFBJtAW4NEHsQZZA0pRYnB1fnppYkpFaRMCiWADioFgA": 10, 28 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEotiy8tKUktQhKu1VGAqc3Nz0+JL83LSCwoqETWkphckpmfF5+TWQxURqwmiD3IEkiaEouz48tTE0syUouItgi/HnTZ2lgAJBhcdg==": 0, 29 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSklqEIoGkKbE4O748NbEkI7WIaIvw60GXRdIIFY5Pziwh5K1YAP+cYCk=": 11, 30 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYsvLSlJLUKRqNVRgGlKLM6OL09NLMlILULWk5hckpmfF5+TWQxURZoedFkkjVDh+OTMkkqibcOlCeItmGw60PMQnbEA7YhiPQ==": 0, 31 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEoti09MLsnMz4vPySwGyoMlanUUcKouLSlJLUISRlKbm5+fEp+RWFBQSbTx2LVA7EAI43MPFuNjAZk1UuA=": 7, 32 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEotiy8tKUktQhKu1VGAqc3Nz0+Jz0gsKKhE1pCYXJKZnxefk1kMVEScFogdCGEkDRjuwWs8YdfHAgAQ5lIe": 0, 33 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LT0wuyczPi8/JLAYqAkvU6ijg11JaUpJahCSMpCG9KDW1hGjjMVRDTEYIE3QKFuNjAZKSVPk=": 8, 34 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LLy0pSS1CEq7VUYBpSC9KTS1BVpuYXJKZnxefk1kMlCeoGmIyQhhJLXan4DWeSNfHAgDEQ1RC": 0, 35 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEoti09MLsnMz4vPySwGyoMlanUUcKouLSlJLUISRlKbm5+fEl+al5FYUFBJtAW4NEHsQZbA5yosVsQCAMkCVYk=": 7, 36 | "eJyLrs7MK0nNK4lPL0pNLbFSMNQz0FEoKEotiy8tKUktQhKu1VGAqc3Nz0+JL83LSCwoqETWkphckpmfF5+TWQxURqwmiD3IEkiaMFyF1wrCfogFAFYTVMc=": 0, 37 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSklqEIoGkKb0oNbWEaCswVEPMRggT4RwsFsQCALyAWIU=": 9, 38 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYsvLSlJLUKRqNVRgGlKL0pNLUFWnZhckpmfF5+TWQyUJ6gaYjZCGEktLufgtYAEP8QCAJLnWLE=": 0, 39 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYtPTC7JzM+Lz8ksBioDS9TqKBDSVFpSklqEIoGkKb0oNbWEaCswVEPMRgijO4cYH8QCAARZV6I=": 8, 40 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYsvLSkBisJk0/PzU8CytToKMJ3pRampJchaEpNLMvPz4nMyi4HyBFVDLEAII6nNBdoWX5qXkVhQUEm0Bbg0QexBlqiNBQByvFqZ": 0, 41 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LT0wuyczPi8/JLAYqAkvU6ijg11JaUpJahCSMpCG9KDW1hGjjMVRDTEYIozulNI8Y98cCAEV2Vdw=": 9, 42 | "eJyLrs7MK0nNK4nPzc9Pic9ILCiotFIw1DPQUSgoSi2LLy0pSS1CEq7VUYBpSC9KTS1BVpuYXJKZnxefk1kMlCeoGmIyQhhJLdgppXkYjsFrAS5NEHuQJWpjAeGqVus=": 0, 43 | "eJyLrs7MK0nNK4nPzc9PiS/Ny0gsKKi0UjDUM9BRKChKLYsvLSlJLUKRqNVRgGlKL0pNLUFWnZhckpmfF5+TWQyUJ6gaYjZCGEkt2DkYjsFrPHYtEDuQXB8LAGrcVgg=": 0, 44 | "eJyLrs7MK0nNK4kvT00syUgtik/OLKm0UjDUM9BRKChKLYsvLSkBisJk0/PzU8CytToKMJ3pRampJchaEpNLMvPz4nMyi4HyBFVDLEAII6nNBdoWn5FYUFBJtPHYtUDsQAjXxgIAP0FX8A==": 0 45 | } 46 | } --------------------------------------------------------------------------------