You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Alexa与Lex机器人集成时,如何配置意图以无载体短语直接捕获用户自由输入?

Alexa与Lex机器人集成时,如何配置意图以无载体短语直接捕获用户自由输入?

嘿,我刚好之前处理过几乎一模一样的需求,给你几个亲测有效的方案,应该能完美解决你的问题:


方案一:用AMAZON.FallbackIntent(最推荐,配置最简单)

Alexa内置的AMAZON.FallbackIntent就是专门用来兜底处理“无法匹配到其他意图”的输入,我们刚好可以利用它来捕获所有无载体短语的自由输入:

  1. 先在Alexa开发者控制台的「交互模型」→「意图」列表里,找到并启用AMAZON.FallbackIntent(默认可能是禁用状态,需要手动开启)
  2. 不需要给这个意图添加任何样本话术(Utterances),它的核心逻辑就是:只要用户的输入匹配不上你技能里的其他意图,就会触发它
  3. 重点来了——在你的 orchestrator Lambda 里,不管这个意图有没有返回槽值,直接读取请求里的inputTranscript字段,这就是用户说的原始完整输入文本,把它直接传给Lex bot的PostText接口就行

这个方案的优势是绝对可靠,不管用户说什么(哪怕是完全无意义的内容),只要技能处于激活状态,都会被这个意图捕获,完美满足你“传原始查询给Lex”的需求。

方案二:自定义意图+极简话术配置(适合不想用兜底意图的场景)

如果你更倾向于用自己的自定义意图,比如叫PassToLexIntent,可以这么配置:

  1. 给这个意图添加唯一的样本话术:{UserQuery}——就是直接把你的AMAZON.SearchQuery槽作为整个话术
  2. 进入槽的设置页面,把AMAZON.SearchQuery的「槽解析(Slot Resolution)」设置为「None」,这样Alexa不会尝试解析槽的内容,直接把所有输入塞进这个槽里
  3. 可以把这个意图设置为技能的“默认意图”(在控制台的「技能设置」里配置),提升它的匹配优先级

不过要注意:如果你的技能里还有其他内置意图(比如AMAZON.SearchIntent),可能会抢匹配权,所以最好暂时禁用其他无关的内置意图,确保这个自定义意图能优先捕获输入。

额外的Lambda处理小技巧

不管用哪个方案,在你的 orchestrator Lambda 里,记得直接取inputTranscript字段而不是槽值——因为槽值可能会被Alexa做过解析截断,而inputTranscript100%原始的用户输入文本,完全符合你“直接传原始查询给Lex”的要求。

举个Lambda里的伪代码片段(方便你理解):

def lambda_handler(event, context):
    # 拿到用户的原始输入
    raw_user_input = event['request']['inputTranscript']
    # 调用Lex的PostText API,把raw_user_input传进去
    lex_response = lex_client.post_text(
        botName='YourLexBotName',
        botAlias='YourLexBotAlias',
        userId=event['session']['user']['userId'],
        inputText=raw_user_input
    )
    # 把Lex的结果转成Alexa能识别的格式返回
    return {
        'version': '1.0',
        'response': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': lex_response['message']
            },
            'shouldEndSession': False
        }
    }

备注:内容来源于stack exchange,提问作者Sriram Chebrolu

火山引擎 最新活动