Yandex.Cloud اور Python کے سرور لیس فنکشنز پر ایلس کے لیے ایک ریاستی مہارت پیدا کرنا

آئیے خبروں سے آغاز کرتے ہیں۔ کل Yandex.Cloud نے سرور لیس کمپیوٹنگ سروس کے آغاز کا اعلان کیا۔ Yandex کلاؤڈ فنکشنز. اس کا مطلب ہے: آپ صرف اپنی سروس کے لیے کوڈ لکھتے ہیں (مثال کے طور پر، ایک ویب ایپلیکیشن یا چیٹ بوٹ)، اور کلاؤڈ خود ہی ورچوئل مشینیں بناتا اور برقرار رکھتا ہے جہاں یہ چلتی ہے، اور یہاں تک کہ اگر بوجھ بڑھتا ہے تو ان کی نقل تیار کرتا ہے۔ آپ کو بالکل سوچنے کی ضرورت نہیں ہے، یہ بہت آسان ہے۔ اور فیس صرف حساب کے وقت کے لیے ہے۔

تاہم، کچھ بالکل ادا نہیں کر سکتے ہیں. یہ ڈویلپرز ہیں۔ ایلس کی بیرونی مہارت، یعنی اس میں شامل چیٹ بوٹس۔ کوئی بھی ڈویلپر اس طرح کی مہارت کو لکھ سکتا ہے، میزبانی کر سکتا ہے اور رجسٹر کر سکتا ہے، اور آج سے مہارتوں کو ہوسٹ کرنے کی بھی ضرورت نہیں ہے - بس فارم میں اپنا کوڈ کلاؤڈ پر اپ لوڈ کریں۔ ایک ہی سرور لیس فنکشن.

لیکن ایک دو باریکیاں ہیں۔ سب سے پہلے، آپ کے پالتو جانوروں کے کوڈ کو کچھ انحصار درکار ہو سکتا ہے، اور انہیں کلاؤڈ میں گھسیٹنا کوئی معمولی بات نہیں ہے۔ دوم، کسی بھی عام چیٹ بوٹ کو ڈائیلاگ کی حالت کو کہیں ذخیرہ کرنے کی ضرورت ہوتی ہے (اس لیے بیان کردہ)؛ اسے سرور لیس فنکشن میں آسان ترین طریقہ سے کیسے کریں؟ تیسرا، آپ ایلس یا یہاں تک کہ غیر صفر پلاٹ کے ساتھ کسی قسم کی بوٹ کے لیے فوری اور گندی مہارت کیسے لکھ سکتے ہیں؟ ان nuances کے بارے میں، حقیقت میں، مضمون.

Yandex.Cloud اور Python کے سرور لیس فنکشنز پر ایلس کے لیے ایک ریاستی مہارت پیدا کرنا

اخلاقی تیاری

بے صبروں کے لیے: میں کلاؤڈ پر فنکشن اپ لوڈ کرنے سے پہلے میک فائل کے ساتھ ضروری انحصار اکٹھا کرتا ہوں، میں ڈائیلاگ کی حالت Yandex Object Storage میں اسٹور کرتا ہوں (یہ S3 API کو سپورٹ کرتا ہے)، اور میں ڈائیلاگ کو منظم کرنے کے لیے اپنی لائبریری کا استعمال کرتا ہوں۔ tgalice. نتیجے کے طور پر، یہ پتہ چلتا ہے اس طرح ڈیمو مہارت. اب ذرا تفصیل سے اس سب کو دیکھتے ہیں۔

ان لوگوں کے لیے جو قدرے کم بے صبرے ہیں، پیچیدگی کے بارے میں اپنی کہانی میں غوطہ لگانے سے پہلے، میں کسی آسان چیز سے شروع کرنے کی سفارش کرتا ہوں۔ یعنی، سنگل فائل ایکو بوٹ فنکشن بنائیں، اسے ڈائیلاگ ڈویلپر کنسول میں رجسٹر کریں اور ٹیسٹ کریں۔ تفصیلات - میں بلاگ ڈائیلاگ и کلاؤڈ دستاویزات. اور تب ہی شروع کریں۔

اگر آپ فوری طور پر محسوس کرنا چاہتے ہیں کہ ہم کس چیز کے لیے لڑ رہے ہیں، تو ایلس سے پوچھیں۔ہنر "آئی ٹی زائچہ" کو آن کریں' مندرجہ ذیل سے ملتا جلتا ڈائیلاگ ہونا چاہیے:

ایلس: ہیلو! آپ "IT Horoscope" کی مہارت میں ہیں۔ ستارے آپ سے کیا وعدہ کرتے ہیں یہ جاننے کے لیے "شروع کریں" کہیں۔
صارف: شروع کریں۔
A: براہ کرم اپنا نام بتائیں۔
یو: واسیوالی
ج: اب اپنی پیدائش کا سال بتاؤ۔ صرف چار ہندسے، کچھ اضافی نہیں۔
یو: دوسرا
A: براہ کرم دوبارہ کوشش کریں۔ اپنی پیدائش کا سال درج کریں - چار ہندسے۔
یو: 2002
ایک عظیم! اب اپنی پیدائش کے مہینے کا نام بتائیں۔
یو: فروری
A: بہترین! آخر میں، مجھے اپنی تاریخ پیدائش بتائیں - صرف ایک عدد، صرف ایک یا دو ہندسے۔
یو: 18
A: آپ کا شکریہ، Vasisuali! اب ہم جانتے ہیں: آپ کی عمر 17 سال اور ایک کوب ہے۔ ٹھیک ہے، یقینا، آپ خوش قسمت ہیں! ستارے آپ کو بتاتے ہیں: а что говорят звёзды, вы узнаете, запустив навык.

