对话机器人上线流程¶
Botfront 都配置好后就可以考虑如何把对话机器人交付最终用户了。本节内容会介绍如何在网站上配置一个 chat 组件,并把该组件连接到后台的 Botfront 服务上去。
前端:如何配置 widget¶
通过这个链接给你的网站配置好 chat 组件。请注意!指定好合适的语言是非常重要的一点,即便你的对话机器人只支持一种语言也是一样。
<div id="webchat"/>
<script src="https://storage.googleapis.com/mrbot-cdn/webchat-0.X.X.js"></script>
<script>
WebChat.default.init({
selector: "#webchat",
initPayload: "/get_started",
...
customData: { language: 'en' }, // can be any language code
...
})
</script>
多语言支持¶
如果你的网站是支持多语言的,那么你需要把你的 Botfront 对话机器人也翻译到对应的语言上,并且指定当前所选的语言。
针对特定页面定制话术¶
Botfront 支持从不同的网页来的用户显示不同的开场信息,比如,从主页和从报价页面过来的用户你可以会希望把开场白分别这样识别:
WebChat.default.init({
...
initPayload: '/get_started_home',
...
})
WebChat.default.init({
...
initPayload: '/get_started_pricing',
...
})
接下来你要做的就是根据这两个场景创建两个不同的故事,一个对应 * get_started_home
实体,一个对应 * get_started_pricing
实体,详情请参见如何设置开场白,里面会详细介绍如何把这些故事分组,针对不同的意图做测试等细节。
后端:如何配置频道¶
通过 settings > credentials 你可以配置 channels,设定那些支持哪些不支持。
::: warning Botfront 针对 Rasa Core 做了些自己的扩展,也就意味着有些原生的 Rasa Core channels 可能无法在 Botfront 环境里工作,Botfront 目前仅支持 Rasa Webchat 这个 channel,Facebook Messenger 的支持也在开发中。 :::
Webchat 频道¶
这部分其实没什么好配置的,如果你不介意用户每次打开页面都是初始状态的话就直接把 session_persistent
设置为 false
即可。
rasa_addons.core.channels.webchat.WebchatInput:
session_persistence: true
base_url: https://your.rasa.host:5005 # set this to the Rasa service host
socket_path: '/socket.io/'
Endpoints¶
Endpoints 可以在以下几个方面让你定义 Botfront 和 Rasa 实例之间的通讯方式:
- Botfront API 是如何处理用户 query 并做出反馈的 (nlg
)
- Botfront 跟 action server 的交互(action_endpoint
)
- 访问数据分析(tracker_store
)
nlg:
url: 'https://<botfront-api-host>/project/bf/nlg'
action_endpoint:
url: 'https://<actions-server-host>/webhook'
tracker_store:
store_type: rasa_addons.core.tracker_stores.AnalyticsTrackerStore
url: 'https://<botfront-api-host>'
project_id: 'bf'
访问数据的分析和存储¶
Botfront 内置了一个叫 AnalyticsTrackerStore
的自定义组件,该组件提供了常见的访问数据处理逻辑,并集成了 Chatbase
的服务,只要填写好你申请的 chatbase key 即可。
::: warning
如果你用到了 EmbeddingsPolicy
,那么接下来的内容对你来说会非常重要。
:::
在实际部署的过程中,我们碰到的一个常见问题是随着会话时间的总加,系统的性能下降的问题,长时间的对话在对话场景中是一个无法避免、特别正常的事情,但对系统来说带来的一个结果就是我们需要带着一个越来越长的 payload 列表在 Rasa、Action 服务器和数据库之间来回传输数据。
一般来说,大部分会话只需要浏览最近的一小部分内容就可以让模型去做比较好的预测,所以对系统来说需要一种机制来限制在内存中驻留的历史会话量,当然,所有的会话都会安全的保存到数据库中。
max_events
参数让你可以设定需要在内存中驻留的会话上限,默认是 100
,你可以根据自己的需要在 EmbeddingsPolicy
组件中设定,如果设为 0
则意味着把所有会话都驻留内存。
另一个常见的问题是很多会话结束之后依然会驻留在内存中,即便是用户已经不再需要交流了。要解决这个问题,我们需要设定一个定时器来把这些非活跃的会话删除掉,比如每隔 30s 来一次内存清理。所有内存驻留时间大于 tracker_persist_time
的 session 都会被清理,tracker_persist_time
默认是 3600
,也就是说内存中超过一小时没有交互的会话会被自动清除。如果用户一个小时候又回来了,那么 max_events
参数会从数据库中被读取并更新,同时进行对应的其他逻辑,整个过程对最终用户来讲是透明的。
Chatbase 服务集成¶
如果你想在你的系统里面使用 Chatbase 的服务,非常容易,只要去申请一个 api key 并填写到配置文件中去就好。
tracker_store:
store_type: botfront.tracker_stores.analytics.AnalyticsTrackerStore
url: http://botfront-api:8080
project_id: < Botfront project ID >
chatbase_api_key: < Chatbase API key >
chatbase_version: < Chatbase version >
max_events: < Maximum number of events kept in memory >
tracker_persist_time: < Delay of inactivity before the conversation gets removed from memory >