Yandex.Cloud மற்றும் Python இன் சர்வர்லெஸ் செயல்பாடுகளைப் பயன்படுத்தி ஆலிஸுக்கு ஒரு நிலையான திறமையை உருவாக்குதல்

செய்தியுடன் ஆரம்பிக்கலாம். நேற்று Yandex.Cloud ஒரு சர்வர்லெஸ் கம்ப்யூட்டிங் சேவையை அறிமுகப்படுத்துவதாக அறிவித்தது யாண்டெக்ஸ் கிளவுட் செயல்பாடுகள். இதன் பொருள்: நீங்கள் உங்கள் சேவையின் குறியீட்டை மட்டுமே எழுதுகிறீர்கள் (உதாரணமாக, ஒரு இணையப் பயன்பாடு அல்லது ஒரு சாட்பாட்), மேலும் கிளவுட் தானாக இயங்கும் மெய்நிகர் இயந்திரங்களை உருவாக்கி பராமரிக்கிறது, மேலும் சுமை அதிகரித்தாலும் அவற்றைப் பிரதிபலிக்கிறது. நீங்கள் யோசிக்க வேண்டிய அவசியமில்லை, இது மிகவும் வசதியானது. மற்றும் கட்டணம் கணக்கீடுகளின் நேரத்திற்கு மட்டுமே செல்கிறது.

இருப்பினும், சிலர் பணம் செலுத்தாமல் இருக்கலாம். இவர்கள்தான் டெவலப்பர்கள் ஆலிஸின் வெளிப்புற திறன்கள், அதாவது, அதில் கட்டமைக்கப்பட்ட சாட்போட்கள். எந்தவொரு டெவலப்பரும் அத்தகைய திறமையை எழுதலாம், ஹோஸ்ட் செய்யலாம் மற்றும் பதிவு செய்யலாம், இன்றிலிருந்து திறன்களை ஹோஸ்ட் செய்ய வேண்டிய அவசியமில்லை - படிவத்தில் தங்கள் குறியீட்டை மேகக்கணியில் பதிவேற்றவும் அதே சர்வர்லெஸ் செயல்பாடு.

ஆனால் ஒரு ஜோடி நுணுக்கங்கள் உள்ளன. முதலாவதாக, உங்கள் பிட் குறியீட்டிற்கு சில சார்புகள் தேவைப்படலாம், மேலும் அவற்றை கிளவுட்டில் இழுப்பது அற்பமானது அல்ல. இரண்டாவதாக, எந்த ஒரு சாதாரண சாட்போட்டும் உரையாடலின் நிலையை எங்காவது சேமிக்க வேண்டும் (அதனால் சட்டபூர்வமானது); சர்வர்லெஸ் செயல்பாட்டில் இதைச் செய்வதற்கான எளிதான வழி என்ன? மூன்றாவதாக, ஆலிஸுக்கு விரைவான மற்றும் அழுக்கான திறமையை அல்லது பூஜ்ஜியமற்ற சதித்திட்டத்துடன் சில வகையான போட்களை எப்படி எழுதுவது? கட்டுரை, உண்மையில், இந்த நுணுக்கங்களைப் பற்றியது.

Yandex.Cloud மற்றும் Python இன் சர்வர்லெஸ் செயல்பாடுகளைப் பயன்படுத்தி ஆலிஸுக்கு ஒரு நிலையான திறமையை உருவாக்குதல்

தார்மீக தயாரிப்பு

பொறுமையற்றவர்களுக்காக: மேக்ஃபைல் மூலம் தேவையான சார்புகளை கிளவுட்டில் பதிவேற்றும் முன் நான் சேகரிக்கிறேன், உரையாடலின் நிலையை யாண்டெக்ஸ் ஆப்ஜெக்ட் ஸ்டோரேஜில் சேமித்து வைக்கிறேன் (இது S3 API ஐ ஆதரிக்கிறது), மேலும் உரையாடலை நிர்வகிக்க எனது சொந்த நூலகத்தைப் பயன்படுத்துகிறேன். tgalice. இதன் விளைவாக, அது மாறிவிடும் போன்ற டெமோ திறன். இப்போது இதையெல்லாம் இன்னும் கொஞ்சம் விரிவாக பகுப்பாய்வு செய்வோம்.

