我们正在使用Microsoft bot框架开发一个库机器人。
我们有
Intent : BookSearch
Entiry : BookName, BookAuthor
当我搜索"我需要一本java书"时,它理解' java'是一个实体,并为java书提供其他详细信息。
我的问题是,一旦我收到了java书籍的详细信息,我想发布这本书,所以当我们问及#34;发给我书Java"时,它会发生冲突并再次显示java书籍细节就像它进入循环一样。
请在这种情况下帮助我们,我们如何在问题中确定不同的背景?
代码:
[LuisIntent("BookSearch")]
public async Task BookSearch(IDialogContext context, LuisResult result)
{
if (result.Entities.Any())
{
DBConnect dbConnect = new DBConnect();
string combindedString = string.Empty;
string mysqlQuery = string.Empty;
foreach (var item in result.Entities)
{
switch (item.Type.ToString())
{
case "BookAuthor":
break;
case "BookName":
break;
case "BookIssue":
break;
default:
break;
}
}
}
else
{
await context.PostAsync("Which book are you searching.");
context.Wait(MessageReceived);
}
}
这里BookName和BookIssue是实体, 所以,当我们要求"我需要java book" =>它应该进入BookName实体以提供书籍详细信息。 当我们问"发给我java book" =>它应该进入BookIssue实体来处理签发手续。
提前致谢
答案 0 :(得分:0)
BookIssue
应该是它自己的意图&方法。在您的代码中,您似乎将BookIssue
视为一个实体。
为BookSearch
执行的操作,但要使用BookIssue
方法中的语句和逻辑。
现在你在BookSearch
意图中“陷入困境”,因为你没有定义另一个意图,而LUIS正在匹配那些话语来搜索。
顺便说一句,对于此应用程序,您可能需要考虑使用FormFlow。