Te hanga i tetahi pukenga mana mo Alice i runga i nga mahi kore-tumau a Yandex.Cloud me Python

Me timata ki nga korero. Inanahi i panuitia e Yandex.Cloud te whakarewatanga o te ratonga rorohiko kore-kaupapa Nga Mahi Kapua Yandex. Ko te tikanga tenei: ka tuhi noa koe i te waehere mo to ratonga (hei tauira, he tono paetukutuku, he chatbot ranei), a ko te Kapua tonu e hanga me te pupuri i nga miihini mariko kei reira e rere ana, me te whakahoki ano mena ka piki te kawenga. Kaore koe e hiahia ki te whakaaro, he tino watea. A ko te utu mo te wa tatau anake.

Heoi, karekau pea etahi e utu. Ko enei nga kaihanga Nga pukenga o waho o Alice, ara, nga chatbots i hangaia ki roto. Ka taea e tetahi kaiwhakawhanake te tuhi, te manaaki me te rehita i taua pukenga, mai i tenei ra karekau nga pukenga e tika ki te manaaki - tuku noa i a raatau waehere ki te kapua i te ahua. te taua mahi serverless.

Engari he ruarua nga nuances. Tuatahi, ka hiahia pea to waehere poka ki etahi whakawhirinakitanga, a ko te toia ki roto i te Kapua ehara i te mea iti. Tuarua, me penapena e nga kaikorero korero noa te ahua o te korero ki tetahi waahi (no reira he tino ahua); He aha te huarahi ngawari ki te mahi i tenei mahi i roto i te mahi kore-tumau? Tuatoru, me pehea e taea ai e koe te tuhi i tetahi pukenga tere-me-paru mo Alice, ara etahi momo bot me te mahanga kore-kore? Ko te tuhinga, he pono, mo enei nuances.

Te hanga i tetahi pukenga mana mo Alice i runga i nga mahi kore-tumau a Yandex.Cloud me Python

Te faaineineraa morare

Mo te hunga manawanui: Ka kohia e ahau nga whakawhirinaki e tika ana me te makefile i mua i te tuku i te mahi ki te kapua, ka rongoa ahau i te ahua o te korero i roto i te Yandex Object Storage (e tautoko ana i te S3 API), ka whakamahi ahau i taku ake whare pukapuka hei whakahaere i te korero. tgalice. I te mutunga ka puta taua pūkenga demo. Inaianei kia ata tirohia enei mea katoa.

Mo te hunga e iti nei te manawanui, i mua i te ruku ki roto i taku korero mo te uauatanga, ka tino taunaki ahau kia timata me tetahi mea ngawari. Ara, hanga he mahi echobot kotahi-kōnae, rēhita me te whakamatautau i roto i te papatohu kaiwhakawhanake Dialogs; taipitopito - in rangitaki korero и Tuhinga kapua. Na anake ka timata.

Mena kei te pirangi koe ki te mohio tonu he aha ta tatou e whawhai nei, patai ki a Alice 'taea te "IT horoscope" pūkenga'. Me puta he korero e rite ana ki enei e whai ake nei:

Alice: Kia ora! Kei roto koe i te pukenga "IT Horoscope". Mea atu "Tīmata" kia mohio koe he aha nga whetu e oati ai koe.
Kaiwhakamahi: Tīmata
A: Tena koa tuhia to ingoa
Yu: Vasisualiy
A: Tena, korerotia mai te tau o to whanautanga. E wha noa nga mati, kaore he taapiri.
Yu: tuarua
A: Me ngana ano. Whakauruhia te tau o to whanautanga - e wha nga mati.
Ko: 2002
A: Nui! Inaianei whakaingoatia to marama whanau.
Yu: Hui-tanguru
A: Nui! Ka mutu, korero mai ki ahau to ra whanau - he tau noa, kia kotahi, kia rua ranei nga mati.
Ko: 18
A: Tēnā koe, Vasisualiy! Inaianei kua mohio matou: 17 tau koe me te Aquarius. Ae ra, he waimarie koe! Ka korero nga whetu ki a koe: а что говорят звёзды, вы узнаете, запустив навык.

Ko te raru ko te mea kia mau tonu nga korero ngawari penei, me mahara koe ki te ingoa o te kaiwhakamahi me te ra whanau, a, i roto i te taiao mahi korekore he mea iti tenei. E kore e taea te penapena i te horopaki ki te RAM, ki te konae ranei i runga i te kōpae, na te mea Ka taea e Yandex.Cloud te whakahaere i tetahi mahi i runga i te maha o nga miihini mariko i te wa kotahi ka huri i waenga i a raatau ma te hiahia. Me whakamahi koe i etahi momo rokiroki o waho. Ko te Rokiroki Ahanoa i whiriwhiria hei rokiroki tino iti me te uaua i roto i te Yandex.Cloud (arā, he tere pea). Hei tauira kore utu, ka taea e koe te whakamatau, hei tauira, he waahanga kore utu Kapua Monga tetahi wahi tawhiti. He pai nga takai Python mo te Rokiroki Ahanoa e rua (e tautoko ana i te atanga S3) me Mongo.

Ko tetahi atu raruraru ko te uru atu ki te Rokiroki Ahanoa, MongoDB, me etahi atu papaarangi raraunga, toa raraunga ranei, me hiahia koe ki etahi waahanga o waho e tika ana kia tukuna atu ki nga Mahi Yandex me to waehere mahi. A e hiahia ana ahau ki te mahi pai i tenei. Kia aroha mai, kare e tino watea (penei i a Heroku), engari ka taea te hanga i etahi whakamaaramatanga ma te tuhi i te tuhinga hei hanga i te taiao (hanga kōnae).

Me pehea te whakarewa i te pukenga horoscope

  1. Whakapaia: haere ki etahi miihini me Linux. Ko te tikanga, ka taea ano e koe te mahi me te Matapihi, engari me mahi makutu koe me te whakarewa i te makefile. A ahakoa, ka hiahia koe ki te whakauru i te Python 3.6.
  2. Korohia mai i Github tauira o te pukenga horoscope.
  3. Rēhita ki Y.Cloud: https://cloud.yandex.ru
  4. Hangaia koe kia rua nga peere ki roto Ahanoa Ahanoa, ka karanga ia ratou ki tetahi ingoa {BUCKET NAME} и tgalice-test-cold-storage (ko tenei ingoa tuarua kua whakawaeherehia inaianei ki roto main.py taku tauira). Ko te peere tuatahi ka hiahiatia mo te whakatakotoranga, ko te tuarua - hei penapena i nga ahuatanga korero.
  5. waihanga pūkete ratonga, hoatu he mahi ki a ia editor, me te tiki i nga taipitopito tuakiri mo taua mea {KEY ID} и {KEY VALUE} — ka whakamahia e matou ki te tuhi i te ahua o te korero. Ko enei katoa e hiahiatia ana kia taea e tetahi mahi mai i Ya.Cloud te uru ki te rokiroki mai i Ya.Cloud. I tetahi ra, ko taku tumanako, ka tiimata te whakamana, engari mo tenei wa ka penei.
  6. (Kōwhiringa) tāuta atanga raina whakahau yc. Ka taea hoki e koe te hanga i tetahi mahi na roto i te atanga tukutuku, engari he pai te CLI no te mea he tere ake te puta o nga momo mahi hou.
  7. Inaianei ka taea e koe te whakarite i te huihuinga whakawhirinaki: whakahaere i runga i te raina whakahau mai i te kōpaki me te tauira pukenga make all. He paihere whare pukapuka (te nuinga, penei i o mua, kaore e tika) ka whakauruhia ki roto i te kōpaki dist.
  8. Ringihia ki te Rokiroki Ahanoa ma te ringaringa (ki te peere {BUCKET NAME}) pūranga i whiwhi i te taahiraa o mua dist.zip. Ki te hiahiatia, ka taea e koe te mahi i tenei mai i te raina whakahau, hei tauira, te whakamahi AWS CLI.
  9. Waihangahia he mahi kore-tumau ma te atanga tukutuku ma te whakamahi taputapu ranei yc. Mo te whaipainga, ka penei te ahua o te whakahau:

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

A, no te hanga a-ringa i tetahi mahi, ka whakakiia nga tawhā katoa kia rite tonu.

Inaianei ko te mahi i hanga e koe ka taea te whakamatautau ma te papatohu kaiwhakawhanake, katahi ka taea te whakapai ake me te whakaputa i te pukenga.

Te hanga i tetahi pukenga mana mo Alice i runga i nga mahi kore-tumau a Yandex.Cloud me Python

He aha kei raro i te awhi

Kei roto i te makefile he tuhinga ngawari noa mo te whakauru i nga whakawhirinakitanga me te whakauru ki roto i te puranga dist.zip, penei pea:

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

Ko te toenga he taputapu ngawari kua takai ki roto i te whare pukapuka tgalice. Ko te tukanga o te whakakī i nga raraunga kaiwhakamahi e whakaahuatia ana e te whirihora 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Ko te mahi poroporoaki i tenei whirihora me te tatau i te hua whakamutunga ka riro ma te akomanga 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

He tika ake, ko te akomanga turanga FormFillingDialogManager kei te whai waahi ki te whakakii i te "puka", me te tikanga o te akomanga tamariki handle_completed_form korero ki a ia me aha ia ina rite ia.

I tua atu i tenei rerenga korero matua, me mihi ano te kaiwhakamahi, me te awhina i te whakamahi i te whakahau "awhina" ka tukuna mai i te pukenga ma te whakamahi i te whakahau "puta". Mo tenei kaupapa i roto i tgalice He tauira ano, no reira ko te katoa o nga kaiwhakahaere korero he waahanga:

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 Ka mahi noa: ka ngana ki te whakamahi i ona waahanga katoa ki te ahuatanga o te korero o naianei, ka kowhiria te mea tuatahi e tika ana.

Ka whakahokia e te kaiwhakahaere korero he ahanoa Python hei whakautu ki ia karere. Response, ka taea te huri hei tuhinga maamaa, hei karere ranei i Alice, Telegram ranei - i runga i te waahi e rere ana te karetao; kei roto hoki te ahua rereke o te korero e tika ana kia tiakina. Na tetahi atu karaehe e whakahaere ana tenei kihini katoa, DialogConnector, no reira ko te tuhinga tika mo te whakarewa i tetahi pukenga ki runga i nga Mahi Yandex he penei te ahua:

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

Ka taea e koe te kite, ko te nuinga o tenei waehere ka hangaia he hononga ki te atanga S3 o te Rokiroki Ahanoa. Ka taea e koe te panui me pehea te whakamahi tika i tenei hononga i roto i te waehere tgalice.
Ko te rarangi whakamutunga ka hanga i te mahi alice_handler - ko te mea ano i kii matou ki a Yandex.Cloud ki te toia ina tautuhia e matou te tawhā --entrypoint=main.alice_handler.

Ko te katoa, mau. Ko nga konae hanga mo te huihuinga, te Rokiroki Ahanoa rite S3 mo te penapena horopaki, me te whare pukapuka Python tgalice. Ka honoa me nga mahi korekore me te whakaatu a Python, he nui tenei ki te whakawhanake i te pukenga tangata.

Ka patai pea koe he aha i tika ai te hanga tgalice? Ko nga waehere kino katoa e whakawhiti ana i nga JSON mai i te tono ki te whakautu me te rokiroki ki te mahara me te hoki kei roto. He tono waehere ano hoki, he mahi mo te mohio ko "February" he rite ki te "February", me etahi atu NLU mo te hunga rawakore. E ai ki taku whakaaro, me nui kee kia taea e koe te tuhi tauira o nga pukenga kei roto i nga konae yaml me te kore e porearea e nga korero hangarau.

Mena kei te hiahia koe ki te NLU nui ake, ka taea e koe te hono atu ki to pukenga Rasa ranei DeepPavlov, engari ko te whakatu i aua mea ka hiahia etahi atu kanikani me te timipera, ina koa mo te kore kaimau. Mena kaore koe e pai ki te tohu tohu, me whakamahi koe i tetahi kaihanga ataata penei Aimylogic. I te wa e hanga ana i te tgalice, i whakaaro ahau mo etahi momo ara takawaenga. Kia kite tatou he aha te hua o tenei.

Na, uru mai inaianei kōrerorero kaiwhakawhanake pukenga a Alice, panui tuhinga, me te hanga whakamiharo pūkenga!

Source: will.com

Tāpiri i te kōrero