จัดการบอต Amazon Lex ของคุณผ่านเทมเพลต AWS CloudFormation | อเมซอนเว็บเซอร์วิส

จัดการบอต Amazon Lex ของคุณผ่านเทมเพลต AWS CloudFormation | อเมซอนเว็บเซอร์วิส

อเมซอน เล็กซ์ คือบริการปัญญาประดิษฐ์ (AI) ที่มีการจัดการอย่างเต็มรูปแบบ พร้อมด้วยโมเดลภาษาธรรมชาติขั้นสูงเพื่อออกแบบ สร้าง ทดสอบ และปรับใช้อินเทอร์เฟซการสนทนาในแอปพลิเคชัน ใช้เทคโนโลยีการเรียนรู้เชิงลึกขั้นสูงเพื่อทำความเข้าใจอินพุตของผู้ใช้ ช่วยให้นักพัฒนาสามารถสร้างแชทบอท ผู้ช่วยเสมือน และแอปพลิเคชันอื่น ๆ ที่สามารถโต้ตอบกับผู้ใช้ในภาษาธรรมชาติได้

การจัดการบอท Amazon Lex ของคุณโดยใช้ การก่อตัวของ AWS Cloud ช่วยให้คุณสร้างเทมเพลตที่กำหนดบอทและทรัพยากร AWS ทั้งหมดที่บอทนั้นขึ้นอยู่กับ AWS CloudFormation จัดเตรียมและกำหนดค่าทรัพยากรเหล่านั้นในนามของคุณ ซึ่งช่วยขจัดความเสี่ยงของข้อผิดพลาดของมนุษย์เมื่อปรับใช้บอทกับสภาพแวดล้อมใหม่ ประโยชน์ของการใช้ CloudFormation ได้แก่:

  • ความมั่นคง – เทมเพลต CloudFormation มอบวิธีการปรับใช้และจัดการทรัพยากรที่เกี่ยวข้องกับบอต Amazon Lex ที่สอดคล้องกันและเป็นอัตโนมัติมากขึ้น
  • การควบคุมเวอร์ชัน – ด้วย AWS CloudFormation คุณสามารถใช้ระบบควบคุมเวอร์ชัน เช่น Git เพื่อจัดการเทมเพลต CloudFormation ของคุณได้ สิ่งนี้ช่วยให้คุณสามารถรักษาบอทเวอร์ชันต่างๆ ของคุณและย้อนกลับไปเป็นเวอร์ชันก่อนหน้าได้หากจำเป็น
  • ความสามารถในเรอุส – คุณสามารถใช้เทมเพลต CloudFormation ซ้ำได้ในหลายสภาพแวดล้อม เช่น การพัฒนา การจัดเตรียม และการใช้งานจริง ซึ่งช่วยประหยัดเวลาและความพยายามในการกำหนดบอทตัวเดียวกันในสภาพแวดล้อมที่แตกต่างกัน
  • ขยาย – เนื่องจากบอต Amazon Lex ของคุณมีความซับซ้อนมากขึ้น โดยจัดการผ่าน คอนโซลการจัดการ AWS มีความท้าทายมากขึ้น AWS CloudFormation ช่วยให้มีวิธีการจัดการคำจำกัดความและทรัพยากรของบอทมีความคล่องตัวและมีประสิทธิภาพมากขึ้น
  • อัตโนมัติ – การใช้เทมเพลต CloudFormation ช่วยให้คุณสามารถทำให้กระบวนการปรับใช้เป็นแบบอัตโนมัติ คุณสามารถใช้บริการของ AWS เช่น AWS CodePipeline และ AWS CodeBuild เพื่อสร้าง ทดสอบ และปรับใช้บอต Amazon Lex ของคุณโดยอัตโนมัติ

ในโพสต์นี้ เราจะแนะนำคุณตลอดขั้นตอนที่เกี่ยวข้องในการสร้างเทมเพลต CloudFormation สำหรับบอต Amazon Lex V2

ภาพรวมโซลูชัน

เราได้เลือก จองทริป บอทเป็นจุดเริ่มต้นสำหรับแบบฝึกหัดนี้ เราใช้เทมเพลต CloudFormation เพื่อสร้างบอทใหม่ตั้งแต่ต้น รวมถึงการกำหนดเจตนา สล็อต และส่วนประกอบอื่น ๆ ที่จำเป็น นอกจากนี้ เรายังสำรวจหัวข้อต่างๆ เช่น การควบคุมเวอร์ชัน นามแฝง และการบูรณาการ AWS แลมบ์ดา ฟังก์ชั่น การสร้างสาขาแบบมีเงื่อนไข และการเปิดใช้งานการบันทึก

