Aloitetaan uutisista. Yandex.Cloud ilmoitti eilen palvelimettoman laskentapalvelun käynnistämisestä . Tämä tarkoittaa: kirjoitat vain palvelusi koodin (esimerkiksi verkkosovelluksen tai chatbotin), ja pilvi itse luo ja ylläpitää virtuaalikoneita siellä, missä se toimii, ja jopa replikoi ne, jos kuormitus kasvaa. Sinun ei tarvitse ajatella ollenkaan, se on erittäin kätevää. Ja maksu menee vain laskelmien ajaksi.
Jotkut ihmiset eivät kuitenkaan välttämättä maksa ollenkaan. Nämä ovat kehittäjät , eli siihen sisäänrakennetut chatbotit. Kuka tahansa kehittäjä voi kirjoittaa, isännöidä ja rekisteröidä tällaisen taidon, ja nykyään taitoja ei tarvitse edes isännöidä – lataa vain koodinsa pilveen muodossa .
Mutta on pari vivahdetta. Ensinnäkin lemmikkikoodisi saattaa vaatia joitain riippuvuuksia, eikä ole triviaalia vetää niitä pilveen. Toiseksi, minkä tahansa normaalin chatbotin on tallennettava dialogin tila jonnekin (täten tilallinen); miten se tehdään palvelimettomalla toiminnolla helpoimmin? Kolmanneksi, kuinka voit kirjoittaa Alicelle nopean ja likaisen taidon tai jopa jonkinlaisen botin, jonka juoni ei ole nolla? Näistä vivahteista itse asiassa artikkeli.

moraalinen valmistautuminen
Kärsimättömälle: Kerään tarvittavat riippuvuudet make-tiedostolla ennen funktion lataamista pilveen, tallennan valintaikkunan tilan Yandex Object Storageen (se tukee S3 API:ta) ja käytän omaa kirjastoani dialogin hallintaan. . Tuloksena käy ilmi demo taito. Ja nyt analysoidaan tätä kaikkea hieman yksityiskohtaisemmin.
Hieman vähemmän kärsimättömille, ennen kuin sukeltaa monimutkaiseen tarinaani, suosittelen aloittamaan yksinkertaisesta. Nimittäin luo yksitiedostoinen echobot-toiminto, rekisteröi ja testaa se Dialog-kehittäjäkonsolissa; tiedot - sisään и . Ja vasta sitten aloita.
Jos haluat heti tuntea sen, minkä puolesta taistelemme, kysy Alicelta.'. Seuraavan vuoropuhelun pitäisi käydä:
Alice: Hei! Olet "IT-horoskoopin" taidolla. Sano "Aloita" saadaksesi selville, mitä tähdet lupaavat sinulle.
Käyttäjä: Aloita
V: Kerro nimesi.
Yu: Vasisualy
V: Kerro nyt syntymävuotesi. Vain neljä numeroa, ei mitään muuta.
Yu: toinen
V: Yritä uudelleen. Ilmoita syntymävuotesi - neljä numeroa.
Yu: 2002
Suuri! Nimeä nyt syntymäkuukausi.
Yu: Helmikuu
V: Loistavaa! Kerro lopuksi syntymäaikasi - vain numero, vain yksi tai kaksi numeroa.
Yu: 18
V: Kiitos, Vasisual! Nyt tiedämme: olet 17-vuotias ja olet Vesimies. Tässä olet tietysti onnekas! Tähdet kertovat а что говорят звёзды, вы узнаете, запустив навык.
Ongelmana on, että jopa niin yksinkertaisen dialogin ylläpitämiseksi sinun on muistettava käyttäjän nimi ja syntymäaika, ja palvelimettomassa ympäristössä tämä ei ole triviaalia. Kontekstin tallentaminen RAM-muistiin tai tiedostona levylle ei toimi, koska Yandex.Cloud voi suorittaa toiminnon useissa virtuaalikoneissa samanaikaisesti ja vaihtaa niiden välillä mielivaltaisesti. Sinun on käytettävä jonkinlaista ulkoista tallennustilaa. Object Storage valittiin melko edulliseksi ja yksinkertaiseksi tallennuspaikaksi suoraan Yandex.Cloudissa (eli luultavasti nopea). Ilmaisena vaihtoehtona voit kokeilla esimerkiksi ilmaista kappaletta jossain kaukana. Sekä Object Storagessa (se tukee S3-liitäntää) että Mongossa on kätevät Python-kääreet.
Toinen ongelma on, että päästäksesi Object Storageen, MongoDB:hen ja mihin tahansa muuhun tietokantaan tai tietosäilöön, tarvitset joitain ulkoisia riippuvuuksia, jotka sinun on ladattava Yandex Functionsiin yhdessä toimintokoodisi kanssa. Ja haluaisin tehdä sen mukavasti. Se on täysin kätevä (kuten herokussa), valitettavasti se ei toimi, mutta voit luoda perusmukavuutta kirjoittamalla skriptin ympäristön rakentamiseksi (tee tiedosto).
Kuinka aloittaa horoskooppitaito
- Valmistelut: kirjaudu sisään mille tahansa Linux-koneelle. Pohjimmiltaan Windows Tämäkin voisi luultavasti toimia, mutta makefile-tiedoston suorittaminen vaatisi hieman taikuutta. Ja joka tapauksessa tarvitset Python 3.6:n tai uudemman asennettuna.
- Klooni githubista .
- Rekisteröidy Ya.Cloudissa:
- Luo itsellesi kaksi ämpäriä , kutsu niitä millä nimellä tahansa
{BUCKET NAME}иtgalice-test-cold-storage(tämä toinen nimi on nyt kovakoodattumain.pyminun esimerkkini). Ensimmäistä säilöä tarvitaan vain käyttöönottoa varten, toista - dialogitilojen tallentamiseen. - luoda , anna hänelle rooli
editor, ja hanki sitä varten staattiset tunnistetiedot{KEY ID}и{KEY VALUE}- käytämme niitä vuoropuhelun tilan tallentamiseen. Kaikki tämä on tarpeen, jotta Ya.Cloudin toiminto voi käyttää Ya.Cloudin tallennustilaa. Toivon, että valtuuttaminen tulee jonain päivänä automaattiseksi, mutta toistaiseksi - niin. - (Valinnainen) asennus
yc. Toiminnon voi luoda myös web-rajapinnan kautta, mutta CLI on hyvä, koska kaikenlaiset innovaatiot ilmestyvät siihen nopeammin. - Nyt voit itse asiassa valmistella riippuvuuksien kokoonpanon: suorita komentorivillä kansiosta taitoesimerkillä
make all. Kansioon asennetaan joukko kirjastoja (enimmäkseen, kuten tavallista, tarpeettomia).dist. - Täytä kynillä Object Storage (ämpäriin
{BUCKET NAME}) edellisessä vaiheessa hankittu arkistodist.zip. Halutessasi voit tehdä tämän myös komentoriviltä, esimerkiksi käyttämällä . - Luo palvelimeton toiminto verkkokäyttöliittymän tai apuohjelman avulla
yc. Apuohjelmassa komento näyttää tältä:
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=3sKun funktio luodaan manuaalisesti, kaikki parametrit täytetään samalla tavalla.
Nyt luomaasi toimintoa voidaan testata kehittäjäkonsolin kautta ja sen jälkeen viimeistellä ja julkaista taitoja.

Mitä on konepellin alla
Makefile sisältää itse asiassa melko yksinkertaisen skriptin riippuvuuksien asentamiseen ja niiden sijoittamiseen arkistoon. dist.zip, jotain tällaista:
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 ./*Loput ovat muutamia yksinkertaisia työkaluja, jotka on kääritty kirjastoon tgalice. Käyttäjätietojen täyttöprosessi kuvataan konfiguraatiossa 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: Пожалуйста, попробуйте ещё раз. Вам нужно назвать число своего рождения (например, двадцатое); это одна или две цифры.Python-luokka ottaa vastuulleen tämän konfiguraation jäsentämisen ja lopputuloksen laskemisen
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 responseTarkemmin sanottuna perusluokka FormFillingDialogManager on mukana "lomakkeen" ja lapsiluokan menetelmän täyttämisessä handle_completed_form kertoo mitä tehdä, kun hän on valmis.
Tämän käyttäjän dialogin päävirran lisäksi on myös tarpeen tervehtiä käyttäjää, antaa apua "help"-komennolla ja vapauttaa taidosta "exit"-komennolla. Tätä varten sisään tgalice siellä on myös malli, joten koko dialogihallinta koostuu osista:
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 toimii yksinkertaisesti: se yrittää soveltaa dialogin nykyiseen tilaan vuorotellen kaikkia sen komponentteja ja valitsee ensimmäisen asiaankuuluvan.
Vastauksena jokaiseen viestiin dialoginhallinta palauttaa python-objektin Response, joka voidaan sitten muuntaa tavalliseksi tekstiksi tai viestiksi Alicessa tai Telegramissa - riippuen siitä, missä botti on käynnissä; se sisältää myös dialogin muuttuneen tilan, joka on tallennettava. Koko tätä keittiötä hoitaa toinen luokka, DialogConnector, joten suora komentosarja taidon aloittamiseksi Yandex Functionsissa näyttää tältä:
...
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_handlerKuten näet, suurin osa tästä koodista luo yhteyden Object Storage S3 -liittymään. Voit lukea kuinka tätä yhteyttä käytetään suoraan .
Viimeinen rivi luo funktion alice_handler - se, jonka käskimme vetää Yandex.Cloud, kun asetimme parametrin --entrypoint=main.alice_handler.
Siinä itse asiassa kaikki. Makefiles rakentamiseen, S3-tyyppinen Object Storage kontekstin tallennusta varten ja python-kirjasto tgalice. Yhdessä pythonin palvelimettomien ominaisuuksien ja ilmaisukyvyn kanssa tämä riittää kehittämään terveen ihmisen taitoa.
Saatat kysyä, miksi sinun on luotava tgalice? Kaikki tylsä koodi, joka siirtää JSONit pyynnöstä vastaukseen ja tallennustilasta muistiin ja takaisin, on siinä. Siellä on myös tavallinen sovellus, toiminto, jolla ymmärretään, että "helmikuu" on samanlainen kuin "helmikuu", ja muita köyhille tarkoitettuja NLU:ita. Ajatukseni mukaan tämän pitäisi jo riittää, jotta voidaan luonnostella taitojen prototyyppejä yaml-tiedostoihin ilman, että tekniset yksityiskohdat häiritsevät liikaa.
Jos haluat vakavamman NLU:n, voit korjata sen taitosi mukaan tai , mutta niiden asettaminen vaatii lisää tanssimista tamburiinilla, varsinkin ilman palvelinta. Jos et halua koodata ollenkaan, sinun kannattaa käyttää visuaalisen tyypin konstruktoria . Kun luon tgalicea, ajattelin jonkinlaista välipolkua. Katsotaan, mitä tapahtuu.
No, liity nyt , lukea ja luoda hämmästyttäviä !
Lähde: will.com
