Quản lý bot Amazon Lex của bạn thông qua các mẫu AWS CloudFormation | Dịch vụ web của Amazon

Quản lý bot Amazon Lex của bạn thông qua các mẫu AWS CloudFormation | Dịch vụ web của Amazon

Amazon là dịch vụ trí tuệ nhân tạo (AI) được quản lý hoàn toàn với các mô hình ngôn ngữ tự nhiên tiên tiến để thiết kế, xây dựng, thử nghiệm và triển khai giao diện đàm thoại trong các ứng dụng. Nó sử dụng các công nghệ học sâu tiên tiến để hiểu thông tin đầu vào của người dùng, cho phép các nhà phát triển tạo chatbot, trợ lý ảo và các ứng dụng khác có thể tương tác với người dùng bằng ngôn ngữ tự nhiên.

Quản lý bot Amazon Lex của bạn bằng cách sử dụng Hình thành đám mây AWS cho phép bạn tạo các mẫu xác định bot và tất cả các tài nguyên AWS mà nó phụ thuộc vào. AWS CloudFormation thay mặt bạn cung cấp và đặt cấu hình các tài nguyên đó, loại bỏ nguy cơ xảy ra lỗi của con người khi triển khai bot sang môi trường mới. Lợi ích của việc sử dụng CloudFormation bao gồm:

  • Tính nhất quán – Mẫu CloudFormation cung cấp một cách nhất quán và tự động hơn để triển khai và quản lý các tài nguyên được liên kết với bot Amazon Lex.
  • Kiểm soát phiên bản – Với AWS CloudFormation, bạn có thể sử dụng các hệ thống kiểm soát phiên bản như Git để quản lý các mẫu CloudFormation của mình. Điều này cho phép bạn duy trì các phiên bản khác nhau của bot và quay lại các phiên bản trước nếu cần.
  • Tái sử dụng – Bạn có thể sử dụng lại các mẫu CloudFormation trên nhiều môi trường, chẳng hạn như phát triển, chạy thử và sản xuất. Điều này giúp tiết kiệm thời gian và công sức trong việc xác định cùng một bot trên các môi trường khác nhau.
  • Khả năng mở rộng – Khi bot Amazon Lex của bạn ngày càng phức tạp, hãy quản lý nó thông qua Bảng điều khiển quản lý AWS trở nên thách thức hơn. AWS CloudFormation cho phép tiếp cận hợp lý và hiệu quả hơn để quản lý định nghĩa và tài nguyên của bot.
  • Tự động hóa – Sử dụng mẫu CloudFormation cho phép bạn tự động hóa quá trình triển khai. Bạn có thể sử dụng các dịch vụ AWS như Đường ống dẫn mã AWSXây dựng mã AWS để xây dựng, kiểm tra và triển khai bot Amazon Lex của bạn một cách tự động.

Trong bài đăng này, chúng tôi hướng dẫn bạn các bước liên quan đến việc tạo mẫu CloudFormation cho bot Amazon Lex V2.

Tổng quan về giải pháp

Chúng tôi đã chọn Đặt chuyến đi bot làm điểm khởi đầu cho bài tập này. Chúng tôi sử dụng mẫu CloudFormation để tạo bot mới từ đầu, bao gồm cả việc xác định ý định, vị trí và các thành phần bắt buộc khác. Ngoài ra, chúng tôi khám phá các chủ đề như kiểm soát phiên bản, bí danh, tích hợp AWS Lambda chức năng, tạo các nhánh có điều kiện và cho phép ghi nhật ký.

Điều kiện tiên quyết

Bạn nên có các điều kiện tiên quyết sau:

  • An Tài khoản AWS để tạo và triển khai mẫu CloudFormation
  • Sự cần thiết Quản lý truy cập và nhận dạng AWS (TÔI LÀ) quyền để triển khai AWS CloudFormation và các tài nguyên được sử dụng trong mẫu
  • Kiến thức cơ bản về Amazon Lex, hàm Lambda và các dịch vụ liên quan
  • Kiến thức cơ bản về tạo và triển khai các mẫu CloudFormation

Tạo vai trò IAM

