Ukudala isakhono selizwe u-Alice kwimisebenzi engenaseva yeYandex.Cloud kunye nePython

Masiqale ngeendaba. Izolo iYandex.Cloud ibhengeze ukuqaliswa kwenkonzo yekhompyutha engenaseva Yandex Cloud Imisebenzi. Oku kuthetha ukuba: ubhala kuphela ikhowudi yenkonzo yakho (umzekelo, isicelo sewebhu okanye i-chatbot), kwaye i-Cloud ngokwayo idala kwaye igcine oomatshini benyani apho iqhuba khona, kwaye iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde iphinde isebenze. Awudingi ukucinga konke konke, kulula kakhulu. Kwaye umrhumo ngowexesha lokubala kuphela.

Nangona kunjalo, abanye basenokungahlawuli kwaphela. Aba ngabaphuhlisi Izakhono zangaphandle zika-Alice, oko kukuthi, ii-chatbots ezakhelwe kuyo. Nawuphi na umthuthukisi angabhala, abambe kwaye abhalise isakhono esinjalo, kwaye ukususela namhlanje izakhono azidingeki nokuba zibanjwe - faka nje ikhowudi yabo efini kwifom. umsebenzi ofanayo ongenamncedisi.

Kodwa kukho iinuances ezimbalwa. Okokuqala, ikhowudi yakho yomngxunya inokufuna ukuxhomekeka okuthile, kwaye ukuyitsalela kwiLifu ayisiyonto encinci. Okwesibini, nayiphi na i-chatbot eqhelekileyo idinga ukugcina imeko yencoko yababini kwindawo ethile (icacile ke ngoko); Yeyiphi eyona ndlela ilula yokwenza oku kumsebenzi ongenaseva? Okwesithathu, ungasibhala njani isakhono esikhawulezayo nesimdaka sika-Alice okanye uhlobo oluthile lwebhothi ngecebo elingelo-zero? Inqaku, enyanisweni, malunga nezi nuances.

Ukudala isakhono selizwe u-Alice kwimisebenzi engenaseva yeYandex.Cloud kunye nePython

Ukulungiselela ukuziphatha

Kwabangenamonde: Ndiqokelela ukuxhomekeka okuyimfuneko ngefayile yokwenza phambi kokulayisha umsebenzi efini, ndigcina imeko yencoko yababini kwiYandex Object Storage (ixhasa i-S3 API), kwaye ndisebenzisa ilayibrari yam ukulawula ingxoxo. tgalice. Ekugqibeleni kuvela onjalo isakhono demo. Ngoku makhe sijonge kuyo yonke le nto ngeenkcukacha ezincinci.

Kwabo bangenamonde kancinci, ngaphambi kokuntywila kwibali lam malunga nobunzima, ndincoma kakhulu ukuqala ngento elula. Oko kukuthi, yenza umsebenzi we-echobot yefayile enye, bhalisa kwaye uyivavanye kwi-Dialog developer console; iinkcukacha - kwi Iingxoxo zebhlog и Amaxwebhu Cloud. Kwaye kuphela emva koko uqale.

Ukuba ufuna ukuva kwangoko ukuba silwela ntoni apha, buza uAlice 'yenza isakhono se "IT horoscope".'. Incoko yababini efana nale ilandelayo kufuneka yenzeke:

UAlice: Molo! Ukwisakhono se "IT Horoscope". Yithi "Qala" ukufumanisa ukuba iinkwenkwezi zikuthembisa ntoni.
Umsebenzisi: Qala
A: Ndicela uchaze igama lakho
Yu:Vasisualiy
IMPENDULO: Ndixelele ngoku unyaka wokuzalwa kwakho. Amanani amane kuphela, akukho nto ingaphezulu.
Yu: okwesibini
A: Ndicela uzame kwakhona. Faka unyaka wokuzalwa kwakho - amanani amane.
Yu: 2002
A: Mkhulu! Ngoku chaza inyanga yakho yokuzalwa.
Yu: February
A: Mkhulu! Okokugqibela, ndixelele usuku lwakho lokuzalwa - inani nje, idijithi enye okanye ezimbini.
Yu: 18
A: Enkosi, Vasisualiy! Ngoku siyazi: uneminyaka eyi-17 kunye ne-Aquarius. Ewe, kunjalo, unethamsanqa! Iinkwenkwezi ziyakuxelela: а что говорят звёзды, вы узнаете, запустив навык.

