Ho theha tsebo e ntle bakeng sa Alice mabapi le mesebetsi e se nang seva ea Yandex.Cloud le Python

Ha re qaleng ka litaba. Maobane Yandex.Cloud e phatlalalitse ho thakholoa ha ts'ebeletso ea komporo e se nang seva Mesebetsi ea Yandex Cloud. Sena se bolela: o ngola khoutu feela bakeng sa ts'ebeletso ea hau (mohlala, ts'ebeliso ea webo kapa chatbot), 'me Cloud ka boeona e theha le ho boloka mechini e sebetsang moo e sebetsang teng, e bile e e pheta haeba mojaro o eketseha. Ha ua tlameha ho nahana ho hang, ho bonolo haholo. 'Me tefo ke ea nako ea ho bala feela.

Leha ho le joalo, batho ba bang ba ka ’na ba se ke ba lefa ho hang. Bana ke bahlahisi Tsebo ea kantle ea Alice, ke hore, li-chatbots tse hahiloeng ho eona. Moqapi leha e le ofe a ka ngola, a amohela le ho ngolisa tsebo e joalo, 'me ho tloha kajeno litsebo ha li hloke ho amoheloa - feela kenya khoutu ea bona lerung ka foromo. ts'ebetso e ts'oanang e se nang seva.

Empa ho na le li-nuances tse 'maloa. Taba ea pele, khoutu ea hau ea sekoti e kanna ea hloka lintho tse ling tse itšetlehileng ka tsona, 'me ho li hulela ka har'a Cloud ha ho na taba. Taba ea bobeli, chatbot efe kapa efe e tloaelehileng e hloka ho boloka boemo ba lipuisano kae-kae (ka hona, ka mokhoa o hlakileng); joang ho e etsa ka serverless tshebetso ka tsela e bonolo ka ho fetisisa? Taba ea boraro, u ka ngola joang bokhoni bo potlakileng le bo litšila bakeng sa Alice kapa mofuta o mong oa bot o nang le morero o seng oa zero? Mabapi le li-nuances tsena, ha e le hantle, sengoloa.

Ho theha tsebo e ntle bakeng sa Alice mabapi le mesebetsi e se nang seva ea Yandex.Cloud le Python

ho lokisetsa boitšoaro

Bakeng sa ba hlokang mamello: Ke bokella litšepiso tse hlokahalang ka makefile pele ke kenya ts'ebetso ho leru, ke boloka boemo ba puisano ho Yandex Object Storage (e tšehetsa S3 API), 'me ke sebelisa laebrari ea ka ho laola puisano. tgalice. Ka lebaka leo, e hlaha joalo tsebo ea demo. Joale ha re shebeng tsena tsohle ka botlalo haholoanyane.

Bakeng sa ba hlokang mamello hanyane, pele ke kenella pale ea ka ea ho rarahana, ke khothaletsa haholo ho qala ka mokhoa o bonolo. E leng, theha mosebetsi oa echobot oa faele e le 'ngoe, ngodisa le ho e leka ho Dialog developer console; lintlha - ho Lipuisano tsa Blog и leru litokomane. 'Me feela ka nako eo qala.

Haeba u batla ho utloa hang-hang seo re se loanelang, botsa Alice 'bulela tsebo ea "IT horoscope"'. Lipuisano tse latelang li lokela ho etsahala:

Alice: Lumela! O tsebong ea "IT horoscope". E re "Qala" ho fumana hore na linaleli li u tšepisa eng.
Mosebedisi: Qala
A: Ka kopo bolela lebitso la hau.
Yu: Vasisualy
A: Joale mpolelle selemo sa tsoalo ea hau. Ke linomoro tse 'ne feela, ha ho letho hape.
Yu: ea bobeli
A: Ke kopa o leke hape. Kenya selemo sa tsoalo ea hau - linomoro tse 'nè.
Selemo: 2002
A: E kholo! Joale bolela khoeli ea tsoalo ea hau.
Yu: Hlakola
A: E kholo! Qetellong, mpolelle letsatsi la tsoalo - palo feela, nomoro e le 'ngoe kapa tse peli.
Selemo: 18
A: Kea leboha, Vasisual! Hona joale rea tseba: u lilemo li 17 le Aquarius. Ehlile, o lehlohonolo! Linaleli lia u bolella а что говорят звёзды, вы узнаете, запустив навык.

Bothata ke hore ho boloka le puisano e bonolo joalo, o hloka ho hopola lebitso le letsatsi la tsoalo ea mosebelisi, 'me sebakeng se se nang seva sena ha se ntho e nyane. E ke ke ea sebetsa ho boloka moelelo oa RAM kapa joalo ka faele ho disk, hobane Yandex.Cloud e ka tsamaisa ts'ebetso ho mechini e mengata ea nnete ka nako e le 'ngoe' me ea fetola lipakeng tsa eona ntle le mabaka. U tla tlameha ho sebelisa mofuta o itseng oa polokelo ea kantle. Object Storage e khethiloe e le polokelo e theko e tlaase le e bonolo ka kotloloho ho Yandex.Cloud (ke hore, mohlomong ka potlako). E le mokhoa o sa lefelloeng, o ka leka, mohlala, sengoathoana sa mahala Lefu Mongi kae kae hole. Ka bobeli Object Storage (e tšehetsa sebopeho sa S3) mme Mongo e na le li-wrappers tse bonolo tsa Python.

Bothata bo bong ke hore e le hore u ee ho Object Storage, MongoDB, le polokelong efe kapa efe kapa lebenkele la data, u hloka litšepiso tse ling tsa kantle tseo u hlokang ho li kenya ho Yandex Functions hammoho le khoutu ea hau ea ts'ebetso. Mme ke rata ho e etsa ka boiketlo. E loketse ka ho feletseng (joaloka heroku), oho, e ke ke ea sebetsa, empa u ka etsa matšeliso a mang a motheo ka ho ngola script ho haha ​​tikoloho (etsa faele).

Mokhoa oa ho qala tsebo ea horoscope

  1. Itokise: e ea mochining o mong o nang le Linux. Ha e le hantle, u ka 'na ua sebetsa le Windows hape, empa joale u tla tlameha ho etsa boselamose ka ho qala makefile. Mme leha ho le joalo, o tla hloka bonyane Python 3.6 e kentsoe.
  2. Clone ho tloha github mohlala oa tsebo ea horoscope.
  3. Ngolisa ho Ya.Cloud: https://cloud.yandex.ru
  4. Iketsetse linkho tse peli ka hare Ntho ea ho bolokoa ha lintho, ba bitse ka mabitso afe kapa afe {BUCKET NAME} и tgalice-test-cold-storage (lebitso lena la bohareng le se le ngotsoe ka thata main.py mohlala oa ka). Bakete ea pele e tla hlokahala feela bakeng sa ho romelloa, ea bobeli - bakeng sa ho boloka linaha tsa lipuisano.
  5. bopa akhaonto ea tšebeletso, mo fe karolo editor, 'me u fumane mangolo a nepahetseng bakeng sa eona {KEY ID} и {KEY VALUE} - re tla li sebelisa ho hatisa boemo ba moqoqo. Sena sohle sea hlokahala e le hore ts'ebetso e tsoang ho Ya.Cloud e ka fihlella polokelo ho tsoa ho Ya.Cloud. Ka letsatsi le leng, ke ts'epa hore tumello e tla ikemela, empa hajoale - ho joalo.
  6. (Boikhethelo) kenya taelo mola oa segokanyimmediamentsi sa sebolokigolo yc. U ka boela ua etsa mosebetsi ka sebopeho sa websaete, empa CLI e ntle hobane mefuta eohle ea mekhoa e mecha e hlaha ho eona ka potlako.
  7. Hona joale o ka lokisa kopano ea ho itšetleha: matha molaong oa taelo ho tloha foldareng ka mohlala oa bokhoni make all. Sehlopha sa lilaebrari (haholo-holo, joalo ka tloaelo, ho sa hlokahale) se tla kenngoa foldareng dist.
  8. Tlatsa ka lipene ka har'a Object Storage (ka nkhong {BUCKET NAME}) polokelo e fumanoeng mohatong o fetileng dist.zip. Haeba o lakatsa, o ka etsa sena ho tsoa molaong oa taelo, mohlala, ho sebelisa AWS CLI.
  9. Theha ts'ebetso e se nang seva ka sehokelo sa marang-rang kapa u sebelisa sesebelisoa yc. Bakeng sa ts'ebeliso, taelo e tla shebahala tjena:

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

Ha u etsa ts'ebetso ka letsoho, li-parameter tsohle li tlatsitsoe ka mokhoa o ts'oanang.

Hona joale ts'ebetso eo u e entseng e ka lekoa ka developer console, 'me joale tsebo e ka ntlafatsoa le ho hatisoa.

Ho theha tsebo e ntle bakeng sa Alice mabapi le mesebetsi e se nang seva ea Yandex.Cloud le Python

Ke eng e tlas'a sekoti

Makefile ha e le hantle e na le script e bonolo bakeng sa ho kenya litšepiso le ho li kenya polokelong ea litaba dist.zip, ntho e kang ena:

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

Tse ling kaofela ke lisebelisoa tse seng kae tse bonolo tse phuthetsoeng ka laebraring tgalice. Mokhoa oa ho tlatsa lintlha tsa mosebelisi o hlalosoa ke 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Sehlopha sa python se nka mosebetsi oa ho hlophisa tlhophiso ena le ho bala sephetho sa ho qetela

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

Hantle-ntle, sehlopha sa motheo FormFillingDialogManager e kopanela ho tlatsa "foromo", le mokhoa oa sehlopha sa bana handle_completed_form o bolella seo a lokelang ho se etsa ha a se a loketse.

Ho phaella ho phallo ena e ka sehloohong ea moqoqo oa mosebedisi, ho boetse hoa hlokahala ho lumelisa mosebedisi, hammoho le ho fana ka thuso ka taelo ea "thuso" le ho lokolloa ho tsebo ka taelo ea "tsoa". Bakeng sa sena tgalice Hape ho na le template, kahoo mookameli oa lipuisano o entsoe ka likotoana:

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 sebetsa ka mokhoa o bonolo: e leka ho sebelisa likarolo tsohle tsa eona ho boemo ba hona joale ba moqoqo, 'me e khetha ea pele e loketseng.

E le karabo ea molaetsa o mong le o mong, mookameli oa puisano o khutlisetsa ntho ea python Response, e ka fetoloang hore e be mongolo o hlakileng, kapa molaetsa ho Alice kapa Telegram - ho itšetlehile ka hore na bot e sebetsa hokae; e boetse e na le boemo bo fetohileng ba puisano e hlokang ho bolokoa. Kichine ena kaofela e sebetsoa ke sehlopha se seng, DialogConnector, kahoo mongolo o tobileng oa ho qala tsebo ho Yandex Functions o shebahala tjena:

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

Joalo ka ha u bona, boholo ba khoutu ena bo theha khokahano ho sebopeho sa Object Storage S3. Mokhoa ona oa ho hokahanya o sebelisoa ka ho toba joang, u ka bala ka khoutu ea tgalice.
Mola oa ho qetela o etsa mosebetsi alice_handler - eona eo re e boleletseng Yandex.Cloud hore e hule ha re beha parameter --entrypoint=main.alice_handler.

Seo, ha e le hantle, ke sona feela. Makefiles bakeng sa kopano, S3-like Object Storage bakeng sa ho boloka taba, le laeborari ea Python tgalice. Ha e kopantsoe le mesebetsi e se nang seva le ho hlakisa Python, sena se lekane ho nts'etsapele litsebo tse phetseng hantle tsa motho.

U ka 'na ua botsa hore na ke hobane'ng ha u hloka ho theha tgalice? Khoutu eohle e tenang e fetisang li-JSON ho tloha kopo ho isa karabong le ho tloha polokelong ho ea mohopolong le ka morao e lutse ho eona. Hape ho na le kopo e tloaelehileng ea khoutu, mosebetsi oa ho utloisisa hore "February" e tšoana le "February", le tse ling tsa NLU bakeng sa mafutsana. Ho ea ka mohopolo oa ka, sena se lokela ho ba se lekane e le hore o ka rala li-prototypes tsa litsebo lifaeleng tsa yaml ntle le ho sitisoa ke lintlha tsa tekheniki.

Haeba u batla NLU e tebileng haholoanyane, u ka e qhekella ho tsebo ea hau Latsoang kapa DeepPavlov, empa ho li hlophisa ho tla hloka ho tantša ho eketsehileng ka moropa, haholo-holo ho se nang seva. Haeba u ikutloa u sa rate ho kenya likhoutu ho hang, u lokela ho sebelisa sehahi sa mofuta oa pono Aimylogic. Ha ke theha tgalice, ke ile ka nahana ka mofuta o mong oa tsela e mahareng. A re boneng hore na ho hlaha eng ka sena.

Joale, kena moqoqo oa nts'etsopele ea litsebo tsa alice, bala litokomanele bopa hlollang tsebo!

Source: www.habr.com

Eketsa ka tlhaloso