프로그래밍 모델 - Amazon Lex V1

Amazon Lex V2를 사용하는 경우 Amazon Lex V2 가이드를 대신 참조하십시오.

 

Amazon Lex V1을 사용하는 경우 봇을 Amazon Lex V2로 업그레이드하는하는 것이 좋습니다. 더 이상 V1에 새로운 기능을 추가하지 않으므로 모든 새 봇에 V2를 사용할 것을 강력히 권장합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

프로그래밍 모델

은 Amazon Lex 의 기본 리소스 유형입니다. Amazon Lex 의 기타 리소스 유형은 의도, 슬롯 유형, 별칭봇 채널 연결입니다.

Amazon Lex 콘솔 또는 모델 구축 API를 사용하여 봇을 생성합니다. 콘솔은 애플리케이션을 위해 프로덕션용으로 사용할 준비가 된 봇을 구축할 때 사용하는 그래픽 사용자 인터페이스를 제공합니다. 원하는 경우 AWS CLI를 통해 모델 구축 API를 사용하거나 고유한 사용자 지정 프로그램을 사용해 봇을 생성할 수 있습니다.

봇을 생성한 후 지원되는 플랫폼 중 하나에 이를 배포하거나 자체 애플리케이션에 통합할 수 있습니다. 사용자가 봇과 상호 작용하는 경우 클라이언트 애플리케이션은 Amazon Lex 런타임 API를 사용하여 봇에 요청을 보냅니다. 예를 들어, 사용자가 "피자 주문하고 싶어요"라고 말하면, 클라이언트는 런타임 API 작업 중 하나를 사용하여 Amazon Lex 에 이 입력을 보냅니다. 사용자는 입력을 음성이나 텍스트로 제공할 수 있습니다.

또한 Lambda 함수 를 생성하여 의도에 사용할 수 있습니다. 이러한 Lambda 함수 코드 후크를 사용하여 초기화, 사용자 입력 검증, 의도 이행 등과 같은 런타임 활동을 수행합니다. 다음 섹션에서 추가 정보를 제공합니다.

모델 구축 API 작업

봇, 의도 및 슬롯 유형을 프로그래밍 방식으로 생성하려면 모델 구축 API 작업을 사용합니다. 또한 모델 구축 API를 사용하여 봇에 대한 리소스를 관리, 업데이트 및 삭제할 수 있습니다. 모델 구축 API 작업은 다음과 같습니다.

모델 구축 API를 사용하면 Amazon Lex 리소스를 관리하기 위한 사용자 지정 도구를 생성할 수 있습니다. 예를 들어 봇, 의도 및 슬롯 유형에 대해 각각 100개의 버전 한도가 있습니다. 모델 구축 API를 사용하여 봇이 이 한도에 근접하면 오래된 버전을 자동으로 삭제하는 도구를 구축할 수 있습니다.

한 번에 하나의 작업만 리소스를 업데이트하도록 하기 위해 Amazon Lex 는 체크섬을 사용합니다. Put API 작업 (PutBot, PutBotAlias, PutIntent 또는 PutSlotType)을 사용하여 리소스를 업데이트하는 경우 요청에서 리소스의 현재 체크섬을 전달해야 합니다. 도구 두 개가 동시에 리소스를 업데이트하려고 하면 둘 다 동일한 현재 체크섬을 제공합니다. Amazon Lex 에 도달한 첫 번째 요청이 리소스의 현재 체크섬과 일치합니다. 두 번째 요청이 도착할 때, 체크섬은 다릅니다. 두 번째 도구는 PreconditionFailedException 예외를 수신하고 업데이트가 종료됩니다.

Get 작업 (GetBot, GetIntent, 및 GetSlotType)은 결국에는 일관성을 유지하게 됩니다. Put 작업 중 하나를 사용하여 리소스를 생성 또는 수정한 직후에 Get 작업을 사용하면 변경 사항이 반환되지 않을 수 있습니다. Get 작업이 최신 업데이트를 반환하면 리소스가 다시 수정될 때까지 항상 업데이트된 리소스를 반환합니다. 체크섬을 확인해 업데이트된 리소스가 반환되었는지 확인할 수 있습니다.

런타임 API 작업

클라이언트 애플리케이션은 다음과 같은 런타임 API 작업을 사용하여 Amazon Lex 와 통신합니다.

  • PostContent – 음성 또는 텍스트 입력을 받아들여 의도 정보와 사용자에게 전달할 텍스트 또는 음성 메시지를 반환합니다. Amazon Lex 는 현재 다음 오디오 형식을 지원합니다.

     

    입력 오디오 형식 - LPCM 및 Opus

    출력 오디오 형식 - MPEG, OGG, PCM

     

    PostContent 작업은 8kHz 및 16kHz에서 오디오 입력을 지원합니다. 최종 사용자가 전화를 통해 Amazon Lex 와 대화하는 애플리케이션(예: 자동화된 콜 센터)은 8kHz 오디오를 직접 전달할 수 있습니다.

     

  • PostText – 텍스트 입력을 받아들여 의도 정보와 사용자에게 전달할 텍스트 메시지를 반환합니다.

