Yandex.Cloud ۽ Python جي بي سرور ڪمن تي ايلس لاءِ رياستي مهارت ٺاهڻ

اچو ته خبرن سان شروع ڪريون. ڪالهه Yandex.Cloud هڪ سرور کان سواء ڪمپيوٽنگ سروس شروع ڪرڻ جو اعلان ڪيو Yandex Cloud افعال. هن جو مطلب آهي: توهان صرف پنهنجي سروس جو ڪوڊ لکو (مثال طور، هڪ ويب ايپليڪيشن يا هڪ چيٽ بوٽ)، ۽ ڪلائوڊ پاڻ ٺاهي ٿو ۽ ورچوئل مشينن کي برقرار رکي ٿو جتي اهو هلندو آهي، ۽ اڃا به انهن کي نقل ڪري ٿو جيڪڏهن لوڊ وڌندو آهي. توهان کي سوچڻ جي ضرورت ناهي، اهو تمام آسان آهي. ۽ ادائگي صرف حساب جي وقت لاء آهي.

بهرحال، ڪجهه شايد ادا نه ڪري سگھن. اهي ڊولپر آهن ايلس جي ٻاهرين صلاحيتن، يعني چيٽ بوٽس ان ۾ ٺهيل آهن. ڪو به ڊولپر اهڙي مهارت کي لکي، ميزباني ۽ رجسٽر ڪري سگهي ٿو، ۽ اڄ کان مهارتن کي ميزباني ڪرڻ جي به ضرورت نه آهي - صرف فارم ۾ ڪلائوڊ تي انهن جو ڪوڊ اپ لوڊ ڪريو. ساڳيو سرور بيڪار فنڪشن.

پر اتي چند nuances آهن. پهرين، توهان جي پالتو جانور جي ڪوڊ کي شايد ڪجهه انحصار جي ضرورت هجي، ۽ انهن کي ڪلائوڊ ۾ ڇڪڻ معمولي ناهي. ٻيو، ڪنهن به عام چيٽ بٽ کي ضرورت آهي ته ڊائلاگ جي حالت کي ڪنهن جاءِ تي محفوظ ڪيو وڃي (ان ڪري رياستي)؛ اهو ڪيئن ڪجي سرور کان سواءِ فنڪشن ۾ آسان طريقو؟ ٽيون، توهان ڪيئن لکي سگهو ٿا تڪڙو گندي مهارت لاءِ ايلس يا ان کان سواءِ ڪنهن قسم جي بوٽن سان غير صفر پلاٽ؟ انهن nuances جي باري ۾، حقيقت ۾، مضمون.

Yandex.Cloud ۽ Python جي بي سرور ڪمن تي ايلس لاءِ رياستي مهارت ٺاهڻ

اخلاقي تياري

بي صبري لاءِ: مان ڪلائوڊ تي فنڪشن اپلوڊ ڪرڻ کان پهريان هڪ ميڪ فائل سان ضروري انحصار گڏ ڪريان ٿو، مان ڊائلاگ جي حالت کي Yandex Object Storage ۾ محفوظ ڪريان ٿو (اهو S3 API کي سپورٽ ڪري ٿو)، ۽ مان ڊائلاگ کي منظم ڪرڻ لاءِ پنهنجي پنهنجي لائبريري استعمال ڪريان ٿو. tgalice. آخر ۾ اهو نڪتو جيئن ته هڪ ڊيمو مهارت. ۽ هاڻي اچو ته اهو سڀ ڪجهه وڌيڪ تفصيل سان تجزيو ڪيو.

ٿورڙي گهٽ بي صبري لاءِ، منهنجي پيچيدگي جي ڪهاڻي ۾ ڊائيونگ ڪرڻ کان اڳ، آئون انتهائي سادو شروع ڪرڻ جي صلاح ڏيان ٿو. يعني، هڪ واحد فائل ايڪوبٽ فنڪشن ٺاهيو، رجسٽر ڪريو ۽ ان کي ڊائلاگ ڊولپر ڪنسول ۾ ٽيسٽ ڪريو؛ تفصيل - ۾ بلاگ ڊائلاگ и Cloud دستاويز. ۽ صرف پوء شروع.

