ذكاء البيانات التوليدية

قم بإدارة روبوت Amazon Lex الخاص بك عبر قوالب AWS CloudFormation | خدمات الويب الأمازون

التاريخ:

أمازون ليكس هي خدمة ذكاء اصطناعي مُدارة بالكامل (AI) مع نماذج لغة طبيعية متقدمة لتصميم وبناء واختبار ونشر واجهات المحادثة في التطبيقات. ويستخدم تقنيات التعلم العميق المتقدمة لفهم مدخلات المستخدم، مما يمكّن المطورين من إنشاء روبوتات الدردشة والمساعدين الافتراضيين والتطبيقات الأخرى التي يمكنها التفاعل مع المستخدمين باللغة الطبيعية.

إدارة روبوتات Amazon Lex الخاصة بك باستخدام تكوين سحابة AWS يسمح لك بإنشاء قوالب تحدد الروبوت وجميع موارد AWS التي يعتمد عليها. توفر AWS CloudFormation تلك الموارد وتقوم بتكوينها نيابةً عنك، مما يزيل خطر الخطأ البشري عند نشر الروبوتات في بيئات جديدة. تتضمن فوائد استخدام CloudFormation ما يلي:

  • اتساق – يوفر قالب CloudFormation طريقة أكثر اتساقًا وتلقائية لنشر وإدارة الموارد المرتبطة بروبوت Amazon Lex.
  • التحكم في الإصدار - باستخدام AWS CloudFormation، يمكنك استخدام أنظمة التحكم في الإصدار مثل Git لإدارة قوالب CloudFormation الخاصة بك. يتيح لك ذلك الاحتفاظ بإصدارات مختلفة من برنامج الروبوت الخاص بك والعودة إلى الإصدارات السابقة إذا لزم الأمر.
  • إعادة استخدام – يمكنك إعادة استخدام قوالب CloudFormation عبر بيئات متعددة، مثل التطوير والتجهيز والإنتاج. وهذا يوفر الوقت والجهد في تحديد نفس الروبوت عبر بيئات مختلفة.
  • التوسعة - مع تزايد تعقيد روبوت Amazon Lex الخاص بك، يمكنك إدارته من خلال وحدة تحكم إدارة AWS يصبح أكثر تحديا. يتيح AWS CloudFormation اتباع نهج أكثر بساطة وفعالية لإدارة تعريف الروبوت وموارده.
  • أتمتة - يتيح لك استخدام قالب CloudFormation أتمتة عملية النشر. يمكنك استخدام خدمات AWS مثل خط أنابيب AWS و AWS كود البناء لإنشاء روبوت Amazon Lex الخاص بك واختباره ونشره تلقائيًا.

في هذا المنشور، نرشدك خلال الخطوات المتبعة في إنشاء قالب CloudFormation لروبوت Amazon Lex V2.

حل نظرة عامة

لقد اخترنا رحلة الكتاب bot كنقطة انطلاق لهذا التمرين. نحن نستخدم قالب CloudFormation لإنشاء روبوت جديد من البداية، بما في ذلك تحديد الأغراض والفتحات والمكونات الأخرى المطلوبة. بالإضافة إلى ذلك، نستكشف موضوعات مثل التحكم في الإصدار والأسماء المستعارة والتكامل AWS لامدا وظائف، وإنشاء فروع مشروطة، وتمكين التسجيل.

المتطلبات الأساسية المسبقة

يجب أن يكون لديك المتطلبات الأساسية التالية:

  • An حساب AWS لإنشاء ونشر قالب CloudFormation
  • الضروري إدارة الهوية والوصول AWS (انا) أذونات لنشر AWS CloudFormation والموارد المستخدمة في القالب
  • المعرفة الأساسية بوظائف Amazon Lex وLambda والخدمات المرتبطة بها
  • المعرفة الأساسية بإنشاء ونشر قوالب CloudFormation

إنشاء دور IAM

للبدء، تحتاج إلى إنشاء دور IAM الذي سيستخدمه الروبوت. يمكنك تحقيق ذلك عن طريق تهيئة قالب CloudFormation وإضافة دور IAM كمورد. يمكنك استخدام القالب التالي لإنشاء الدور. اذا أنت قم بتنزيل نموذج المثال ونشره، يجب أن ترى أنه قد تم إنشاء دور IAM. نحن نقدم أمثلة على القوالب بينما نستعرض هذا المنشور وندمجها مع تقدمنا.

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

قم بتكوين روبوت Amazon Lex

بعد ذلك، تحتاج إلى إضافة تعريف الروبوت. ما يلي هو قالب YAML لتعريف روبوت Amazon Lex؛ تقوم ببناء المكونات الضرورية واحدًا تلو الآخر:

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

لإنشاء روبوت يتضمن تعريف الروبوت فقط دون أي نية، يمكنك استخدام القالب التالي. هنا، يمكنك تحديد اسم الروبوت، وARN للدور الذي قمت بإنشائه مسبقًا، وإعدادات خصوصية البيانات، والمزيد:

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

اطلع على قم بتنزيل القالب المحدث. يتيح لك نشر القالب المحدث إنشاء الدور وتعريف الروبوت. لاحظ أنك تحديث المكدس قمت بإنشائه في الخطوة السابقة.

الخطوة الأخيرة تتضمن تحديد BotLocalesوالتي تشكل غالبية وظائف الروبوت. وهذا يشمل، على سبيل المثال، Intents و Slot types. فيما يلي قالب YAML:

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

في هذه الحالة، يمكنك بناء BookHotel النية، الأمر الذي يتطلب نوع فتحة مخصصًا لأنواع الغرف. قمت بتعيين LocaleId، ثم VoiceSettings. ثم تقوم بإضافة SlotTypes والقيم المقابلة لها.

الخطوة التالية هي تحديد ملف Intents, بدءا بالقصد الأول , BookHotel، والذي يتضمن إضافة الكلام والفواصل وأولويات الفتحة. يتم توضيح تفاصيل هذه العقد في القالب المقدم. وأخيرًا، أضفت الهدف الثاني، وهو FallbackIntent. انظر الكود التالي:

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

اطلع على قم بتنزيل نموذج CloudFormation للعمل المنجز حتى الآن. بعدك قم بتحديث المكدس الخاص بك باستخدام هذا القالب، سيتم نشر روبوت وظيفي. في وحدة تحكم Amazon Lex، يمكنك التأكد من وجود نسخة أولية من الروبوت، واسم مستعار افتراضي يسمى TestBotAlias تم إنشاؤه.

الاسم المستعار للبوت

إنشاء إصدار بوت جديد واسم مستعار

يدعم Amazon Lex النشر الإصدارات من الروبوتات والنوايا وأنواع الفتحات حتى تتمكن من التحكم في تنفيذ تطبيقات العميل الخاص بك. الإصدار عبارة عن لقطة مرقمة لتعريف الروبوت الخاص بك والتي يمكنك نشرها لاستخدامها في أجزاء مختلفة من سير عملك، مثل التطوير ونشر الإصدار التجريبي والإنتاج. تدعم أيضًا روبوتات Amazon Lex اسماء مستعارة. الاسم المستعار هو مؤشر إلى إصدار محدد من الروبوت. باستخدام اسم مستعار، يمكنك تحديث إصدار تطبيقات العميل الخاص بك. في السيناريوهات العملية، يتم استخدام الأسماء المستعارة للروبوتات لعمليات النشر باللون الأزرق/الأخضر وإدارة التكوينات الخاصة بالبيئة مثل بيئات التطوير والإنتاج.

للتوضيح، لنفترض أنك قمت بتوجيه اسم مستعار إلى الإصدار 1 من برنامج الروبوت الخاص بك. عندما يحين وقت تحديث الروبوت، يمكنك نشر الإصدار 2 وتغيير الاسم المستعار للإشارة إلى الإصدار الجديد. نظرًا لأن تطبيقاتك تستخدم الاسم المستعار بدلاً من إصدار محدد، يتلقى كافة العملاء الوظيفة الجديدة دون الحاجة إلى تحديثات.

