forked from Dustyposa/rasa_ch_faq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
responses.yml
155 lines (128 loc) · 8.01 KB
/
responses.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
version: "2.0"
responses:
utter_rasa_faq/rasax:
- text: "Rasa X是一个工具集,可以帮助您利用对话来改善您的助手。
了解更多关于Rasa X的信息[这里](https://rasa.com/docs/rasa-x/),或阅读博客文章,了解我们开发它的原因。
[此处](https://blog.rasa.com/algorithms-alone-wont-solve-conversational-ai-introducing-rasa-x/)"
utter_rasa_faq/channels:
- text: "我们有一份[支持的连接器综合清单](https://rasa.com/docs/core/connectors/)。
但如果没有你要找的那个,你可以通过以下方法创建一个自定义的连接器。
[本指南](https://rasa.com/docs/rasa/user-guide/connectors/custom-connectors/)."
utter_rasa_faq/build_faq:
- text: "创建 faq 最重要的就是配置 ResponseSelector 中的 retrieval_intent,
以及 Rule 中配置对应关系
详情可以参见:[FAQ/Chitchat 配置指南](https://rasa.com/docs/rasa/chitchat-faqs)"
utter_rasa_faq/build_voice_rasa:
- text: "定制语音机器人最重要的是更改给 rasa 的输入和输出。主要是 channel 这一层实现。
教程参考: [基于 rasa 的语音助手搭建](https://dustyposa.github.io/posts/d7e97916/)"
utter_rasa_faq/deactivate_form:
- text: "有两种方式。
1.不使用 form action,在 story/rules 中使用 `action_deactivate_loop`。可参照:[表单机器人](https://github.com/RasaHQ/rasa/blob/main/examples/formbot/data/stories.yml)\n
2. 使用 form action,实现 `next_requested_slot` 或者 `required_slots` 等方法。"
utter_rasa_faq/participles:
- text: "中文分词的话需要 tokenizer 以及 feature。token 这部分一般来说有 3 种解法。\n
1. Jieba分词,官方自带有 `JiebaTokenizer` 可以使用。\n
2. Bert 分词/分字,这部分需要自己实现一个 tokenizer,可以参照本项目。\n
3. 自定义实现,自己继承 Tokenizer/Component 根据规则自己实现。\n
feature 这部分,一般使用:\n
`LanguageModelFeaturizer` 即可
"
utter_rasa_faq/debug:
- text: "把命令行转化为代码即可。[参考代码](https://github.com/Dustyposa/rasa_ch_faq/blob/main/run.py)"
utter_rasa_faq/hot_update_model:
- text: "方法目前知道的有三种。\n
1. 在 `endpoints.yml` 中配置更新地址以及更新时间。
models:\n
url: http://my-server.com/models/default_core@latest\n
wait_time_between_pulls: 10 # [optional](default: 100)\n
2. 调用模型更新接口 /models \n
3. 手动加载模型。创建新的 `agent`
"
utter_rasa_faq/api_doc:
- text: "运行: `rasa run --enable-api` 开启全 api 模式
[文档在这里](https://rasa.com/docs/rasa/pages/http-api)
直接使用 案例:
查看5005端口是否被占用 netstat -aon | findstr 5005
启动Rasa API服务(跨域)rasa run --enable-api --cors \"*\"
启动Rasa API服务(保存日志)rasa run --enable-api --log-file out.log
启动Rasa API服务(指定模型)rasa run --enable-api -m models
"
utter_rasa_faq/response_change:
- text: "更改训练好的模型文件即可。解压后一个 `domain.yml`, 修改后再次 打包成新的模型文件即可。(个人方案,仅供参考)"
utter_rasa_faq/response_format:
- text: "使用 format 语法 `{XXX}` 即可,详情可参考 [文档](https://rasa.com/docs/rasa/responses#response-variations)\n
ps: 在 custom 中使用 `{}` 语法也会自动格式化"
utter_rasa_faq/get_tracker_in_channel:
- text: "分为两种情况
1. 如果是新用户(没有 `tracker` 记录)从 `request.app.agent.tracker_store.get_or_create_tracker(sender_id)` 中获取。
2。 如果是老用户, 从 `request.app.agent.tracker_store.retrieve(sender_id)`
备注: 当然,第一种是万能的,但是需要根据实际情况选择,接口开放的权限不同。
"
utter_rasa_faq/get_bot_latest_msg:
- text: bot_event = next(e for e in reversed(tracker.events) if e["event"] == "bot")
utter_rasa_faq/自定义回复:
- text: "需要自定义一个 `action`, [参考文档](https://rasa.com/docs/rasa/forms#using-a-custom-action-to-ask-for-the-next-slot) \n 需要注意的是,`action_ask_{form_name}_{slot_name}` 的优先级大于 `action_ask_{form_name}`\n 整体的优先级排序为 `action_ask_{form_name}_{slot_name}` \n `utter_ask_{form_name}_{slot_name}` \n `action_ask_{form_name}` \n `utter_ask_{form_name}`"
utter_rasa_faq/session和tracker的区别:
- text: "`session` 代表当前会话,`tracker` 所有的数据代表的是用户的所有会话,当 `session` 过期时(`session_expiration_time` 设置过期时间),`tracker` 不会消失。
但是需要注意的是,`session` 过期时,当前用户状态会被重置(比如表单会直接退出)。"
utter_rasa_faq/获取当前表单名称:
- text: "可以先获取 `tracker`,使用 `tracker.loop_name` 即可。
当然,知道当前的 `loop_name` 之后,我们就可以检测是否退出表单啦!可以利用 `redis` 之类存储当前的 `loop_name`, 和下一次 `loop_name` 进行比较即可。"
utter_rasa_faq/中文命名:
- text: "都可以用中文的,毕竟只是一个 key。
你可以这样:
intent:
- 意图1
- 意图2
也可以这样:
responses:
- utter_回复1: ...
当然,form 也不例外:
forms:
- 吃饭了没_form: ...
"
utter_rasa_faq/加快训练速度:
- text: "1. 使用gpu, 直接安装 tensorflow-gpu 即可。
2. 调整 `batch_size`,一般调整 `config.yml` 中的组件的 batch_size,调大一些(注意 gpu 的内存)
3. 优化训练语料(不建议。。。多一个思考方式"
utter_rasa_faq/conversation和sender的关系:
- text: "
conversation id == sender id
conversation_id 属于比较老的叫法,根据 https://rasa.com/docs/rasa/pages/http-api#operation/getConversationTracker 的返回来看, conversation 字段已经被 sender 替换了。
"
utter_rasa_faq/自定义policy:
- text: "config 中自定义一些参数
自定义的 Policy 类需要重写 `def _metadata(self)` 方法,里面表示有多少要使用的参数。
"
utter_rasa_faq/反复进入story:
- text: "配置一下 fallback 规则
- name: RulePolicy
enable_fallback_prediction: false"
utter_rasa_faq/如何部署rasa:
- text: "实际操作需要根据业务的技术架构需求来执行。
1. 先说一下最底层的部署方式,那肯定是加载模型,调用模型,产出语句。这个适用于所有的业务架构。
- 模型加载,参考源码的 `agent` 加载(可以参考 `load_model.py` 该文件)。
- 适用模型得到结果。
- 模型必须依赖的东西:
- tracker
- 模型可选依赖:
- action server
- event broker
2. web 部署
- 原生 web 部署,`rasa` 本身使用的 `sanic` 异步框架。运行 `rasa run/ rasa run --enable-api` 即可。
测试方式: curl -X POST 'http://localhost:5005/webhooks/rest/webhook'
-d '{
\"sender\": \"xxxxx\",
\"message\": \"你好\"}'
- 基于其余 web 框架部署。在 1 方式的基础上,加载模型,套在其余框架上即可。
"
utter_rasa_faq/如何用代码加载模型:
- text: "可以参考 `load_model.py` 该文件。"
utter_rasa_faq/限制event长度:
- text: "可以参考 https://medium.com/graymatrix/using-a-custom-tracker-store-to-manage-max-event-history-in-rasa-e99279ca615f"
utter_rasa_faq/多意图:
- text: "为什么需要多意图可以参考: https://forum.rasa.com/t/why-would-one-want-multi-intent/47489"
utter_rasa_faq/rasa_教程:
- text: "视频可以在这里看系列教程: https://www.youtube.com/c/RasaHQ"
utter_rasa_faq/action触发form:
- text: "执行 ActiveLoop action, 例如在 run 函数中: return [ActiveLoop(name='xxx_form', timestamp=...)]"