Yandex.Cloud మరియు Python యొక్క సర్వర్‌లెస్ ఫంక్షన్‌లపై ఆలిస్ కోసం స్టేట్‌ఫుల్ నైపుణ్యాన్ని సృష్టించడం

వార్తలతో ప్రారంభిద్దాం. నిన్న Yandex.Cloud సర్వర్‌లెస్ కంప్యూటింగ్ సేవను ప్రారంభించినట్లు ప్రకటించింది Yandex క్లౌడ్ విధులు. దీనర్థం: మీరు మీ సేవ కోసం మాత్రమే కోడ్‌ను వ్రాస్తారు (ఉదాహరణకు, వెబ్ అప్లికేషన్ లేదా చాట్‌బాట్), మరియు క్లౌడ్ స్వయంగా వర్చువల్ మిషన్‌లను సృష్టించి, అది పనిచేసే చోట నిర్వహిస్తుంది మరియు లోడ్ పెరిగితే వాటిని కూడా పునరావృతం చేస్తుంది. మీరు అస్సలు ఆలోచించాల్సిన అవసరం లేదు, ఇది చాలా సౌకర్యవంతంగా ఉంటుంది. మరియు రుసుము గణన సమయానికి మాత్రమే.

అయితే, కొంతమందికి అస్సలు చెల్లించకపోవచ్చు. వీరు డెవలపర్లు ఆలిస్ యొక్క బాహ్య నైపుణ్యాలు, అంటే, చాట్‌బాట్‌లు ఇందులో నిర్మించబడ్డాయి. ఏ డెవలపర్ అయినా అటువంటి నైపుణ్యాన్ని వ్రాయవచ్చు, హోస్ట్ చేయవచ్చు మరియు నమోదు చేసుకోవచ్చు మరియు నేటి నుండి నైపుణ్యాలను హోస్ట్ చేయవలసిన అవసరం లేదు - ఫారమ్‌లో క్లౌడ్‌కు వారి కోడ్‌ను అప్‌లోడ్ చేయండి అదే సర్వర్‌లెస్ ఫంక్షన్.

కానీ కొన్ని సూక్ష్మ నైపుణ్యాలు ఉన్నాయి. ముందుగా, మీ పెంపుడు జంతువు కోడ్‌కి కొన్ని డిపెండెన్సీలు అవసరం కావచ్చు మరియు వాటిని క్లౌడ్‌లోకి లాగడం చిన్న విషయం కాదు. రెండవది, ఏదైనా సాధారణ చాట్‌బాట్ డైలాగ్ స్థితిని ఎక్కడో నిల్వ చేయాలి (కాబట్టి స్టేట్‌ఫుల్); సర్వర్‌లెస్ ఫంక్షన్‌లో సులభమైన మార్గంలో దీన్ని ఎలా చేయాలి? మూడవదిగా, మీరు ఆలిస్ కోసం శీఘ్ర మరియు డర్టీ నైపుణ్యాన్ని ఎలా వ్రాయగలరు లేదా సున్నా కాని ప్లాట్‌తో కొన్ని రకాల బోట్‌లను కూడా ఎలా వ్రాయగలరు? ఈ సూక్ష్మ నైపుణ్యాల గురించి, నిజానికి, వ్యాసం.

Yandex.Cloud మరియు Python యొక్క సర్వర్‌లెస్ ఫంక్షన్‌లపై ఆలిస్ కోసం స్టేట్‌ఫుల్ నైపుణ్యాన్ని సృష్టించడం

నైతిక తయారీ

అసహనం కోసం: నేను ఫంక్షన్‌ను క్లౌడ్‌కు అప్‌లోడ్ చేసే ముందు మేక్‌ఫైల్‌తో అవసరమైన డిపెండెన్సీలను సేకరిస్తాను, డైలాగ్ స్థితిని Yandex ఆబ్జెక్ట్ స్టోరేజ్‌లో భద్రపరుస్తాను (ఇది S3 APIకి మద్దతు ఇస్తుంది) మరియు డైలాగ్‌ని నిర్వహించడానికి నేను నా స్వంత లైబ్రరీని ఉపయోగిస్తాను tgalice. ఫలితంగా, అది మారుతుంది అటువంటి డెమో నైపుణ్యం. మరియు ఇప్పుడు వీటన్నింటిని కొంచెం వివరంగా విశ్లేషిద్దాం.

కొంచెం అసహనం ఉన్నవారి కోసం, నా సంక్లిష్టత కథలోకి ప్రవేశించే ముందు, నేను చాలా సరళంగా ప్రారంభించాలని సిఫార్సు చేస్తున్నాను. అవి, సింగిల్-ఫైల్ ఎకోబోట్ ఫంక్షన్‌ను సృష్టించి, డైలాగ్ డెవలపర్ కన్సోల్‌లో నమోదు చేసి పరీక్షించండి; వివరాలు - లో బ్లాగ్ డైలాగ్స్ и క్లౌడ్ డాక్యుమెంటేషన్. మరియు అప్పుడు మాత్రమే ప్రారంభించండి.

మేము దేని కోసం పోరాడుతున్నామో మీకు వెంటనే అనిపించాలంటే, ఆలిస్‌ని అడగండి"IT జాతకం" నైపుణ్యాన్ని ప్రారంభించండి'. కింది సంభాషణ జరగాలి:

ఆలిస్: హలో! మీరు "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

ఒక వ్యాఖ్యను జోడించండి