Διαχειριστείτε το Amazon Lex bot σας μέσω προτύπων AWS CloudFormation | Υπηρεσίες Ιστού της Amazon

Διαχειριστείτε το Amazon Lex bot σας μέσω προτύπων AWS CloudFormation | Υπηρεσίες Ιστού της Amazon

Amazon-Lex είναι μια πλήρως διαχειριζόμενη υπηρεσία τεχνητής νοημοσύνης (AI) με προηγμένα μοντέλα φυσικής γλώσσας για το σχεδιασμό, την κατασκευή, τη δοκιμή και την ανάπτυξη διεπαφών συνομιλίας σε εφαρμογές. Χρησιμοποιεί προηγμένες τεχνολογίες βαθιάς εκμάθησης για την κατανόηση των εισροών των χρηστών, επιτρέποντας στους προγραμματιστές να δημιουργούν chatbots, εικονικούς βοηθούς και άλλες εφαρμογές που μπορούν να αλληλεπιδρούν με τους χρήστες σε φυσική γλώσσα.

Διαχείριση των ρομπότ Amazon Lex χρησιμοποιώντας AWS CloudFormation σας επιτρέπει να δημιουργήσετε πρότυπα που ορίζουν το bot και όλους τους πόρους AWS από τους οποίους εξαρτάται. Το AWS CloudFormation παρέχει και διαμορφώνει αυτούς τους πόρους για λογαριασμό σας, εξαλείφοντας τον κίνδυνο ανθρώπινου λάθους κατά την ανάπτυξη ρομπότ σε νέα περιβάλλοντα. Τα οφέλη από τη χρήση του CloudFormation περιλαμβάνουν:

  • Συνοχή – Ένα πρότυπο CloudFormation παρέχει έναν πιο συνεπή και αυτοματοποιημένο τρόπο ανάπτυξης και διαχείρισης των πόρων που σχετίζονται με ένα bot Amazon Lex.
  • Έλεγχος έκδοσης – Με το AWS CloudFormation, μπορείτε να χρησιμοποιήσετε συστήματα ελέγχου εκδόσεων όπως το Git για να διαχειριστείτε τα πρότυπα CloudFormation. Αυτό σας επιτρέπει να διατηρήσετε διαφορετικές εκδόσεις του bot σας και να επιστρέψετε στις προηγούμενες εκδόσεις εάν χρειάζεται.
  • Επαναχρησιμοποίηση – Μπορείτε να επαναχρησιμοποιήσετε πρότυπα CloudFormation σε πολλά περιβάλλοντα, όπως ανάπτυξη, σκηνοθεσία και παραγωγή. Αυτό εξοικονομεί χρόνο και προσπάθεια για τον ορισμό του ίδιου bot σε διαφορετικά περιβάλλοντα.
  • επεκτασιμότητα – Καθώς το Amazon Lex bot σας μεγαλώνει σε πολυπλοκότητα, διαχειρίζοντάς το μέσω του Κονσόλα διαχείρισης AWS γίνεται πιο προκλητική. Το AWS CloudFormation επιτρέπει μια πιο βελτιωμένη και αποτελεσματική προσέγγιση για τη διαχείριση του ορισμού και των πόρων του bot.
  • Αυτοματοποίηση – Η χρήση προτύπου CloudFormation σάς επιτρέπει να αυτοματοποιήσετε τη διαδικασία ανάπτυξης. Μπορείτε να χρησιμοποιήσετε υπηρεσίες AWS όπως Αγωγός κώδικα AWS και AWS CodeBuild για να δημιουργήσετε, να δοκιμάσετε και να αναπτύξετε αυτόματα το bot Amazon Lex.

Σε αυτήν την ανάρτηση, σας καθοδηγούμε στα βήματα που περιλαμβάνονται στη δημιουργία ενός προτύπου CloudFormation για ένα bot Amazon Lex V2.

Επισκόπηση λύσεων

Έχουμε επιλέξει το Κάντε κράτηση για ταξίδι bot ως σημείο εκκίνησης για αυτήν την άσκηση. Χρησιμοποιούμε ένα πρότυπο CloudFormation για να δημιουργήσουμε ένα νέο bot από την αρχή, συμπεριλαμβανομένου του καθορισμού προθέσεων, υποδοχών και άλλων απαιτούμενων στοιχείων. Επιπλέον, διερευνούμε θέματα όπως έλεγχος έκδοσης, ψευδώνυμα, ενοποίηση AWS Lambda συναρτήσεις, δημιουργώντας κλάδους υπό όρους και ενεργοποιώντας την καταγραφή.

Προϋποθέσεις

Θα πρέπει να έχετε τις ακόλουθες προϋποθέσεις:

  • An Λογαριασμός AWS για να δημιουργήσετε και να αναπτύξετε ένα πρότυπο CloudFormation
  • Το απαραίτητο Διαχείριση ταυτότητας και πρόσβασης AWS (ΕΓΩ ΕΙΜΑΙ) δικαιώματα για την ανάπτυξη του AWS CloudFormation και των πόρων που χρησιμοποιούνται στο πρότυπο
  • Βασικές γνώσεις Amazon Lex, λειτουργίες Lambda και σχετικές υπηρεσίες
  • Βασικές γνώσεις δημιουργίας και ανάπτυξης προτύπων CloudFormation

Δημιουργήστε ένα ρόλο IAM

Για να ξεκινήσετε, πρέπει να δημιουργήσετε έναν ρόλο IAM που θα χρησιμοποιήσει το bot. Μπορείτε να το επιτύχετε αυτό αρχικοποιώντας ένα πρότυπο 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: "*"

Διαμορφώστε το bot 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

Για να δημιουργήσετε ένα bot που περιλαμβάνει μόνο τον ορισμό του bot χωρίς καμία πρόθεση, μπορείτε να χρησιμοποιήσετε το ακόλουθο πρότυπο. Εδώ, καθορίζετε το όνομα του bot, το 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, που αποτελούν την πλειοψηφία της λειτουργικότητας του bot. Αυτό περιλαμβάνει, για παράδειγμα, Intents και Slot types. Το παρακάτω είναι το πρότυπο YAML:

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

Σε αυτή την περίπτωση, κατασκευάζετε το BookHotel intent, η οποία απαιτεί έναν προσαρμοσμένο τύπο υποδοχής για τύπους δωματίων. Ρυθμίζετε το 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 για το έργο που έχει γίνει μέχρι τώρα. Μετά απο εσένα ενημερώστε τη στοίβα σας με αυτό το πρότυπο, θα αναπτυχθεί ένα λειτουργικό bot. Στην κονσόλα Amazon Lex, μπορείτε να επιβεβαιώσετε ότι υπάρχει μια πρόχειρη έκδοση του bot και ένα προεπιλεγμένο ψευδώνυμο με το όνομα TestBotAlias έχει δημιουργηθεί.

ψευδώνυμο bot

Δημιουργήστε μια νέα έκδοση bot και ψευδώνυμο

Η Amazon Lex υποστηρίζει τη δημοσίευση εκδόσεις των bots, των προθέσεων και των τύπων υποδοχής, ώστε να μπορείτε να ελέγχετε την υλοποίηση των εφαρμογών πελατών σας. Μια έκδοση είναι ένα αριθμημένο στιγμιότυπο του ορισμού του ρομπότ που μπορείτε να δημοσιεύσετε για χρήση σε διαφορετικά μέρη της ροής εργασίας σας, όπως η ανάπτυξη, η ανάπτυξη beta και η παραγωγή. Τα bots Amazon Lex υποστηρίζουν επίσης ψευδώνυμα. Ένα ψευδώνυμο είναι ένας δείκτης σε μια συγκεκριμένη έκδοση ενός bot. Με ένα ψευδώνυμο, μπορείτε να ενημερώσετε την έκδοση των εφαρμογών πελάτη σας. Σε πρακτικά σενάρια, τα ψευδώνυμα bot χρησιμοποιούνται για μπλε/πράσινες αναπτύξεις και διαχείριση διαμορφώσεων για συγκεκριμένο περιβάλλον, όπως περιβάλλοντα ανάπτυξης και παραγωγής.

Για παράδειγμα, ας υποθέσουμε ότι επισημαίνετε ένα ψευδώνυμο στην έκδοση 1 του bot σας. Όταν έρθει η ώρα να ενημερώσετε το bot, μπορείτε να δημοσιεύσετε την έκδοση 2 και να αλλάξετε το ψευδώνυμο ώστε να οδηγεί στη νέα έκδοση. Επειδή οι εφαρμογές σας χρησιμοποιούν το ψευδώνυμο αντί για μια συγκεκριμένη έκδοση, όλοι οι πελάτες λαμβάνουν τη νέα λειτουργικότητα χωρίς να απαιτούνται ενημερώσεις.

Λάβετε υπόψη ότι όταν τροποποιείτε το πρότυπο CloudFormation και ξεκινάτε την ανάπτυξη, οι αλλαγές υλοποιούνται στην πρόχειρη έκδοση, που προορίζονται κυρίως για δοκιμή. Αφού ολοκληρώσετε τη δοκιμαστική φάση, μπορείτε να δημιουργήσετε μια νέα έκδοση για να οριστικοποιήσετε τις αλλαγές που έχετε ενσωματώσει μέχρι στιγμής.

Στη συνέχεια, δημιουργείτε μια νέα έκδοση bot με βάση το πρόχειρό σας, ορίζετε ένα νέο ψευδώνυμο και συνδέετε την έκδοση με αυτό το ψευδώνυμο. Οι παρακάτω είναι οι δύο νέοι πόροι που πρέπει να προσθέσετε στο πρότυπό σας:

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.

ψευδώνυμο επίδειξης

Όταν δημιουργείτε μια νέα έκδοση ενός bot Amazon Lex, συνήθως αυξάνει τον αριθμό έκδοσης διαδοχικά, ξεκινώντας από το 1. Για να διακρίνετε μια συγκεκριμένη έκδοση, μπορείτε να ανατρέξετε στην περιγραφή της.

αρχική έκδοση

Προσθέστε μια συνάρτηση λάμδα

Για να αρχικοποιήσετε τιμές ή να επικυρώσετε την είσοδο χρήστη για το bot σας, μπορείτε να προσθέσετε μια συνάρτηση Lambda ως άγκιστρο κώδικα στο bot σας. Ομοίως, μπορείτε επίσης να χρησιμοποιήσετε μια συνάρτηση 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 για την εκπλήρωση, ενεργοποιήστε τις ρυθμίσεις του άγκιστρου κώδικα στην πρόθεσή σας:

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

Επειδή κάνατε αλλαγές στο bot σας, μπορείτε να δημιουργήσετε μια νέα έκδοση του ρομπότ προσθέτοντας έναν νέο πόρο με το όνομα 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 σχετίζεται με ένα ψευδώνυμο bot. Το Amazon Lex V2 μπορεί να χρησιμοποιήσει μία συνάρτηση Lambda ανά ψευδώνυμο bot ανά γλώσσα. Επομένως, πρέπει να ενημερώσετε το ψευδώνυμό σας στο πρότυπο για να προσθέσετε τον πόρο της συνάρτησης 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

Μπορείς να κατεβάστε την τελευταία έκδοση του προτύπου. Αφού ενημερώσετε τη στοίβα σας με αυτήν την έκδοση, θα έχετε ένα bot Amazon Lex ενσωματωμένο με μια λειτουργία Lambda.

δεύτερη έκδοση

ενημερωμένο alis

Υποκαταστήματα υπό όρους

Ας εξερευνήσουμε τώρα τη δυνατότητα υποκατάστασης του bot 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

Μπορείς να κατεβάστε το ενημερωμένο πρότυπο. Αφού ενημερώσετε τη στοίβα σας με αυτήν την έκδοση προτύπου, το ψευδώνυμο θα κατευθυνθεί στην έκδοση που ενσωματώνει τη δυνατότητα διακλάδωσης υπό όρους. Για να αναιρέσετε αυτήν την τροποποίηση, μπορείτε να ενημερώσετε το ψευδώνυμο για να επιστρέψετε στην προηγούμενη έκδοση.