கொஞ்சம் பொறுமை இல்லாதவர்களுக்கு, சிக்கலான எனது கதையில் மூழ்குவதற்கு முன், எளிமையாகத் தொடங்க நான் மிகவும் பரிந்துரைக்கிறேன். அதாவது, ஒற்றை-கோப்பு எக்கோபோட் செயல்பாட்டை உருவாக்கி, அதை டயலொக் டெவலப்பர் கன்சோலில் பதிவுசெய்து சோதிக்கவும்; விவரங்கள் - இல் உரையாடல்கள் வலைப்பதிவு и கிளவுட் ஆவணங்கள். பின்னர் மட்டுமே தொடங்கவும்.

நாங்கள் எதற்காக போராடுகிறோம் என்பதை நீங்கள் உடனடியாக உணர விரும்பினால், ஆலிஸிடம் கேளுங்கள்."ஐடி ஜாதகம்" என்ற திறனை இயக்கவும்'. பின்வரும் உரையாடல் நடக்க வேண்டும்:

ஆலிஸ்: வணக்கம்! நீங்கள் "IT ஜாதகம்" திறமையில் இருக்கிறீர்கள். நட்சத்திரங்கள் உங்களுக்கு என்ன வாக்குறுதி அளிக்கின்றன என்பதை அறிய "தொடங்கு" என்று சொல்லுங்கள்.
பயனர்: தொடங்கு
ப: தயவுசெய்து உங்கள் பெயரைக் குறிப்பிடவும்
யு: வசிசுலி
பதில்: இப்போது நீங்கள் பிறந்த வருடம் சொல்லுங்கள். நான்கு இலக்கங்கள் மட்டுமே, அதற்கு மேல் எதுவும் இல்லை.
யூ: இரண்டாவது
ப: மீண்டும் முயற்சிக்கவும். நீங்கள் பிறந்த ஆண்டைக் குறிப்பிடவும் - நான்கு இலக்கங்கள்.
யு: 2002
ஒரு பெரிய! இப்போது உங்கள் பிறந்த மாதத்திற்கு பெயரிடுங்கள்.
யு: பிப்ரவரி
ஒரு பெரிய! இறுதியாக, உங்கள் பிறந்த தேதியைச் சொல்லுங்கள் - ஒரு எண், ஒன்று அல்லது இரண்டு இலக்கங்கள்.
யு: 18
ப: நன்றி, வசிசுவாலி! இப்போது எங்களுக்குத் தெரியும்: நீங்கள் 17 வயது மற்றும் ஒரு கும்பம். சரி, நிச்சயமாக, நீங்கள் அதிர்ஷ்டசாலி! நட்சத்திரங்கள் உங்களுக்குச் சொல்கின்றன: а что говорят звёзды, вы узнаете, запустив навык.

பிரச்சனை என்னவென்றால், அத்தகைய எளிய உரையாடலைக் கூட பராமரிக்க, நீங்கள் பயனரின் பெயர் மற்றும் பிறந்த தேதியை நினைவில் வைத்திருக்க வேண்டும், மேலும் சர்வர் இல்லாத சூழலில் இது அற்பமானதல்ல. சூழலை RAM இல் அல்லது வட்டில் ஒரு கோப்பாக சேமிப்பது வேலை செய்யாது, ஏனெனில் Yandex.Cloud ஒரே நேரத்தில் பல மெய்நிகர் கணினிகளில் செயல்பாட்டை இயக்கலாம் மற்றும் அவற்றுக்கிடையே தன்னிச்சையாக மாறலாம். நீங்கள் ஒருவித வெளிப்புற சேமிப்பகத்தைப் பயன்படுத்த வேண்டும். பொருள் சேமிப்பகம் Yandex.Cloud இல் நேரடியாக மிகவும் மலிவான மற்றும் எளிமையான சேமிப்பகமாகத் தேர்ந்தெடுக்கப்பட்டது (அதாவது, வேகமானது). ஒரு இலவச மாற்றாக, நீங்கள் முயற்சி செய்யலாம், எடுத்துக்காட்டாக, ஒரு இலவச துண்டு மேகமூட்டமான மோங்கா எங்கோ தொலைவில். ஆப்ஜெக்ட் ஸ்டோரேஜ் (இது S3 இடைமுகத்தை ஆதரிக்கிறது) மற்றும் மோங்கோ இரண்டும் வசதியான பைதான் ரேப்பர்களைக் கொண்டுள்ளன.