ضع في اعتبارك أنه عند تعديل قالب CloudFormation وبدء النشر، يتم تنفيذ التغييرات ضمن مسودة الإصدار، والمخصصة في المقام الأول للاختبار. بعد إكمال مرحلة الاختبار، يمكنك إنشاء إصدار جديد لإنهاء التغييرات التي قمت بإدراجها حتى الآن.

بعد ذلك، يمكنك إنشاء إصدار روبوت جديد استنادًا إلى مسودتك، وإعداد اسم مستعار جديد، وربط الإصدار بهذا الاسم المستعار. فيما يلي الموردان الجديدان اللذان يجب إضافتهما إلى القالب الخاص بك:

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

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

اطلع على قم بتنزيل الإصدار الجديد من القالب ونشره عن طريق تحديث المكدس الخاص بك. يمكنك أن ترى على وحدة تحكم Amazon Lex أنه تم إنشاء إصدار جديد وربطه باسم مستعار جديد يسمى BookHotelDemoAlias.

الاسم المستعار التجريبي

عندما تقوم بإنشاء إصدار جديد من روبوت Amazon Lex، فإنه عادةً ما يزيد رقم الإصدار بالتسلسل، بدءًا من 1. للتعرف على إصدار محدد، يمكنك الرجوع إلى الوصف الخاص به.

نسخة أولية

إضافة وظيفة لامدا

لتهيئة القيم أو التحقق من صحة إدخال المستخدم لروبوتك، يمكنك إضافة وظيفة Lambda كرابط تعليمات برمجية لروبوتك. وبالمثل، يمكنك استخدام وظيفة Lambda للتنفيذ أيضًا، على سبيل المثال كتابة البيانات إلى قواعد البيانات أو استدعاء واجهات برمجة التطبيقات لحفظ المعلومات المجمعة. لمزيد من المعلومات، راجع تمكين المنطق المخصص مع وظائف 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 باسم مستعار لروبوت. يمكن لـ Amazon Lex V2 استخدام وظيفة Lambda واحدة لكل اسم مستعار لروبوت لكل لغة. ولذلك، يجب عليك تحديث الاسم المستعار الخاص بك في القالب لإضافة مورد وظيفة Lambda. يمكنك القيام بذلك في BotAliasLocalSettings قسم. تحتاج أيضًا إلى توجيه الاسم المستعار إلى الإصدار الجديد الذي قمت بإنشائه. الكود التالي هو تكوين الاسم المستعار المعدل:

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

حتى الآن، قمت فقط بربط وظيفة Lambda بالاسم المستعار. ومع ذلك، يتعين عليك منح الإذن للسماح للاسم المستعار باستدعاء وظيفة Lambda. في التعليمة البرمجية التالية، يمكنك إضافة إذن استدعاء Lambda لـ Amazon Lex وتحديد الاسم المستعار ARN باعتباره ARN المصدر:

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

اطلع على تحميل أحدث إصدار من القالب. بعد تحديث مجموعتك بهذا الإصدار، سيكون لديك روبوت Amazon Lex مدمج مع وظيفة Lambda.

الإصدار الثاني

تحديث أليس

الفروع الشرطية

فلنستكشف الآن ميزة الفرع المشروط لروبوت Amazon Lex ونفكر في سيناريو حيث لا يُسمح بحجز أكثر من خمس ليالٍ في سياتل للأسبوع التالي. وفقًا لمتطلبات العمل، يجب أن تنتهي المحادثة برسالة مناسبة إذا حاول المستخدم حجز أكثر من خمس ليالٍ في سياتل. يتم تمثيل الفرع الشرطي لذلك في قالب CloudFormation ضمن ملف SlotCaptureSetting:

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

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

نظرًا لأنك قمت بتغيير تعريف الروبوت، فأنت بحاجة إلى إنشاء إصدار جديد في القالب وربطه بالاسم المستعار. يعد هذا تعديلًا مؤقتًا لأن الشركة تخطط للسماح بحجوزات كبيرة في سياتل قريبًا. فيما يلي الموردان الجديدان اللذان قمت بإضافتهما إلى القالب:

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

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