مسئلہ یہ ہے کہ اتنے سادہ ڈائیلاگ کو برقرار رکھنے کے لیے آپ کو صارف کا نام اور تاریخ پیدائش یاد رکھنے کی ضرورت ہے اور سرور کے بغیر ماحول میں یہ کوئی معمولی بات نہیں ہے۔ سیاق و سباق کو RAM میں یا ڈسک پر فائل کے طور پر محفوظ کرنا ممکن نہیں ہوگا، کیونکہ Yandex.Cloud ایک ہی وقت میں کئی ورچوئل مشینوں پر ایک فنکشن چلا سکتا ہے اور اپنی مرضی سے ان کے درمیان سوئچ کر سکتا ہے۔ آپ کو کسی قسم کا بیرونی اسٹوریج استعمال کرنا پڑے گا۔ آبجیکٹ اسٹوریج کو براہ راست Yandex.Cloud (یعنی شاید تیز) میں کافی سستا اور غیر پیچیدہ اسٹوریج کے طور پر منتخب کیا گیا تھا۔ ایک مفت متبادل کے طور پر، آپ آزما سکتے ہیں، مثال کے طور پر، ایک مفت ٹکڑا ابر آلود مونگا کہیں دور. آبجیکٹ سٹوریج (یہ S3 انٹرفیس کو سپورٹ کرتا ہے) اور مونگو دونوں میں آسان ازگر کے ریپرز ہیں۔

ایک اور مسئلہ یہ ہے کہ آبجیکٹ اسٹوریج، مونگو ڈی بی، اور کسی دوسرے ڈیٹا بیس یا ڈیٹا اسٹور پر جانے کے لیے، آپ کو کچھ بیرونی انحصار کی ضرورت ہے جو آپ کو اپنے فنکشن کوڈ کے ساتھ Yandex Functions پر اپ لوڈ کرنے کی ضرورت ہے۔ اور میں یہ آسانی سے کرنا چاہوں گا۔ یہ مکمل طور پر آسان ہے (جیسے ہیروکو پر)، افسوس، یہ کام نہیں کرے گا، لیکن آپ ماحول کو بنانے کے لیے اسکرپٹ لکھ کر کچھ بنیادی سکون پیدا کر سکتے ہیں (فائل بنائیں)۔

زائچہ کی مہارت کیسے شروع کی جائے۔

  1. تیار کریں: لینکس کے ساتھ کسی مشین پر جائیں۔ اصولی طور پر، آپ شاید ونڈوز کے ساتھ بھی کام کر سکتے ہیں، لیکن پھر آپ کو میک فائل کے اجراء کے ساتھ جادو کرنا پڑے گا۔ اور کسی بھی صورت میں، آپ کو کم از کم ازگر 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. صارف کے ڈیٹا کو پُر کرنے کا عمل config کے ذریعے بیان کیا گیا ہے۔ 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

اس ترتیب کو پارس کرنے اور حتمی نتیجہ کا حساب لگانے کا کام Python کلاس کے ہاتھ میں ہے۔

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 آسانی سے کام کرتا ہے: یہ مکالمے کی موجودہ حالت پر اس کے تمام اجزاء کو باری باری لاگو کرنے کی کوشش کرتا ہے، اور پہلے متعلقہ کو منتخب کرتا ہے۔

ہر پیغام کے جواب کے طور پر، ڈائیلاگ مینیجر ایک python آبجیکٹ واپس کرتا ہے۔ 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. Python کے بغیر سرور کے افعال اور اظہار کے ساتھ مل کر، یہ ایک صحت مند انسانی مہارت کو فروغ دینے کے لیے کافی ہے۔

آپ پوچھ سکتے ہیں کہ آپ کو تخلیق کرنے کی ضرورت کیوں ہے۔ tgalice? تمام بورنگ کوڈ جو JSONs کو درخواست سے جواب تک اور اسٹوریج سے میموری اور بیک میں منتقل کرتا ہے۔ ایک باقاعدہ درخواست بھی ہے، یہ سمجھنے کے لیے ایک فنکشن کہ "فروری" "فروری" کی طرح ہے، اور غریبوں کے لیے دیگر NLU۔ میرے خیال کے مطابق ، یہ پہلے سے ہی کافی ہونا چاہئے تاکہ تکنیکی تفصیلات سے زیادہ مشغول ہوئے بغیر یامل فائلوں میں ہنر کے پروٹو ٹائپس کا خاکہ تیار کیا جاسکے۔

اگر آپ زیادہ سنجیدہ NLU چاہتے ہیں، تو آپ اسے اپنی مہارت سے منسلک کر سکتے ہیں۔ راس یا دیپ پاولوف، لیکن ان کو ترتیب دینے کے لیے دف کے ساتھ اضافی رقص کی ضرورت ہوگی، خاص طور پر بغیر سرور کے۔ اگر آپ کو کوڈنگ بالکل بھی پسند نہیں ہے، تو آپ کو بصری قسم کا کنسٹرکٹر استعمال کرنا چاہیے۔ Aimylogic. tgalice بناتے وقت، میں نے کسی قسم کے درمیانی راستے کے بارے میں سوچا۔ آئیے دیکھتے ہیں کہ اس سے کیا نکلتا ہے۔

ٹھیک ہے، اب شامل ہو جاؤ ایلس سکلز ڈویلپر چیٹ، پڑھیں دستاویزات، اور حیرت انگیز تخلیق کریں۔ مہارت!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں