MS Bot 如何将 Luis 实体转发给子对话框
MS Bot how to forward Luis Entities to child Dialog
我正在尝试将 Entities
从 LuisResults
转发到子对话框 class。谁能协助解决这个问题?
Luis Dialog Class
...
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(), AfterFooDialog, entities,
CancellationToken.None);
}
...
FooDialog Class
...
public async StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, List<string> entities, IAwaitable(IMessageActivity) result)
{
var _entites = await entities;
...
}
...
一种方法是,通过构造函数初始化 FooDialog
中的实体。因此,将实体从 LuisDialog
.
转发到构造函数中的 FooDialog
因此您的代码将是:
路易斯·达格
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(entities), AfterFooDialog, entities, CancellationToken.None);
}
还有你的FooDialog
[Serializable]
public class FooDialog : IDialog<object>
{
public IList<EntityRecommendation> _entities { get; set; }
public FooDialog(IList<EntityRecommendation> entities)
{
this._entities = entities;
}
public FooDialog()
{}
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result )
{
await context.PostAsync("Entity : " + _entities.First().Entity);
}
}
现在您在 FooDialog class 中有了实体,并且可以通过对象中的任何函数访问。
我正在尝试将 Entities
从 LuisResults
转发到子对话框 class。谁能协助解决这个问题?
Luis Dialog Class
...
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(), AfterFooDialog, entities,
CancellationToken.None);
}
...
FooDialog Class
...
public async StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, List<string> entities, IAwaitable(IMessageActivity) result)
{
var _entites = await entities;
...
}
...
一种方法是,通过构造函数初始化 FooDialog
中的实体。因此,将实体从 LuisDialog
.
FooDialog
因此您的代码将是:
路易斯·达格
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(entities), AfterFooDialog, entities, CancellationToken.None);
}
还有你的FooDialog
[Serializable]
public class FooDialog : IDialog<object>
{
public IList<EntityRecommendation> _entities { get; set; }
public FooDialog(IList<EntityRecommendation> entities)
{
this._entities = entities;
}
public FooDialog()
{}
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result )
{
await context.PostAsync("Entity : " + _entities.First().Entity);
}
}
现在您在 FooDialog class 中有了实体,并且可以通过对象中的任何函数访问。