Để bắt đầu, bạn cần tạo vai trò IAM mà bot sẽ sử dụng. Bạn có thể đạt được điều này bằng cách khởi tạo mẫu CloudFormation và thêm vai trò IAM làm tài nguyên. Bạn có thể sử dụng mẫu sau để tạo vai trò. nếu bạn tải xuống mẫu ví dụ và triển khai nó, bạn sẽ thấy vai trò IAM đã được tạo. Chúng tôi cung cấp các ví dụ về các mẫu khi chúng tôi xem qua bài đăng này và hợp nhất chúng khi chúng tôi tiến xa hơn.

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: "*"

Định cấu hình bot Amazon Lex

Tiếp theo, bạn cần thêm định nghĩa bot. Sau đây là mẫu YAML cho định nghĩa bot Amazon Lex; bạn xây dựng từng thành phần cần thiết một:

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

Để tạo bot chỉ bao gồm định nghĩa bot mà không có mục đích gì, bạn có thể sử dụng mẫu sau. Tại đây, bạn chỉ định tên của bot, ARN của vai trò mà bạn đã tạo trước đó, cài đặt bảo mật dữ liệu, v.v.:

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

Bạn có thể tải xuống mẫu cập nhật. Việc triển khai mẫu cập nhật cho phép bạn tạo cả vai trò và định nghĩa bot. Lưu ý rằng bạn đang cập nhật ngăn xếp bạn đã tạo ở bước trước.

Bước cuối cùng đòi hỏi phải xác định BotLocales, tạo thành phần lớn chức năng của bot. Điều này bao gồm, ví dụ, IntentsSlot types. Sau đây là mẫu YAML:

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

Trong trường hợp này, bạn xây dựng BookHotel mục đích yêu cầu loại vị trí tùy chỉnh cho loại phòng. Bạn đặt LocaleId, sau đó VoiceSettings. Sau đó bạn thêm SlotTypes và các giá trị tương ứng của chúng.

Bước tiếp theo là xác định Intents, bắt đầu với ý định đầu tiên, BookHotel, bao gồm việc thêm các cách nói, vị trí và mức độ ưu tiên của vị trí. Chi tiết về các nút này được thể hiện trong mẫu được cung cấp. Cuối cùng, bạn thêm mục đích thứ hai, đó là FallbackIntent. Xem mã sau đây:

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"

Bạn có thể tải xuống mẫu CloudFormation cho công việc đã làm cho đến bây giờ. Sau bạn cập nhật ngăn xếp của bạn với mẫu này, một bot chức năng sẽ được triển khai. Trên bảng điều khiển Amazon Lex, bạn có thể xác nhận rằng có phiên bản nháp của bot và bí danh mặc định có tên TestBotAlias Đã được tạo ra.

bí danh bot

Tạo phiên bản bot và bí danh mới

Amazon Lex hỗ trợ xuất bản phiên bản của bot, ý định và loại vị trí để bạn có thể kiểm soát việc triển khai ứng dụng khách của mình. Phiên bản là ảnh chụp nhanh được đánh số về định nghĩa bot mà bạn có thể xuất bản để sử dụng trong các phần khác nhau trong quy trình làm việc của mình, chẳng hạn như phát triển, triển khai beta và sản xuất. Các bot Amazon Lex cũng hỗ trợ bí danh. Bí danh là con trỏ tới một phiên bản cụ thể của bot. Với bí danh, bạn có thể cập nhật phiên bản ứng dụng khách của mình. Trong các tình huống thực tế, bí danh bot được sử dụng để triển khai xanh/xanh và quản lý các cấu hình dành riêng cho môi trường như môi trường phát triển và sản xuất.

Để minh họa, giả sử bạn trỏ bí danh đến phiên bản 1 của bot. Khi đến lúc cập nhật bot, bạn có thể xuất bản phiên bản 2 và thay đổi bí danh để trỏ đến phiên bản mới. Vì ứng dụng của bạn sử dụng bí danh thay vì phiên bản cụ thể nên tất cả ứng dụng khách đều nhận được chức năng mới mà không yêu cầu cập nhật.

Hãy nhớ rằng khi bạn sửa đổi mẫu CloudFormation và bắt đầu triển khai, những thay đổi đó sẽ được triển khai trong phiên bản dự thảo, chủ yếu nhằm mục đích thử nghiệm. Sau khi hoàn thành giai đoạn thử nghiệm, bạn có thể thiết lập phiên bản mới để hoàn thiện những thay đổi mà bạn đã kết hợp cho đến nay.

