Ịmepụta nka mara mma maka Alice na ọrụ enweghị nkesa nke Yandex.Cloud na Python

Ka anyị malite na akụkọ. Ụnyaahụ Yandex.Cloud kwupụtara mwepụta nke ọrụ mgbakọ na mwepụ na-enweghị ihe nkesa Ọrụ Yandex Cloud. Nke a pụtara: naanị ị na-ede koodu ọrụ gị (dịka ọmụmaatụ, ngwa webụ ma ọ bụ chatbot), igwe ojii n'onwe ya na-emepụta ma na-echekwa igwe mebere ebe ọ na-agba ọsọ, na-emegharị ya ma ọ bụrụ na ibu ahụ na-abawanye. Ịkwesighi iche echiche ma ọlị, ọ dị mma nke ukwuu. Na ugwo na-aga naanị maka oge mgbako.

Agbanyeghị, ụfọdụ ndị nwere ike ha agaghị akwụ ụgwọ ma ọlị. Ndị a bụ ndị mmepe Nkà mpụga nke Alice, ya bụ, nkata nkata arụnyere n'ime ya. Onye nrụpụta ọ bụla nwere ike ide, kwado ma debanye aha ụdị nka a, na site na taa nkà adịghị mkpa ka akwadoro ya - naanị bulite koodu ha na igwe ojii n'ụdị. otu ọrụ enweghị ihe nkesa.

Mana enwere nuances di na nwunye. Nke mbụ, koodu anụ ụlọ gị nwere ike ịchọ ụfọdụ ịdabere na ya, ọ bụghịkwa ihe dị mkpa ịdọrọ ha na igwe ojii. Nke abuo, onye ọ bụla chatbot nkịtị kwesịrị idobe ọnọdụ nke mkparịta ụka ahụ ebe (nke ọma mere); otu esi eme ya na ọrụ enweghị ihe nkesa n'ụzọ kachasị mfe? Nke atọ, kedu ka ị ga-esi dee nka ngwa ngwa na unyi maka Alice ma ọ bụ ọbụna ụdị bot nwere nkata na-abụghị efu? Banyere nuances ndị a, n'ezie, akụkọ.

Ịmepụta nka mara mma maka Alice na ọrụ enweghị nkesa nke Yandex.Cloud na Python

nkwadebe omume

Maka ndị na-enweghị ndidi: M na-anakọta ihe ndabere dị mkpa na makefile tupu ebugo ọrụ ahụ na igwe ojii, ana m echekwa ọnọdụ okwu ahụ na Nchekwa ihe Yandex (ọ na-akwado S3 API), ana m eji ọbá akwụkwọ nke m jikwaa mkparịta ụka ahụ. tgalice. N'ihi ya, ọ na-apụta dị otú ahụ ngosi nka. Ma ugbu a, ka anyị nyochaa ihe a niile na ntakịrị nkọwa.

Maka obere enweghị ndidi, tupu ịbanye n'ime akụkọ m nke mgbagwoju anya, ana m akwado ịmalite dị mfe. Ya bụ, mepụta otu faịlụ echobot ọrụ, debanye aha ma nwalee ya na dialog developer console; nkọwa - na Mkparịta ụka blọgụ и akwụkwọ ígwé ojii. Na naanị mgbe ahụ malite.

Ọ bụrụ na ịchọrọ ịhụ ozugbo ihe anyị na-alụ ọgụ, jụọ Alice 'gbanye nka "horoscope IT"'. Mkparịta ụka ndị a kwesịrị ime:

Alice: ndewo! Ị nọ na nka "horoscope IT". Kwuo "Malite" ka ịmata ihe kpakpando na-ekwe gị nkwa.
Onye ọrụ: Malite
A: Biko kwuo aha gị.
Yu: Vasisualy
A: Ugbu a gwa m afọ amụrụ gị. Naanị ọnụọgụ anọ, ọ nweghị ihe ọzọ.
Yu: nke abụọ
A: Biko nwaa ọzọ. Kwupụta afọ ọmụmụ gị - ọnụọgụ anọ.
Yu: 2002
A: Ọ dị mma! Ugbu a kpọọ aha ọnwa a mụrụ gị.
Yu: Febụwarị
A: Ọ dị mma! N'ikpeazụ, gwa m ụbọchị ọmụmụ gị - naanị nọmba, naanị otu ma ọ bụ ọnụọgụ abụọ.
Yu: 18
A: Daalụ, Vasisual! Ugbu a, anyị maara: ị dị afọ 17 na ị bụ Aquarius. Lee, ị nọ, n'ezie, chioma! Kpakpando agwa gị а что говорят звёзды, вы узнаете, запустив навык.

