Ƙirƙirar fasaha mai mahimmanci ga Alice akan ayyukan Yandex.Cloud da Python mara amfani

Bari mu fara da labarai. Jiya Yandex.Cloud ta sanar da ƙaddamar da sabis ɗin kwamfuta mara sabar Ayyukan Yandex Cloud. Wannan yana nufin: kawai kuna rubuta lambar don sabis ɗin ku (misali, aikace-aikacen gidan yanar gizo ko chatbot), kuma Cloud da kanta ke ƙirƙira da kula da injunan kama-da-wane inda suke aiki, har ma da maimaita su idan nauyin ya ƙaru. Ba kwa buƙatar yin tunani kwata-kwata, ya dace sosai. Kuma biyan kuɗi ne kawai don lokacin lissafin.

Koyaya, wasu ƙila ba za su biya komai ba. Waɗannan su ne masu haɓakawa Kwarewar waje na Alice, wato chatbots da aka gina a ciki. Duk wani mai haɓakawa na iya rubutawa, ɗaukar nauyi da yin rijista irin wannan fasaha, kuma daga yau ƙwarewar ba sa buƙatar ɗaukar bakuncin - kawai loda lambar su zuwa gajimare a cikin tsari. wannan aikin mara amfani.

Amma akwai wasu nuances. Da fari dai, lambar ramin ku na iya buƙatar wasu abubuwan dogaro, kuma ja su cikin Cloud ba ƙaramin abu bane. Na biyu, duk wani al'ada chatbot yana buƙatar adana yanayin tattaunawar a wani wuri (don haka na gaskiya); Menene hanya mafi sauƙi don yin wannan a cikin aikin mara amfani? Na uku, ta yaya za ku iya rubuta fasaha mai sauri da datti ga Alice ko ma wani nau'in bot tare da makirci mara sifili? Labarin shine, a zahiri, game da waɗannan nuances.

Ƙirƙirar fasaha mai mahimmanci ga Alice akan ayyukan Yandex.Cloud da Python mara amfani

Shiri na ɗabi'a

Ga marasa haƙuri: Ina tattara abubuwan dogaro masu mahimmanci tare da makefile kafin loda aikin zuwa gajimare, Ina adana yanayin maganganun a cikin Adana Abubuwan Yandex (yana goyan bayan API S3), kuma ina amfani da ɗakin karatu na kaina don sarrafa maganganun. gabace. A ƙarshe ya juya irin wannan demo basira. Yanzu bari mu kalli wannan duka dalla-dalla.

Ga waɗanda ba su da haƙuri kaɗan, kafin in shiga cikin labarina game da rikitarwa, Ina ba da shawarar farawa da wani abu mai sauƙi. Wato, ƙirƙiri aikin echobot fayil guda ɗaya, yi rajista da gwada shi a cikin na'ura mai haɓakawa na Dialogs; bayanai - in Blog ɗin tattaunawa и Takardun Cloud. Kuma kawai sai a fara.

Idan kuna son jin abin da muke faɗa a nan, ku tambayi Alice 'ba da damar fasahar "horoscope IT".'. Ya kamata a yi tattaunawa mai kama da haka:

Alice: Hello! Kuna cikin fasaha na "IT Horoscope". Ka ce "Fara" don gano abin da taurari suka yi maka alkawari.
Mai amfani: Fara
A: Don Allah a faɗi sunan ku
Yu: Vasisuali
A: Yanzu gaya mani shekarar haihuwar ku. Lambobi huɗu kawai, babu ƙari.
Yu: biyu
A: Da fatan za a sake gwadawa. Shigar da shekarar haihuwar ku - lambobi huɗu.
Yau: 2002
A: Babban! Yanzu sunan watan haihuwar ku.
Yau: Fabrairu
A: Babban! A ƙarshe, gaya mani ranar haihuwar ku - lamba kawai, lambobi ɗaya ko biyu kawai.
Yau: 18
A: Na gode, Vasisualiy! Yanzu mun san: kun kasance shekaru 17 da Aquarius. To, ba shakka, kuna da sa'a! Taurari suna gaya muku: а что говорят звёзды, вы узнаете, запустив навык.

Matsalar ita ce don kiyaye ko da irin wannan tattaunawa mai sauƙi, kuna buƙatar tunawa da sunan mai amfani da ranar haihuwa, kuma a cikin yanayin aiki mara amfani wannan ba ƙaramin abu bane. Ba zai yiwu a adana mahallin a cikin RAM ko azaman fayil akan faifai ba, saboda Yandex.Cloud na iya gudanar da aiki akan injunan kama-da-wane da yawa a lokaci guda kuma ya canza tsakanin su yadda ya kamata. Dole ne ku yi amfani da wani nau'in ma'ajiyar waje. An zaɓi Ma'ajiyar Abu azaman ma'ajiya mai ƙarancin tsada kuma mara rikitarwa kai tsaye a cikin Yandex.Cloud (watau ƙila mai sauri). A matsayin madadin kyauta, zaku iya gwadawa, misali, yanki kyauta Cloudy Monga wani wuri mai nisa. Akwai ingantattun kayan aikin Python don duka Abubuwan Adana Abubuwan (wanda ke goyan bayan ƙirar S3) da Mongo.

Wata matsala ita ce don samun damar Ma'ajiyar Abu, MongoDB, da duk wani rumbun adana bayanai ko ma'ajin bayanai, kuna buƙatar wasu abubuwan dogaro na waje waɗanda ke buƙatar loda su zuwa Ayyukan Yandex tare da lambar aikinku. Kuma ina so in yi wannan a dace. Abin takaici, ba zai zama cikakke cikakke ba (kamar akan Heroku), amma ana iya ƙirƙirar wasu ta'aziyya ta asali ta hanyar rubuta rubutun don gina yanayi (yi fayil).

Yadda za a kaddamar da fasahar horoscope

  1. Shirya: je zuwa wasu na'ura tare da Linux. A ka'ida, ƙila za ku iya aiki tare da Windows kuma, amma sai ku yi wasu sihiri tare da ƙaddamar da makefile. Kuma a kowane hali, kuna buƙatar aƙalla shigar da Python 3.6.
  2. Cire shi daga Github misali na horoscope.
  3. Yi rijista a Y.Cloud: https://cloud.yandex.ru
  4. Ƙirƙiri kanku guga biyu a ciki Kayan Abinci, kira su da kowane suna {BUCKET NAME} и tgalice-test-cold-storage (wannan suna na biyu yanzu an sanya shi a ciki main.py misali). Za a buƙaci guga na farko kawai don turawa, na biyu - don adana jihohin maganganu.
  5. ƙirƙiri asusun sabis, ku ba shi matsayi editor, kuma a sami madaidaicin takaddun shaida a gare shi {KEY ID} и {KEY VALUE} - za mu yi amfani da su don yin rikodin yanayin tattaunawar. Ana buƙatar duk wannan don wani aiki daga Ya.Cloud zai iya samun damar ajiya daga Ya.Cloud. Wata rana, ina fata, izini zai zama atomatik, amma a yanzu haka yake.
  6. (Na zaɓi) shigar dubawar layin umarni yc. Hakanan zaka iya ƙirƙirar aiki ta hanyar haɗin yanar gizo, amma CLI yana da kyau saboda kowane nau'in sabbin abubuwa suna bayyana a cikinsa da sauri.
  7. Yanzu zaku iya shirya taron dogaro da gaske: gudanar da shi akan layin umarni daga babban fayil tare da misalin fasaha make all. Za a shigar da tarin ɗakunan karatu (mafi yawa, kamar yadda aka saba, waɗanda ba dole ba) a cikin babban fayil ɗin dist.
  8. Zuba cikin Ma'ajiyar Abu da hannu (a cikin guga {BUCKET NAME}) Taskar da aka samu a mataki na baya dist.zip. Idan ana so, zaku iya yin wannan daga layin umarni, misali, ta amfani da Farashin AWS CLI.
  9. Ƙirƙirar aiki mara sabar ta hanyar yanar gizo ko amfani da kayan aiki yc. Don amfanin, umarnin zai yi kama da haka:

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

Lokacin ƙirƙirar aiki da hannu, duk sigogi ana cika su ta hanya ɗaya.

Yanzu ana iya gwada aikin da kuka ƙirƙira ta hanyar na'ura mai haɓakawa, sannan za'a iya inganta fasaha da buga shi.

Ƙirƙirar fasaha mai mahimmanci ga Alice akan ayyukan Yandex.Cloud da Python mara amfani

Abin da ke ƙarƙashin kaho

Makefile a zahiri yana ƙunshe da ingantaccen rubutu mai sauƙi don shigar da abin dogaro da sanya su cikin ma'ajiyar bayanai dist.zip, kamar haka:

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

Sauran 'yan kayan aiki ne masu sauƙi a nannade cikin ɗakin karatu tgalice. An kwatanta tsarin cika bayanan mai amfani ta hanyar daidaitawa 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Aikin tantance wannan saitin da ƙididdige sakamakon ƙarshe na aji Python ne ke ɗaukar nauyinsa

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

Fiye da daidai, ajin tushe FormFillingDialogManager yayi ma'amala da cike "form", da tsarin ajin yara handle_completed_form ya gaya mata abinda zata yi idan ta shirya.

Baya ga wannan babbar hanyar tattaunawa, dole ne a gaishe mai amfani, tare da ba da taimako ta amfani da umarnin "taimako" kuma a sake shi daga fasaha ta amfani da umarnin "fita". Don wannan dalili in tgalice Hakanan akwai samfuri, don haka gabaɗayan manajan maganganu ya ƙunshi guntu-guntu:

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 Yana aiki a sauƙaƙe: yana ƙoƙarin aiwatar da duk abubuwan da ke tattare da shi zuwa yanayin tattaunawar yanzu, kuma ya zaɓi wanda ya dace na farko.

Manajan maganganu yana mayar da wani abu Python azaman martani ga kowane saƙo. Response, wanda za'a iya canza shi zuwa rubutu na fili, ko kuma zuwa saƙo a Alice ko Telegram - ya danganta da inda bot ɗin ke gudana; ya kuma ƙunshi canjin yanayin tattaunawar da ke buƙatar ceto. Wannan kitchen din gaba daya wani class ne ke kula da shi. DialogConnector, don haka rubutun kai tsaye don ƙaddamar da fasaha akan Ayyukan Yandex yayi kama da haka:

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

Kamar yadda kake gani, yawancin wannan lambar suna haifar da haɗin kai zuwa S3 interface na Ma'ajiyar Abu. Kuna iya karanta yadda ake amfani da wannan haɗin kai tsaye in tgalice code.
Layin ƙarshe yana ƙirƙirar aikin alice_handler - guda ɗaya da muka gaya wa Yandex.Cloud ya ja lokacin da muka saita siga --entrypoint=main.alice_handler.

Wannan ke nan, a zahiri. Makefiles don taro, S3-kamar Ma'ajiyar Abun don adana mahallin, da ɗakin karatu na Python tgalice. Haɗe tare da ayyuka marasa uwar garken da bayyana ma'anar Python, wannan ya isa ya haɓaka ƙwarewar ɗan adam mai lafiya.

Kuna iya tambayar dalilin da yasa ya zama dole don ƙirƙirar tgalice? Duk lambar mai ban sha'awa wacce ke canja wurin JSONs daga buƙatun zuwa amsa kuma daga ajiya zuwa ƙwaƙwalwar ajiya da baya yana cikinsa. Hakanan akwai aikace-aikacen lamba na yau da kullun, aikin don fahimtar cewa "Fabrairu" yayi kama da "Fabrairu", da sauran NLU ga matalauta. Bisa ga ra'ayina, wannan ya riga ya isa don ku iya zana nau'ikan ƙwarewa a cikin fayilolin yaml ba tare da cikakkun bayanai na fasaha sun shagaltar da ku ba.

Idan kuna son NLU mai mahimmanci, kuna iya haɗa shi zuwa ƙwarewar ku Rasa ko DeepPavlov, amma kafa su zai buƙaci ƙarin raye-raye tare da tambourine, musamman a kan uwar garke. Idan ba kwa jin son yin codeing kwata-kwata, ya kamata ku yi amfani da maginin gani kamar Aimylogic. Lokacin ƙirƙirar tgalice, na yi tunani game da wata hanyar tsaka-tsaki. Bari mu ga abin da ya zo na wannan.

To, yanzu shiga alice skills developer chat, karanta takardun shaida, kuma ƙirƙirar ban mamaki basira!

source: www.habr.com

Add a comment