如何在Azure Bot Service中实现英法双语QnAMaker分语言模式处理
当然可以实现!这里给你两种靠谱的解决方案
核心思路就是让机器人根据当前选中的语言模式,只检索对应语言的问答内容,从根源上避免混合展示的问题。
方案一:给QnAMaker问答对添加语言标签,调用时过滤
- 先给QnAMaker里的每一组问答打上语言标签:
- 所有英文问答对添加标签
Language: en - 所有法文问答对添加标签
Language: fr
(在QnAMaker门户编辑问答对时,找到「元数据」选项就能添加)
- 所有英文问答对添加标签
- 在机器人的对话逻辑里,记录用户当前选择的语言模式(比如存在对话状态
state里,用userLanguage: 'en'或'fr'标识) - 调用QnAMaker接口时,添加严格过滤条件,只返回对应语言标签的结果。举个Node.js的代码示例:
这样QnAMaker只会返回匹配当前语言的问答,自然不会出现混合的候选问题了。// 从对话状态获取当前用户选择的语言 const currentLang = turnContext.activity.state.userLanguage; // 调用QnAMaker时传入过滤参数 const qnaResults = await qnaMaker.getAnswers(turnContext, { strictFilters: [ { name: 'Language', value: currentLang } ] });
方案二:创建两个独立的QnAMaker知识库
如果你的英法双语内容差异较大,或者不想折腾标签,更简单的方式是:
- 单独创建一个纯英文知识库,只录入英文问答
- 再创建一个纯法文知识库,只录入法文问答
- 当用户切换语言模式时,机器人切换调用对应的知识库接口即可——比如英文模式调用英文知识库的endpoint,法语模式调用法语的。
这种方式更直观,维护起来也更清晰,尤其适合后续双语内容各自迭代的场景。
额外注意点
- 确保语言切换按钮触发时,及时更新对话状态里的语言标识,避免后续调用时用错过滤条件/知识库
- 测试时可以验证:比如切换到法语模式后输入英文问题,机器人应该返回法语的“未找到相关答案”提示,而不是混出英文候选
内容的提问来源于stack exchange,提问作者Jason Parker
相关产品推荐
相关产品推荐

