Abuuritaanka xirfad dawladeed oo Alice ah oo ku saabsan hawlaha server-la'aanta ah ee Yandex.Cloud iyo Python

Aan ku bilaabo warka. Shalay Yandex.Cloud waxa uu ku dhawaaqay in la bilaabay adeeg kombuyuutar oo bilaa server ah Hawlaha Yandex Cloud. Tani waxay ka dhigan tahay: kaliya waxaad qortaa lambarka adeeggaaga (tusaale, codsi shabakad ama chatbot), Cloud lafteedu waxay abuurtaa oo ilaalisaa mashiinnada farsamada halka ay ku shaqeeyaan, oo xitaa ku celceliyaan haddii culeysku kordho. Uma baahnid inaad ka fikirto haba yaraatee, waa mid aad ku haboon. Lacag-bixintuna waxay ku socotaa oo keliya wakhtiga xisaabinta.

Si kastaba ha ahaatee, dadka qaar ayaa laga yaabaa inaysan waxba bixin. Kuwani waa horumariyayaashii Xirfadaha dibadda ee Alice, taas oo ah, chatbots lagu dhex dhisay. Horumariye kasta wuu qori karaa, martigelin karaa oo diiwaangelin karaa xirfaddan oo kale, laga bilaabo maanta xirfaduhu xitaa uma baahna in la martigeliyo - kaliya ku dheji koodkooda daruuraha qaabka shaqo la'aan isku mid ah.

Laakiin waxaa jira dhowr nuances. Marka hore, xeerkaaga xayawaanku wuxuu u baahan karaa xoogaa ku-tiirsanaan ah, mana aha wax fudud in lagu jiido Daruuraha. Marka labaad, chatbot kasta oo caadi ah wuxuu u baahan yahay inuu ku kaydiyo xaaladda wada hadalka meel (si cad); sida ugu fudud ee loo sameeyo shaqada server-la'aanta ah? Marka saddexaad, sidee ayaad ugu qori kartaa xirfad degdeg ah oo wasakh ah Alice ama xitaa nooc ka mid ah bot oo leh goob aan eber ahayn? Ku saabsan nuances kuwan, dhab ahaantii, maqaalka.

Abuuritaanka xirfad dawladeed oo Alice ah oo ku saabsan hawlaha server-la'aanta ah ee Yandex.Cloud iyo Python

diyaarinta akhlaaqda

Kuwa dulqaadka la': Waxaan ku ururiyaa waxyaalaha lagama maarmaanka ah ee ku-tiirsanaanta leh makefile ka hor inta aan shaqada gelin daruuraha, waxaan ku kaydiyaa xaaladda wada hadalka ee Kaydinta Shayga Yandex (waxay taageertaa API S3), waxaanan isticmaalaa maktabadda aniga ii gaar ah si aan u maareeyo wada hadalka. tgalice. Natiijo ahaan, way soo baxaysaa sida xirfad demo. Haddaba bal aan arrintan oo dhan si faahfaahsan u falanqayno.

Qofka dulqaadka yar, ka hor intaanan u gelin sheekadayda kakanaanta, waxaan aad ugu talinayaa inaad si fudud u bilowdo. Sida, samee hal-fayl echobot function, diwaangeli oo ku tijaabi console horumariyaha Dialog; faahfaahinta - in Wadahadallada Blog и dukumentiyada daruuriga ah. Oo kaliya markaa bilow.

Haddii aad rabto inaad isla markiiba dareento waxa aan u dagaalamayno, weydii Alice 'Daar xirfadda "horoscope IT"'. Wada hadalka soo socdaa waa inuu dhacaa:

Alice: hello! Waxaad ku jirtaa xirfadda " horoscope IT ". Dheh "Bilow" si aad u ogaato waxa ay xiddiguhu kuu ballan qaadayaan.
Isticmaale: Bilow
J: Fadlan sheeg magacaaga.
Yu: Vasisualy
J: Hadda ii sheeg sanadka aad dhalatay. Kaliya afar nambar, wax dheeraad ah ma jiraan.
Yu: labaad
J: Fadlan isku day mar kale. Sheeg sanadka dhalashada - afar lambar.
Yu: 2002
J: Wayn! Hadda sheeg bisha aad dhalatay.
Yu: Febraayo
J: Wayn! Ugu dambeyntii, ii sheeg taariikhda dhalashadaada - kaliya nambar, kaliya hal ama laba lambar.
Yu: 18
J: Waad ku mahadsan tahay, Vasisual! Hadda waan ognahay: waxaad tahay 17 sano jir waxaadna tahay Aquarius. Waa kan, dabcan, nasiib badan! Xiddigaha ayaa kuu sheegaya а что говорят звёзды, вы узнаете, запустив навык.