Nsogbu bụ na iji nọgide na-enwe ọbụna mkparịta ụka dị otú ahụ dị mfe, ịkwesịrị icheta aha na ụbọchị ọmụmụ nke onye ọrụ, na na ebe enweghị ihe nkesa nke a abụghị ihe dị mkpa. Ọ gaghị arụ ọrụ iji chekwaa ọnọdụ na RAM ma ọ bụ dị ka faịlụ na diski, n'ihi na Yandex.Cloud nwere ike na-arụ ọrụ ahụ n'ọtụtụ igwe mebere n'otu oge wee gbanwee n'etiti ha n'amaghị ama. Ị ga-eji ụfọdụ ụdị nchekwa mpụga. Ahọpụtara Nchekwa ihe dị ka ebe nchekwa adịghị ọnụ na nke dị mfe ozugbo na Yandex.Cloud (ya bụ, ikekwe ngwa ngwa). Dị ka ihe ọzọ n'efu, ị nwere ike ịnwale, dịka ọmụmaatụ, mpempe n'efu Mongi ojii ebe di anya. Abụọ Nchekwa Ihe (ọ na-akwado interface S3) na Mongo nwere ihe mkpuchi Python dabara adaba.

Nsogbu ọzọ bụ na iji gaa na Nchekwa Ihe, MongoDB, yana nchekwa data ọ bụla ma ọ bụ ụlọ ahịa data, ị chọrọ ụfọdụ ndabere mpụga nke ịchọrọ bulite na Yandex Functions yana koodu ọrụ gị. Ọ ga-amasị m ime ya nke ọma. Ọ dị mma kpamkpam (dị ka na heroku), Ewoo, ọ gaghị arụ ọrụ, ma ị nwere ike ịmepụta ụfọdụ nkasi obi site n'ịde ederede iji wuo gburugburu (mee faịlụ).

Otu esi amalite nkà horoscope

  1. Jikere: gaa na ụfọdụ igwe nwere Linux. Na ụkpụrụ, ị nwekwara ike ịrụ ọrụ na Windows, mana mgbe ahụ ị ga-ejikọta ya na mmalite nke makefile. Na n'ọnọdụ ọ bụla, ị ga-achọ ma ọ dịkarịa ala 3.6 Python arụnyere.
  2. Clone sitere na github ihe atụ nke nkà horoscope.
  3. Debanye aha na Ya.Cloud: https://cloud.yandex.ru
  4. Mepụta onwe gị bọket abụọ n'ime Nchekwa Ihe, kpọọ ha aha ọ bụla {BUCKET NAME} и tgalice-test-cold-storage (Aha etiti a ka etinyere ya nke ọma main.py ihe atụ m). A ga-achọ ịwụ nke mbụ naanị maka ntinye, nke abụọ - maka ịchekwa steeti mkparịta ụka.
  5. Mepụta a akaụntụ ọrụ, nye ya ọrụ editor, ma nweta nzere static maka ya {KEY ID} и {KEY VALUE} - anyị ga-eji ha dekọọ ọnọdụ nke mkparịta ụka. Ihe a niile dị mkpa ka ọrụ sitere na Ya.Cloud nwee ike ịnweta nchekwa site na Ya.Cloud. Otu ụbọchị, enwere m olileanya, ikike ga-aghọ akpaka, mana maka ugbu a - yabụ.
  6. (Nhọrọ) tinye interface ahịrị iwu yc. Ị nwekwara ike ịmepụta ọrụ site na ntanetị weebụ, mana CLI dị mma n'ihi na ụdị ihe ọhụrụ ọ bụla na-apụta na ya ngwa ngwa.
  7. Ugbu a ị nwere ike, n'ezie, kwadebe mgbakọ nke ịdabere: na-agba ọsọ na ahịrị iwu site na nchekwa na ihe atụ nka make all. A ga-etinye ụyọkọ ọba akwụkwọ (karịsịa, dị ka ọ na-adị, adịghị mkpa) na folda ahụ dist.
  8. Jupụta pensụl n'ime Nchekwa Ihe (n'ime ịwụ {BUCKET NAME}) Archive nwetara na nzọụkwụ gara aga dist.zip. Ọ bụrụ na-ịchọrọ, ị nwekwara ike ime nke a site na ahịrị iwu, dịka ọmụmaatụ, iji AWS CLI.
  9. Mepụta ọrụ na-enweghị ihe nkesa site na interface weebụ ma ọ bụ iji ngwa yc. Maka ịba uru, iwu a ga-adị ka nke a:

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