اطلع على قم بتنزيل القالب المحدث. بعد تحديث مجموعتك باستخدام إصدار القالب هذا، سيتم توجيه الاسم المستعار إلى الإصدار الذي يتضمن ميزة التفرع المشروط. للتراجع عن هذا التعديل، يمكنك تحديث الاسم المستعار للعودة إلى الإصدار السابق.

الإصدار الثالث

الاسم المستعار للنسخة الثالثة

سجلات

يمكنك أيضًا تمكين السجلات لروبوت Amazon Lex الخاص بك. للقيام بذلك، يجب عليك تحديث دور الروبوت لمنح أذونات الكتابة الأمازون CloudWatch السجلات. فيما يلي مثال على إضافة سياسة CloudWatch إلى الدور:

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

لضمان سلوك متسق ويمكن التنبؤ به، يجب أن تكون محددًا قدر الإمكان عند تحديد أسماء الموارد وخصائصها في قوالب CloudFormation. وذلك لأن استخدام حرف البدل (*) في قوالب CloudFormation يمكن أن يشكل مخاطر أمنية محتملة ويؤدي إلى عواقب غير مقصودة. ولذلك، يوصى بتجنب استخدام أحرف البدل واستخدام القيم الصريحة بدلاً من ذلك حيثما أمكن ذلك.

بعد ذلك، يمكنك إنشاء مورد مجموعة سجل CloudWatch، كما هو موضح في التعليمة البرمجية التالية، لتوجيه سجلاتك إلى هذه المجموعة:

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

وأخيرًا، يمكنك تحديث الاسم المستعار الخاص بك لتمكين إعدادات سجل المحادثة:

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

عندما تقوم بتحديث المكدس باستخدام هذا القالب، فإنك تقوم بتمكين سجلات المحادثة لروبوتك. لم يتم إنشاء إصدار جديد في هذه الخطوة لأنه لا توجد تغييرات على مورد الروبوت الخاص بك. أنت تستطيع قم بتنزيل أحدث إصدار من القالب.

تنظيف

لمنع تكبد رسوم في المستقبل، احذف مكدس CloudFormation الذي قمت بإنشائه.

وفي الختام

في هذا المنشور، ناقشنا العملية خطوة بخطوة لإنشاء قالب CloudFormation لروبوت Amazon Lex V2. في البداية، قمنا بنشر روبوت أساسي، ثم استكشفنا إمكانات الأسماء المستعارة والإصدارات وكيفية استخدامها بكفاءة مع القوالب. بعد ذلك، تعلمنا كيفية دمج وظيفة Lambda مع روبوت Amazon Lex V2 وتنفيذ التفرع المشروط في تدفق محادثة الروبوت لتلبية متطلبات العمل. وأخيرًا، أضفنا ميزات التسجيل عن طريق إنشاء مورد مجموعة سجل CloudWatch وتحديث دور الروبوت بالأذونات اللازمة.

يسمح القالب بالنشر المباشر للروبوت وإدارته، مع القدرة على التراجع عن التغييرات حسب الضرورة. بشكل عام، يعد قالب CloudFormation مفيدًا لإدارة وتحسين روبوت Amazon Lex V2.

كخطوة تالية، يمكنك الاستكشاف عينة من روبوتات Amazon Lex وقم بتطبيق التقنيات التي تمت مناقشتها في هذا المنشور لتحويلها إلى قوالب CloudFormation. ستعمل هذه الممارسة العملية على ترسيخ فهمك لإدارة روبوتات Amazon Lex V2 من خلال البنية التحتية كرمز.


حول المؤلف

توماس ريندفوس مهندس حلول كبير في فريق Amazon Lex. يبتكر ويطور ويضع نماذج أولية وينشر ميزات وحلول تقنية جديدة لخدمات الذكاء الاصطناعي للغة التي تعمل على تحسين تجربة العميل وتسهيل التبني.

ريجيش أكامبيث تشاثوث هو مستشار الخدمات المهنية في AWS. يساعد العملاء في تحقيق أعمالهم المطلوبة
النتائج في مساحة مركز الاتصال من خلال الاستفادة من ميزات Amazon Connect وAmazon Lex وGenAI.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