Dhibaatadu waxay tahay in la ilaaliyo xitaa wada hadal fudud, waxaad u baahan tahay inaad xasuusato magaca iyo taariikhda dhalashada isticmaalaha, iyo jawi aan server lahayn tani maaha mid fudud. Ma shaqeyn doonto in lagu keydiyo macnaha RAM ama fayl ahaan diskka, sababtoo ah Yandex.Cloud waxay ku wadi kartaa shaqada dhowr mashiinnada farsamada isku mar oo ay u kala beddelan karaan iyaga oo aan sabab lahayn. Waa inaad isticmaashaa nooc ka mid ah kaydinta dibadda. Kaydinta Walaxda waxa loo doortay sidii kayd aan qaali ahayn oo fudud si toos ah Yandex.Cloud (taasi waa, malaha degdeg ah). Beddelka bilaashka ah, waxaad isku dayi kartaa, tusaale ahaan, gabal bilaash ah Darruur Mongi meel fog. Kaydinta Shayga labadaba (waxay taageertaa interface-ka S3) iyo Mongo waxay leeyihiin duubo Python ku habboon.

Dhibaato kale ayaa ah in si aad u tagto Kaydinta Shayga, MongoDB, iyo xog kasta oo kale ama dukaanka xogta, waxaad u baahan tahay qaar ku tiirsan dibadda ah oo aad u baahan tahay inaad geliso Yandex Functions oo ay la socoto koodka shaqada. Oo waxaan jeclaan lahaa inaan u sameeyo si raaxo leh. Waa gebi ahaanba ku habboon (sida heroku), hoog, ma shaqeyn doonto, laakiin waxaad abuuri kartaa qaar ka mid ah raaxada aasaasiga ah adoo qoraya qoraal si aad u dhisto deegaanka (samee faylka).

Sida loo bilaabo xirfadda horoscope-ka

  1. Diyaarso: u tag mishiin Linux leh. Mabda 'ahaan, waxaad u badan tahay inaad sidoo kale la shaqeyn karto Windows-ka, laakiin markaa waa inaad la xiriirto furitaanka makefile. Si kastaba ha noqotee, waxaad u baahan doontaa ugu yaraan 3.6 Python oo lagu rakibay.
  2. Clone ka github tusaale ahaan xirfad horoscope.
  3. Iska diiwaan geli Ya.Cloud: https://cloud.yandex.ru
  4. Samee naftaada laba baaldiyo Keydinta Qalabka, magac kasta ugu yeedh {BUCKET NAME} и tgalice-test-cold-storage (magaca dhexe hadda waa mid adag main.py tusaale ahaan). Baaldiga kowaad waxa loo baahan doonaa oo kaliya in la geeyo, kan labaad - kaydinta dalalka wada hadalka.
  5. abuuro xisaab adeeg, door sii editor, oo u hel aqoonsiyo taagan {KEY ID} и {KEY VALUE} - Waxaan u isticmaali doonaa si aan u duubno xaaladda wadahadalka. Waxaas oo dhan ayaa loo baahan yahay si shaqada Ya.Cloud ay u gasho kaydinta Ya.Cloud. Maalin, waxaan rajeynayaa, oggolaansho inay si toos ah u noqoto, laakiin hadda - sidaas.
  6. (Ikhtiyaar ah) rakib interface line amarka yc. Waxa kale oo aad abuuri kartaa shaqo iyada oo loo marayo interface interface, laakiin CLI waa wanaagsan tahay sababtoo ah dhammaan noocyada cusub ee cusub ayaa si degdeg ah ugu muuqda.
  7. Hadda waxaad awoodi kartaa, dhab ahaantii, diyaarin kartaa isku dhafka ku-tiirsanaanta: ku socodsii khadka taliska ee galka oo leh tusaalaha xirfadda make all. Rug maktabado ah (badanaa, sida caadiga ah, aan loo baahnayn) ayaa lagu rakibi doonaa galka dist.
  8. Ku buuxi qalimaan gelinta shay kaydinta (baaldi {BUCKET NAME}) kaydka laga helay tallaabadii hore dist.zip. Haddii la rabo, waxaad sidoo kale ka samayn kartaa tan khadka taliska, tusaale ahaan, adoo isticmaalaya AWS CLI.
  9. Abuur shaqo bilaa server ah adoo isticmaalaya interneedka webka ama adoo isticmaalaya utility yc. Adeegga, amarku wuxuu u ekaan doonaa sidan:

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

Markaad gacanta ku abuurto shaqo, dhammaan cabirrada waxaa loo buuxiyaa si isku mid ah.