Ingxaki kukuba ukuze ulondoloze incoko yababini elula, kufuneka ukhumbule igama lomsebenzisi kunye nomhla wokuzalwa, kwaye kwindawo yokusebenza engenamsebenzi oku akukho nto. Akunakwenzeka ukugcina umxholo kwi-RAM okanye njengefayile kwidiski, kuba I-Yandex.Cloud inokuqhuba umsebenzi koomatshini abaninzi benyani ngexesha elifanayo kwaye utshintshe phakathi kwabo ngokuthanda. Kuya kufuneka usebenzise uhlobo oluthile logcino lwangaphandle. I-Object Storage ikhethwe njengendawo yokugcina engabizi kwaye ilula kakhulu kwi-Yandex.Cloud (oko kukuthi, mhlawumbi ngokukhawuleza). Njengenye indlela yamahhala, unokuzama, umzekelo, isiqwenga samahhala Kufukama Monga kwindawo ekude. Kukho ii-wrappers zePython ezifanelekileyo kuzo zombini uGcino lweNto (exhasa ujongano lwe-S3) kunye neMongo.

Enye ingxaki kukuba ukufikelela kwi-Object Storage, i-MongoDB, kunye nayiphi na enye i-database okanye isitoreji sedatha, udinga ukuxhomekeka kwangaphandle okufunekayo ukulayishwa kwi-Yandex Functions kunye nekhowudi yakho yokusebenza. Kwaye ndingathanda ukwenza oku ngokulula. Ngelishwa, ayiyi kulungeleka ngokupheleleyo (njenge-Heroku), kodwa enye induduzo eyisiseko inokudalwa ngokubhala iskripthi sokwakha indawo (yenza ifayile).

Indlela yokuqalisa isakhono se-horoscope

  1. Lungiselela: yiya kumatshini othile oneLinux. Ngokomgaqo, unokusebenza kunye neWindows, kodwa ke kuya kufuneka wenze umlingo ngokuzisa i-makefile. Kwaye kuyo nayiphi na imeko, uya kufuna ubuncinci iPython 3.6 efakiweyo.
  2. Yivale kwiGithub umzekelo wobuchule behoroscope.
  3. Bhalisa kwi-Y.Cloud: https://cloud.yandex.ru
  4. Zenzele iibhakethi ezimbini ngaphakathi Ukugcinwa Kwezinto, Babize ngalo naliphi na igama {BUCKET NAME} и tgalice-test-cold-storage (eli gama lesibini ngoku lifakwe kwi-hardcoded main.py umzekelo wam). Ibhakethi yokuqala iya kufunwa kuphela ukusasazwa, okwesibini - ukugcina amazwe encoko.
  5. Yenza iakhawunti yenkonzo, mnike indima editor, kwaye ufumane iziqinisekiso ezimileyo zayo {KEY ID} и {KEY VALUE} — siya kuzisebenzisa ukurekhoda ubume bengxoxo. Konke oku kuyafuneka ukuze umsebenzi ovela kwi-Ya.Cloud unokufikelela kwindawo yokugcina kwi-Ya.Cloud. Ngenye imini, ndiyathemba, ugunyaziso luya kuzenzekela, kodwa okwangoku lunjalo.
  6. (Ngokhetho) faka ujongano lomgca womyalelo yc. Unokwenza umsebenzi ngokusebenzisa ujongano lwewebhu, kodwa i-CLI ilungile kuba zonke iintlobo zezinto ezintsha zivela kuyo ngokukhawuleza.
  7. Ngoku ungenza ngokwenene ukulungiselela indibano yokuxhomekeka: yiqhube kumgca womyalelo kwifolda ngomzekelo wesakhono make all. Iqela lamathala eencwadi (ubukhulu becala, njengesiqhelo, ngokungeyomfuneko) liya kufakwa kwifolda dist.
  8. Galela kwi-Object Storage ngesandla (kwi-emele {BUCKET NAME}) uvimba ofunyenwe kwinyathelo langaphambili dist.zip. Ukuba uyanqwena, unokwenza oku kumgca womyalelo, umzekelo, usebenzisa I-AWS CLI.
  9. Yenza umsebenzi ongenamncedisi usebenzisa ujongano lwewebhu okanye usebenzisa into eluncedo yc. Kumsebenzi, umyalelo uya kujongeka ngolu hlobo:

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

Xa udala umsebenzi ngesandla, zonke iiparameters zizaliswe ngendlela efanayo.

Ngoku umsebenzi owenziweyo unokuvavanywa nge-console yonjiniyela, kwaye ke isakhono sinokuphuculwa kwaye sipapashwe.

Ukudala isakhono selizwe u-Alice kwimisebenzi engenaseva yeYandex.Cloud kunye nePython

Yintoni phantsi kwe-hood

I-makefile eneneni iqulethe iskripthi esilula ngokufanelekileyo sokuhlohla ukuxhomekeka kunye nokubeka kwindawo yokugcina dist.zip, malunga noku:

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 ./*

Intsalela zizixhobo ezimbalwa ezilula ezisongelwe kwithala leencwadi tgalice. Inkqubo yokuzalisa idatha yomsebenzisi ichazwa yi-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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Umsebenzi wokwahlulahlula le config kunye nokubala umphumo wokugqibela uthathwa yiklasi yePython

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

Ngokuchanekileyo, iklasi yesiseko FormFillingDialogManager ijongene nokuzalisa “ifomu”, kunye nendlela yeklasi yomntwana handle_completed_form umxelela ukuba enze ntoni xa sele elungile.

Ukongeza kolu hambo luphambili lwencoko yababini, umsebenzisi kufuneka abuliswe, kwaye anikwe uncedo usebenzisa "uncedo" umyalelo kwaye akhululwe kwisakhono usebenzisa umyalelo "wokuphuma". Ukwenza oku kwi tgalice Kukwakho itemplate, ngoko ke wonke umphathi wencoko yababini yenziwe ngamaqhekeza:

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 Isebenza ngokulula: izama ukusebenzisa onke amalungu ayo kwimeko yangoku yencoko yababini ngokutshintshana, kwaye ikhethe eyokuqala efanelekileyo.

Umphathi wencoko yababini ubuyisela into yePython njengempendulo kumyalezo ngamnye. Response, enokuthi emva koko iguqulelwe kwisicatshulwa esicacileyo, okanye kumyalezo kwi-Alice okanye kwiTelegram - kuxhomekeke apho ibhot isebenza khona; ikwaqulathe imeko etshintshileyo yencoko yababini efuna ukugcinwa. Eli khitshi lilonke liphathwa yenye iklasi, DialogConnector, ngoko ke iskripthi esithe ngqo sokusungula isakhono kwiYandex Functions sijongeka ngolu hlobo:

...
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

Njengoko ubona, uninzi lwale khowudi yenza uqhagamshelo kujongano lwe-S3 lweNto yoGcino. Unokufunda indlela olu qhagamshelwano lusetyenziswa ngayo ngokuthe ngqo kwikhowudi yetgalice.
Umgca wokugqibela udala umsebenzi alice_handler - efanayo leyo sathi Yandex.Cloud ukutsala xa siseta parameter --entrypoint=main.alice_handler.

Yiloo nto kuphela, eneneni. Iifayile zendibano, iS3-efana noGcino lwento yokugcina umxholo, kunye nelayibrari yePython tgalice. Idityaniswe nemisebenzi engenamsebenzi kunye nokucaciswa kwePython, oku kwanele ukuphuhlisa isakhono somntu esinempilo.

Unokubuza ukuba kutheni bekuyimfuneko ukuyila tgalice? Yonke ikhowudi ekruqulayo ehambisa ii-JSONs ukusuka kwisicelo ukuya kwimpendulo kwaye ukusuka kwisitoreji ukuya kwimemori kunye nomqolo ilele kuyo. Kukho kwakhona isicelo esiqhelekileyo sekhowudi, umsebenzi wokuqonda ukuba "uFebruwari" ufana no "Februwari", kunye nenye i-NLU yabahluphekileyo. Ngokombono wam, oku kufanele ukuba sele kwanele ukuze ukwazi ukuzoba iiprototypes zezakhono kwiifayile ze-yaml ngaphandle kokuphazanyiswa kakhulu neenkcukacha zobugcisa.

Ukuba ufuna i-NLU enzulu ngakumbi, ungayincamathisela kwisakhono sakho IRasa okanye DeepPavlov, kodwa ukuseta kuya kufuna imidaniso eyongezelelweyo ngentambula, ngakumbi kwi-serverless. Ukuba awuziva ngathi ukhowuda konke konke, kuya kufuneka usebenzise umakhi obonakalayo onje I-Aimylogic. Xa usenza i-tgalice, ndacinga ngohlobo oluthile lwendlela ephakathi. Makhe sibone ukuba yintoni eza kwenzeka kule nto.

Ewe, ngena ngoku incoko yomphuhlisi wezakhono alice, funda uxwebhu, kwaye udale ngokumangalisayo izakhono!

umthombo: www.habr.com

Yongeza izimvo