我正在使用Bot Framework,LUIS和ActionBinding開發一個bot。在子對話框中獲取LUIS實體
在我的意圖處理的一個我稱之爲一個新的對話,其中有StartAsync(IDialogContext context)
和ReceiveMessageAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
據我瞭解,在等待(與context.Wait(ReceiveMessageAsync)
)由用戶輸入的信息將不會被髮送到LUIS方法, 對?
所以,如果我需要了解用戶說什麼,而不必解析字符串,這是我的選擇?可以調用ILuisService.QueryAsync
與message.Text爲每個消息是一個選項?
我希望能夠檢測用戶鍵入的實體,以便我可以將它們映射到缺失的字段。例如,在這次談話:
User: I want to book a flight. // LUIS detects intent
Bot: Ok. Can you tell me more about your flight? // child dialog is called to handle the rest of the conversation
User: I want to go to Madrid.
Bot: To fly to Madrid you can choose between company A, B or C.
User: I want to go with A tomorrow night
Bot: Ok, searching for available tickets for tomorrow night in A...
在這種情況下,有檢測意圖時沒有初始實體,但有可能是,在這種情況下,機器人不會索要已經給信息。
對於我的項目,只有一對一問題答案的簡單表單是不夠的。如果用戶想要更改一個或多個參數(即,我需要返回到所有參數並檢查更改的參數是否影響它們),我還需要對之前設置的參數進行更多驗證和確認。例如:
User: Wait, I want to fly to Barcelona instead.
Bot: Company A does not fly to Barcelona. You can choose between C and D.
User: Ok I want to fly with C.
Bot: There are tickets available for tomorrow night in company C. Keep the flight for tomorrow night?
User: yes.
有關最佳實踐的任何提示或指導將有所幫助。
在此先感謝。
編輯:
與子行動解決方案,其中將我的驗證操作?在FulfillAsync方法?我需要驗證,然後向用戶發送問題並理解他發送的回覆(解析實體)。 LuisAction內部可能嗎?
我想使用QueryValueFromLuisAsync
,但看了它之後,我需要通過paramName
,這是一個動作屬性(如果我沒有弄錯),這就是我想要的避免。我不想將一個答案(即message.Text)映射到一個字段,我想將一個答案映射到多個字段。
比方說,我需要填寫一個有6個屬性的模型。如果機器人向用戶提出一個問題,並且在他的回覆中有3個實體,我希望將這些實體映射到3個字段,之後僅對剩餘的非映射字段提出問題。
你在做動作綁定與https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/Blog-LUISActionBinding? –
是的。我在VS解決方案中有該項目,我在克隆BotBuilder-Samples回購後複製了該項目。 –
@EzequielJadib另外,是否有可能在使用ActionBinding意圖處理程序時獲取LuisResult對象? –