Hadda shaqada aad abuurtay waxaa lagu tijaabin karaa console-ka horumariyaha, ka dibna la dhammeeyey oo la daabacay xirfadda.

Abuuritaanka xirfad dawladeed oo Alice ah oo ku saabsan hawlaha server-la'aanta ah ee Yandex.Cloud iyo Python

Maxaa gunta ku jira

Makefile-ku dhab ahaantii waxa uu ka kooban yahay qoraal si cadaalad ah u fudud oo lagu rakibayo ku-tiirsanaanta oo lagu gelinayo kayd. dist.zip, wax sidan oo kale ah:

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

Inta soo hartay waa dhowr qalab oo fudud oo ku duuban maktabad tgalice. Habka buuxinta xogta isticmaalaha waxaa lagu qeexay qaabeynta 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Fasalka Python wuxuu la wareegayaa shaqada falanqaynta qaabkan iyo xisaabinta natiijada kama dambaysta ah

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

Si aad u saxan, fasalka aasaasiga ah FormFillingDialogManager wuxuu ku hawlan yahay buuxinta "foomka", iyo habka fasalka ilmaha handle_completed_form u sheega waxa la samaynayo marka ay diyaar u tahay.

Marka lagu daro socodka ugu weyn ee wada hadalka isticmaalaha, sidoo kale waa lagama maarmaan in la salaamo isticmaalaha, iyo sidoo kale bixinta caawinta amarka "caawinta" oo laga sii daayo xirfadda amarka "ka bixista". Taas awgeed tgalice Waxa kale oo jira template, markaa maamulaha wada hadalku wuxuu ka kooban yahay qaybo:

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 si fudud ayuu u shaqeeyaa: waxa ay isku daydaa in ay ku dabaqdo wada-hadalka halka uu hadda marayo dhammaan qaybaha uu ka kooban yahay, oo ay doorato midka ugu horreeya ee khuseeya.

Jawaab ahaan fariin kasta, maareeyaha wada hadalku wuxuu soo celinayaa shay Response, kaas oo markaa loo rogi karo qoraal cad, ama fariinta Alice ama Telegram - waxay kuxirantahay meesha botku ku socdo; waxa kale oo ku jira xaalada wada hadalka ee la bedelay ee u baahan in la badbaadiyo. Dhammaan jikadan waxa gacanta ku haya fasal kale, DialogConnector, marka qoraalka tooska ah ee lagu bilaabayo xirfada Yandex Functions waxay u egtahay sidan:

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

Sida aad arki karto, inta badan koodkan waxa uu abuuraa isku xidhka Shayga Kaydinta S3 interface. Sida tooska ah ee xidhiidhkan loo isticmaalo, waad akhrin kartaa in tgalice code.
Xariiqda ugu dambeysa waxay abuurtaa shaqo alice_handler - Midka aan ku amreynay inaan jiidno Yandex.Cloud markaan dejineyno cabbirka --entrypoint=main.alice_handler.

Taasi, dhab ahaantii, waa dhan. Qalabka wax lagu sameeyo ee dhismaha, Kaydinta Shayga u eg ee S3 ee kaydinta macnaha guud, iyo maktabadda Python tgalice. Si wada jir ah oo ay weheliyaan astaamaha server-la'aanta ah iyo muujinta python, tani waxay ku filan tahay horumarinta xirfadda qof caafimaad qaba.

Waxaa laga yaabaa inaad weydiiso sababta aad ugu baahan tahay inaad abuurto tgalice? Dhammaan koodka caajiska ah ee ka gudbiya JSON-yada codsiga jawaabta iyo kaydinta ilaa xusuusta iyo dhabarka ayaa ku jira. Waxa kale oo jira codsi joogto ah, shaqo lagu fahmo in "Febraayo" ay la mid tahay "Febraayo", iyo NLU kale ee saboolka ah. Sida fikradayda qabo, tani waa inay horeba ugu filnaataa in lagu sawiro tusaalayaal xirfadeed faylalka yaml iyada oo aan aad looga mashquulin tafaasiisha farsamada.

Haddii aad rabto NLU aad u daran, waxaad ku khaldi kartaa xirfadaada Rasa ama DeepPavlov, laakiin dejinta iyaga waxay u baahan doontaa qoob ka ciyaar dheeri ah oo leh daf, gaar ahaan server-la'aanta. Haddii aadan gabi ahaanba jeclayn kood, waa inaad isticmaashaa dhisaha nooca muuqaalka ah Aimylogic. Markii aan abuurayay tgalice, waxaan ka fikiray nooc ka mid ah waddo dhexe. Aan aragno waxa dhaca.

Hagaag, hadda ku biir Aliy skills developer chat, akhri dukumeentioo abuur cajiib ah xirfado!

Source: www.habr.com

Add a comment