Ake siqale ngezindaba. Izolo i-Yandex.Cloud imemezele ukwethulwa kwensizakalo yekhompyutha engenasiphakeli
Nokho, abanye bangase bangakhokhi nhlobo. Laba ngabathuthukisi
Kodwa kukhona ama-nuances ambalwa. Okokuqala, ikhodi yakho yomgodi ingase idinge ukuncika okuthile, futhi ukuyihudulela Efwini akuyona into encane. Okwesibili, noma iyiphi i-chatbot evamile idinga ukugcina isimo sengxoxo ndawana thize (esishoyo ngakho-ke); Iyiphi indlela elula yokwenza lokhu kumsebenzi ongenasiphakeli? Okwesithathu, ungalibhala kanjani ikhono elisheshayo nelingcolile lika-Alice noma uhlobo oluthile lwebhothi ngesakhiwo esingeyona iqanda? I-athikili, empeleni, imayelana nalawa ma-nuances.
Ukulungiselela ukuziphatha
Kulabo abangenasineke: Ngiqoqa ukuncika okudingekayo nge-makefile ngaphambi kokulayisha umsebenzi efwini, ngigcina isimo sengxoxo ku-Yandex Object Storage (isekela i-S3 API), futhi ngisebenzisa umtapo wami wolwazi ukuphatha ingxoxo.
Kulabo abangenasineke kancane, ngaphambi kokungena endabeni yami emayelana nobunzima, ngincoma kakhulu ukuqala ngokuthile okulula. Okungukuthi, dala umsebenzi we-echobot wefayela elilodwa, ubhalise futhi uwuhlole kukhonsoli yonjiniyela Yezingxoxo; imininingwane - ku
Uma ufuna ukuzwa ngokushesha ukuthi silwela ini lapha, buza u-Alice '
U-Alice: Sawubona! Usekhono le- "IT Horoscope". Ithi “Qala” ukuze uthole ukuthi izinkanyezi zikuthembisa ini.
Umsebenzisi: Qala
A: Ngicela usho igama lakho
Yu: Vasisualiy
IMP: Manje ngitshele unyaka wokuzalwa kwakho. Amadijithi amane kuphela, akukho okungeziwe.
Yu: okwesibili
A: Sicela uzame futhi. Faka unyaka wokuzalwa kwakho - amadijithi amane.
Unyaka: 2002
A: Kuhle! Manje yisho inyanga yakho yokuzalwa.
Yu: February
A: Kuhle! Okokugcina, ngitshele usuku lwakho lokuzalwa - inombolo nje, idijithi eyodwa noma ezimbili.
Unyaka: 18
A: Ngiyabonga, Vasisualiy! Manje siyazi: uneminyaka engu-17 ubudala futhi Aquarius. Yebo, unenhlanhla! Izinkanyezi ziyakutshela: а что говорят звёзды, вы узнаете, запустив навык.
Inkinga iwukuthi ukuze ulondoloze ngisho nenkhulumomphendvulwano elula kangaka, udinga ukukhumbula igama lomsebenzisi nosuku lokuzalwa, futhi endaweni yokusebenza engenaseva lokhu akuyona into encane. Ngeke kwenzeke ukugcina umongo ku-RAM noma njengefayela kudiski, ngoba I-Yandex.Cloud ingasebenzisa umsebenzi emishinini eminingana ebonakalayo ngesikhathi esisodwa futhi ishintshe phakathi kwayo ngokuthanda kwayo. Kuzodingeka usebenzise uhlobo oluthile lwesitoreji sangaphandle. Isitoreji Sento sikhethwe njengesitoreji esingabizi kakhulu nesingeyona inkimbinkimbi ngokuqondile ku-Yandex.Cloud (okungukuthi, cishe ngokushesha). Njengenye indlela yamahhala, ungazama, isibonelo, ucezu lwamahhala
Enye inkinga ukuthi ukuze ufinyelele Isitoreji Sento, i-MongoDB, nanoma iyiphi enye isizindalwazi noma isitolo sedatha, udinga ukuncika okuthile kwangaphandle okudingeka kulayishwe ku-Yandex Functions kanye nekhodi yakho yokusebenza. Futhi ngingathanda ukwenza lokhu ngokufanele. Ngeshwa, ngeke kube lula ngokuphelele (njengaku-Heroku), kodwa okunye ukunethezeka okuyisisekelo kungadalwa ngokubhala umbhalo wokwakha imvelo (yenza ifayela).
Indlela yokuqalisa ikhono le-horoscope
- Lungiselela: iya emshinini othile one-Linux. Eqinisweni, ungasebenza neWindows futhi, kodwa kuzodingeka wenze umlingo ngokwethula i-makefile. Futhi kunoma yikuphi, uzodinga okungenani i-Python 3.6 efakwe.
- Yihlanganise kusuka ku-Github
isibonelo sekhono le-horoscope . - Bhalisa ku-Y.Cloud:
https://cloud.yandex.ru - Zakhele amabhakede amabili phakathi
Into Yokugcina , babize ngamagama{BUCKET NAME}
иtgalice-test-cold-storage
(leli gama lesibili manje selifakwe ikhodi eqinilemain.py
isibonelo sami). Ibhakede lokuqala lizodingeka kuphela ukuthunyelwa, okwesibili - ukugcina izingxoxo zezingxoxo. - Dala
i-akhawunti yesevisi , mnike indimaeditor
, futhi uthole iziqinisekiso ezimile zayo{KEY ID}
и{KEY VALUE}
- sizowasebenzisa ukurekhoda isimo sengxoxo. Konke lokhu kuyadingeka ukuze umsebenzi ovela ku-Ya.Cloud ukwazi ukufinyelela isitoreji ku-Ya.Cloud. Ngolunye usuku, ngithemba, ukugunyazwa kuzozenzakalela, kodwa okwamanje kufana nalokho. - (Ongakukhetha) faka
isikhombimsebenzisi somugqa womyalo yc
. Ungakwazi futhi ukudala umsebenzi ngokusebenzisa isixhumi esibonakalayo sewebhu, kodwa i-CLI yinhle ngoba zonke izinhlobo zezinto ezintsha zivela kuyo ngokushesha. - Manje ungakwazi ngempela ukulungiselela umhlangano wokuncika: ugijime kulayini womyalo ovela kufolda ngesibonelo sekhono
make all
. Inqwaba yemitapo yolwazi (ikakhulukazi, njengenjwayelo, engadingeki) izofakwa kufoldadist
. - Thela ku-Object Storage ngesandla (ebhakedeni
{BUCKET NAME}
) ingobo yomlando etholwe esinyathelweni sangaphambilinidist.zip
. Uma uthanda, ungakwenza lokhu kusukela kulayini womyalo, isibonelo, usebenzisaI-AWS CLI . - Dala umsebenzi ongenasiphakeli usebenzisa isixhumi esibonakalayo sewebhu noma usebenzisa insiza
yc
. Kuhlelo lokusebenza, umyalo uzobukeka kanjena:
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
Uma wenza umsebenzi ngokwenza, wonke amapharamitha agcwaliswa ngendlela efanayo.
Manje umsebenzi owudalile ungahlolwa ngekhonsoli yonjiniyela, bese ikhono lingathuthukiswa futhi lishicilelwe.
Yini engaphansi kwe-hood
I-makefile empeleni iqukethe iskripthi esilula sokufaka okuncikile nokukufaka kungobo yomlando dist.zip
, cishe kanje:
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 ./*
Okunye okungamathuluzi ambalwa alula asongwe emtatsheni wezincwadi tgalice
. Inqubo yokugcwalisa 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 wokuhlaziya lokhu kulungiselelwa nokubala umphumela wokugcina uthathwa yisigaba sePython
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
Ngokunembayo, isigaba sesisekelo FormFillingDialogManager
iphathelene nokugcwalisa “ifomu”, kanye nendlela yekilasi lezingane handle_completed_form
umtshele ukuthi enzeni uma eselungile.
Ngokungeziwe kulokhu kugeleza okuyinhloko kwengxoxo, umsebenzisi kufanele futhi abingelelwe, aphinde anikezwe usizo kusetshenziswa umyalo “wosizo” futhi akhululwe ekhonweni esebenzisa umyalo “wokuphuma”. Ngenxa yalokhu ku tgalice
Kukhona nesifanekiso, ngakho-ke umphathi wengxoxo yonke wakhiwe izingcezu:
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 kalula: izama ukusebenzisa zonke izingxenye zayo esimweni samanje sengxoxo ngokushintshana, bese ikhetha eyokuqala efanele.
Umphathi wengxoxo ubuyisela into yePython njengempendulo kumlayezo ngamunye. Response
, okungabe sekuguqulelwa kumbhalo ongenalutho, noma umlayezo ku-Alice noma iTelegram - kuye ngokuthi i-bot isebenza kuphi; futhi iqukethe isimo esishintshile sengxoxo edinga ukugcinwa. Lonke lelikhishi liphethwe elinye ikilasi, DialogConnector
, ngakho-ke umbhalo oqondile wokwethula ikhono ku-Yandex Functions ubukeka kanje:
...
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
Njengoba ubona, iningi lale khodi lidala ukuxhumana kusixhumi esibonakalayo se-S3 se-Object Storage. Ungafunda ukuthi lolu xhumano lusetshenziswa kanjani ngokuqondile
Umugqa wokugcina udala umsebenzi alice_handler
- efanayo naleyo esitshele i-Yandex.Cloud ukuthi iyidonse lapho sisetha ipharamitha --entrypoint=main.alice_handler
.
Yilokho kuphela, empeleni. Ama-Makefiles omhlangano, I-S3-like Object Storage yokugcina umongo, kanye nelabhulali yePython tgalice
. Kuhlanganiswe nemisebenzi engenasiphakeli nokugqama kwePython, lokhu kwanele ukuthuthukisa ikhono lomuntu elinempilo.
Ungase ubuze ukuthi kungani bekudingekile ukudala tgalice
? Yonke ikhodi eyisicefe edlulisela ama-JSONs isuka esicelweni iye empendulweni futhi isuka kwisitoreji iye kumemori futhi iwabuyisele emuva ilele kuwo. Kukhona nesicelo sekhodi evamile, umsebenzi wokuqonda ukuthi "uFebhuwari" ufana no "Februwari", kanye nenye i-NLU yabampofu. Ngokombono wami, lokhu kufanele kakade kwanele ukuze ukwazi ukudweba ama-prototypes wamakhono kumafayela e-yaml ngaphandle kokuphazanyiswa kakhulu imininingwane yobuchwepheshe.
Uma ufuna i-NLU ebaluleke kakhulu, ungayinamathisela ekhonweni lakho
Awu, manje joyina
Source: www.habr.com