Tiếp theo, bạn tạo phiên bản bot mới dựa trên bản nháp của mình, thiết lập bí danh mới và liên kết phiên bản với bí danh này. Sau đây là hai tài nguyên mới để thêm vào mẫu của bạn:

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

Bạn có thể tải xuống phiên bản mới của mẫu và triển khai nó bằng cách cập nhật ngăn xếp của bạn. Bạn có thể thấy trên bảng điều khiển Amazon Lex rằng một phiên bản mới đã được tạo và liên kết với bí danh mới có tên là BookHotelDemoAlias.

bí danh demo

Khi bạn tạo phiên bản mới của bot Amazon Lex, nó thường tăng số phiên bản một cách tuần tự, bắt đầu từ 1. Để phân biệt một phiên bản cụ thể, bạn có thể tham khảo mô tả của phiên bản đó.

phiên bản đầu tiên

Thêm hàm Lambda

Để khởi tạo các giá trị hoặc xác thực thông tin đầu vào của người dùng cho bot của mình, bạn có thể thêm hàm Lambda làm móc nối mã cho bot của mình. Tương tự, bạn cũng có thể sử dụng hàm Lambda để thực hiện, chẳng hạn như ghi dữ liệu vào cơ sở dữ liệu hoặc gọi API để lưu thông tin đã thu thập. Để biết thêm thông tin, hãy tham khảo Kích hoạt logic tùy chỉnh với các hàm AWS Lambda.

Hãy thêm tài nguyên mới cho hàm Lambda vào mẫu CloudFormation. Mặc dù nhìn chung, bạn không nên nhúng mã vào các mẫu CloudFormation nhưng chúng tôi làm như vậy ở đây chỉ nhằm mục đích giúp việc triển khai bản demo bớt phức tạp hơn. Xem đoạn mã sau:

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

Để sử dụng hàm Lambda này cho quá trình thực hiện, hãy bật cài đặt móc mã theo ý định của bạn:

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}"

Vì bạn đã thực hiện các thay đổi đối với bot của mình nên bạn có thể tạo phiên bản mới của bot bằng cách thêm tài nguyên mới có tên BookHotelVersionWithLambda trong mẫu:

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

Hàm Lambda được liên kết với bí danh bot. Amazon Lex V2 có thể sử dụng một hàm Lambda cho mỗi bí danh bot cho mỗi ngôn ngữ. Do đó, bạn phải cập nhật bí danh của mình trong mẫu để thêm tài nguyên hàm Lambda. Bạn có thể làm như vậy trong BotAliasLocalSettings phần. Bạn cũng cần trỏ bí danh đến phiên bản mới mà bạn đã tạo. Đoạn mã sau là cấu hình bí danh đã sửa đổi:

  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

Cho đến nay, bạn chỉ liên kết hàm Lambda với bí danh. Tuy nhiên, bạn cần cấp quyền để cho phép bí danh gọi hàm Lambda. Trong đoạn mã sau, bạn thêm quyền gọi Lambda cho Amazon Lex và chỉ định bí danh ARN làm ARN nguồn:

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

Bạn có thể tải xuống phiên bản mới nhất của mẫu. Sau khi cập nhật ngăn xếp của bạn với phiên bản này, bạn sẽ có bot Amazon Lex được tích hợp chức năng Lambda.

phiên bản thứ hai

đã cập nhật bí danh

Nhánh có điều kiện

Bây giờ, hãy khám phá tính năng chi nhánh có điều kiện của bot Amazon Lex và xem xét tình huống không được phép đặt phòng hơn 5 đêm ở Seattle trong tuần tới. Theo yêu cầu kinh doanh, cuộc trò chuyện phải kết thúc bằng một tin nhắn thích hợp nếu người dùng cố gắng đặt hơn 5 đêm ở Seattle. Nhánh có điều kiện cho điều đó được thể hiện trong mẫu CloudFormation trong phần 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

Vì bạn đã thay đổi định nghĩa bot nên bạn cần tạo một phiên bản mới trong mẫu và liên kết nó với bí danh. Đây là một sửa đổi tạm thời vì doanh nghiệp có kế hoạch sớm cho phép đặt chỗ số lượng lớn ở Seattle. Sau đây là hai tài nguyên mới mà bạn thêm vào mẫu:

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

Bạn có thể tải xuống mẫu cập nhật. Sau khi bạn cập nhật ngăn xếp của mình bằng phiên bản mẫu này, bí danh sẽ được chuyển hướng đến phiên bản kết hợp tính năng phân nhánh có điều kiện. Để hoàn tác sửa đổi này, bạn có thể cập nhật bí danh để quay lại phiên bản trước.

