Verwalten Sie Ihren Amazon Lex-Bot über AWS CloudFormation-Vorlagen | Amazon Web Services

Verwalten Sie Ihren Amazon Lex-Bot über AWS CloudFormation-Vorlagen | Amazon Web Services

Amazon Lex ist ein vollständig verwalteter Dienst für künstliche Intelligenz (KI) mit fortschrittlichen Modellen in natürlicher Sprache zum Entwerfen, Erstellen, Testen und Bereitstellen von Konversationsschnittstellen in Anwendungen. Es nutzt fortschrittliche Deep-Learning-Technologien, um Benutzereingaben zu verstehen, und ermöglicht es Entwicklern, Chatbots, virtuelle Assistenten und andere Anwendungen zu erstellen, die mit Benutzern in natürlicher Sprache interagieren können.

Verwalten Sie Ihre Amazon Lex-Bots mit AWS CloudFormation ermöglicht Ihnen die Erstellung von Vorlagen, die den Bot und alle AWS-Ressourcen definieren, von denen er abhängt. AWS CloudFormation stellt diese Ressourcen in Ihrem Namen bereit und konfiguriert sie und eliminiert so das Risiko menschlicher Fehler bei der Bereitstellung von Bots in neuen Umgebungen. Zu den Vorteilen der Verwendung von CloudFormation gehören:

  • Konsistenz – Eine CloudFormation-Vorlage bietet eine konsistentere und automatisiertere Möglichkeit, die mit einem Amazon Lex-Bot verbundenen Ressourcen bereitzustellen und zu verwalten.
  • Versionskontrolle – Mit AWS CloudFormation können Sie Versionskontrollsysteme wie Git verwenden, um Ihre CloudFormation-Vorlagen zu verwalten. Dadurch können Sie verschiedene Versionen Ihres Bots verwalten und bei Bedarf auf frühere Versionen zurückgreifen.
  • Wiederverwendbarkeit – Sie können CloudFormation-Vorlagen in mehreren Umgebungen wie Entwicklung, Staging und Produktion wiederverwenden. Dies spart Zeit und Aufwand bei der Definition desselben Bots in verschiedenen Umgebungen.
  • Erweiterbarkeit – Da Ihr Amazon Lex-Bot immer komplexer wird, müssen Sie ihn über das verwalten AWS-Managementkonsole wird anspruchsvoller. AWS CloudFormation ermöglicht einen schlankeren und effizienteren Ansatz zur Verwaltung der Definition und Ressourcen des Bots.
  • Automation – Durch die Verwendung einer CloudFormation-Vorlage können Sie den Bereitstellungsprozess automatisieren. Sie können AWS-Dienste wie verwenden AWS CodePipeline machen AWS CodeBuild um Ihren Amazon Lex-Bot automatisch zu erstellen, zu testen und bereitzustellen.

In diesem Beitrag führen wir Sie durch die Schritte zum Erstellen einer CloudFormation-Vorlage für einen Amazon Lex V2-Bot.

Lösungsüberblick

Wir haben uns für das entschieden Alle Reisen bot als Ausgangspunkt für diese Übung. Wir verwenden eine CloudFormation-Vorlage, um einen neuen Bot von Grund auf zu erstellen, einschließlich der Definition von Absichten, Slots und anderen erforderlichen Komponenten. Darüber hinaus befassen wir uns mit Themen wie Versionskontrolle, Aliase und Integration AWS Lambda Funktionen, Erstellen bedingter Verzweigungen und Aktivieren der Protokollierung.

Voraussetzungen:

Folgende Voraussetzungen sollten Sie mitbringen:

  • An AWS-Konto um eine CloudFormation-Vorlage zu erstellen und bereitzustellen
  • Die notwendige AWS Identity and Access Management and (ICH BIN) Berechtigungen um AWS CloudFormation und die in der Vorlage verwendeten Ressourcen bereitzustellen
  • Grundkenntnisse über Amazon Lex, Lambda-Funktionen und zugehörige Dienste
  • Grundkenntnisse zum Erstellen und Bereitstellen von CloudFormation-Vorlagen

Erstellen Sie eine IAM-Rolle

Zunächst müssen Sie eine IAM-Rolle erstellen, die der Bot verwenden wird. Sie können dies erreichen, indem Sie eine CloudFormation-Vorlage initialisieren und die IAM-Rolle als Ressource hinzufügen. Zum Erstellen der Rolle können Sie die folgende Vorlage verwenden. Wenn du Laden Sie die Beispielvorlage herunter und bereitstellen, sollten Sie sehen, dass eine IAM-Rolle erstellt wurde. Wir stellen im Laufe dieses Beitrags Beispiele für Vorlagen bereit und führen sie im weiteren Verlauf zusammen.

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

Konfigurieren Sie den Amazon Lex-Bot

Als Nächstes müssen Sie die Bot-Definition hinzufügen. Im Folgenden finden Sie die YAML-Vorlage für die Amazon Lex-Bot-Definition. Sie konstruieren die notwendigen Komponenten nacheinander:

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

Um einen Bot zu erstellen, der nur die Bot-Definition ohne jegliche Absicht enthält, können Sie die folgende Vorlage verwenden. Hier geben Sie den Namen des Bots, den ARN der zuvor erstellten Rolle, Datenschutzeinstellungen und mehr an:

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

Du kannst dich Laden Sie die aktualisierte Vorlage herunter. Durch die Bereitstellung der aktualisierten Vorlage können Sie sowohl die Rolle als auch die Bot-Definition erstellen. Beachten Sie, dass Sie es sind Aktualisieren des Stapels die Sie im vorherigen Schritt erstellt haben.

Der letzte Schritt umfasst die Definition des BotLocales, die den Großteil der Funktionalität des Bots ausmachen. Hierzu zählen beispielsweise Intents machen Slot types. Das Folgende ist die YAML-Vorlage:

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

In diesem Fall erstellen Sie die BookHotel Absicht, die einen benutzerdefinierten Slot-Typ für Raumtypen erfordert. Sie stellen das ein LocaleId, dann ist die VoiceSettings. Dann fügen Sie das hinzu SlotTypes und ihre entsprechenden Werte.

Der nächste Schritt ist die Definition der Intents, beginnend mit der ersten Absicht, BookHotel, was das Hinzufügen von Äußerungen, Slots und Slot-Prioritäten umfasst. Die Details dieser Knoten werden in der bereitgestellten Vorlage demonstriert. Schließlich fügen Sie die zweite Absicht hinzu, nämlich die FallbackIntent. Siehe folgenden Code:

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"

Du kannst dich Laden Sie die CloudFormation-Vorlage herunter für die bisher geleistete Arbeit. Nach Ihnen Aktualisieren Sie Ihren Stack Mit dieser Vorlage wird ein funktionsfähiger Bot bereitgestellt. Auf der Amazon Lex-Konsole können Sie bestätigen, dass es eine Entwurfsversion des Bots und einen Standardalias mit dem Namen gibt TestBotAlias wurde erschaffen.

Bot-Alias

Erstellen Sie eine neue Bot-Version und einen neuen Alias

Amazon Lex unterstützt die Veröffentlichung Versionen von Bots, Absichten und Slot-Typen, sodass Sie die Implementierung Ihrer Client-Anwendungen steuern können. Eine Version ist ein nummerierter Snapshot Ihrer Bot-Definition, den Sie zur Verwendung in verschiedenen Teilen Ihres Workflows veröffentlichen können, z. B. Entwicklung, Beta-Bereitstellung und Produktion. Auch Amazon Lex-Bots unterstützen Aliase. Ein Alias ​​ist ein Zeiger auf eine bestimmte Version eines Bots. Mit einem Alias ​​können Sie die Version Ihrer Clientanwendungen aktualisieren. In praktischen Szenarien werden Bot-Aliase für Blau/Grün-Bereitstellungen und die Verwaltung umgebungsspezifischer Konfigurationen wie Entwicklungs- und Produktionsumgebungen verwendet.

Nehmen wir zur Veranschaulichung an, Sie verweisen mit einem Alias ​​auf Version 1 Ihres Bots. Wenn es Zeit ist, den Bot zu aktualisieren, können Sie Version 2 veröffentlichen und den Alias ​​so ändern, dass er auf die neue Version verweist. Da Ihre Anwendungen den Alias ​​anstelle einer bestimmten Version verwenden, erhalten alle Clients die neue Funktionalität, ohne dass Updates erforderlich sind.

Beachten Sie, dass beim Ändern der CloudFormation-Vorlage und beim Initiieren der Bereitstellung die Änderungen in der Entwurfsversion implementiert werden, die hauptsächlich zum Testen gedacht ist. Nachdem Sie Ihre Testphase abgeschlossen haben, können Sie eine neue Version erstellen, um die bisher vorgenommenen Änderungen abzuschließen.

Als Nächstes erstellen Sie eine neue Bot-Version basierend auf Ihrem Entwurf, richten einen neuen Alias ​​ein und verknüpfen die Version mit diesem Alias. Im Folgenden sind die beiden neuen Ressourcen aufgeführt, die Sie Ihrer Vorlage hinzufügen können:

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

Du kannst dich Laden Sie die neue Version der Vorlage herunter und stellen Sie es bereit, indem Sie Ihren Stack aktualisieren. Sie können auf der Amazon Lex-Konsole sehen, dass eine neue Version erstellt und einem neuen Alias ​​namens zugeordnet wird BookHotelDemoAlias.

Demo-Alias

Wenn Sie eine neue Version eines Amazon Lex-Bots erstellen, erhöht dieser normalerweise die Versionsnummer sequentiell, beginnend bei 1. Um eine bestimmte Version zu erkennen, können Sie sich auf deren Beschreibung beziehen.

erste Version

Fügen Sie eine Lambda-Funktion hinzu

Um Werte zu initialisieren oder Benutzereingaben für Ihren Bot zu validieren, können Sie Ihrem Bot eine Lambda-Funktion als Code-Hook hinzufügen. Ebenso können Sie eine Lambda-Funktion zur Erfüllung verwenden, z. B. indem Sie Daten in Datenbanken schreiben oder APIs aufrufen, um die gesammelten Informationen zu speichern. Weitere Informationen finden Sie unter Aktivieren benutzerdefinierter Logik mit AWS Lambda-Funktionen.

Fügen wir der CloudFormation-Vorlage eine neue Ressource für die Lambda-Funktion hinzu. Obwohl es im Allgemeinen nicht empfohlen wird, Code in CloudFormation-Vorlagen einzubetten, tun wir dies hier ausschließlich, um die Demo-Bereitstellung weniger kompliziert zu machen. Siehe den folgenden Code:

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

Um diese Lambda-Funktion für die Erfüllung zu verwenden, aktivieren Sie die Code-Hook-Einstellungen in Ihrem Intent:

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

Da Sie Änderungen an Ihrem Bot vorgenommen haben, können Sie eine neue Version des Bots erstellen, indem Sie eine neue Ressource mit dem Namen hinzufügen BookHotelVersionWithLambda in der Vorlage:

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

Die Lambda-Funktion ist mit einem Bot-Alias ​​verknüpft. Amazon Lex V2 kann eine Lambda-Funktion pro Bot-Alias ​​pro Sprache verwenden. Daher müssen Sie Ihren Alias ​​in der Vorlage aktualisieren, um die Lambda-Funktionsressource hinzuzufügen. Sie können dies in der tun BotAliasLocalSettings Abschnitt. Sie müssen den Alias ​​auch auf die neue Version verweisen, die Sie erstellt haben. Der folgende Code ist die geänderte Alias-Konfiguration:

  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

Bisher haben Sie nur die Lambda-Funktion mit dem Alias ​​verknüpft. Sie müssen jedoch die Berechtigung erteilen, damit der Alias ​​die Lambda-Funktion aufrufen kann. Im folgenden Code fügen Sie die Lambda-Aufrufberechtigung für Amazon Lex hinzu und geben den Alias-ARN als Quell-ARN an:

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

Du kannst dich Laden Sie die neueste Version herunter der Vorlage. Nachdem Sie Ihren Stack mit dieser Version aktualisiert haben, verfügen Sie über einen Amazon Lex-Bot mit integrierter Lambda-Funktion.

zweite Version

Alis aktualisiert

Bedingte Verzweigungen

Lassen Sie uns nun die bedingte Verzweigungsfunktion des Amazon Lex-Bots untersuchen und ein Szenario betrachten, in dem die Buchung von mehr als fünf Nächten in Seattle für die nächste Woche nicht zulässig ist. Gemäß den geschäftlichen Anforderungen sollte das Gespräch mit einer entsprechenden Nachricht enden, wenn der Benutzer versucht, mehr als fünf Nächte in Seattle zu buchen. Der bedingte Zweig dafür wird in der CloudFormation-Vorlage unter dargestellt 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

Da Sie die Bot-Definition geändert haben, müssen Sie eine neue Version in der Vorlage erstellen und diese mit dem Alias ​​verknüpfen. Dies ist eine vorübergehende Änderung, da das Unternehmen plant, bald große Buchungen in Seattle zuzulassen. Im Folgenden sind die beiden neuen Ressourcen aufgeführt, die Sie der Vorlage hinzufügen:

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

Du kannst dich Laden Sie die aktualisierte Vorlage herunter. Nachdem Sie Ihren Stack mit dieser Vorlagenversion aktualisiert haben, wird der Alias ​​auf die Version umgeleitet, die die Funktion der bedingten Verzweigung enthält. Um diese Änderung rückgängig zu machen, können Sie den Alias ​​aktualisieren, um zur vorherigen Version zurückzukehren.

dritte Fassung

Alias ​​für die dritte Version

Logs

Sie können auch Protokolle für Ihren Amazon Lex-Bot aktivieren. Dazu müssen Sie die Rolle des Bots aktualisieren, um Berechtigungen zum Schreiben zu erteilen Amazon CloudWatch Protokolle. Im Folgenden finden Sie ein Beispiel für das Hinzufügen einer CloudWatch-Richtlinie zur Rolle:

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

Um ein konsistentes und vorhersehbares Verhalten sicherzustellen, sollten Sie bei der Definition von Ressourcennamen und -eigenschaften in CloudFormation-Vorlagen so spezifisch wie möglich sein. Dies liegt daran, dass die Verwendung des Platzhalterzeichens (*) in CloudFormation-Vorlagen potenzielle Sicherheitsrisiken bergen und zu unbeabsichtigten Folgen führen kann. Daher wird empfohlen, die Verwendung von Platzhaltern zu vermeiden und stattdessen nach Möglichkeit explizite Werte zu verwenden.

Als Nächstes erstellen Sie eine CloudWatch-Protokollgruppenressource, wie im folgenden Code gezeigt, um Ihre Protokolle an diese Gruppe weiterzuleiten:

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

Schließlich aktualisieren Sie Ihren Alias, um die Einstellungen für das Konversationsprotokoll zu aktivieren:

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

Wenn Sie den Stack mit dieser Vorlage aktualisieren, aktivieren Sie die Konversationsprotokolle für Ihren Bot. In diesem Schritt wird keine neue Version erstellt, da keine Änderungen an Ihrer Bot-Ressource vorgenommen werden. Du kannst Laden Sie die neueste Version der Vorlage herunter.

Aufräumen

Um zu verhindern, dass in Zukunft Gebühren anfallen, löschen Sie den von Ihnen erstellten CloudFormation-Stack.

Zusammenfassung

In diesem Beitrag haben wir den schrittweisen Prozess zum Erstellen einer CloudFormation-Vorlage für einen Amazon Lex V2-Bot besprochen. Zunächst stellten wir einen einfachen Bot bereit, dann untersuchten wir das Potenzial von Aliasen und Versionen und wie man sie mit Vorlagen effizient nutzen kann. Als Nächstes lernten wir, wie man eine Lambda-Funktion in einen Amazon Lex V2-Bot integriert und bedingte Verzweigungen im Konversationsfluss des Bots implementierte, um den Geschäftsanforderungen gerecht zu werden. Schließlich haben wir Protokollierungsfunktionen hinzugefügt, indem wir eine CloudWatch-Protokollgruppenressource erstellt und die Rolle des Bots mit den erforderlichen Berechtigungen aktualisiert haben.

Die Vorlage ermöglicht die unkomplizierte Bereitstellung und Verwaltung des Bots und bietet die Möglichkeit, Änderungen bei Bedarf rückgängig zu machen. Insgesamt ist die CloudFormation-Vorlage nützlich für die Verwaltung und Optimierung eines Amazon Lex V2-Bots.

Im nächsten Schritt können Sie erkunden Probieren Sie Amazon Lex-Bots aus und wenden Sie die in diesem Beitrag besprochenen Techniken an, um sie in CloudFormation-Vorlagen zu konvertieren. Diese praktische Übung wird Ihr Verständnis für die Verwaltung von Amazon Lex V2-Bots durch Infrastruktur als Code festigen.


Über die Autoren

Manage your Amazon Lex bot via AWS CloudFormation templates | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Thomas Rindfuß ist Senior Solutions Architect im Amazon Lex-Team. Er erfindet, entwickelt, prototypisiert und evangelisiert neue technische Funktionen und Lösungen für Sprach-KI-Dienste, die das Kundenerlebnis verbessern und die Einführung erleichtern.

Manage your Amazon Lex bot via AWS CloudFormation templates | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Rijeesh Akkambeth Chathoth ist Professional Services Consultant bei AWS. Er hilft Kunden dabei, ihr gewünschtes Geschäft zu erreichen
Ergebnisse im Contact Center-Bereich durch Nutzung der Funktionen Amazon Connect, Amazon Lex und GenAI.

Zeitstempel:

Mehr von AWS Maschinelles Lernen