เบื้องต้น

คุณควรมีข้อกำหนดเบื้องต้นดังต่อไปนี้:

  • An บัญชี AWS เพื่อสร้างและปรับใช้เทมเพลต CloudFormation
  • ที่จำเป็น AWS Identity และการจัดการการเข้าถึง (ฉัน) สิทธิ์ เพื่อปรับใช้ AWS CloudFormation และทรัพยากรที่ใช้ในเทมเพลต
  • ความรู้พื้นฐานเกี่ยวกับ Amazon Lex, ฟังก์ชัน Lambda และบริการที่เกี่ยวข้อง
  • ความรู้พื้นฐานเกี่ยวกับการสร้างและปรับใช้เทมเพลต CloudFormation

สร้างบทบาท IAM

ในการเริ่มต้น คุณต้องสร้างบทบาท IAM ที่บอทจะใช้ คุณสามารถบรรลุสิ่งนี้ได้ด้วยการเริ่มต้นเทมเพลต CloudFormation และเพิ่มบทบาท IAM เป็นทรัพยากร คุณสามารถใช้เทมเพลตต่อไปนี้เพื่อสร้างบทบาทได้ ถ้าคุณ ดาวน์โหลดเทมเพลตตัวอย่าง และปรับใช้ คุณจะเห็นว่าบทบาท IAM ถูกสร้างขึ้นแล้ว เราให้ตัวอย่างเทมเพลตในขณะที่เราอ่านโพสต์นี้และรวมเข้าด้วยกันเมื่อเราดำเนินการต่อไป

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: CloudFormation template for book hotel bot.
Resources:
  # 1. IAM role that is used by the bot at runtime
  BotRuntimeRole:    
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lexv2.amazonaws.com
            Action:
              - "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: LexRuntimeRolePolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - "polly:SynthesizeSpeech"
                  - "comprehend:DetectSentiment"
                Resource: "*"

กำหนดค่าบอต Amazon Lex

ถัดไป คุณต้องเพิ่มคำจำกัดความของบอท ต่อไปนี้คือเทมเพลต YAML สำหรับคำจำกัดความของบอต Amazon Lex คุณสร้างส่วนประกอบที่จำเป็นทีละรายการ:

Type: AWS::Lex::Bot
Properties:
  AutoBuildBotLocales: Boolean
  BotFileS3Location: 
    S3Location
  BotLocales: 
    - BotLocale
  BotTags: 
    - Tag
  DataPrivacy: 
    DataPrivacy
  Description: String
  IdleSessionTTLInSeconds: Integer
  Name: String
  RoleArn: String
  TestBotAliasSettings: 
    TestBotAliasSettings
  TestBotAliasTags: 
    - Tag

หากต้องการสร้างบอทที่มีเฉพาะคำจำกัดความของบอทโดยไม่มีเจตนาใดๆ คุณสามารถใช้เทมเพลตต่อไปนี้ ที่นี่ คุณจะระบุชื่อบอท, ARN ของบทบาทที่คุณสร้างไว้ก่อนหน้านี้ การตั้งค่าความเป็นส่วนตัวของข้อมูล และอื่นๆ:

BookHotelBot:
    DependsOn: BotRuntimeRole # The role created in the previous step
    Type: AWS::Lex::Bot
    Properties:
      Name: "BookHotel"
      Description: "Sample Bot to book a hotel"
      RoleArn: !GetAtt BotRuntimeRole.Arn      
      #For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex 
      #is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under 
      #age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying true or false in the 
      #childDirected field.
      DataPrivacy:
        ChildDirected: false
      IdleSessionTTLInSeconds: 300

คุณสามารถ ดาวน์โหลดเทมเพลตที่อัปเดต- การปรับใช้เทมเพลตที่อัปเดตทำให้คุณสามารถสร้างทั้งบทบาทและคำจำกัดความของบอทได้ โปรดทราบว่าคุณเป็น อัปเดตสแต็ก คุณสร้างขึ้นในขั้นตอนก่อนหน้า

ขั้นตอนสุดท้ายเกี่ยวข้องกับการกำหนด BotLocalesซึ่งเป็นฟังก์ชันส่วนใหญ่ของบอท ซึ่งรวมถึง ตัวอย่างเช่น Intents และ Slot types- ต่อไปนี้เป็นเทมเพลต YAML:

  CustomVocabulary: 
    CustomVocabulary
  Description: String
  Intents: 
    - Intent
  LocaleId: String
  NluConfidenceThreshold: Number
  SlotTypes: 
    - SlotType
  VoiceSettings: 
    VoiceSettings

ในกรณีนี้ คุณสร้างไฟล์ BookHotel ความตั้งใจซึ่งต้องมีประเภทช่องที่กำหนดเองสำหรับประเภทห้อง คุณตั้งค่า LocaleIdแล้ว VoiceSettings- จากนั้นคุณเพิ่ม SlotTypes และค่าที่สอดคล้องกัน

ขั้นตอนต่อไปคือการนิยาม Intentsโดยเริ่มจากเจตนาแรก BookHotelซึ่งเกี่ยวข้องกับการเพิ่มคำพูด ช่อง และลำดับความสำคัญของช่อง รายละเอียดของโหนดเหล่านี้แสดงอยู่ในเทมเพลตที่ให้มา สุดท้าย คุณเพิ่มเจตนาที่สอง ซึ่งก็คือ FallbackIntent. ดูรหัสต่อไปนี้:

BotLocales:
        - LocaleId: "en_US"
          Description: "en US locale"
          NluConfidenceThreshold: 0.40
          VoiceSettings:
            VoiceId: "Matthew"
          SlotTypes:
            - Name: "RoomTypeValues"
              Description: "Type of room"
              SlotTypeValues:
                - SampleValue:
                    Value: queen
                - SampleValue:
                    Value: king
                - SampleValue:
                    Value: deluxe
              ValueSelectionSetting:
                ResolutionStrategy: ORIGINAL_VALUE
          Intents:
            - Name: "BookHotel"
              Description: "Intent to book a hotel room"
              SampleUtterances:
                - Utterance: "Book a hotel"
                - Utterance: "I want a make hotel reservations"
                - Utterance: "Book a {Nights} night stay in {Location}"
              IntentConfirmationSetting:
                PromptSpecification:
                  MessageGroupsList:
                    - Message:
                        PlainTextMessage:
                          Value: "Okay, I have you down for a {Nights} night stay in {Location} starting {CheckInDate}.  Shall I book the reservation?"
                  MaxRetries: 3
                  AllowInterrupt: false
                DeclinationResponse:
                  MessageGroupsList:
                    - Message:
                        PlainTextMessage:
                          Value: "Okay, I have cancelled your reservation in progress."
                  AllowInterrupt: false
              SlotPriorities:
                - Priority: 1
                  SlotName: Location
                - Priority: 2
                  SlotName: CheckInDate
                - Priority: 3
                  SlotName: Nights
                - Priority: 4
                  SlotName: RoomType
              Slots:
                - Name: "Location"
                  Description: "Location of the city in which the hotel is located"
                  SlotTypeName: "AMAZON.City"
                  ValueElicitationSetting:
                    SlotConstraint: "Required"
                    PromptSpecification:
                      MessageGroupsList:
                        - Message:
                            PlainTextMessage:
                              Value: "What city will you be staying in?"
                      MaxRetries: 2
                      AllowInterrupt: false
                - Name: "CheckInDate"
                  Description: "Date of check-in"
                  SlotTypeName: "AMAZON.Date"
                  ValueElicitationSetting:
                    SlotConstraint: "Required"
                    PromptSpecification:
                      MessageGroupsList:
                        - Message:
                            PlainTextMessage:
                              Value: "What day do you want to check in?"
                      MaxRetries: 2
                      AllowInterrupt: false
                - Name: "Nights"
                  Description: "something"
                  SlotTypeName: "AMAZON.Number"
                  ValueElicitationSetting:
                    SlotConstraint: "Required"
                    PromptSpecification:
                      MessageGroupsList:
                        - Message:
                            PlainTextMessage:
                              Value: "How many nights will you be staying?"
                      MaxRetries: 2
                      AllowInterrupt: false
                - Name: "RoomType"
                  Description: "Enumeration of types of rooms that are offered by a hotel."
                  SlotTypeName: "RoomTypeValues"
                  ValueElicitationSetting:
                    SlotConstraint: "Required"
                    PromptSpecification:
                      MessageGroupsList:
                        - Message:
                            PlainTextMessage:
                              Value: "What type of room would you like, queen, king or deluxe?"
                      MaxRetries: 2
                      AllowInterrupt: false
            - Name: "FallbackIntent"
              Description: "Default intent when no other intent matches"
              ParentIntentSignature: "AMAZON.FallbackIntent"

คุณสามารถ ดาวน์โหลดเทมเพลต CloudFormation สำหรับงานที่ทำมาจนถึงบัดนี้ หลังจากที่คุณ อัปเดตสแต็กของคุณ ด้วยเทมเพลตนี้ บอทที่ใช้งานได้จะถูกปรับใช้ บนคอนโซล Amazon Lex คุณสามารถยืนยันได้ว่ามีบอทเวอร์ชันร่างและมีนามแฝงเริ่มต้นที่ชื่อ TestBotAlias ได้รับการสร้างขึ้น

นามแฝงบอท

สร้างเวอร์ชันบอทและนามแฝงใหม่

Amazon Lex รองรับการเผยแพร่ รุ่น ของบอท เจตนา และประเภทสล็อต เพื่อให้คุณสามารถควบคุมการใช้งานแอปพลิเคชันไคลเอนต์ของคุณได้ เวอร์ชันคือสแน็ปช็อตที่มีตัวเลขของคำจำกัดความบอทของคุณที่คุณสามารถเผยแพร่เพื่อใช้ในส่วนต่างๆ ของเวิร์กโฟลว์ของคุณ เช่น การพัฒนา การใช้งานเบต้า และการใช้งานจริง บอท Amazon Lex ก็รองรับเช่นกัน นามแฝง- นามแฝงเป็นตัวชี้ไปยังเวอร์ชันเฉพาะของบอท ด้วยนามแฝง คุณสามารถอัปเดตเวอร์ชันของแอปพลิเคชันไคลเอ็นต์ของคุณได้ ในสถานการณ์จริง นามแฝงของบอทจะใช้สำหรับการปรับใช้สีน้ำเงิน/เขียว และการจัดการการกำหนดค่าเฉพาะสภาพแวดล้อม เช่น สภาพแวดล้อมการพัฒนาและการใช้งานจริง

เพื่อเป็นการอธิบาย สมมติว่าคุณระบุนามแฝงไปที่เวอร์ชัน 1 ของบอทของคุณ เมื่อถึงเวลาอัปเดตบอท คุณสามารถเผยแพร่เวอร์ชัน 2 และเปลี่ยนนามแฝงให้ชี้ไปที่เวอร์ชันใหม่ได้ เนื่องจากแอปพลิเคชันของคุณใช้นามแฝงแทนเวอร์ชันเฉพาะ ไคลเอ็นต์ทั้งหมดจึงได้รับฟังก์ชันการทำงานใหม่โดยไม่ต้องมีการอัปเดต

โปรดทราบว่าเมื่อคุณแก้ไขเทมเพลต CloudFormation และเริ่มใช้งาน การเปลี่ยนแปลงจะถูกนำไปใช้ภายในเวอร์ชันร่าง ซึ่งมีไว้สำหรับการทดสอบเป็นหลัก หลังจากที่คุณเสร็จสิ้นขั้นตอนการทดสอบแล้ว คุณสามารถสร้างเวอร์ชันใหม่เพื่อสรุปการเปลี่ยนแปลงที่คุณได้รวมไว้จนถึงตอนนี้ได้

ถัดไป คุณสร้างเวอร์ชันบอทใหม่ตามแบบร่างของคุณ ตั้งค่านามแฝงใหม่ และเชื่อมโยงเวอร์ชันกับนามแฝงนี้ ต่อไปนี้เป็นทรัพยากรใหม่สองรายการที่จะเพิ่มลงในเทมเพลตของคุณ:

BookHotelInitialVersion:
    DependsOn: BookHotelBot
    Type: AWS::Lex::BotVersion
    Properties:
      BotId: !Ref BookHotelBot
      BotVersionLocaleSpecification:
        - LocaleId: en_US
          BotVersionLocaleDetails:
            SourceBotVersion: DRAFT
      Description: Hotel Bot initial version

  BookHotelDemoAlias:
    Type: AWS::Lex::BotAlias
    Properties:
      BotId: !Ref BookHotelBot
      BotAliasName: "BookHotelDemoAlias"
      BotVersion: !GetAtt BookHotelInitialVersion.BotVersion

คุณสามารถ ดาวน์โหลดเทมเพลตเวอร์ชันใหม่ และปรับใช้โดยอัปเดตสแต็กของคุณ คุณจะเห็นได้บนคอนโซล Amazon Lex ว่าเวอร์ชันใหม่ถูกสร้างขึ้นและเชื่อมโยงกับนามแฝงใหม่ที่เรียกว่า BookHotelDemoAlias.

นามแฝงสาธิต

เมื่อคุณสร้างบอต Amazon Lex เวอร์ชันใหม่ โดยปกติแล้วบอตจะเพิ่มหมายเลขเวอร์ชันตามลำดับ โดยเริ่มจาก 1 หากต้องการแยกแยะเวอร์ชันเฉพาะ คุณสามารถดูคำอธิบายได้

รุ่นเริ่มต้น

เพิ่มฟังก์ชันแลมบ์ดา

ในการเริ่มต้นค่าหรือตรวจสอบอินพุตของผู้ใช้สำหรับบอทของคุณ คุณสามารถเพิ่มฟังก์ชัน Lambda เป็นโค้ดฮุคให้กับบอทของคุณได้ ในทำนองเดียวกัน คุณสามารถใช้ฟังก์ชัน Lambda เพื่อดำเนินการได้เช่นกัน เช่น การเขียนข้อมูลลงในฐานข้อมูลหรือการเรียกใช้ API เพื่อบันทึกข้อมูลที่รวบรวมไว้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ เปิดใช้งานตรรกะแบบกำหนดเองด้วยฟังก์ชัน AWS Lambda.

มาเพิ่มทรัพยากรใหม่สำหรับฟังก์ชัน Lambda ให้กับเทมเพลต CloudFormation แม้ว่าโดยทั่วไปจะไม่แนะนำให้ฝังโค้ดในเทมเพลต CloudFormation แต่เราทำเช่นนี้เพียงเพื่อทำให้การสาธิตการใช้งานซับซ้อนน้อยลง ดูรหัสต่อไปนี้:

HotelBotFunction:
    DependsOn: BotRuntimeRole # So that the Lambda function is ready before the bot deployment
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: book_hotel_lambda
      Runtime: python3.11
      Timeout: 15
      Handler: index.lambda_handler
      InlineCode: |
        import os
        import json

        def close(intent_request):
            intent_request['sessionState']['intent']['state'] = 'Fulfilled'

            message = {"contentType": "PlainText",
                      "content": "Your Booking is confirmed"}

            session_attributes = {}
            sessionState = intent_request['sessionState']
            if 'sessionAttributes' in sessionState:
                session_attributes = sessionState['sessionAttributes']

            requestAttributes = None
            if 'requestAttributes' in intent_request:
                requestAttributes = intent_request['requestAttributes']

            return {
                'sessionState': {
                    'sessionAttributes': session_attributes,
                    'dialogAction': {
                        'type': 'Close'
                    },
                    'intent': intent_request['sessionState']['intent'],
                    'originatingRequestId': 'xxxxxxx-xxxx-xxxx-xxxx'
                },
                'messages':  [message],
                'sessionId': intent_request['sessionId'],
                'requestAttributes': requestAttributes
            }

        def router(event):
            intent_name = event['sessionState']['intent']['name']
            slots = event['sessionState']['intent']['slots']
            if (intent_name == 'BookHotel'):
                # invoke lambda and return result
                return close(event)

            raise Exception(
                'The intent is not supported by Lambda: ' + intent_name)

        def lambda_handler(event, context):
            response = router(event)
            return response

หากต้องการใช้ฟังก์ชัน Lambda นี้เพื่อการดำเนินการ ให้เปิดใช้งานการตั้งค่า Code Hook ตามเจตนาของคุณ:

Intents:
  - Name: "BookHotel"
    Description: "Intent to book a hotel room"
    FulfillmentCodeHook:
      Enabled: true
    SampleUtterances:
      - Utterance: "Book a hotel"
      - Utterance: "I want a make hotel reservations"
      - Utterance: "Book a {Nights} night stay in {Location}"

เนื่องจากคุณทำการเปลี่ยนแปลงกับบอทของคุณ คุณสามารถสร้างบอทเวอร์ชันใหม่ได้โดยการเพิ่มทรัพยากรใหม่ที่มีชื่อว่า BookHotelVersionWithLambda ในเทมเพลต:

BookHotelVersionWithLambda:
    DependsOn: BookHotelInitialVersion
    Type: AWS::Lex::BotVersion
    Properties:
      BotId: !Ref BookHotelBot
      BotVersionLocaleSpecification:
        - LocaleId: en_US
          BotVersionLocaleDetails:
            SourceBotVersion: DRAFT
      Description: Hotel Bot with a lambda function