phiên bản thứ ba

bí danh cho phiên bản thứ ba

Logs

Bạn cũng có thể kích hoạt nhật ký cho bot Amazon Lex của mình. Để làm như vậy, bạn phải cập nhật vai trò của bot để cấp quyền viết amazoncloudwatch nhật ký. Sau đây là ví dụ về cách thêm chính sách CloudWatch vào vai trò:

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: "*"

Để đảm bảo hành vi nhất quán và có thể dự đoán được, bạn nên càng cụ thể càng tốt khi xác định tên và thuộc tính tài nguyên trong mẫu CloudFormation. Điều này là do việc sử dụng ký tự đại diện (*) trong mẫu CloudFormation có thể tiềm ẩn rủi ro bảo mật và dẫn đến những hậu quả không lường trước được. Do đó, bạn nên tránh sử dụng ký tự đại diện và thay vào đó hãy sử dụng các giá trị rõ ràng bất cứ khi nào có thể.

Tiếp theo, bạn tạo tài nguyên nhóm nhật ký CloudWatch, như minh họa trong đoạn mã sau, để chuyển nhật ký của bạn tới nhóm này:

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

Cuối cùng, bạn cập nhật bí danh của mình để bật cài đặt nhật ký cuộc trò chuyện:

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

Khi cập nhật ngăn xếp bằng mẫu này, bạn bật nhật ký cuộc trò chuyện cho bot của mình. Phiên bản mới không được tạo ở bước này vì không có thay đổi nào đối với tài nguyên bot của bạn. Bạn có thể tải xuống phiên bản mới nhất của mẫu.

Clean Up

Để tránh phát sinh phí trong tương lai, hãy xóa ngăn xếp CloudFormation mà bạn đã tạo.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về quy trình từng bước để tạo mẫu CloudFormation cho bot Amazon Lex V2. Ban đầu, chúng tôi triển khai một bot cơ bản, sau đó chúng tôi khám phá tiềm năng của các bí danh và phiên bản cũng như cách sử dụng chúng một cách hiệu quả với các mẫu. Tiếp theo, chúng tôi đã tìm hiểu cách tích hợp chức năng Lambda với bot Amazon Lex V2 và triển khai phân nhánh có điều kiện trong luồng hội thoại của bot để đáp ứng các yêu cầu kinh doanh. Cuối cùng, chúng tôi đã thêm tính năng ghi nhật ký bằng cách tạo tài nguyên nhóm nhật ký CloudWatch và cập nhật vai trò của bot với các quyền cần thiết.

Mẫu này cho phép triển khai và quản lý bot một cách đơn giản, với khả năng hoàn nguyên các thay đổi nếu cần. Nhìn chung, mẫu CloudFormation rất hữu ích để quản lý và tối ưu hóa bot Amazon Lex V2.

Bước tiếp theo, bạn có thể khám phá mẫu bot Amazon Lex và áp dụng các kỹ thuật được thảo luận trong bài đăng này để chuyển đổi chúng thành mẫu CloudFormation. Hoạt động thực hành này sẽ củng cố sự hiểu biết của bạn về việc quản lý bot Amazon Lex V2 thông qua cơ sở hạ tầng dưới dạng mã.


Về các tác giả

Quản lý bot Amazon Lex của bạn thông qua các mẫu AWS CloudFormation | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Thomas Rindfuss là một Kiến trúc sư Giải pháp Sr. trong nhóm Amazon Lex. Anh ấy phát minh, phát triển, tạo mẫu và truyền bá các tính năng kỹ thuật và giải pháp mới cho các dịch vụ Ngôn ngữ AI nhằm cải thiện trải nghiệm khách hàng và giảm bớt việc áp dụng.

Quản lý bot Amazon Lex của bạn thông qua các mẫu AWS CloudFormation | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Rijeesh Akkambeth Chathoth là Nhà tư vấn dịch vụ chuyên nghiệp tại AWS. Anh ấy giúp khách hàng đạt được công việc kinh doanh mong muốn của họ
đạt được kết quả trong không gian Trung tâm liên hệ bằng cách tận dụng các tính năng của Amazon Connect, Amazon Lex và GenAI.

Dấu thời gian:

Thêm từ Học máy AWS