τρίτη έκδοση

ψευδώνυμο για την τρίτη έκδοση

Logs

Μπορείτε επίσης να ενεργοποιήσετε τα αρχεία καταγραφής για το bot Amazon Lex. Για να το κάνετε αυτό, πρέπει να ενημερώσετε τον ρόλο του ρομπότ για να εκχωρήσετε δικαιώματα για εγγραφή amazoncloudwatch κούτσουρα. Το παρακάτω είναι ένα παράδειγμα προσθήκης μιας πολιτικής 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

Όταν ενημερώνετε τη στοίβα με αυτό το πρότυπο, ενεργοποιείτε τα αρχεία καταγραφής συνομιλιών για το bot σας. Δεν δημιουργείται νέα έκδοση σε αυτό το βήμα επειδή δεν υπάρχουν αλλαγές στον πόρο του bot σας. Μπορείς κατεβάστε την πιο πρόσφατη έκδοση του προτύπου.

Εκκαθάριση

Για να αποτρέψετε μελλοντικές χρεώσεις, διαγράψτε τη στοίβα CloudFormation που δημιουργήσατε.

Συμπέρασμα

Σε αυτήν την ανάρτηση, συζητήσαμε τη διαδικασία βήμα προς βήμα για τη δημιουργία ενός προτύπου CloudFormation για ένα bot Amazon Lex V2. Αρχικά, αναπτύξαμε ένα βασικό bot, στη συνέχεια εξερευνήσαμε τις δυνατότητες των ψευδωνύμων και των εκδόσεων και πώς να τα χρησιμοποιήσουμε αποτελεσματικά με πρότυπα. Στη συνέχεια, μάθαμε πώς να ενσωματώνουμε μια συνάρτηση Lambda με ένα bot Amazon Lex V2 και εφαρμόσαμε τη διακλάδωση υπό όρους στη ροή συνομιλιών του ρομπότ για να ικανοποιήσουμε τις επιχειρηματικές απαιτήσεις. Τέλος, προσθέσαμε λειτουργίες καταγραφής δημιουργώντας έναν πόρο ομάδας καταγραφής CloudWatch και ενημερώνοντας τον ρόλο του bot με τα απαραίτητα δικαιώματα.

Το πρότυπο επιτρέπει την άμεση ανάπτυξη και διαχείριση του ρομπότ, με τη δυνατότητα επαναφοράς των αλλαγών όπως απαιτείται. Συνολικά, το πρότυπο CloudFormation είναι χρήσιμο για τη διαχείριση και τη βελτιστοποίηση ενός bot Amazon Lex V2.

Ως επόμενο βήμα, μπορείτε να εξερευνήσετε δείγμα bots Amazon Lex και εφαρμόστε τις τεχνικές που αναφέρονται σε αυτήν την ανάρτηση για να τις μετατρέψετε σε πρότυπα CloudFormation. Αυτή η πρακτική πρακτική θα ενισχύσει την κατανόησή σας σχετικά με τη διαχείριση των bots του Amazon Lex V2 μέσω της υποδομής ως κώδικα.


Σχετικά με τους Συγγραφείς

Διαχειριστείτε το Amazon Lex bot σας μέσω προτύπων AWS CloudFormation | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Τόμας Ρίντφους είναι αρχιτέκτονας Sr. Solutions στην ομάδα της Amazon Lex. Εφευρίσκει, αναπτύσσει, πρωτότυπα και ευαγγελίζεται νέα τεχνικά χαρακτηριστικά και λύσεις για υπηρεσίες Γλώσσας AI που βελτιώνουν την εμπειρία των πελατών και διευκολύνουν την υιοθέτηση.

Διαχειριστείτε το Amazon Lex bot σας μέσω προτύπων AWS CloudFormation | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Rijeesh Akkambeth Chathoth είναι Σύμβουλος Επαγγελματιών Υπηρεσιών στην AWS. Βοηθά τους πελάτες να επιτύχουν την επιθυμητή τους επιχείρηση
αποτελέσματα στον χώρο του Contact Center αξιοποιώντας τις λειτουργίες Amazon Connect, Amazon Lex και GenAI.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS