ربات Amazon Lex خود را از طریق قالب های AWS CloudFormation مدیریت کنید | خدمات وب آمازون

ربات Amazon Lex خود را از طریق قالب های AWS CloudFormation مدیریت کنید | خدمات وب آمازون

آمازون لکس یک سرویس هوش مصنوعی (AI) کاملاً مدیریت شده با مدل‌های پیشرفته زبان طبیعی برای طراحی، ساخت، آزمایش و استقرار رابط‌های مکالمه در برنامه‌ها. از فناوری‌های پیشرفته یادگیری عمیق برای درک ورودی کاربر استفاده می‌کند و توسعه‌دهندگان را قادر می‌سازد تا چت‌بات‌ها، دستیاران مجازی و سایر برنامه‌هایی را ایجاد کنند که می‌توانند با کاربران به زبان طبیعی تعامل داشته باشند.

مدیریت ربات های آمازون لکس خود با استفاده از AWS CloudFormation به شما این امکان را می دهد که الگوهایی ایجاد کنید که ربات و تمام منابع AWS به آن وابسته است را تعریف کنید. AWS CloudFormation آن منابع را از طرف شما فراهم می کند و پیکربندی می کند و خطر خطای انسانی را هنگام استقرار ربات ها در محیط های جدید از بین می برد. مزایای استفاده از CloudFormation عبارتند از:

  • ثبات - یک الگوی CloudFormation روشی سازگارتر و خودکارتر برای استقرار و مدیریت منابع مرتبط با ربات آمازون Lex ارائه می دهد.
  • کنترل نسخه – با AWS CloudFormation، می توانید از سیستم های کنترل نسخه مانند Git برای مدیریت قالب های CloudFormation خود استفاده کنید. این به شما امکان می دهد نسخه های مختلف ربات خود را حفظ کنید و در صورت نیاز به نسخه های قبلی برگردید.
  • قابل استفاده مجدد – می‌توانید از قالب‌های CloudFormation در چندین محیط مانند توسعه، مرحله‌بندی و تولید مجدد استفاده کنید. این باعث صرفه جویی در زمان و تلاش در تعریف یک ربات در محیط های مختلف می شود.
  • قابلیت ارتقاء - با افزایش پیچیدگی ربات آمازون لکس، آن را از طریق مدیریت کنید کنسول مدیریت AWS چالش برانگیزتر می شود. AWS CloudFormation اجازه می دهد تا یک رویکرد ساده تر و کارآمدتر برای مدیریت تعریف و منابع ربات داشته باشید.
  • اتوماسیون - استفاده از یک الگوی CloudFormation به شما امکان می دهد فرآیند استقرار را خودکار کنید. می توانید از خدمات AWS مانند استفاده کنید AWS CodePipeline و AWS CodeBuild برای ساخت، آزمایش و استقرار ربات آمازون Lex به صورت خودکار.

در این پست، ما شما را از طریق مراحل ایجاد یک الگوی CloudFormation برای ربات Amazon Lex V2 راهنمایی می کنیم.

بررسی اجمالی راه حل

ما انتخاب کرده ایم سفر کتاب ربات به عنوان نقطه شروع ما برای این تمرین. ما از یک الگوی CloudFormation برای ایجاد یک ربات جدید از ابتدا استفاده می کنیم که شامل تعریف intent ها، اسلات ها و سایر اجزای مورد نیاز است. علاوه بر این، موضوعاتی مانند کنترل نسخه، نام‌های مستعار، ادغام را بررسی می‌کنیم AWS لامبدا توابع، ایجاد شاخه های شرطی، و فعال کردن ورود به سیستم.

پیش نیازها

شما باید پیش نیازهای زیر را داشته باشید:

  • An حساب AWS برای ایجاد و استقرار یک الگوی CloudFormation
  • ضروری هویت AWS و مدیریت دسترسی (من هستم) مجوز برای استقرار AWS CloudFormation و منابع استفاده شده در قالب
  • دانش اولیه آمازون لکس، توابع لامبدا و خدمات مرتبط
  • دانش اولیه ایجاد و استقرار الگوهای 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: "*"

ربات آمازون لکس را پیکربندی کنید

بعد، باید تعریف ربات را اضافه کنید. در زیر قالب YAML برای تعریف ربات آمازون 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 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 را دانلود کنید برای کارهای انجام شده تا کنون بعد از تو پشته خود را به روز کنید با این الگو، یک ربات کاربردی مستقر خواهد شد. در کنسول آمازون لکس، می توانید تأیید کنید که نسخه پیش نویس ربات و نام مستعار پیش فرض وجود دارد. TestBotAlias ایجاد شده است.

نام مستعار ربات

یک نسخه ربات جدید و نام مستعار ایجاد کنید

آمازون لکس از انتشار پشتیبانی می کند نسخه از ربات ها، intent ها و انواع اسلات تا بتوانید اجرای برنامه های مشتری خود را کنترل کنید. یک نسخه یک عکس فوری شماره گذاری شده از تعریف ربات شما است که می توانید آن را برای استفاده در بخش های مختلف گردش کار خود، مانند توسعه، استقرار بتا، و تولید منتشر کنید. ربات های آمازون لکس نیز پشتیبانی می کنند نام مستعار. نام مستعار نشانگر یک نسخه خاص از یک ربات است. با نام مستعار، می توانید نسخه برنامه های مشتری خود را به روز کنید. در سناریوهای عملی، نام مستعار ربات برای استقرار آبی/سبز و مدیریت پیکربندی‌های خاص محیط مانند محیط‌های توسعه و تولید استفاده می‌شود.

برای نشان دادن، فرض کنید یک نام مستعار به نسخه 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

تو می توانی نسخه جدید قالب را دانلود کنید و با به روز رسانی پشته خود آن را مستقر کنید. شما می توانید در کنسول آمازون لکس مشاهده کنید که یک نسخه جدید ایجاد شده و با نام مستعار جدیدی همراه است BookHotelDemoAlias.

نام مستعار دمو

هنگامی که نسخه جدیدی از ربات آمازون لکس را ایجاد می کنید، معمولاً شماره نسخه را به ترتیب از 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 برای انجام، تنظیمات قلاب کد را در هدف خود فعال کنید:

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 با نام مستعار ربات مرتبط است. آمازون 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 را برای آمازون Lex اضافه می‌کنید و نام مستعار ARN را به عنوان منبع ARN تعیین می‌کنید:

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

تو می توانی آخرین نسخه را دانلود کنید از قالب پس از به روز رسانی پشته خود با این نسخه، یک ربات آمازون لکس خواهید داشت که با یک تابع لامبدا یکپارچه شده است.

نسخه دوم

آلیس به روز شد

شاخه های مشروط

حال بیایید ویژگی شاخه مشروط ربات آمازون لکس را بررسی کنیم و سناریویی را در نظر بگیریم که در آن رزرو بیش از پنج شب در سیاتل برای هفته آینده مجاز نیست. طبق الزامات تجاری، اگر کاربر سعی کند بیش از پنج شب در سیاتل رزرو کند، مکالمه باید با یک پیام مناسب پایان یابد. شاخه شرطی برای آن در قالب 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

تو می توانی قالب به روز شده را دانلود کنید. پس از اینکه پشته خود را با این نسخه الگو به روز کردید، نام مستعار به نسخه ای هدایت می شود که دارای ویژگی انشعاب شرطی است. برای لغو این اصلاح، می توانید نام مستعار را به روز کنید تا به نسخه قبلی برگردید.

نسخه سوم

نام مستعار برای نسخه سوم

سیاههها

همچنین می‌توانید گزارش‌ها را برای ربات آمازون لکس خود فعال کنید. برای انجام این کار، باید نقش ربات را برای اعطای مجوز برای نوشتن به روز کنید CloudWatch آمازون سیاهههای مربوط در زیر نمونه ای از افزودن یک سیاست 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 مفید است.

به عنوان مرحله بعدی، می توانید کاوش کنید نمونه ربات های آمازون لکس و از تکنیک های بحث شده در این پست برای تبدیل آنها به قالب های CloudFormation استفاده کنید. این تمرین عملی درک شما را از مدیریت ربات های آمازون Lex V2 از طریق زیرساخت به عنوان کد تقویت می کند.


درباره نویسنده

Manage your Amazon Lex bot via AWS CloudFormation templates | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.توماس ریندفوس Sr. Solutions Architect در تیم آمازون Lex است. او ویژگی‌ها و راه‌حل‌های فنی جدیدی را برای خدمات زبان هوش مصنوعی اختراع، توسعه، نمونه‌های اولیه و بشارت می‌دهد که تجربه مشتری را بهبود می‌بخشد و پذیرش را آسان می‌کند.

Manage your Amazon Lex bot via AWS CloudFormation templates | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.ریجش آککامبث چاتوث مشاور خدمات حرفه ای در AWS است. او به مشتریان در دستیابی به کسب و کار مورد نظرشان کمک می کند
نتایج را در فضای مرکز تماس با استفاده از ویژگی های آمازون کانکت، آمازون لکس و GenAI به دست آورید.

تمبر زمان:

بیشتر از آموزش ماشین AWS