ฟังก์ชัน Lambda เชื่อมโยงกับนามแฝงของบอต Amazon Lex V2 สามารถใช้ฟังก์ชัน Lambda ได้หนึ่งฟังก์ชันต่อนามแฝงบอตต่อภาษา ดังนั้น คุณต้องอัปเดตนามแฝงของคุณในเทมเพลตเพื่อเพิ่มทรัพยากรฟังก์ชัน Lambda คุณสามารถทำได้ใน BotAliasLocalSettings ส่วน. คุณต้องชี้นามแฝงไปยังเวอร์ชันใหม่ที่คุณสร้างขึ้นด้วย รหัสต่อไปนี้คือการกำหนดค่านามแฝงที่แก้ไข:

  BookHotelDemoAlias:
    Type: AWS::Lex::BotAlias
    Properties:
      BotId: !Ref BookHotelBot
      BotAliasName: "BookHotelDemoAlias"
      BotVersion: !GetAtt BookHotelVersionWithLambda.BotVersion
      # Remove BotAliasLocaleSettings if you aren't concerned with Lambda setup.
      # If you are you can modify the LambdaArn below to get started.
      BotAliasLocaleSettings:
        - LocaleId: en_US
          BotAliasLocaleSetting:
            Enabled: true
            CodeHookSpecification:
              LambdaCodeHook:
                CodeHookInterfaceVersion: "1.0"
                LambdaArn: !GetAtt HotelBotFunction.Arn

จนถึงตอนนี้ คุณได้เชื่อมโยงเฉพาะฟังก์ชัน Lambda กับนามแฝงเท่านั้น อย่างไรก็ตาม คุณต้องให้สิทธิ์เพื่ออนุญาตให้นามแฝงเรียกใช้ฟังก์ชัน Lambda ได้ ในโค้ดต่อไปนี้ คุณเพิ่ม Lambda เรียกใช้สิทธิ์สำหรับ Amazon Lex และระบุ ARN นามแฝงเป็น ARN ต้นทาง:

  LexInvokeLambdaPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !GetAtt HotelBotFunction.Arn
      Principal: "lexv2.amazonaws.com"
      SourceArn: !GetAtt BookHotelDemoAlias.Arn

คุณสามารถ ดาวน์โหลดเวอร์ชันล่าสุด ของเทมเพลต หลังจากอัปเดตสแต็กของคุณด้วยเวอร์ชันนี้ คุณจะมีบอต Amazon Lex ที่ผสานรวมเข้ากับฟังก์ชัน Lambda

รุ่นที่สอง

อัปเดตอลิส

สาขาที่มีเงื่อนไข

ตอนนี้ เรามาสำรวจคุณสมบัติสาขาแบบมีเงื่อนไขของบอต Amazon Lex และพิจารณาสถานการณ์ที่ไม่อนุญาตให้จองมากกว่าห้าคืนในซีแอตเทิลในสัปดาห์หน้า ตามข้อกำหนดทางธุรกิจ การสนทนาควรจบลงด้วยข้อความที่เหมาะสมหากผู้ใช้พยายามจองมากกว่าห้าคืนในซีแอตเทิล สาขาที่มีเงื่อนไขสำหรับสิ่งนั้นแสดงในเทมเพลต CloudFormation ภายใต้ SlotCaptureSetting:

- Name: "Nights"
                  Description: “Number of nights.”
                  SlotTypeName: "AMAZON.Number"
                  ValueElicitationSetting:
                    SlotConstraint: "Required"
                    SlotCaptureSetting:
                      CaptureConditional:
                        DefaultBranch:
                          NextStep:
                            DialogAction:
                              Type: "ElicitSlot"
                              SlotToElicit: "RoomType"
                        ConditionalBranches:
                          - Name: "Branch1"
                            Condition:
                              ExpressionString: '{Nights}>5 AND {Location} = "Seattle"'
                            Response:
                              AllowInterrupt: true
                              MessageGroupsList:
                                - Message:
                                    PlainTextMessage:
                                      Value: “Sorry, we cannot book more than five nights in {Location} right now."
                            NextStep:
                              DialogAction:
                                Type: "EndConversation"
                        IsActive: true

                    PromptSpecification:
                      MessageGroupsList:
                        - Message:
                            PlainTextMessage:
                              Value: "How many nights will you be staying?"
                      MaxRetries: 2
                      AllowInterrupt: false

เนื่องจากคุณเปลี่ยนข้อกำหนดของบอท คุณต้องสร้างเวอร์ชันใหม่ในเทมเพลตและเชื่อมโยงกับนามแฝง นี่เป็นการแก้ไขชั่วคราวเนื่องจากธุรกิจมีแผนจะเปิดรับการจองจำนวนมากในซีแอตเทิลเร็วๆ นี้ ต่อไปนี้เป็นทรัพยากรใหม่สองรายการที่คุณเพิ่มลงในเทมเพลต:

BookHotelConditionalBranches:
    DependsOn: BookHotelVersionWithLambda
    Type: AWS::Lex::BotVersion
    Properties:
      BotId: !Ref BookHotelBot
      BotVersionLocaleSpecification:
        - LocaleId: en_US
          BotVersionLocaleDetails:
            SourceBotVersion: DRAFT
      Description: Hotel Bot Version with conditional branches

  BookHotelDemoAlias:
    Type: AWS::Lex::BotAlias
    Properties:
      BotId: !Ref BookHotelBot
      BotAliasName: "BookHotelDemoAlias"
      BotVersion: !GetAtt BookHotelConditionalBranches.BotVersion
      # Remove BotAliasLocaleSettings if you aren't concerned with Lambda setup.
      # If you are you can modify the LambdaArn below to get started.
      BotAliasLocaleSettings:
        - LocaleId: en_US
          BotAliasLocaleSetting:
            Enabled: true
            CodeHookSpecification:
              LambdaCodeHook:
                CodeHookInterfaceVersion: "1.0"
                LambdaArn: !GetAtt HotelBotFunction.Arn

คุณสามารถ ดาวน์โหลดเทมเพลตที่อัปเดต- หลังจากที่คุณอัปเดตสแต็กของคุณด้วยเวอร์ชันเทมเพลตนี้แล้ว นามแฝงจะถูกส่งไปยังเวอร์ชันที่รวมคุณสมบัติการแยกย่อยแบบมีเงื่อนไข หากต้องการเลิกทำการแก้ไขนี้ คุณสามารถอัปเดตนามแฝงเพื่อเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้าได้

รุ่นที่สาม

นามแฝงสำหรับเวอร์ชันที่สาม

ท่อน

คุณยังสามารถเปิดใช้งานบันทึกสำหรับบอต Amazon Lex ของคุณได้ ในการทำเช่นนั้น คุณต้องอัปเดตบทบาทของบอทเพื่อให้สิทธิ์ในการเขียน อเมซอน คลาวด์วอตช์ บันทึก ต่อไปนี้เป็นตัวอย่างของการเพิ่มนโยบาย CloudWatch ให้กับบทบาท:

BotRuntimeRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lexv2.amazonaws.com
            Action:
              - "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: LexRuntimeRolePolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - "polly:SynthesizeSpeech"
                  - "comprehend:DetectSentiment"
                Resource: "*"
        - PolicyName: CloudWatchPolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - "logs:CreateLogStream"
                  - "logs:PutLogEvents"
                Resource: "*"

เพื่อให้มั่นใจถึงพฤติกรรมที่สอดคล้องกันและคาดการณ์ได้ คุณควรระบุให้เฉพาะเจาะจงที่สุดเท่าที่จะเป็นไปได้เมื่อกำหนดชื่อทรัพยากรและคุณสมบัติในเทมเพลต CloudFormation เนื่องจากการใช้อักขระตัวแทน (*) ในเทมเพลต CloudFormation อาจก่อให้เกิดความเสี่ยงด้านความปลอดภัยและนำไปสู่ผลลัพธ์ที่ไม่ได้ตั้งใจ ดังนั้นจึงขอแนะนำให้หลีกเลี่ยงการใช้ไวด์การ์ดและใช้ค่าที่ชัดเจนแทนหากเป็นไปได้

จากนั้น คุณสร้างทรัพยากรกลุ่มบันทึก CloudWatch ดังที่แสดงในโค้ดต่อไปนี้ เพื่อกำหนดเส้นทางบันทึกของคุณไปยังกลุ่มนี้:

  #Log Group
  LexLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /lex/hotel-bot
      RetentionInDays: 5

สุดท้าย คุณอัปเดตนามแฝงของคุณเพื่อเปิดใช้งานการตั้งค่าบันทึกการสนทนา:

BookHotelDemoAlias:
    Type: AWS::Lex::BotAlias
    Properties:
      BotId: !Ref BookHotelBot
      BotAliasName: "BookHotelDemoAlias"
      BotVersion: !GetAtt BookHotelConditionalBranches.BotVersion
      BotAliasLocaleSettings:
        - LocaleId: en_US
          BotAliasLocaleSetting:
            Enabled: true
            CodeHookSpecification:
              LambdaCodeHook:
                CodeHookInterfaceVersion: "1.0"
                LambdaArn: !GetAtt HotelBotFunction.Arn
      ConversationLogSettings:
        TextLogSettings:
          - Destination:
              CloudWatch:
                CloudWatchLogGroupArn: !GetAtt LexLogGroup.Arn
                LogPrefix: bookHotel
            Enabled: true

เมื่อคุณอัปเดตสแต็กด้วยเทมเพลตนี้ คุณจะเปิดใช้งานบันทึกการสนทนาสำหรับบอทของคุณ ไม่มีการสร้างเวอร์ชันใหม่ในขั้นตอนนี้ เนื่องจากไม่มีการเปลี่ยนแปลงทรัพยากรบอทของคุณ คุณสามารถ ดาวน์โหลดเทมเพลตเวอร์ชันล่าสุด.

ทำความสะอาดขึ้น

เพื่อป้องกันไม่ให้เกิดการเรียกเก็บเงินในอนาคต ให้ลบสแตก CloudFormation ที่คุณสร้างขึ้น

สรุป

ในโพสต์นี้ เราได้พูดคุยถึงกระบวนการทีละขั้นตอนในการสร้างเทมเพลต CloudFormation สำหรับบอต Amazon Lex V2 ในตอนแรก เราได้ปรับใช้บอทพื้นฐาน จากนั้นจึงสำรวจศักยภาพของนามแฝงและเวอร์ชันต่างๆ และวิธีการใช้งานอย่างมีประสิทธิภาพด้วยเทมเพลต ต่อไป เราได้เรียนรู้วิธีผสานรวมฟังก์ชัน Lambda เข้ากับบอต Amazon Lex V2 และใช้งานการแยกย่อยแบบมีเงื่อนไขในโฟลว์การสนทนาของบอตเพื่อรองรับความต้องการทางธุรกิจ สุดท้าย เราได้เพิ่มคุณสมบัติการบันทึกโดยการสร้างทรัพยากรกลุ่มบันทึกของ CloudWatch และอัปเดตบทบาทของบอทด้วยสิทธิ์ที่จำเป็น

เทมเพลตช่วยให้ปรับใช้และจัดการบอทได้อย่างตรงไปตรงมา พร้อมความสามารถในการคืนค่าการเปลี่ยนแปลงตามความจำเป็น โดยรวมแล้ว เทมเพลต CloudFormation มีประโยชน์สำหรับการจัดการและเพิ่มประสิทธิภาพบอต Amazon Lex V2

ในขั้นตอนถัดไปคุณสามารถสำรวจได้ ตัวอย่างบอท Amazon Lex และใช้เทคนิคที่กล่าวถึงในโพสต์นี้เพื่อแปลงเป็นเทมเพลต CloudFormation การปฏิบัติจริงนี้จะช่วยเสริมความเข้าใจในการจัดการบอต Amazon Lex V2 ผ่านโครงสร้างพื้นฐานในรูปแบบโค้ด


เกี่ยวกับผู้เขียน

จัดการบอต Amazon Lex ของคุณผ่านเทมเพลต AWS CloudFormation | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.โธมัส รินด์ฟุส เป็น Sr. Solutions Architect ในทีม Amazon Lex เขาคิดค้น พัฒนา สร้างต้นแบบ และเผยแพร่คุณลักษณะทางเทคนิคและโซลูชันใหม่ๆ สำหรับบริการ Language AI ที่ปรับปรุงประสบการณ์ของลูกค้าและทำให้การนำไปใช้ง่ายขึ้น

จัดการบอต Amazon Lex ของคุณผ่านเทมเพลต AWS CloudFormation | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.ริเจช อักกัมเบธ ชาโธท เป็นที่ปรึกษาด้านบริการระดับมืออาชีพที่ AWS เขาช่วยเหลือลูกค้าในการบรรลุธุรกิจที่ต้องการ
ผลลัพธ์ในพื้นที่ศูนย์ติดต่อโดยการใช้ประโยชน์จากคุณสมบัติของ Amazon Connect, Amazon Lex และ GenAI

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS