You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lambda代码中使用Amazon Lex v2的inputTranscript实现开放式插槽取值

Amazon Lex V2 任意文本插槽采集Lambda实现方案

前置配置确认

你需要先在Lex控制台完成以下预配置:

  • 你已有的意图中,description插槽设置为必填,槽类型选择自定义空槽类型(不需要添加任何枚举值,匹配规则设为宽松匹配即可)
  • 意图的「对话代码钩子」开启初始化和验证触发选项
  • 你的Lex机器人别名已经关联了该Lambda函数,并且给Lex服务开通了调用Lambda的权限

完整可运行Lambda代码(Python 3.9+)

import json

def lambda_handler(event, context):
    # 解析Lex V2传入的事件参数
    session_attributes = event.get('sessionAttributes', {})
    intent = event['sessionState']['intent']
    slots = intent['slots']
    input_transcript = event.get('inputTranscript', '')
    
    # 通用响应生成函数
    def elicit_slot(slot_to_elicit, message_content):
        return {
            "sessionState": {
                "dialogAction": {
                    "type": "ElicitSlot",
                    "slotToElicit": slot_to_elicit
                },
                "intent": intent,
                "sessionAttributes": session_attributes
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": message_content
                }
            ]
        }
    
    def delegate():
        return {
            "sessionState": {
                "dialogAction": {
                    "type": "Delegate"
                },
                "intent": intent,
                "sessionAttributes": session_attributes
            }
        }
    
    # 1. 校验priority插槽取值是否在1-5范围内
    if slots.get('priority') and slots['priority'] is not None:
        priority_val = int(slots['priority']['value']['interpretedValue'])
        if priority_val < 1 or priority_val >5:
            slots['priority'] = None
            return elicit_slot('priority', '优先级请输入1-5之间的数字,请重新输入:')
    
    # 2. 采集description任意文本的核心逻辑
    if slots.get('description') is None:
        # 判断当前是否正在询问description插槽
        if event['proposedNextState']['dialogAction'].get('slotToElicit') == 'description':
            # 直接把用户整段输入作为description的值
            slots['description'] = {
                "value": {
                    "originalValue": input_transcript,
                    "interpretedValue": input_transcript,
                    "resolvedValues": [input_transcript]
                }
            }
            # 填充完成后交回Lex继续后续流程
            return delegate()
        # 如果还没到询问description的步骤,交回Lex正常推进
        return delegate()
    
    # 所有插槽采集完成,交回Lex执行后续 fulfill 逻辑
    return delegate()

功能验证步骤

  • 部署上述Lambda代码后,进入Lex控制台测试窗口
  • 触发你的意图后,按提示输入name、priority,当Lex询问description的内容时,你输入任意长度的文本都可以被完整捕获存入description插槽
  • 你可以在测试窗口的「详细信息」中查看插槽的最终采集结果,确认inputTranscript的内容已经完整写入description字段

内容的提问来源于stack exchange,提问作者Jeet Bardapurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:48:03