设置自然语言处理
您可以通过与自然语言处理引擎集成来提高常见问题聊天机器人的智能。 如果您对如何训练 NLP 引擎或构建基本的 NLP 聊天机器人没有任何想法,请查看以下文档:Google Dialogflow, LUIS & 基本的 NLP 聊天机器人设置程序
请确保您已正确输入问题条目的“意图”,如 NLP 引擎的训练代理/应用程序中所反映的那样。 有关 FAQ 数据源格式的详细信息,请参阅 此处.
预期结果
- Stella 会在升级到关键字匹配之前优先考虑与意图的匹配。
Example of FAQ Chatbot with NLP
- 这样,当用户输入的句子没有匹配到FAQ数据源中的任何关键字时,系统仍然可以将用户输入发送到NLP引擎进行分析,最终将正确的意图返回给Stella发送相应的回应。
Matching Intent in FAQ Data Source
FAQ 数据源格式
请参考第一级程序 用于 FAQ 数据源格式。
动手实践
示例树结构
Tree Structure of FAQ Chatbot with NLP
创建第一个树节点 - NLP 集成
- 在继续之前,您应该已经完成了 4.1、4.2 的级别 /doc.stella.sanuker.com/docs/en/standard-procedures-FAQ-analytics/)以及与 [Google Dialogflow] 的集成(https://doc.stella.sanuker.com/docs/zh-CN/dialogflow/) 或 Microsoft LUIS。 您可以直接编辑四级树或复制一棵新树。
2.在四级树中创建一个树节点,重命名为“NLP Integration”。
NLP Integration
切换“NLP”并选择您的 NLP 集成对应的“平台”、“集成”和“语言环境”。
保存这个树节点。
创建第二个树节点 - 意图
选择树节点“NLP Integration”并添加下一个树节点。
将其重命名为“意图”。
使用以下条件和关系创建触发器:
NLP Trigger
第一个条件 - 输入文本:
this.messageEvent.type === "TEXT"
第二个条件组 - DF 或 Luis:
DF
this.messageEvent.dialogflow
LUIS
this.messageEvent.luis
NLP Pre-action
8.在下面的FAQ数据源中创建用于处理意图的pre-action并将其重命名为“Handle Intents”:
return new Promise(async (resolve, reject) => {
try {
let dialogflowIntent = this.lodash.get(this.messageEvent, "dialogflow.intent.displayName")
console.log("Dialogflow Intent", dialogflowIntent)
const docs = await this.fetchDataFromDataSource({
collectionName: "Insert your Data Source ID here",
filter: {}
})
const ans = docs.filter((doc) => {
const datasourceIntent = this.lodash.get(doc, "Intent")
if (datasourceIntent === dialogflowIntent) {
console.log(datasourceIntent)
return doc
}
})
console.log("ans", ans)
this.lodash.set(this.member, "botMeta.tempData.faq", ans[0])
resolve({ member: this.member })
} catch (e) {
reject(e)
}
})
- 把您于level one使用的FAQ 数据源的数据源 ID输入到以上的編碼。
NLP Response
- 使用以下代码创建 response 以显示匹配条目的答案:
return new Promise((resolve, reject) => {
let result = this.member.botMeta.tempData.faq
let response = {}
console.log("response start", result)
if (result) {
switch (result.Type) {
case "Text":
response.type = "TEXT"
response.text = result.Text
if (result.Preview === true || result.Preview === "TRUE") {
response.preview_url = true
}
break
case "Image":
case "Image_Text":
response.type = "IMAGE"
response.url = result.URL
response.text = result.Caption
break
case "Video":
case "GIF":
case "File":
response.type = "FILE"
response.url = result.URL
response.text = result.Caption
response.filename = result["File Name"]
break
case "Audio":
response.type = "AUDIO"
response.url = result.URL
break
default:
response = null
break;
}
}
console.log("response", response)
resolve(response)
})
Redirect to FAQ Module
- 切换“重定向”并将以下代码粘贴到高级选项卡中:
return new Promise((resolve) => {
let redirectAns = this.member.botMeta.tempData.faq
if (this.lodash.isEmpty(redirectAns)) {
resolve({
tree: this.node.tree,
nodeCompositeId: "Insert the FAQ Module node composite ID here",
runPreAction: true,
sendResponse: true,
runPostAction: true
})
}
})
- Input the node composite ID of the FAQ Module you have used from level one to level four to the above code. This is for redirecting to the FAQ Module in case there are no intents matched.
12.输入你从一级到四级使用过的FAQ模块的节点复合ID到上面的代码。 这是为了在没有匹配意图的情况下重定向到 FAQ 模块。
编辑常见问题模块的全局节点
- 使用以下条件和关系更改现有触发器:
No NLP Trigger
第一个条件 - 输入文本:
this.messageEvent.type === "TEXT"
第二个条件 - 无 DF:
!this.messageEvent.dialogflow
第三个条件 - 没有 LUIS
!this.messageEvent.luis
- 切换 Redirect 并重定向到 NLP Integration 树节点。
Redirect to NLP Integration
- 保存并查看是否可以产生预期结果。