질문이 있습니다. 불행히도 웹상의 모든 샘플이 너무 얕아서 실제로 잘 다루지 않습니다.탐색은 LUIS 하위 대화 상자에서 어떻게 작동합니까?
LuisDialog를 확장하는 RootDialog가 있습니다. 이 RootDialog는 사용자가 원하는 것을 알아내는 역할을합니다. 여러 가지 일 수 있지만 그 중 하나는 새로운 질서를 시작합니다. 이를 위해 RootDialog는 NewOrderDialog에 호출을 전달하고 NewOrderDialog의 책임은 몇 가지 기본 세부 정보 (사용자가 무엇을 원하는지, 어떤 주소를 사용하고 싶은지)를 파악한 다음 최종적으로 주문하고 RootDialog로 돌아 간다.
RootDialog의 코드는 매우 간단합니다 작동하지 않습니다 나와 같은
[Serializable]
public class NewOrderDialog : LuisDialog<object>
{
private string _product;
private string _address;
public NewOrderDialog() : base(new LuisService(new LuisModelAttribute(ConfigurationManager.AppSettings["LuisAppId"], ConfigurationManager.AppSettings["LuisAPIKey"], domain: "westus.api.cognitive.microsoft.com")))
{
}
[LuisIntent("Order.RequestedItem")]
public async Task RequestItemIntent(IDialogContext context, LuisResult result)
{
EntityRecommendation item;
if (result.TryFindEntity("Item", out item))
{
_product = item.Entity;
await context.PostAsync($"Okay, I understood you want to order: {_product}.");
}
else
{
await context.PostAsync("I couldn't understand what you would like to buy. Can you try it again?");
}
context.Wait(MessageReceived);
}
[LuisIntent("Order.AddedAddress")]
public async Task AddAddressIntent(IDialogContext context, LuisResult result)
{
EntityRecommendation item;
if (result.TryFindEntity("Address", out item))
{
_address = item.Entity;
await context.PostAsync($"Okay, I understood you want to ship the item to: {_address}.");
}
else
{
await context.PostAsync("I couldn't understand where you would like to ship the item. Can you try it again?");
}
context.Wait(MessageReceived);
}
}
코드 : 나는 또한 NewOrderDialog에 대한 마음에 몇 가지 코드를했다
[Serializable]
public class RootDialog : LuisDialog<object>
{
public RootDialog() : base(new LuisService(new LuisModelAttribute(ConfigurationManager.AppSettings["LuisAppId"], ConfigurationManager.AppSettings["LuisAPIKey"], domain: "westus.api.cognitive.microsoft.com")))
{
}
[LuisIntent("Order.Place")]
public async Task PlaceOrderIntent(IDialogContext context, LuisResult result)
{
await context.Forward(new NewOrderDialog(), OnPlaceOrderIntentCompleted, context.Activity, CancellationToken.None);
context.Wait(MessageReceived);
}
private async Task OnPlaceOrderIntentCompleted(IDialogContext context, IAwaitable<object> result)
{
await context.PostAsync("Your order has been placed. Thank you for shopping with us.");
context.Wait(MessageReceived);
}
}
. Order.Place intent를 입력하면 즉시 'success'콜백을 실행 한 다음이 예외가 throw됩니다.
예외 : IDialog 메서드를 실행하면 IDialogStack을 통해 지정된 여러 개의 다시 시작 핸들러가 완료됩니다. [파일 형식의 '텍스트/일반']
그래서 나는 몇 가지 질문이 있습니다
- 가 어떻게 내가 오류를 해결 할를?
- NewOrderDialog를 입력 할 때 제품과 주소가 무엇인지 이미 알고 있는지 확인하고 올바른 정보를 묻지 않는 경우 어떻게 할 수 있습니까?
- context.Done()과 같은 것을 호출하지 않아도 NewOrderDialog가 닫히는 이유는 무엇입니까? 모든 정보가 수집되고 주문이 확인되면 폐쇄 만하기를 원합니다.
[Bot Framework를 사용하여 단일 봇에서 여러 LUIS 대화 상자를 구현하는 방법은 무엇입니까?] (https://stackoverflow.com/questions/40399973/how-do-i-implement-multiple-luis-dialogs) -one-a-single-bot-bot-framework 사용) – JasonSowers
@JasonSowers 아니요. 내 질문에 대한 해결책이 보이지 않습니다. –