A’ cruthachadh sgil stàiteil dha Alice air gnìomhan gun fhrithealaiche Yandex.Cloud agus Python

Feuch an tòisich sinn leis na naidheachdan. An-dè dh’ainmich Yandex.Cloud gun deach seirbheis coimpiutaireachd gun fhrithealaiche a chuir air bhog Gnìomhan Yandex Cloud. Tha seo a’ ciallachadh: cha sgrìobh thu ach còd na seirbheis agad (mar eisimpleir, tagradh lìn no chatbot), agus bidh an Cloud fhèin a’ cruthachadh agus a’ cumail suas innealan brìgheil far a bheil e a’ ruith, agus eadhon gan ath-aithris ma thèid an luchd àrdachadh. Chan fheum thu smaoineachadh idir, tha e gu math goireasach. Agus tha am pàigheadh ​​​​a 'dol a-mhàin airson ùine àireamhachadh.

Ach, is dòcha nach bi cuid de dhaoine a’ pàigheadh ​​idir. Is iad seo an luchd-leasachaidh Sgilean taobh a-muigh Alice, is e sin, chatbots air an togail a-steach dha. Faodaidh leasaiche sam bith a leithid de sgil a sgrìobhadh, a chumail agus a chlàradh, agus bhon latha an-diugh chan eil eadhon feum air sgilean a bhith air an cumail - dìreach luchdaich suas an còd aca chun sgòth san fhoirm an aon ghnìomh gun fhrithealaiche.

Ach tha nuances no dhà ann. An toiseach, is dòcha gu bheil feum aig a’ chòd peata agad air cuid de eisimeileachd, agus chan eil e duilich an slaodadh a-steach don Cloud. San dàrna h-àite, feumaidh chatbot àbhaisteach sam bith staid a’ chòmhraidh a stòradh an àiteigin (staid mar sin); ciamar a nì thu e ann an gnìomh gun fhrithealaiche an dòigh as fhasa? San treas àite, ciamar as urrainn dhut sgil sgiobalta is salach a sgrìobhadh airson Alice no eadhon seòrsa de bhot le cuilbheart neo-neoni? Mu na nuances seo, gu dearbh, an artaigil.

A’ cruthachadh sgil stàiteil dha Alice air gnìomhan gun fhrithealaiche Yandex.Cloud agus Python

ullachadh moralta

Airson an neach mì-fhoighidneach: bidh mi a’ tional na h-eisimeileachd riatanach le faidhle dèanadais mus luchdaich mi suas an gnìomh chun sgòth, bidh mi a’ stòradh an stàit còmhraidh ann an Yandex Object Storage (tha e a’ toirt taic don S3 API), agus bidh mi a’ cleachdadh an leabharlann agam fhèin gus an còmhradh a riaghladh tgalice. Mar thoradh air an sin, tha e a 'tionndadh a-mach leithid de sgil demo. Agus a-nis leig dhuinn sgrùdadh a dhèanamh air seo uile ann am beagan nas mionaidiche.

Dhaibhsan a tha beagan nas mì-fhoighidneach, mus tèid mi a-steach don sgeulachd agam mu iom-fhillteachd, tha mi gu mòr a’ moladh tòiseachadh le rudeigin sìmplidh. Is e sin, cruthaich gnìomh echobot aon-fhaidhle, clàraich agus deuchainn e ann an consol leasaiche Dialogs; mion-fhiosrachadh - ann an Blog còmhraidhean и sgrìobhainnean sgòth. Agus dìreach an uairsin tòisich.

Ma tha thu airson a bhith a’ faireachdainn sa bhad na tha sinn a’ sabaid air a shon, faighnich dha Alice 'tionndaidh air an sgil "IT horoscope"'. Bu chòir an còmhradh a leanas a chumail:

Alice: Halò! Tha thu anns an sgil "IT horoscope". Abair "Tòisich" gus faighinn a-mach dè a tha na rionnagan a 'gealltainn dhut.
Cleachdaiche: Tòisich
A: Feuch an innis thu d’ ainm.
Yu: Vasisually
F: A-nis innis dhomh bliadhna do bhreith. Dìreach ceithir àireamhan, gun dad a bharrachd.
Yu: dàrna
A: Feuch ris a-rithist. Inns bliadhna do bhreith - ceithir àireamhan.
Chan eil: 2002
A: Sgoinneil! A-nis ainmich mìos do bhreith.
Yu: Gearran
A: Sgoinneil! Mu dheireadh, innis dhomh do cheann-latha breith - dìreach àireamh, dìreach aon no dhà fhigear.
Chan eil: 18
A: Tapadh leibh, Vasisualiy! A-nis tha fios againn: tha thu 17 bliadhna a dh'aois agus Aquarius. Uill, gu dearbh, tha thu fortanach! Bidh na rionnagan ag innse dhut: а что говорят звёзды, вы узнаете, запустив навык.

Is e an duilgheadas a th 'ann, gus eadhon còmhradh sìmplidh a chumail suas, feumaidh tu cuimhneachadh air ainm agus ceann-latha breith an neach-cleachdaidh, agus ann an àrainneachd gun fhrithealaiche chan eil seo beag. Chan obraich e gus an co-theacsa a stòradh ann an RAM no mar fhaidhle air diosc, oir Faodaidh Yandex.Cloud an gnìomh a ruith air grunn innealan brìgheil aig an aon àm agus gluasad eadar iad gu neo-riaghailteach. Feumaidh tu seòrsa de stòradh a-muigh a chleachdadh. Chaidh Stòradh Rud a thaghadh mar stòradh gu math saor agus sìmplidh gu dìreach ann an Yandex.Cloud (is e sin, is dòcha luath). Mar roghainn an-asgaidh, faodaidh tu feuchainn, mar eisimpleir, pìos an-asgaidh Mongi sgòthach an àiteigin fad air falbh. An dà chuid airson Object Storage (tha e a’ toirt taic don eadar-aghaidh S3), agus airson Mongo, tha pasgain Python goireasach.

Is e duilgheadas eile a th ’ann, gus a dhol gu Object Storage, MongoDB, agus stòr-dàta no stòr dàta sam bith eile, gu bheil feum agad air cuid de eisimeileachd bhon taobh a-muigh a dh’ fheumas tu a luchdachadh suas gu Gnìomhan Yandex còmhla ris a ’chòd gnìomh agad. Agus bu mhath leam a dhèanamh gu comhfhurtail. Tha e gu tur goireasach (mar air heroku), alas, chan obraich e, ach faodaidh tu beagan comhfhurtachd bunaiteach a chruthachadh le bhith a’ sgrìobhadh sgriobt gus an àrainneachd a thogail (dèan faidhle).

Mar a thòisicheas tu air sgil horoscope

  1. Dèan deiseil: rachaibh gu inneal le Linux. Ann am prionnsapal, is dòcha gun obraich thu le Windows cuideachd, ach an uairsin feumaidh tu co-dhùnadh le cur air bhog an makefile. Agus co-dhiù, feumaidh tu co-dhiù 3.6 Python a chuir a-steach.
  2. Clone bho github eisimpleir de sgil horoscope.
  3. Clàraich ann an Ya.Cloud: https://cloud.yandex.ru
  4. Cruthaich dhut fhèin dà bhucaid a-steach Stòradh nithean, gairm orra le ainm sam bith {BUCKET NAME} и tgalice-test-cold-storage (tha an t-ainm meadhanach seo a-nis air a chòdachadh gu cruaidh main.py mo eisimpleir). Bidh feum air a’ chiad bhucaid a-mhàin airson cleachdadh, an dàrna fear - airson stàitean deasbaid a stòradh.
  5. a 'cruthachadh cunntas seirbheis, thoir àite dha editor, agus faigh teisteanasan staitigeach air a shon {KEY ID} и {KEY VALUE} - cleachdaidh sinn iad gus staid a’ chòmhraidh a chlàradh. Tha feum air seo uile gus am faigh an gnìomh bho Ya.Cloud cothrom air an stòradh bho Ya.Cloud. Aon latha, tha mi an dòchas, thig an t-ùghdarras gu fèin-ghluasadach, ach airson a-nis - mar sin.
  6. (Roghainneil) stàladh eadar-aghaidh loidhne-àithne yc. Faodaidh tu cuideachd gnìomh a chruthachadh tron ​​​​eadar-aghaidh lìn, ach tha an CLI math oir tha a h-uile seòrsa innleachdas a’ nochdadh ann nas luaithe.
  7. A-nis faodaidh tu, gu dearbh, co-chruinneachadh eisimeileachd ullachadh: ruith air an loidhne-àithne bhon phasgan leis an eisimpleir sgil make all. Thèid dòrlach de leabharlannan (sa mhòr-chuid, mar as àbhaist, gun fheum) a chuir a-steach don phasgan dist.
  8. Lìon le pinn a-steach gu Rud Storage (a-steach do bhucaid {BUCKET NAME}) an tasglann a fhuaireadh sa cheum roimhe dist.zip. Ma thogras tu, faodaidh tu seo a dhèanamh bhon loidhne-àithne, mar eisimpleir, a’ cleachdadh AWS CLI.
  9. Cruthaich gnìomh gun fhrithealaiche tron ​​​​eadar-aghaidh lìn no a’ cleachdadh a’ ghoireas yc. Airson a’ ghoireas, seallaidh an àithne mar seo:

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

Nuair a chruthaicheas tu gnìomh le làimh, tha na paramadairean uile air an lìonadh san aon dòigh.

A-nis faodar an gnìomh a chruthaich thu a dhearbhadh tro chonsail an leasaiche, agus an uairsin crìoch a chuir air agus fhoillseachadh sgil.

A’ cruthachadh sgil stàiteil dha Alice air gnìomhan gun fhrithealaiche Yandex.Cloud agus Python

Dè tha fon chochall

Gu dearbh tha sgriobt gu math sìmplidh anns an fhaidhle makefile airson eisimeileachd a chuir a-steach agus an cur ann an tasglann dist.zip, rudeigin mar seo:

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

Is e an còrr beagan innealan sìmplidh ceangailte ann an leabharlann tgalice. Tha am pròiseas lìonadh dàta luchd-cleachdaidh air a mhìneachadh leis an 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Bidh an clas python a’ gabhail thairis an obair gus an rèiteachadh seo a pharsadh agus an toradh deireannach obrachadh a-mach

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

Nas mionaidiche, an clas bunaiteach FormFillingDialogManager an sàs ann a bhith a 'lìonadh a-mach an "foirm", agus an dòigh-obrach a' chlas chloinne handle_completed_form ag innse dè a nì i nuair a bhios i deiseil.

A bharrachd air a’ phrìomh shruth còmhraidh seo, feumar fàilte a chuir air an neach-cleachdaidh cuideachd, a bharrachd air cuideachadh a thoirt seachad air an àithne “cuideachadh” agus leigeil ma sgaoil bhon sgil air an àithne “fàgail”. Airson seo a-steach tgalice tha teamplaid ann cuideachd, agus mar sin tha am manaidsear còmhraidh gu lèir air a dhèanamh suas de phìosan:

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 ag obair gu sìmplidh: bidh e a’ feuchainn ri a h-uile pàirt a th’ anns a’ chòmhradh mu seach a chur an sàs ann an staid làithreach a’ chòmhraidh, agus a’ taghadh a’ chiad fhear iomchaidh.

Mar fhreagairt do gach teachdaireachd, tillidh am manaidsear deasbaid rud python Response, a dh'fhaodar an uairsin a thionndadh gu teacsa sìmplidh, no a-steach do theachdaireachd ann an Alice no Telegram - a rèir far a bheil am bot a 'ruith; tha e cuideachd a 'toirt a-steach staid atharraichte a' chòmhraidh a dh'fheumar a shàbhaladh. Tha an cidsin seo gu lèir air a làimhseachadh le clas eile, DialogConnector, agus mar sin tha an sgriobt dìreach airson sgil a thòiseachadh air Gnìomhan Yandex a’ coimhead mar seo:

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

Mar a chì thu, tha a’ mhòr-chuid den chòd seo a’ cruthachadh ceangal ris an eadar-aghaidh S3 de Object Storage. Mar a tha an ceangal seo air a chleachdadh gu dìreach, faodaidh tu leughadh ann an còd tgalice.
Tha an loidhne mu dheireadh a’ cruthachadh gnìomh alice_handler - an tè a dh 'òrduich sinn Yandex.Cloud a tharraing nuair a shuidhich sinn am paramadair --entrypoint=main.alice_handler.

Tha sin uile, gu dearbh. Dèan faidhlichean airson co-chruinneachadh, Stòradh Rud coltach ri S3 airson co-theacsa a stòradh, agus leabharlann Python tgalice. Còmhla ri feartan gun fhrithealaiche agus faireachdainn python, tha seo gu leòr airson sgil neach fallain a leasachadh.

Faodaidh tu faighneachd carson a dh'fheumas tu a chruthachadh tgalice? Tha a h-uile còd tollaidh a ghluaiseas JSONs bho iarrtas gu freagairt agus bho stòradh gu cuimhne agus air ais na laighe ann. Tha tagradh còd cunbhalach ann cuideachd, gnìomh airson tuigsinn gu bheil “Gearran” coltach ri “Gearran”, agus NLU eile dha na bochdan. A rèir mo bheachd-sa, bu chòir seo a bhith gu leòr mar-thà gus an urrainn dhut prototypes de sgilean a dhealbhadh ann am faidhlichean yaml gun a bhith air do tharraing cus le mion-fhiosrachadh teicnigeach.

Ma tha thu ag iarraidh NLU nas cunnartaiche, faodaidh tu a chuir a-steach don sgil agad Rasa no Deep Pavlov, ach airson an stèidheachadh bidh feum air dannsadh a bharrachd le tambourine, gu h-àraidh air luchd-frithealaidh. Mura h-eil thu a’ faireachdainn mar chòdadh idir, bu chòir dhut an inneal-togail seòrsa lèirsinneach a chleachdadh aimligeach. Nuair a bha mi a’ cruthachadh tgalice, smaoinich mi air seòrsa de shlighe eadar-mheadhanach. Chì sinn dè thachras.

Uill, a-nis thig còmhla Aliy sgilean leasaiche cabadaich, leugh sgrìobhainneanagus cruthaich iongantach sgilean!

Source: www.habr.com

Cuir beachd ann