Masiqale ngeendaba. Izolo iYandex.Cloud ibhengeze ukuqaliswa kwenkonzo yekhompyutha engenaseva
Nangona kunjalo, abanye basenokungahlawuli kwaphela. Aba ngabaphuhlisi
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.
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.
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
Ukuba ufuna ukuva kwangoko ukuba silwela ntoni apha, buza uAlice '
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
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
- 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.
- Yivale kwiGithub
umzekelo wobuchule behoroscope . - Bhalisa kwi-Y.Cloud:
https://cloud.yandex.ru - Zenzele iibhakethi ezimbini ngaphakathi
Ukugcinwa Kwezinto , Babize ngalo naliphi na igama{BUCKET NAME}
иtgalice-test-cold-storage
(eli gama lesibini ngoku lifakwe kwi-hardcodedmain.py
umzekelo wam). Ibhakethi yokuqala iya kufunwa kuphela ukusasazwa, okwesibini - ukugcina amazwe encoko. - Yenza
iakhawunti yenkonzo , mnike indimaeditor
, 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. - (Ngokhetho) faka
ujongano lomgca womyalelo yc
. Unokwenza umsebenzi ngokusebenzisa ujongano lwewebhu, kodwa i-CLI ilungile kuba zonke iintlobo zezinto ezintsha zivela kuyo ngokukhawuleza. - Ngoku ungenza ngokwenene ukulungiselela indibano yokuxhomekeka: yiqhube kumgca womyalelo kwifolda ngomzekelo wesakhono
make all
. Iqela lamathala eencwadi (ubukhulu becala, njengesiqhelo, ngokungeyomfuneko) liya kufakwa kwifoldadist
. - Galela kwi-Object Storage ngesandla (kwi-emele
{BUCKET NAME}
) uvimba ofunyenwe kwinyathelo langaphambilidist.zip
. Ukuba uyanqwena, unokwenza oku kumgca womyalelo, umzekelo, usebenzisaI-AWS CLI . - 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.
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
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
Ewe, ngena ngoku
umthombo: www.habr.com