虚拟助理和技能
打字稿
当使用特定语言(例如 DE)创建QnAMakerDialog 时,即使您更改语言或其他用户使用不同的语言(例如 EN),也将始终解析该语言。
用户 1 :向机器人(DE)发送话语;
Bot :Bot 将话语解析为 QnA 意图,并创建新的 QnADialog,以knowledgebaseId 作为对话框的Id:
``
private registerQnADialog(knowledgebaseId: string, cognitiveModels: ICognitiveModelSet, locale: string): void {
const qnaEndpoint: QnAMakerEndpoint | undefined = cognitiveModels.qnaConfiguration.get(knowledgebaseId);
if (qnaEndpoint == undefined){
throw new Error(
找不到 ID 为 ${knowledgebaseId }.`) 的 QnA Maker 知识库配置;
}
if (this.dialogs.find(knowledgebaseId) == undefined) {
const qnaDialog: QnAMakerDialog = new QnAMakerDialog(
qnaEndpoint.knowledgeBaseId,
qnaEndpoint.endpointKey,
// The following line is a workaround until the method getQnAClient of QnAMakerDialog is fixed
// as per issue https://github.com/microsoft/botbuilder-js/issues/1885
new URL(qnaEndpoint.host).hostname.split('.')[0],
this.templateEngine.generateActivityForLocale('UnsupportedMessage', locale) as Activity,
// Before, instead of 'undefined' a '0.3' value was used in the following line
undefined,
this.templateEngine.generateActivityForLocale('QnaMakerAdaptiveLearningCardTitle', locale).text,
this.templateEngine.generateActivityForLocale('QnaMakerNoMatchText', locale).text
);
qnaDialog.id = knowledgebaseId;
this.addDialog(qnaDialog);
}
}
```
Bot :在用户 1 的语言环境 (DE) 中向用户 1 发送 QnA 答案
用户 2 : 向 bot ( EN ) 发送话语;
Bot :Bot 将话语解析为 QnA 意图(与用户 1 发送的相同),不会创建新的 QnaMakerDialog,因为已经存在一个具有相同 KnowledgebaseId 的 Dialog。
Bot :Bot 再次启动 QnA Dialog(从用户 1 次迭代添加)并从第一个用户的知识库 (DE) 中获取答案;
Bot :在用户 1 的语言环境中向用户 2 发送消息。
将使用正确的语言和正确的知识库 ID 创建另一个QnAMakerDialog 。
谢谢@tommyJimmy87。 一旦我们有任何与依赖注入实现相关的更新,我们会尽快回复您!
嗨@tommyJimmy87 ,我们创建了 PR #3559,它在机器人中结合了依赖注入解决了这个问题。
如果您很友善,您能否按照这些重现步骤并使用此分支验证更改:
npm install
安装依赖npm run build
编译解决方案npm pack
来创建 tgz使用虚拟助手package.json 中创建的 tgz 如下:
"bot-solutions": "通往 BOT 解决方案 TGZ 的途径"
以多语言部署虚拟助手
QnAMakerDialog
场景最后但并非最不重要的一点是,正如前面提到的,PR 包含以下更改:
inversifyjs
库)的实现和TypeScript的技巧我们会留意您的回答😊。
嗨@ Batta32 ,
感谢您的支持,看起来问题已经通过我从您的分支集成的新机器人解决方案库解决了 :) 您对何时发布它有一个粗略的估计吗?
嗨@Batta32 ,我注意到当我尝试运行单元测试时出现错误: TypeError: Reflect.hasOwnMetadata is not a function
。
这是因为您没有将测试迁移到使用 inversify 吗?
谢谢@tommyJimmy87! 我们将对此进行审查,一旦有任何更新,我们会尽快回复您😊。
嗨@Batta32 ,我们解决了这个问题,将这个导入添加到测试基础js文件中: require('reflect-metadata');
嗨@tommyJimmy87 - 我们无法重现您提到的与单元测试相关的问题。
我们提出了以下问题:
这是我们的环境:
feature/southworks/dependency-injection-implementation
我们采取了以下步骤来重现虚拟助手和技能的问题:
npm install
安装依赖npm run build
编译解决方案npm pack
创建.tgz
.tgz
如下:npm install
安装依赖npm run build
编译解决方案npm run test
编译解决方案嗨@tommyJimmy87 - 我们在 PR #3559 中添加了建议的更改。
我们更新了虚拟助手和技能机器人,添加了以下导入测试文件: require('reflect-metadata');
专门在BotTestBase和SkillTestBase 中,以避免您提到的与单元测试相关的问题。
您可以按照这些步骤来测试虚拟助手和技能中的更改。
谢谢,
迭戈。
嗨@Batta32和@DiegoCardozo94 ,
我有一个通用问题,但由于我已经在我们的项目中使用了这个分支,即使尚未发布,我也会在这里提问。
在我们的场景中,我们将 MS Teams 作为唯一通道,我看到 TeamsActivityHandler 仅在 VA 中使用,而不在技能示例中使用,对吗? 因为也许我错误地扩展了 TeamsActivityHandler 的技能,这让我特别关注一个问题:基本上endOfConversation
方法永远不会在技能的DefaultActivityHandler
的cancel
之后被调用. 但也许我应该在技能范围内切换到“正常”的 ActivityHandler 扩展。 你能帮我或者更确切地说给我反馈吗?
谢谢
嗨@tommyJimmy87 , TeamsActivityHandler
派生自ActivityHandler
,它增加了对 Microsoft Teams 特定事件和交互的支持。
虚拟助手是在连接到 Skills 的 Virtual Assistant 架构中与 Microsoft Teams Channel 交互的一个,因此 Virtual Assistant 的DefaultActivityHandler
需要从TeamsActivityHandler
扩展,而不是 Skill在提到的模式中,正如您在示例中看到的那样。
模板/示例中虚拟助手的DefaultActivityHandler
实现了TeamsActivityHandler
,它支持开箱即用的 Teams 方案。
我们研究了以下文档,您也可以查看这些文档:
如果这对您有帮助,请告诉我们😊。
此问题已过时,因为它已打开 30 天而没有任何活动。 删除陈旧的标签或评论,否则这将在 5 天内关闭
@Batta32这还没有发布吧?
嗨@tommyJimmy87 - 我们正在敲定发布新软件包的计划。 一旦我们有任何更新,我们会在这里回复您😊。
@Batta32 有什么更新吗?
嗨@cwhitten ,这个问题已经通过 PR #3559 解决了,它更新了@peterinnesmsft的请求更改。
PR 合并后,更改将出现在next
分支中。
#3559 的状态是什么? @巴塔32
最后一次更新是在 9 月 11 日
谢谢
嗨@tonyanziano ,PR #3559 已准备好进行审查和合并,其中包含@peterinnesmsft 的请求更改。
PR 合并后,更改将出现在next
分支中。
此问题已过时,因为它已打开 30 天而没有任何活动。 删除陈旧的标签或评论,否则这将在 5 天内关闭
@joshgummersall #3752 的状态是什么? 你预计什么时候把它合并?
只要其他人可以审核并批准!
@joshgummersall ,
你可以努力让 PR 合并以便可以关闭这张票吗?
@virtual-josh,它只是在等待另一份公关审查; 它已经被一位审稿人批准了。 不知道该找谁进行第二次审查。
最有用的评论
嗨@ Batta32 ,
感谢您的支持,看起来问题已经通过我从您的分支集成的新机器人解决方案库解决了 :) 您对何时发布它有一个粗略的估计吗?