Ukudala ikhono elihle lika-Alice emisebenzini engenaseva ye-Yandex.Cloud nePython

Ake siqale ngezindaba. Izolo i-Yandex.Cloud imemezele ukwethulwa kwensizakalo yekhompyutha engenasiphakeli Imisebenzi ye-Yandex Cloud. Lokhu kusho ukuthi: ubhala kuphela ikhodi yesevisi yakho (isibonelo, uhlelo lokusebenza lwewebhu noma i-chatbot), futhi Ifu ngokwalo lidala futhi linakekele imishini ebonakalayo lapho isebenza khona, futhi lize liyiphindaphinde uma umthwalo ukhuphuka. Awudingi ukucabanga nhlobo, kulula kakhulu. Futhi inkokhelo ingeyesikhathi sokubala kuphela.

Nokho, abanye bangase bangakhokhi nhlobo. Laba ngabathuthukisi Amakhono angaphandle ka-Alice, okungukuthi, ama-chatbots akhelwe kuwo. Noma yimuphi umthuthukisi angabhala, asingathe futhi abhalise ikhono elinjalo, futhi kusukela namuhla amakhono awadingi nokusingathwa - mane ulayishe ikhodi yakhe efwini ngefomu umsebenzi ofanayo ongenasiphakeli.

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.

Ukudala ikhono elihle lika-Alice emisebenzini engenaseva ye-Yandex.Cloud nePython

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. i-tgalice. Ekugcineni kuvela 逵 克 i-spine 橘 ikhono ledemo. Manje ake sibheke konke lokhu ngokuningiliziwe okwengeziwe.

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 Ibhulogi yezingxoxo и Amadokhumenti efu. Bese uqala kuphela.

Uma ufuna ukuzwa ngokushesha ukuthi silwela ini lapha, buza u-Alice 'vumela ikhono le-"IT horoscope".'. Ingxoxo efana nalokhu okulandelayo kufanele kwenzeke:

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 I-Monga eguqubele endaweni ethile kude. Kukhona ama-wrappers e-Python alula kukho kokubili Isitoreji Sento (esekela i-S3 interface) ne-Mongo.

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

  1. 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.
  2. Yihlanganise kusuka ku-Github isibonelo sekhono le-horoscope.
  3. Bhalisa ku-Y.Cloud: https://cloud.yandex.ru
  4. Zakhele amabhakede amabili phakathi Into Yokugcina, babize ngamagama {BUCKET NAME} и tgalice-test-cold-storage (leli gama lesibili manje selifakwe ikhodi eqinile main.py isibonelo sami). Ibhakede lokuqala lizodingeka kuphela ukuthunyelwa, okwesibili - ukugcina izingxoxo zezingxoxo.
  5. Dala i-akhawunti yesevisi, mnike indima editor, 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.
  6. (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.
  7. Manje ungakwazi ngempela ukulungiselela umhlangano wokuncika: ugijime kulayini womyalo ovela kufolda ngesibonelo sekhono make all. Inqwaba yemitapo yolwazi (ikakhulukazi, njengenjwayelo, engadingeki) izofakwa kufolda dist.
  8. Thela ku-Object Storage ngesandla (ebhakedeni {BUCKET NAME}) ingobo yomlando etholwe esinyathelweni sangaphambilini dist.zip. Uma uthanda, ungakwenza lokhu kusukela kulayini womyalo, isibonelo, usebenzisa I-AWS CLI.
  9. 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.

Ukudala ikhono elihle lika-Alice emisebenzini engenaseva ye-Yandex.Cloud nePython

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 ngekhodi ye-tgalice.
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 URasa noma I-DeepPavlov, kodwa ukuwamisa kuzodinga ukudansa okwengeziwe ngethamborini, ikakhulukazi ku-serverless. Uma ungazizwa uthanda ukufaka amakhodi nhlobo, kufanele usebenzise umakhi obonakalayo njengo I-Aimylogic. Lapho ngenza i-tgalice, ngicabange ngohlobo oluthile lwendlela emaphakathi. Ake sibone ukuthi yini eza kulokhu.

Awu, manje joyina ingxoxo yonjiniyela wamakhono alice, funda imibhalo, futhi adale emangalisayo amakhono!

Source: www.habr.com

Engeza amazwana