如何在Bot Framework中扩展Confirm Prompt的可识别输入?
扩展Confirm Prompt可识别输入范围的实用方案
嘿,这个问题我之前帮不少开发者踩过坑——Confirm Prompt默认的识别逻辑确实太局限,只认标准的是/否类短语,但要扩展它的识别范围完全没问题,甚至不止LUIS,还有几种实用的方案,给你拆解下:
1. 用LUIS(或其他意图识别服务)替代默认识别逻辑
这是处理自然语言变体最靠谱的方案,毕竟LUIS专门用来识别用户意图,能轻松覆盖像“那就是正确的产品”这种非标准化的确认表达。
核心思路是:把用户输入先传给LUIS,提前训练一个包含「确认」「拒绝」两个核心意图的模型,把各种常见的自然表达都加进去(比如确认类的“没错”“对的”“正是这个”,拒绝类的“不对”“不是它”“搞错了”)。然后在Confirm Prompt的验证逻辑里,跳过默认的识别,直接用LUIS的意图结果来判断用户是确认还是拒绝。
举个C#的代码示例(Bot Framework环境):
var confirmPrompt = new ConfirmPrompt("confirmPrompt", async (promptContext, cancellationToken) => { // 调用LUIS识别用户输入的意图 var luisResult = await _luisRecognizer.RecognizeAsync(promptContext.Context, cancellationToken); var topIntent = luisResult.TopIntent().Intent; if (topIntent == "Confirm") { promptContext.Recognized.Value = true; return true; } else if (topIntent == "Reject") { promptContext.Recognized.Value = false; return true; } // 没识别到意图时,提示用户重新输入 await promptContext.Context.SendActivityAsync("抱歉,我没太明白,请告诉我是或否相关的回答哦", cancellationToken: cancellationToken); return false; });
2. 自定义短语匹配器(轻量无依赖方案)
如果你的场景不需要处理太复杂的自然语言,只是覆盖一些常见的变体,那自己维护一个短语库就行,不用依赖外部服务。
你可以提前整理确认/拒绝类的常见表达,用模糊匹配或字符串包含检查来判断用户输入的意图。比如:
// 维护确认和拒绝的短语库 const confirmPhrases = ['是', '是的', '没错', '那就是', '对的', '正确', '正是']; const rejectPhrases = ['否', '不是', '不对', '错了', '不是这个', '搞错了']; // 自定义验证器 const customConfirmValidator = async (promptContext) => { const input = promptContext.context.activity.text.toLowerCase(); const isConfirm = confirmPhrases.some(phrase => input.includes(phrase)); const isReject = rejectPhrases.some(phrase => input.includes(phrase)); if (isConfirm) { promptContext.recognized.value = true; return true; } else if (isReject) { promptContext.recognized.value = false; return true; } // 匹配失败时提示用户 await promptContext.context.sendActivity('不好意思,我没听懂,请用是或类似的确认词,或者否来回答哦'); return false; }; // 把自定义验证器绑定到Confirm Prompt const confirmPrompt = new ConfirmPrompt('confirmPrompt', customConfirmValidator);
3. 集成自定义识别器(Bot Framework进阶方案)
如果用的是Bot Framework,还可以实现一个IRecognizer接口的自定义识别器,把它直接集成到Prompt的管道里。这种方式更灵活,能把识别逻辑和Prompt完全解耦,适合需要复用识别逻辑的复杂场景。
你可以在自定义识别器里实现自己的意图判断逻辑(不管是调用LUIS还是用短语匹配),然后让Confirm Prompt优先使用这个识别器的结果,而不是默认的规则引擎。
总结
- 如果需要处理大量非标准化的自然语言输入,**LUIS(或类似的意图识别服务)**是最优解;
- 如果只是覆盖常见的短语变体,自定义短语匹配器足够轻量好用;
- 复杂Bot场景可以考虑自定义识别器来解耦逻辑。
内容的提问来源于stack exchange,提问作者jacobytes
相关产品推荐
相关产品推荐

