Mamorona fahaiza-malaza ho an'i Alice amin'ny fampiasana ny fiasa tsy misy mpizara Yandex.Cloud sy Python

Andeha isika hanomboka amin'ny vaovao. Omaly Yandex.Cloud dia nanambara ny fandefasana serivisy informatika tsy misy mpizara Yandex Cloud Functions. Midika izany: manoratra ny kaody ho an'ny serivisinao fotsiny ianao (ohatra, fampiharana amin'ny Internet na chatbot), ary ny Cloud mihitsy no mamorona sy mitazona ireo milina virtoaly izay iasany, ary mamerina azy ireo mihitsy aza raha mitombo ny entana. Tsy mila mieritreritra mihitsy ianao, tena mety. Ary ny fandoavana dia ho an'ny fotoana kajy ihany.

Mety tsy handoa vola mihitsy anefa ny sasany. Ireo no mpamorona Ny fahaizan'i Alice ivelany, izany hoe chatbots naorina tao anatiny. Ny mpamorona rehetra dia afaka manoratra, mampiantrano ary misoratra anarana fahaiza-manao toy izany, ary manomboka androany dia tsy mila fampiantranoana akory ny fahaiza-manao - ampidiro fotsiny ny kaody ao amin'ny rahona amin'ny endrika ny asa tsy misy mpizara mitovy.

Saingy misy ny nuance roa. Voalohany, mety mitaky fiankinan-doha sasany ny code pit anao, ary tsy misy dikany ny fisintonana azy ireo ao amin'ny Cloud. Faharoa, ny chatbot mahazatra rehetra dia mila mitahiry ny toetry ny fifanakalozan-kevitra any amin'ny toerana iray (stateful noho izany); Inona no fomba mora indrindra hanaovana izany amin'ny fiasa tsy misy mpizara? Fahatelo, ahoana no ahafahanao manoratra fahaiza-manao haingana sy maloto ho an'i Alice na karazana bot misy tetika tsy aotra? Ny lahatsoratra dia tena momba ireo nuance ireo.

Mamorona fahaiza-malaza ho an'i Alice amin'ny fampiasana ny fiasa tsy misy mpizara Yandex.Cloud sy Python

Fiomanana ara-moraly

Ho an'ny tsy manam-paharetana: manangona ny fiankinan-doha ilaina amin'ny makefile aho alohan'ny handefasana ny fiasa amin'ny rahona, tehirizo ny toetry ny fifanakalozan-kevitra ao amin'ny Yandex Object Storage (manohana ny S3 API izany), ary mampiasa ny tranomboky manokana aho hitantana ny fifanakalozan-kevitra. tgalice. Amin'ny farany dia mitranga izany toy izany fahaiza-manao demo. Andeha hojerentsika amin'ny antsipiriany bebe kokoa izany rehetra izany.

Ho an'ireo izay tsy manam-paharetana kely, alohan'ny hidirana amin'ny tantarako momba ny fahasarotana, dia manoro hevitra aho ny hanomboka amin'ny zavatra tsotra. Izany hoe, mamorona asa echobot misy rakitra tokana, misoratra anarana ary andramo ao amin'ny console developer Dialogs; antsipiriany - in Dialogues bilaogy и tahirin-kevitra rahona. Ary vao manomboka.

Raha te hahatsapa avy hatrany ny ady ataontsika eto ianao, anontanio an'i Alice 'avelao ny fahaiza-manao "IT horoscope".'. Tokony hisy fifanakalozan-kevitra mitovy amin'ireto manaraka ireto:

Alice: Salama! Ao amin'ny fahaiza-manao "IT Horoscope" ianao. Lazao hoe “Manomboha” hahitanao izay ampanantenain’ny kintana anao.
Mpampiasa: Manomboka
A: Lazao azafady ny anaranao
Yu: Vasisualiy
A: Lazao ahy izao ny taona nahaterahanao. Isa efatra ihany, tsy misy fanampiny.
Yu: faharoa
A: Andramo indray azafady. Ampidiro ny taona nahaterahanao - isa efatra.
NY: 2002
A: Tsara! Ataovy izao ny volana nahaterahanao.
Ny: Febroary
A: Tsara! Farany, lazao amiko ny daty nahaterahanao - isa fotsiny, isa iray na roa fotsiny.
NY: 18
A: Misaotra, Vasisualiy! Fantatray izao: 17 taona ianao ary Aquarius. Mazava ho azy fa tsara vintana ianao! Hoy ny kintana aminao: а что говорят звёзды, вы узнаете, запустив навык.

Ny olana dia ny fitazonana na dia fifanakalozan-dresaka tsotra toy izany aza dia mila mitadidy ny anaran'ny mpampiasa sy ny daty nahaterahana, ary amin'ny tontolo tsy misy mpizara dia tsy misy dikany izany. Tsy azo atao ny mitahiry ny contexte amin'ny RAM na amin'ny rakitra amin'ny kapila, satria Yandex.Cloud dia afaka mampandeha asa amin'ny milina virtoaly maromaro miaraka ary mifamadika amin'izy ireo amin'ny sitrapony. Tsy maintsy mampiasa karazana fitahirizana ivelany ianao. Object Storage dia nofidina ho fitahirizana mora sy tsy sarotra mivantana ao amin'ny Yandex.Cloud (izany hoe, haingana angamba). Ho safidy malalaka, azonao atao ny manandrana, ohatra, ampahany maimaim-poana Rahona Monga any lavitra any. Misy fonosana Python mety ho an'ny Object Storage (izay manohana ny interface S3) sy Mongo.

Ny olana iray hafa dia ny hidirana amin'ny Object Storage, MongoDB, ary ny angon-drakitra hafa na fitehirizana angon-drakitra, mila fiankinan-doha ivelany mila ampidirina ao amin'ny Yandex Functions miaraka amin'ny kaody fiasanao ianao. Ary tiako ny hanao izany amin'ny fomba mety. Indrisy anefa fa tsy mety tanteraka izany (toy ny ao amin'ny Heroku), fa ny fampiononana fototra sasany dia azo noforonina amin'ny fanoratana script hananganana ny tontolo iainana (manao rakitra).

Ahoana no hanombohana fahaiza-manao horoscope

  1. Miomàna: mandehana any amin'ny milina sasany misy Linux. Amin'ny ankapobeny, mety miasa amin'ny Windows koa ianao, saingy tsy maintsy manao majika ianao amin'ny fandefasana ny makefile. Ary na ahoana na ahoana, mila apetraka Python 3.6 farafaharatsiny ianao.
  2. Clone azy avy amin'ny Github ohatra ny fahaizana horoscope.
  3. Misoratra anarana ao amin'ny Y.Cloud: https://cloud.yandex.ru
  4. Mamorona siny roa ho anao Toeram-piarovana, miantso azy ireo amin'ny anarana rehetra {BUCKET NAME} и tgalice-test-cold-storage (Ity anarana faharoa ity dia voafehy amin'izao fotoana izao main.py ohatra aho). Ny siny voalohany dia tsy ilaina afa-tsy amin'ny fametrahana, ny faharoa - mba hitahiry ny fifanakalozan-kevitra.
  5. mamorona kaonty serivisy, omeo anjara izy editor, ary mahazo fahazoan-dàlana static ho azy {KEY ID} и {KEY VALUE} - hampiasainay handrakitra ny toetry ny fifanakalozan-kevitra. Ilaina izany rehetra izany mba ahafahan'ny fiasa avy amin'ny Ya.Cloud miditra amin'ny fitahirizana avy amin'ny Ya.Cloud. Indray andro any, manantena aho fa ho tonga ho azy ny fanomezan-dàlana, fa amin'izao fotoana izao dia toy izany.
  6. (tsy voatery) mametraka interface tsara andalana yc. Azonao atao ihany koa ny mamorona fiasa amin'ny alàlan'ny interface web, fa ny CLI dia tsara satria ny karazana fanavaozana rehetra dia miseho haingana kokoa ao anatiny.
  7. Ankehitriny ianao dia afaka manomana ny fivorian'ny fiankinan-doha: mandehana amin'ny baiko avy amin'ny lahatahiry miaraka amin'ny ohatra momba ny fahaiza-manao make all. Betsaka ny tranomboky (ny ankamaroany, toy ny mahazatra, tsy ilaina) dia hapetraka ao anaty lahatahiry dist.
  8. Araraka amin'ny tanana (ao anaty siny {BUCKET NAME}) arsiva azo tamin'ny dingana teo aloha dist.zip. Raha tianao, azonao atao izany avy amin'ny andalana baiko, ohatra, mampiasa AWS CLI.
  9. Mamorona fiasa tsy misy mpizara amin'ny alàlan'ny interface Internet na mampiasa fitaovana iray yc. Ho an'ny utility dia ho toy izao ny baiko:

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

Rehefa mamorona asa amin'ny tanana dia mitovy daholo ny masontsivana rehetra.

Ankehitriny ny asa noforoninao dia azo andrana amin'ny alàlan'ny console developer, ary avy eo dia azo hatsaraina sy avoaka ny fahaiza-manao.

Mamorona fahaiza-malaza ho an'i Alice amin'ny fampiasana ny fiasa tsy misy mpizara Yandex.Cloud sy Python

Inona no ao ambanin'ny satroka

Ny makefile raha ny marina dia misy script tsotra fotsiny amin'ny fametrahana ny fiankinan-doha sy ny fametrahana azy ireo ao anaty tahiry dist.zip, manodidina ny toy izao:

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

Ny ambiny dia fitaovana tsotra vitsivitsy nofonosina tao anaty tranomboky tgalice. Ny dingan'ny famenoana ny angona mpampiasa dia faritan'ny 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Ny asan'ny famakafakana ity config ity sy ny kajy ny vokatra farany dia lasan'ny kilasy 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

Ny marimarina kokoa, ny kilasy fototra FormFillingDialogManager momba ny famenoana ny “forme”, sy ny fomba fampianarana ankizy handle_completed_form milaza aminy izay tokony hataony rehefa vonona izy.

Ho fanampin'ity fikorianan'ny fifanakalozan-kevitra ity dia tsy maintsy arahabaina ihany koa ny mpampiasa, ary omena fanampiana amin'ny alàlan'ny baiko "fanampiana" ary avoaka amin'ny fahaizana mampiasa ny baiko "fivoahana". Mba hanaovana izany amin'ny tgalice Misy ihany koa ny môdely, ka ny mpitantana ny fifanakalozan-kevitra manontolo dia voaforona:

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 Miasa tsotra izy io: manandrana mampihatra ny singa rehetra ao aminy amin'ny toetry ny fifanakalozan-kevitra amin'izao fotoana izao, ary mifidy ny voalohany mety.

Ny mpitantana ny fifanakalozan-kevitra dia mamerina zavatra Python ho valin'ny hafatra tsirairay. Response, izay azo avadika ho lahatsoratra tsotra, na ho hafatra ao amin'ny Alice na Telegram - miankina amin'ny toerana misy ny bot; ao anatin'izany koa ny fiovan'ny dinika tokony hovonjena. Ity lakozia manontolo ity dia karakarain'ny kilasy hafa, DialogConnector, ka toy izao ny script mivantana amin'ny fandefasana fahaiza-manao amin'ny Yandex Functions:

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

Araka ny hitanao, ny ankamaroan'ity code ity dia mamorona fifandraisana amin'ny interface S3 an'ny Object Storage. Azonao vakiana ny fomba ampiasana mivantana an'io fifandraisana io amin'ny code code.
Ny andalana farany dia mamorona ny asa alice_handler - ilay iray izay nolazainay tamin'i Yandex.Cloud mba hisintona rehefa mametraka ny parameter --entrypoint=main.alice_handler.

Izay ihany, raha ny marina. Makefiles ho an'ny fivoriambe, fitahirizana zavatra mitovy amin'ny S3 amin'ny fitahirizana contexte, ary tranomboky Python tgalice. Miaraka amin'ny fiasa tsy misy mpizara sy ny fanehoana an'i Python, izany dia ampy hampivelarana ny fahaiza-manaon'olombelona salama.

Mety hanontany tena ianao hoe nahoana no nilaina ny famoronana tgalice? Ny kaody mankaleo rehetra izay mamindra ny JSON avy amin'ny fangatahana mankany amin'ny valiny ary avy amin'ny fitahirizana mankany amin'ny fitadidiana sy miverina dia mipetraka ao. Misy ihany koa ny fampiharana kaody tsy tapaka, asa iray hahafantarana fa ny "Febroary" dia mitovy amin'ny "Febroary", ary ny NLU hafa ho an'ny mahantra. Araka ny hevitro dia tokony ho ampy izany mba hahafahanao manao sketch ny prototypes ny fahaiza-manao amin'ny rakitra yaml nefa tsy variana loatra amin'ny antsipiriany ara-teknika.

Raha mila NLU matotra kokoa ianao dia azonao atao ny mampifandray izany amin'ny fahaizanao tsiro na DeepPavlov, fa ny fametrahana azy ireo dia mitaky dihy fanampiny miaraka amin'ny ampongatapaka, indrindra amin'ny tsy misy mpizara. Raha tsy mahatsapa ho toy ny coding mihitsy ianao, dia tokony hampiasa mpamorona sary toy ny Aimylogic. Rehefa namorona tgalice aho dia nieritreritra karazana lalana manelanelana. Andeha hojerentsika izay mety ho vokatr’izany.

Eny ary, midira izao chat developer fahaizana alice, mamaky tahirin-kevitra, ary mamorona mahafinaritra fahaiza-manao!

Source: www.habr.com

Add a comment