如何解决Bot Framework - 如何访问分部类中定义的实体
我导出了我的 LUIS 应用程序内容 (.json) 并使用 bf luis:generate:cs
命令从中生成了一个 .cs 代码:
public partial class AssistantRootDialog: IRecognizerConvert
{
并编写了另一个分部类以更好的(命名)方式访问实体
public partial class AssistantRootDialog
{
public String PhoneUser => Entities?.ContactName?.FirstOrDefault() ?? "<no user>";
...
}
在我的自适应对话框中,我将 LUI 识别的意图和实体设置如下:
new OnIntent(nameof(AssistantRootDialog.Intent.LookForMobilePhone)) {
Actions = new List<Dialog>() {
new SetProperty() {
Property = "conversation.find.phone.userName",Value = "=turn.recognized.Entities?.ContactName[0]"
},
我想知道如何使用分部类中的 PhoneUser
属性:
new SetProperty() {
Property = "conversation.find.phone.userName",Value = "=turn.recognized.PhoneNumber" // It seems wrong !! ??
},
有什么想法吗?提前致谢...
解决方法
只是为了设置一些上下文,您必须记住自适应对话和传统对话存在于不同的领域,并且您以不同的方式使用它们。
您可以使用自适应对话框中的传统对话框,但您不能(或者至少我还没有想出如何)反过来使用它。
自适应对话框是声明性的,由 DialogManager
管理,而传统对话框是命令式的,主要由您的代码管理。
您可以使用 CodeAction
对话框在自适应对话框定义中添加自定义代码并访问在自适应属性分配中定义的任何属性。因此,您可以在 SetProperty()
操作之后定义此代码操作:
new CodeAction(async (dialogContext,options) =>
{
// this is the way to get a value from adaptive dialog's state,you can "deserialize" to whatever type
var userName = dialogContext.State.GetValue<string>("conversation.find.phone.userName");
// you can also set any property and use it later from any adaptive expression
dialogContext.State.SetValue("conversation.find.phone.firstName",userName.Split()[0]);
return await dialogContext.EndDialogAsync(options);
}),
能够获取和设置属性并在“另一边”中使用它们。
无论如何,我不确定这对您想要实现的目标有帮助,但至少是一种在两个“现实”之间传递价值的方式?。
更新:我几天前发布了一个 post in my blog,这可能有助于自适应对话框,特别是在测试部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。