جيڪڏهن توهان فوري طور محسوس ڪرڻ چاهيو ٿا ته اسان ڇا لاءِ وڙهندا آهيون، ايلس کان پڇو.مهارت کي چالو ڪريو "IT horoscope"'. ھيٺيون ڳالھيون ٿيڻ گھرجي:

ايلس: هيلو! توهان "IT Horoscope" مهارت ۾ آهيو. چئو "شروع" ڳولڻ لاءِ ته تارا توهان سان ڪهڙو واعدو ڪن ٿا.
استعمال ڪندڙ: شروع ڪريو
ج: مهرباني ڪري پنهنجو نالو ٻڌايو.
يو: وصيالي
جواب: هاڻي ٻڌايو ته توهان جو جنم سال آهي. صرف چار عدد، وڌيڪ ڪجھ به نه.
يو: ٻيو
ج: مهرباني ڪري ٻيهر ڪوشش ڪريو. توهان جي ڄمڻ جو سال بيان ڪريو - چار عدد.
يو: 2002
ج: زبردست! ھاڻي پنھنجي پيدائش جي مھيني جو نالو ڏيو.
يو: فيبروري
ج: زبردست! آخرڪار، مون کي پنهنجي ڄمڻ جي تاريخ ٻڌايو - صرف هڪ انگ، صرف هڪ يا ٻه انگ اکر.
يو: 18
ج: توهان جي مهرباني، واسيسول! هاڻي اسان ڄاڻون ٿا: توهان 17 سالن جي عمر ۾ آهيو ۽ توهان هڪ Aquarius آهيو. هتي توهان آهيو، يقينا، خوش قسمت! تارا ٻڌائين ٿا а что говорят звёзды, вы узнаете, запустив навык.

مسئلو اهو آهي ته اهڙي سادي گفتگو کي برقرار رکڻ لاءِ، توهان کي صارف جو نالو ۽ ڄمڻ جي تاريخ ياد رکڻ جي ضرورت آهي، ۽ هڪ سرور کان سواءِ ڪم ڪندڙ ماحول ۾ اهو غير معمولي آهي. اهو ممڪن نه ٿيندو ته حوالن کي رام ۾ يا ڊسڪ تي فائل جي طور تي ذخيرو ڪرڻ، ڇاڪاڻ ته Yandex.Cloud هڪ ئي وقت ڪيترن ئي ورچوئل مشينن تي هڪ فنڪشن هلائي سگهي ٿو ۽ انهن جي وچ ۾ سوئچ ڪري سگهي ٿو. توهان کي ڪجهه قسم جي خارجي اسٽوريج کي استعمال ڪرڻو پوندو. آبجیکٹ اسٽوريج چونڊيو ويو بلڪل سستو ۽ غير پيچيده اسٽوريج سڌو Yandex.Cloud ۾ (يعني شايد تيز). هڪ مفت متبادل جي طور تي، توهان ڪوشش ڪري سگهو ٿا، مثال طور، هڪ مفت ٽڪرو بادل مونگا ڪٿي پري. ٻئي آبجیکٹ اسٽوريج (اهو S3 انٽرفيس کي سپورٽ ڪري ٿو) ۽ مونگو وٽ آسان پٿون ريپرز آهن.

ٻيو مسئلو اهو آهي ته Object Storage، MongoDB، ۽ ڪنهن ٻئي ڊيٽابيس يا ڊيٽا اسٽور تي وڃڻ لاءِ، توهان کي ڪجهه خارجي انحصار جي ضرورت آهي جيڪا توهان کي پنهنجي فنڪشن ڪوڊ سان گڏ Yandex Functions تي اپ لوڊ ڪرڻ جي ضرورت آهي. ۽ مان اهو آسانيءَ سان ڪرڻ چاهيان ٿو. بدقسمتي سان، اهو مڪمل طور تي آسان نه هوندو (جهڙوڪ هيروڪو تي)، پر ماحول کي ٺاهڻ لاءِ اسڪرپٽ لکڻ سان ڪجهه بنيادي آرام پيدا ڪري سگهجي ٿو (فائل ٺاهيو).