클라이언트 애플리케이션은 런타임 API를 사용하여 특정 Amazon Lex 봇을 호출하여 표현(사용자 텍스트 또는 음성 입력)을 처리합니다. 예를 들어, 사용자가 "피자가 필요해"라고 말한다고 가정하겠습니다. 클라이언트는 Amazon Lex 런타임 API 작업 중 하나를 사용하여 봇에 이 사용자 입력을 보냅니다. 사용자 입력으로부터, Amazon Lex 는 사용자 요청이 봇에서 정의된 OrderPizza 의도에 대한 것임을 인식합니다. Amazon Lex 는 사용자를 대화에 참여시켜 피자 크기, 토핑, 피자 수와 같은 필수 정보 또는 슬롯 데이터를 수집합니다. 사용자가 필수 슬롯 데이터를 모두 제공하면 Amazon Lex 는 함수 코드 후크를 호출하여 의도를 이행하거나 의도 구성 방법에 따라 클라이언트에 의도 데이터를 반환합니다.

봇에서 음성 입력을 사용하는 경우 PostContent 작업을 사용합니다. 예를 들어, 자동화된 콜 센터 애플리케이션은 상담사 대신에 Amazon Lex 봇에 음성을 보내서 고객 문의를 처리할 수 있습니다. 8kHz 오디오 형식을 사용하여 전화에서 Amazon Lex 로 직접 오디오를 보낼 수 있습니다.

Amazon Lex 콘솔의 테스트 창에서는 API를 사용하여 텍스트 및 음성 요청을 Amazon Lex 에 보냅니다. Amazon Lex 시작하기 연습에서 이 테스트 창을 사용합니다.

코드 후크로서의 Lambda 함수

Lambda 함수를 코드 후크로 호출하도록 Amazon Lex 봇을 구성할 수 있습니다. 코드 후크는 다음과 같이 여러 가지 용도로 사용할 수 있습니다.

  • 사용자 상호 작용을 사용자 지정합니다. 예를 들어 Joe가 사용 가능한 피자 토핑을 요청하면 Joe의 선택에 대한 사전 지식을 활용하여 토핑의 하위 집합을 표시할 수 있습니다.

  • 사용자 입력 검증 - Jen이 몇 시간 후에 꽃을 찾아가고 싶어 한다고 가정하겠습니다. Jen이 적절한 응답을 입력하고 전송하는 시간을 검증할 수 있습니다.

  • 사용자의 의도 이행 - Joe가 피자 주문에 필요한 모든 정보를 제공하면, Amazon Lex 는 동네 피자 전문점에서 주문할 수 있는 Lambda 함수 를 호출하도록 구성할 수 있습니다.

의도를 구성할 때 다음 위치에서 Lambda 함수 를 코드 후크로 지정합니다.

  • 대화 코드 후크(초기화 및 검증) - 이 Lambda 함수 는 각 사용자 입력에 대해 호출됩니다(Amazon Lex 가 사용자 의도를 올바르게 이해하고 있다고 가정).

  • 이행 코드 후크 - 이 Lambda 함수 는 사용자가 의도를 이행하는 데 필요한 모든 슬롯 데이터를 제공한 후 호출됩니다.

아래 예제 스크린샷에 표시된 것처럼 Amazon Lex 콘솔에서 의도를 선택하고 이러한 코드 후크를 설정할 수 있습니다.

Lambda 함수 코드 후크를 보여 주는 Amazon Lex 콘솔.

또한 PutIntent 작업의 dialogCodeHookfulfillmentActivity 필드를 사용하여 코드 후크를 설정할 수도 있습니다.

하나의 Lambda 함수 가 초기화, 검증 및 이행을 수행할 수 있습니다. Lambda 함수 가 수신하는 이벤트 데이터에는 호출자를 대화 또는 이행 코드 후크로 식별하는 필드가 있습니다. 이러한 정보를 사용하여 적절한 코드 부분을 실행할 수 있습니다.

Lambda 함수 를 사용하여 복잡한 대화를 탐색할 수 있는 봇을 구축할 수 있습니다. Lambda 함수 응답에서 dialogAction 필드를 사용하여 Amazon Lex 에 특정 조치를 취하라고 지시할 수 있습니다. 예를 들어 ElicitSlot 대화 작업을 사용하여 Amazon Lex 에 사용자에게 필요 없는 슬롯 값을 묻도록 지시할 수 있습니다. 확인 프롬프트가 정의되어 있는 경우에는 사용자가 이전 의도를 마치면 ElicitIntent 대화 작업을 사용하여 새 의도를 유도할 수 있습니다.

자세한 내용은 Lambda 함수 사용 섹션을 참조하세요.