மற்றொரு சிக்கல் என்னவென்றால், ஆப்ஜெக்ட் ஸ்டோரேஜ், மோங்கோடிபி மற்றும் பிற தரவுத்தளம் அல்லது டேட்டா ஸ்டோருக்குச் செல்ல, உங்கள் செயல்பாட்டுக் குறியீட்டுடன் Yandex செயல்பாடுகளில் பதிவேற்ற வேண்டிய சில வெளிப்புற சார்புகள் தேவை. மற்றும் நான் அதை வசதியாக செய்ய விரும்புகிறேன். இது முற்றிலும் வசதியானது (ஹீரோகு போன்றது), ஐயோ, இது வேலை செய்யாது, ஆனால் சூழலை உருவாக்க ஸ்கிரிப்டை எழுதுவதன் மூலம் சில அடிப்படை வசதிகளை உருவாக்கலாம் (கோப்பை உருவாக்கவும்).

ஜாதகத்தின் திறமையை எவ்வாறு தொடங்குவது

  1. தயாராகுங்கள்: Linux உடன் சில இயந்திரத்திற்குச் செல்லவும். கொள்கையளவில், நீங்கள் விண்டோஸிலும் வேலை செய்யலாம், ஆனால் மேக்ஃபைலின் துவக்கத்துடன் நீங்கள் சிந்திக்க வேண்டும். எப்படியிருந்தாலும், உங்களுக்கு குறைந்தது 3.6 நிறுவப்பட்ட பைதான் தேவைப்படும்.
  2. கிதுப்பில் இருந்து குளோன் ஜாதக திறமைக்கு உதாரணம்.
  3. Ya.Cloud இல் பதிவு செய்யவும்: https://cloud.yandex.ru
  4. இரண்டு வாளிகளை நீங்களே உருவாக்கிக் கொள்ளுங்கள் பொருள் சேமிப்பு, அவர்களை எந்த பெயரிலும் அழைக்கவும் {BUCKET NAME} и tgalice-test-cold-storage (இந்த நடுப் பெயர் இப்போது ஹார்ட்கோட் செய்யப்பட்டுள்ளது main.py என் உதாரணம்). முதல் வாளி வரிசைப்படுத்தலுக்கு மட்டுமே தேவைப்படும், இரண்டாவது - உரையாடல் நிலைகளை சேமிக்க.
  5. உருவாக்கு சேவை கணக்கு, அவருக்கு ஒரு பாத்திரம் கொடுங்கள் editor, மற்றும் அதற்கான நிலையான சான்றுகளைப் பெறுங்கள் {KEY ID} и {KEY VALUE} - உரையாடலின் நிலையைப் பதிவுசெய்ய அவற்றைப் பயன்படுத்துவோம். Ya.Cloud இலிருந்து செயல்பாடு Ya.Cloud இலிருந்து சேமிப்பகத்தை அணுகுவதற்கு இவை அனைத்தும் தேவை. ஒரு நாள், அங்கீகாரம் தானாகவே மாறும் என்று நம்புகிறேன், ஆனால் இப்போதைக்கு - அதனால்.
  6. (விரும்பினால்) நிறுவவும் கட்டளை வரி இடைமுகம் yc. நீங்கள் வலை இடைமுகம் மூலம் ஒரு செயல்பாட்டை உருவாக்கலாம், ஆனால் CLI நல்லது, ஏனெனில் அனைத்து வகையான புதுமைகளும் வேகமாக அதில் தோன்றும்.
  7. இப்போது நீங்கள், உண்மையில், சார்புகளின் தொகுப்பைத் தயாரிக்கலாம்: திறன் உதாரணத்துடன் கோப்புறையிலிருந்து கட்டளை வரியில் இயக்கவும் make all. ஒரு தொகுப்பு நூலகங்கள் (பெரும்பாலும், வழக்கம் போல், தேவையற்றவை) கோப்புறையில் நிறுவப்படும் dist.
  8. பொருள் சேமிப்பகத்தில் (ஒரு வாளியில்) பேனாக்களால் நிரப்பவும் {BUCKET NAME}) முந்தைய கட்டத்தில் பெறப்பட்ட காப்பகம் dist.zip. விரும்பினால், கட்டளை வரியிலிருந்தும் இதைச் செய்யலாம், எடுத்துக்காட்டாக, பயன்படுத்தி AWS CLI.
  9. இணைய இடைமுகம் அல்லது பயன்பாட்டைப் பயன்படுத்தி சர்வர்லெஸ் செயல்பாட்டை உருவாக்கவும் yc. பயன்பாட்டிற்கு, கட்டளை இப்படி இருக்கும்:

yc serverless function version create
    --function-name=horoscope
    --environment=AWS_ACCESS_KEY_ID={KEY ID},AWS_SECRET_ACCESS_KEY={KEY VALUE}
    --runtime=python37
    --package-bucket-name={BUCKET NAME}
    --package-object-name=dist.zip
    --entrypoint=main.alice_handler
    --memory=128M
    --execution-timeout=3s

ஒரு செயல்பாட்டை கைமுறையாக உருவாக்கும்போது, ​​​​அனைத்து அளவுருக்களும் ஒரே வழியில் நிரப்பப்படுகின்றன.

இப்போது நீங்கள் உருவாக்கிய செயல்பாடு டெவலப்பர் கன்சோல் மூலம் சோதிக்கப்படலாம், பின்னர் திறனை மேம்படுத்தி வெளியிடலாம்.

Yandex.Cloud மற்றும் Python இன் சர்வர்லெஸ் செயல்பாடுகளைப் பயன்படுத்தி ஆலிஸுக்கு ஒரு நிலையான திறமையை உருவாக்குதல்

பேட்டைக்குக் கீழே என்ன இருக்கிறது

மேக்ஃபைல் உண்மையில் சார்புகளை நிறுவுவதற்கும் அவற்றை ஒரு காப்பகத்தில் வைப்பதற்கும் மிகவும் எளிமையான ஸ்கிரிப்டைக் கொண்டுள்ளது. dist.zip, தோராயமாக இப்படி:

mkdir -p dist/
pip3 install -r requirements.txt --target dist/ 
cp main.py dist/main.py
cp form.yaml dist/form.yaml
cd dist && zip --exclude '*.pyc' -r ../dist.zip ./*

மீதமுள்ளவை ஒரு நூலகத்தில் மூடப்பட்ட சில எளிய கருவிகள் tgalice. பயனர் தரவை நிரப்புவதற்கான செயல்முறை கட்டமைப்பால் விவரிக்கப்பட்டுள்ளது form.yaml:

form_name: 'horoscope_form'
start:
  regexp: 'старт|нач(ать|ни)'
  suggests:
    - Старт
fields:
  - name: 'name'
    question: Пожалуйста, назовите своё имя.
  - name: 'year'
    question: Теперь скажите мне год вашего рождения. Только четыре цифры, ничего лишнего.
    validate_regexp: '^[0-9]{4}$'
    validate_message: Пожалуйста, попробуйте ещё раз. Назовите год вашего рождения - четыре цифры.
  - name: 'month'
    question: Замечательно! Теперь назовите месяц вашего рождения.
    options:
      - январь
     ...
      - декабрь
    validate_message: То, что вы назвали, не похоже на месяц. Пожалуйста, назовите месяц вашего рождения, без других слов.
  - name: 'day'
    question: Отлично! Наконец, назовите мне дату вашего рождения - только число, всего одна или две цифры.
    validate_regexp: '[0123]?d$'
    validate_message: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

இந்த கட்டமைப்பைப் பாகுபடுத்தி இறுதி முடிவைக் கணக்கிடும் பணி பைதான் வகுப்பால் மேற்கொள்ளப்படுகிறது.

class CheckableFormFiller(tgalice.dialog_manager.form_filling.FormFillingDialogManager):
    SIGNS = {
        'январь': 'Козерог',
        ...
    }

    def handle_completed_form(self, form, user_object, ctx):
        response = tgalice.dialog_manager.base.Response(
            text='Спасибо, {}! Теперь мы знаем: вам {} лет, и вы {}. n'
                 'Вот это вам, конечно, повезло! Звёзды говорят вам: {}'.format(
                form['fields']['name'],
                2019 - int(form['fields']['year']),
                self.SIGNS[form['fields']['month']],
                random.choice(FORECASTS),
            ),
            user_object=user_object,
        )
        return response

இன்னும் துல்லியமாக, அடிப்படை வகுப்பு FormFillingDialogManager "படிவம்" மற்றும் குழந்தை வகுப்பின் முறையை நிரப்புவதில் ஈடுபட்டுள்ளது handle_completed_form அவள் தயாராக இருக்கும்போது என்ன செய்ய வேண்டும் என்று சொல்கிறாள்.

உரையாடலின் இந்த முக்கிய ஓட்டத்திற்கு கூடுதலாக, பயனரை வரவேற்க வேண்டும், அத்துடன் "உதவி" கட்டளையில் உதவி வழங்க வேண்டும் மற்றும் "வெளியேறு" கட்டளையின் திறமையிலிருந்து விடுவிக்க வேண்டும். இதற்காக tgalice ஒரு டெம்ப்ளேட்டும் உள்ளது, எனவே முழு உரையாடல் மேலாளரும் துண்டுகளால் ஆனது:

dm = tgalice.dialog_manager.CascadeDialogManager(
    tgalice.dialog_manager.GreetAndHelpDialogManager(
        greeting_message=DEFAULT_MESSAGE,
        help_message=DEFAULT_MESSAGE,
        exit_message='До свидания, приходите в навык "Айтишный гороскоп" ещё!'
    ),
    CheckableFormFiller(`form.yaml`, default_message=DEFAULT_MESSAGE)
)

CascadeDialogManager எளிமையாக வேலை செய்கிறது: இது உரையாடலின் தற்போதைய நிலைக்கு அதன் அனைத்து கூறுகளையும் பயன்படுத்த முயற்சிக்கிறது, மேலும் முதலில் பொருத்தமான ஒன்றைத் தேர்ந்தெடுக்கிறது.

ஒவ்வொரு செய்திக்கும் பதிலளிக்கும் விதமாக, உரையாடல் மேலாளர் ஒரு பைதான் பொருளைத் தருகிறார் Response, இது பின்னர் எளிய உரையாக அல்லது ஆலிஸ் அல்லது டெலிகிராமில் ஒரு செய்தியாக மாற்றப்படலாம் - போட் எங்கு இயங்குகிறது என்பதைப் பொறுத்து; இது சேமிக்கப்பட வேண்டிய உரையாடலின் மாற்றப்பட்ட நிலையையும் கொண்டுள்ளது. இந்த சமையலறை அனைத்தும் மற்றொரு வகுப்பினரால் கையாளப்படுகிறது, DialogConnector, எனவே Yandex செயல்பாடுகளில் ஒரு திறனைத் தொடங்குவதற்கான நேரடி ஸ்கிரிப்ட் இதுபோல் தெரிகிறது:

...
session = boto3.session.Session()
s3 = session.client(
    service_name='s3',
    endpoint_url='https://storage.yandexcloud.net',
    aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ['AWS_SECRET_ACCESS_KEY'],
    region_name='ru-central1',
)
storage = tgalice.session_storage.S3BasedStorage(s3_client=s3, bucket_name='tgalice-test-cold-storage')
connector = tgalice.dialog_connector.DialogConnector(dialog_manager=dm, storage=storage)
alice_handler = connector.serverless_alice_handler

நீங்கள் பார்க்க முடியும் என, இந்த குறியீடு பெரும்பாலான பொருள் சேமிப்பு S3 இடைமுகம் ஒரு இணைப்பை உருவாக்குகிறது. இந்த இணைப்பு எவ்வாறு நேரடியாகப் பயன்படுத்தப்படுகிறது, நீங்கள் படிக்கலாம் tgalice குறியீட்டில்.
கடைசி வரி ஒரு செயல்பாட்டை உருவாக்குகிறது alice_handler - நாங்கள் அளவுருவை அமைக்கும் போது Yandex.Cloud ஐ இழுக்க உத்தரவிட்டது --entrypoint=main.alice_handler.

உண்மையில், அவ்வளவுதான். கட்டிடத்திற்கான மேக்ஃபைல்கள், சூழல் சேமிப்பிற்கான S3 போன்ற பொருள் சேமிப்பு மற்றும் பைதான் நூலகம் tgalice. சர்வர்லெஸ் அம்சங்கள் மற்றும் பைத்தானின் வெளிப்பாட்டுத்தன்மையுடன் சேர்ந்து, ஆரோக்கியமான நபரின் திறனை வளர்க்க இது போதுமானது.

நீங்கள் ஏன் உருவாக்க வேண்டும் என்று நீங்கள் கேட்கலாம் tgalice? JSONகளை கோரிக்கையிலிருந்து மறுமொழிக்கும், சேமிப்பகத்திலிருந்து நினைவகத்துக்கும், பின்னோக்கியும் மாற்றும் அனைத்து போரிங் குறியீடுகளும் அதில் உள்ளன. வழக்கமான பயன்பாடும் உள்ளது, "பிப்ரவரி" என்பது "பிப்ரவரி" போன்றது என்பதைப் புரிந்துகொள்வதற்கான ஒரு செயல்பாடு மற்றும் ஏழைகளுக்கான பிற NLU. எனது யோசனையின்படி, தொழில்நுட்ப விவரங்களால் மிகவும் திசைதிருப்பப்படாமல், yaml கோப்புகளில் திறன் முன்மாதிரிகளை வரைவதற்கு இது ஏற்கனவே போதுமானதாக இருக்க வேண்டும்.

நீங்கள் மிகவும் தீவிரமான NLU விரும்பினால், அதை உங்கள் திறமையுடன் இணைக்கலாம் ராசா அல்லது டீப் பாவ்லோவ், ஆனால் அவற்றை அமைப்பதற்கு தம்பூரினுடன் கூடுதல் நடனம் தேவைப்படும், குறிப்பாக சர்வர்லெஸில். குறியீட்டு முறையை நீங்கள் விரும்பவில்லை என்றால், நீங்கள் காட்சி வகை கட்டமைப்பாளரைப் பயன்படுத்த வேண்டும் ஏமிலாஜிக். Tgalice ஐ உருவாக்கும் போது, ​​நான் ஒருவித இடைநிலை பாதை பற்றி நினைத்தேன். என்ன நடக்கிறது என்று பார்ப்போம்.

சரி, இப்போது சேரவும் ஆலிஸ் திறன் மேம்பாட்டாளர் அரட்டை, படி ஆவணங்கள்மற்றும் அற்புதமான உருவாக்க திறன்கள்!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்