Mgbe iji aka na-emepụta ọrụ, a na-ejupụta paramita niile n'otu ụzọ ahụ.

Ugbu a, enwere ike ịnwale ọrụ ị mepụtara site na njikwa njikwa, wee mechaa ma bipụta nka.

Ịmepụta nka mara mma maka Alice na ọrụ enweghị nkesa nke Yandex.Cloud na Python

Kedu ihe dị n'okpuru mkpuchi

Makefile nwere n'ezie ederede dị mfe maka ịwụnye ndabere yana itinye ha na ebe nchekwa. dist.zip, ihe dị ka nke a:

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

Ndị ọzọ bụ ngwá ọrụ dị mfe ole na ole ejiri n'ọbá akwụkwọ tgalice. A na-akọwa usoro njuputa data onye ọrụ site na nhazi 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.

Klas Python na-eweghara ọrụ nke ịkọwapụta nhazi a na ịgbakọ nsonaazụ ikpeazụ

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

Kpọmkwem karịa, klaasị isi FormFillingDialogManager na-etinye aka na-ejuputa "ụdị", na usoro nke klas nwa handle_completed_form na-agwa ihe ọ ga-eme ma ọ dị njikere.

Na mgbakwunye na isi iyi nke mkparịta ụka onye ọrụ, ọ dịkwa mkpa ịkele onye ọrụ, yana ịnye enyemaka na iwu "enyemaka" na ntọhapụ site na nkà na iwu "wepụ". Maka nke a n'ime tgalice enwekwara ndebiri, ya mere onye njikwa okwu niile nwere iberibe:

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 na-arụ ọrụ n'ụzọ dị mfe: ọ na-agbalị itinye n'ọnọdụ dị ugbu a nke mkparịta ụka ihe niile mejupụtara ya, wee họrọ nke mbụ dị mkpa.

Dịka nzaghachi nye ozi ọ bụla, onye njikwa dialog na-eweghachite ihe Python Response, nke nwere ike gbanwee gaa na ederede nkịtị, ma ọ bụ ozi na Alice ma ọ bụ Telegram - dabere na ebe bot na-agba ọsọ; o nwekwara ọnọdụ agbanwe agbanwe nke dialog nke kwesịrị ịchekwa. Klas ọzọ na-elekọta kichin a niile. DialogConnector, yabụ edemede ozugbo maka ịmalite nka na ọrụ Yandex dị ka nke a:

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

Dịka ị na-ahụ, ọtụtụ koodu a na-emepụta njikọ na interface Nchekwa Ihe S3. Otu esi eji njikọ a ozugbo, ị nwere ike ịgụ na koodu tgalice.
Ahịrị ikpeazụ na-emepụta ọrụ alice_handler - nke anyị nyere iwu ịdọrọ Yandex.Cloud mgbe anyị setịpụrụ oke --entrypoint=main.alice_handler.

Nke ahụ, n'ezie, bụ ihe niile. Makefiles maka iwu ụlọ, Nchekwa ihe dị ka S3 maka nchekwa gburugburu, yana ọba akwụkwọ Python tgalice. Tinyere njirimara na-enweghị ihe nkesa na nkwupụta nke python, nke a zuru ezu iji zụlite nkà nke onye ahụike.

Ị nwere ike ịjụ ihe mere ị ga-eji mepụta tgalice? Koodu na-agwụ ike nke na-ebufe JSON site na arịrịọ gaa na nzaghachi yana site na nchekwa gaa na ebe nchekwa na azụ dị na ya. Enwekwara ngwa mgbe niile, ọrụ maka ịghọta na "February" yiri "February", yana NLU ndị ọzọ maka ndị ogbenye. Dị ka echiche m siri dị, nke a ga-ezururịrị iji nwee ike ịsepụta prototypes nka na faịlụ yaml na-enweghị nkọwa nka na-adọpụ uche ya.

Ọ bụrụ na ịchọrọ NLU dị njọ karị, ị nwere ike megharịa ya na nka gị Ire ma ọ bụ Deeplov, mana ịtọlite ​​​​ha ga-achọ mgbakwunye ịgba egwu na ịgbà, ọkachasị na enweghị ihe nkesa. Ọ bụrụ na ọ naghị amasị gị itinye koodu ma ọlị, ị ga-eji ụdị ihe nrụpụta anya Aimylogic. Mgbe m na-eke tgalice, echere m maka ụdị ụzọ etiti. Ka anyị hụ ihe merenụ.

Ọfọn, ugbu a sonyere Aliy nkà onye nrụpụta nkata, gụọ akwụkwọma mepụta ịtụnanya nkà!

isi: www.habr.com

Tinye a comment