افق جي مهارت کي ڪيئن شروع ڪجي

  1. تيار ڪريو: لينڪس سان ڪجھ مشين ڏانھن وڃو. اصول ۾، توهان شايد ونڊوز سان پڻ ڪم ڪري سگهو ٿا، پر پوء توهان کي ميڪ فائل کي لانچ ڪرڻ سان ڪجهه جادو ڪرڻو پوندو. ۽ ڪنهن به صورت ۾، توهان کي گهٽ ۾ گهٽ پٿون 3.6 نصب ڪرڻ جي ضرورت پوندي.
  2. Github مان ان کي ڪلون ڪريو هڪ horoscope مهارت جو مثال.
  3. Y.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. جيڪڏهن گهربل هجي، توهان اهو ڪري سگهو ٿا ڪمانڊ لائن مان، مثال طور، استعمال ڪندي او ايس سي آئي.
  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 هن کي ٻڌائي ٿو ته ڇا ڪجي جڏهن هوءَ تيار آهي.

صارف جي گفتگو جي هن مکيه وهڪري کان علاوه، اهو پڻ ضروري آهي ته صارف کي سلام ڪرڻ سان گڏ، "مدد" ڪمانڊ تي مسئلو مدد ۽ "exit" ڪمانڊ تي مهارت کان آزاد ٿيڻ. ان لاءِ اندر 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.

اهو، حقيقت ۾، سڀ ڪجهه آهي. ٺاھڻ لاءِ ميڪ فائلز، ايس 3 جھڙي آبجیکٹ اسٽوريج لاءِ ڪنٽيڪيٽ اسٽوريج، ۽ پٿون لائبريري tgalice. پٿون جي بي سرور خاصيتن ۽ اظهار سان گڏ، اهو هڪ صحتمند شخص جي مهارت کي وڌائڻ لاء ڪافي آهي.

توھان پڇي سگھوٿا ڇو ته اھو ٺاھڻ ضروري ھو tgalice؟ سڀ بورنگ ڪوڊ جيڪو JSONs کي گذارش کان جواب تائين ۽ اسٽوريج کان ميموري ۽ واپس منتقل ڪري ٿو ان ۾ آهي. هتي هڪ باقاعده ايپليڪيشن پڻ آهي، اهو سمجهڻ لاء هڪ فنڪشن آهي ته "فيبروري" جي برابر آهي "فيبروري"، ۽ ٻيو NLU غريبن لاء. منهنجي خيال موجب، اهو اڳ ۾ ئي ڪافي هجڻ گهرجي ته ٽيڪنيڪل تفصيلن کان گهڻو پريشان ٿيڻ کان سواءِ يامل فائلن ۾ مهارت جي پروٽوڪائپس کي اسڪيچ ڪرڻ جي قابل ٿي وڃي.

جيڪڏهن توهان هڪ وڌيڪ سنجيده NLU چاهيو ٿا، ته توهان ان کي پنهنجي مهارت تي ڇڪائي سگهو ٿا راس يا ديپ پاولوف، پر انهن کي ترتيب ڏيڻ لاءِ اضافي ڊانسن جي ضرورت پوندي ٽمبرين سان، خاص ڪري بي سرور تي. جيڪڏهن توهان محسوس نه ڪندا آهيو ڪوڊنگ بلڪل، توهان کي استعمال ڪرڻ گهرجي هڪ بصري تعمير ڪندڙ وانگر ايميولوجڪ. جڏهن tgalice ٺاهي، مون ڪجهه قسم جي وچولي رستي بابت سوچيو. اچو ته ڏسون ڇا ٿو ٿئي.

خير، هاڻي شامل ٿيو علي مهارت ڊولپر چيٽ، پڙهو دستاويز۽ شاندار ٺاهيو صلاحيتون!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو