Fausiaina o se tomai fa'apitoa mo Alice e fa'aaoga ai galuega e leai se server a Yandex.Cloud ma Python

Tatou amata i tala fou. O ananafi na fa'alauiloa ai e Yandex.Cloud le fa'alauiloaina o se tautua fa'akomepiuta e leai se server Yandex Cloud Galuega. O lona uiga: e te tusia naʻo le code mo lau 'auʻaunaga (mo se faʻataʻitaʻiga, se upega tafaʻilagi poʻo se chatbot), ma o le Cloud lava ia na te fatuina ma tausia masini komepiuta i le mea e taʻavale ai, ma e oʻo lava i le toe faia pe a faʻateleina le uta. E te le manaʻomia lava ona e mafaufau, e faigofie tele. Ma o le totogifuapauina e naʻo le taimi faʻatatau.

Ae ui i lea, o nisi atonu e le totogia uma. O i latou ia na atiaeina Tomai fafo o Alice, o lona uiga, chatbots fausia i totonu. E mafai e soʻo se tagata atiaʻe ona tusi, faʻafeiloaʻi ma resitala sea tomai, ma mai aso nei e le manaʻomia le faʻafeiloaʻi o tomai - naʻo le lafoina o latou code i le ao i le fomu. le galuega e tasi e leai se server.

Ae o loʻo i ai ni nai nuances. Muamua, o lau pit code atonu e manaʻomia ni faʻalagolago, ma le tosoina i totonu o le Ao e le o se mea faatauvaa. Lona lua, so'o se chatbot masani e mana'omia le teuina o le tulaga o le talanoaga i se mea (stateful lea); O le a le auala sili ona faigofie e fai ai lenei mea i se galuega e leai se server? Lona tolu, e fa'afefea ona e tusia se tomai vave-ma-palapala mo Alice po'o se ituaiga bot ma se fuafuaga e le-zero? O le tusiga, o le mea moni, e uiga i nei nuances.

Fausiaina o se tomai fa'apitoa mo Alice e fa'aaoga ai galuega e leai se server a Yandex.Cloud ma Python

Sauniuniga tau amio

Mo le le onosaʻi: Ou te aoina faʻalagolago e manaʻomia ma se faifile aʻo leʻi tuʻuina atu le galuega i le ao, ou te teuina le tulaga o le talanoaga i le Yandex Object Storage (e lagolagoina le S3 API), ma ou te faʻaogaina laʻu lava faletusi e pulea ai le talanoaga tgalice. I le faaiuga e aliali mai a sea tomai fa'aali. Se'i o tatou va'ai i nei mea uma i se fa'amatalaga atili.

Mo i latou e le lava le onosaʻi, aʻo leʻi faʻafefe i laʻu tala e uiga i le lavelave, ou te matua fautuaina e amata i se mea faigofie. O lona uiga, faia se galuega echobot e tasi-faila, resitala ma suʻe i le Dialogs developer console; fa'amatalaga - in Dialogues blog и Fa'amaumauga ao. Ona faatoa amata lea.

Afai e te manaʻo e vave lagona le mea o loʻo matou tauivi ai iinei, fesili ia Alice 'mafai ai le tomai "IT horoscope".'. E tatau ona tupu se talanoaga e pei o mea nei:

Alisa: Talofa! O oe i le "IT Horoscope" tomai. Fai atu “Amata” e saili ai po o le a le folafolaga a fetu ia te oe.
Tagata fa'aoga: Amata
A: Fa'amolemole ta'u mai lou igoa
Yu: Vasisualiy
A: Ta'u mai nei le tausaga na e fanau mai ai. Na'o le fa numera, leai se fa'aopoopo.
Yu: lona lua
A: Fa'amolemole toe taumafai. Ulufale mai le tausaga na e fanau ai - fa numera.
Iu: 2002
A: Manaia! Ta'u nei lou masina fanau mai.
Yu: Fepuari
A: Manaia! Mulimuli ane, ta'u mai lou aso fanau - na'o se numera, tasi pe lua numera.
Iu: 18
A: Faafetai, Vasisualiy! O lea ua matou iloa: ua 17 ou tausaga ma le Aquarius. Ia, ioe, ua e laki! Ua taʻu atu e fetu ia te oe: а что говорят звёзды, вы узнаете, запустив навык.

O le faʻafitauli o le faʻatumauina e oʻo lava i se talanoaga faigofie, e tatau ona e manatua le igoa o le tagata faʻaoga ma le aso fanau, ma i totonu o se siosiomaga e leai se server e le o se mea faatauvaa. O le a le mafai ona teuina le tala i le RAM poʻo se faila i luga ole disk, aua E mafai e Yandex.Cloud ona fa'atino se galuega i luga o le tele o masini masini i le taimi e tasi ma fesuia'i i le va o latou i le loto. E tatau ona e fa'aogaina se ituaiga mea e teu ai fafo. O le Teuina o Mea na filifilia e pei o se teu taugofie ma le faʻalavelave faʻapipiʻi saʻo i Yandex.Cloud (o lona uiga, atonu vave). I le avea ai o se isi mea e leai se totogi, e mafai ona e taumafai, mo se faʻataʻitaʻiga, se vaega e leai se totogi Monga ao i se mea mamao. O loʻo i ai faʻapipiʻi Python talafeagai mo mea uma e teu ai (lea e lagolagoina le S3 interface) ma Mongo.

O le isi faʻafitauli o le faʻaogaina lea o le Object Storage, MongoDB, ma soʻo se isi faʻamaumauga poʻo faʻamaumauga faʻamaumauga, e te manaʻomia ni faʻalagolago i fafo e manaʻomia ona tuʻuina atu i Yandex Functions faʻatasi ai ma lau code code. Ma ou te fia faia lenei mea i se auala faigofie. Ae paga lea, o le a le faigofie atoatoa (pei o Heroku), ae o nisi faʻamafanafanaga masani e mafai ona fatuina e ala i le tusiaina o se tusitusiga e fausia ai le siosiomaga (faia faila).

E faʻafefea ona faʻalauiloa se tomai o le horoscope

  1. Saunia: alu i se masini ma Linux. I le mataupu faavae, atonu e mafai foi ona e galue ma Windows, ae e tatau ona e faia se togafiti faʻataulāitu i le faʻalauiloaina o le makefile. Ma i soʻo se tulaga, e te manaʻomia le itiiti ifo i le Python 3.6 faʻapipiʻi.
  2. Faʻapipiʻi mai Github faʻataʻitaʻiga o tomai faʻataʻitaʻi.
  3. Resitala ile Y.Cloud: https://cloud.yandex.ru
  4. Fausia lua pakete i totonu Lisi Meafaitino, valaau i latou i soo se igoa {BUCKET NAME} и tgalice-test-cold-storage (o lenei igoa lona lua ua fa'amalo i totonu main.py la'u faataitaiga). O le pakete muamua o le a manaʻomia naʻo le faʻapipiʻiina, o le lona lua - e teu ai faʻasalalauga setete.
  5. faia tala o auaunaga, tuu atu ia te ia se matafaioi editor, ma maua ni fa'amatalaga fa'amaonia mo ia {KEY ID} и {KEY VALUE} - o le a matou faʻaaogaina e faʻamaumau ai le tulaga o le talanoaga. O nei mea uma e manaʻomia ina ia mafai e se galuega mai le Ya.Cloud ona maua le teuina mai Ya.Cloud. I se aso, ou te faʻamoemoe, o le faʻatagaina o le a otometi, ae mo le taimi nei e faʻapea.
  6. (Filifili) fa'apipi'i fa'atonuga laina laina yc. E mafai foi ona e fatuina se galuega e ala i le upega tafaʻilagi, ae o le CLI e lelei ona o ituaiga uma o mea fou e aliali mai i totonu vave.
  7. O lea e mafai ona e saunia moni le faʻapotopotoga faʻalagolago: faʻataʻitaʻi i luga o le laina faʻatonu mai le faila ma le faʻataʻitaʻiga tomai make all. O le tele o faletusi (tele, pei ona masani ai, e le manaʻomia) o le a faʻapipiʻiina i totonu o le faila dist.
  8. Liligi i totonu o le Mea e teu ai mea i le lima (i totonu o le pakete {BUCKET NAME}) archive maua i le laasaga muamua dist.zip. Afai e manaʻomia, e mafai ona e faia lenei mea mai le laina faʻatonu, mo se faʻataʻitaʻiga, faʻaaogaina AWS CLI.
  9. Fausia se galuega e leai se server e ala i le upega tafaʻilagi poʻo le faʻaaogaina o se aoga yc. Mo le aoga, o le poloaiga o le a pei o lenei:

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

Pe a fatuina se galuega ma le lima, o faʻamau uma e faʻatumu i le auala lava e tasi.

O le taimi nei o le galuega na e faia e mafai ona faʻataʻitaʻiina e ala i le developer console, ona mafai lea ona faʻaleleia ma faʻasalalau le tomai.

Fausiaina o se tomai fa'apitoa mo Alice e fa'aaoga ai galuega e leai se server a Yandex.Cloud ma Python

O le a le mea i lalo o le pulou

O le makefile o loʻo i ai moni lava se tusitusiga faigofie mo le faʻapipiʻiina o faʻalagolago ma tuʻu i totonu o se faʻamaumauga dist.zip, e pei o lenei:

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

O le vaega o totoe o nai meafaigaluega faigofie e afifi i totonu o se faletusi tgalice. O le fa'agasologa o le fa'atumuina o fa'amaumauga a tagata fa'aoga o lo'o fa'amatalaina e le 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

O le galuega o le faʻavasegaina o lenei config ma le faʻatusatusaina o le iʻuga mulimuli e ave e le vasega Python

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

E sili atu le saʻo, o le vasega faavae FormFillingDialogManager e fa'atatau i le fa'atumuina o le "fomu", ma le metotia a tamaiti handle_completed_form ta'u atu ia te ia le mea e fai pe a sauni.

I le faaopoopo atu i lenei tafega autu o talanoaga, e tatau foi ona faʻafeiloaʻi le tagata faʻaoga, faʻapea foʻi ma le tuʻuina atu o le fesoasoani i le faʻaaogaina o le "fesoasoani" poloaiga ma faʻasaʻolotoina mai le tomai e faʻaaoga ai le poloaiga "fafo". Mo lenei faamoemoe i tgalice O loʻo i ai foʻi se faʻataʻitaʻiga, o lea o le pule o talanoaga uma e faia i vaega:

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 E faigofie lava: e taumafai e faʻaoga uma ona vaega i le tulaga o loʻo i ai nei o le talanoaga i le isi itu, ma filifili le mea muamua talafeagai.

E toe faafoi mai e le pule o le talanoaga se mea Python e fai ma tali i savali taitasi. Response, lea e mafai ona liua i tusitusiga manino, poʻo se feʻau i Alice poʻo Telegram - faʻalagolago i le mea o loʻo tamoe ai le bot; o loʻo iai foʻi le suiga o le tulaga o le talanoaga e manaʻomia ona faʻasaoina. O lenei umukuka atoa e taulimaina e se isi vasega, DialogConnector, o lea o le faʻamatalaga tuusaʻo mo le faʻalauiloaina o se tomai ile Yandex Functions e pei o lenei:

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

E pei ona mafai ona e vaʻaia, o le tele o lenei code e fatuina ai se fesoʻotaʻiga i le S3 interface o le Object Storage. E mafai ona e faitau pe faʻafefea ona faʻaoga saʻo lenei fesoʻotaʻiga i tgalice code.
O le laina mulimuli e fatuina ai le galuega alice_handler - o le mea lava e tasi na matou taʻu atu ia Yandex.Cloud e toso pe a matou setiina le parakalafa --entrypoint=main.alice_handler.

Na'o le mea moni lava. Faia faila mo le faʻapotopotoga, S3-pei o le Object Storage mo le teuina o tala, ma le Python library tgalice. Faʻatasi ma galuega e leai se server ma le faʻaalia o le Python, ua lava lea e atiaʻe ai se tomai soifua maloloina.

Atonu e te fesili pe aisea na tatau ai ona faia tgalice? O tulafono faʻafefe uma e faʻafeiloaʻi JSON mai le talosaga i le tali ma mai le teuina i le manatua ma tua o loʻo taoto i totonu. O loʻo i ai foʻi se faʻatonuga faʻasologa masani, o se galuega mo le malamalama o le "Fepuari" e tutusa ma le "Fepuari", ma isi NLU mo e matitiva. E tusa ai ma loʻu manatu, e tatau ona lava lea e mafai ai ona e tusia faʻataʻitaʻiga o tomai i faila yaml e aunoa ma le faʻalavelaveina i faʻamatalaga faʻapitoa.

Afai e te manaʻo i se NLU sili atu ona ogaoga, e mafai ona e faʻapipiʻi i lou tomai Lagona poʻo DeepPavlov, ae o le setiina o le a manaʻomia ai siva faaopoopo ma se topa, aemaise lava i luga ole serverless. Afai e te le manaʻo e faʻailogaina uma, e tatau ona e faʻaogaina se faʻataʻitaʻiga foliga pei Aimylogic. I le fatuina o le tgalice, sa ou mafaufau i se ituaiga o auala vavalalata. Sei o tatou vaai po o le a le mea e oo mai i lenei mea.

Ia, ia auai nei talatalanoaga faufau tomai alise, faitau fa'amaumauga, ma foafoa matagofie tomai!

puna: www.habr.com

Faaopoopo i ai se faamatalaga