ãã¥ãŒã¹ããå§ããŸãããã æšæ¥ãYandex.Cloud ã¯ãµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã° ãµãŒãã¹ã®éå§ãçºè¡šããŸãã ã ããã¯ããµãŒãã¹ (Web ã¢ããªã±ãŒã·ã§ã³ããã£ããããããªã©) ã®ã³ãŒããèšè¿°ããã ãã§ãã¯ã©ãŠãèªäœãå®è¡ãããä»®æ³ãã·ã³ãäœæããŠç¶æããè² è·ãå¢å ããå Žåã«ã¯ããããè€è£œããããšãæå³ããŸãã äœãèããå¿ èŠããªãããšãŠã䟿å©ã§ãã ãããŠãæ¯æãã¯èšç®æã®ã¿ã«çºçããŸãã
ãã ãããŸã£ããæ¯æããªã人ãããŸãã ãããã¯éçºè ã§ã ãã€ãŸããã£ããããããçµã¿èŸŒãŸããŠããŸãã éçºè ã¯èª°ã§ããã®ãããªã¹ãã«ãäœæããã¹ããç»é²ã§ããŸãã仿¥ããã¯ã¹ãã«ããã¹ãããå¿ èŠãããªããªããã³ãŒããæ¬¡ã®åœ¢åŒã§ã¯ã©ãŠãã«ã¢ããããŒãããã ãã§ãã .
ãã ããããã€ãã®ãã¥ã¢ã³ã¹ããããŸãã ãŸããããã ã³ãŒãã«ã¯ããã€ãã®äŸåé¢ä¿ãå¿ èŠãªå Žåããããããããã¯ã©ãŠãã«ãã©ãã°ããã®ã¯ç°¡åã§ã¯ãããŸããã æ¬¡ã«ãéåžžã®ãã£ãããããã¯ãã€ã¢ãã°ã®ç¶æ ãã©ããã«ä¿åããå¿ èŠããããŸã (ãããã£ãŠã¹ããŒããã«ã§ã)ã ãµãŒããŒã¬ã¹é¢æ°ã§æãç°¡åãªæ¹æ³ã§ãããè¡ãã«ã¯ã©ãããã°ããã§ãã? 第äžã«ãã¢ãªã¹çšã®ç°¡åãªã¹ãã«ãããŒã以å€ã®ãããããæã€ããçš®ã®ããããäœæããã«ã¯ã©ãããã°ããã§ãããã? ãããã®ãã¥ã¢ã³ã¹ã«ã€ããŠã¯ãå®éã«ã¯èšäºã§ãã

é埳çãªæºå
ãã£ãã¡ãªäººåã: 颿°ãã¯ã©ãŠãã«ã¢ããããŒãããåã«ãmakefile ã§å¿ èŠãªäŸåé¢ä¿ãåéãããã€ã¢ãã°ã®ç¶æ ã Yandex Object Storage (S3 API ããµããŒãããŠããŸã) ã«ä¿åããç¬èªã®ã©ã€ãã©ãªã䜿çšããŠãã€ã¢ãã°ã管çããŸã . ãã®çµæã ãã¢ã¹ãã«ã ããã§ã¯ãããããã¹ãŠãããå°ã詳ããåæããŠã¿ãŸãããã
ããã»ã©ãã£ãã¡ã§ã¯ãªãæ¹ã®ããã«ãè€éãªè©±ã«å ¥ãåã«ãç°¡åãªããšããå§ããããšã匷ããå§ãããŸãã ã€ãŸããåäžãã¡ã€ã«ã®ãšã³ãŒããã颿°ãäœæããDialog éçºè ã³ã³ãœãŒã«ã«ç»é²ããŠãã¹ãããŸãã 詳现 - 㧠О ã ãããŠããããå§ããŠãã ããã
ç§ãã¡ãäœã®ããã«æŠã£ãŠããã®ããããã«ç¥ããããã°ãã¢ãªã¹ã«èããŠãã ãããã'ã æ¬¡ã®ãããªãã€ã¢ãã°ã衚瀺ãããŸãã
ã¢ãªã¹ïŒããã«ã¡ã¯ïŒ ããªãã¯ãITããã¹ã³ãŒããã¹ãã«ãæã£ãŠããŸãã ãã¹ã¿ãŒãããšèšã£ãŠãæãããªãã«äœãçŽæãããã調ã¹ãŠãã ããã
ãŠãŒã¶ãŒ: éå§
A: ãååãèšã£ãŠãã ããã
ããïŒãŽã¡ã·ãžã¥ã¢ãªãŒ
A: ã§ã¯ãããªãã®çãŸãã幎ãæããŠãã ããã ãã£ãã® XNUMX æ¡ã§ããã以äžã¯äœããããŸããã
ãïŒXNUMXçªç®
A: ããäžåºŠè©ŠããŠãã ããã ããªãã®èªç幎ã XNUMX æ¡ã§å
¥åããŠãã ããã
ããïŒ2002幎
çŽ æŽãããïŒ ã§ã¯ãããªãã®èªçæã«ååãä»ããŠãã ããã
ãïŒXNUMXæ
çŽ æŽãããïŒ æåŸã«ãããªãã®çå¹Žææ¥ãæããŠãã ãããæ°åã ããXNUMX æ¡ã XNUMX æ¡ã ãã§ããã§ãã
ããïŒ18幎
A: ããããšãããŽã¡ã·ã·ã£ã«ïŒ ä»ãç§ãã¡ã¯ç¥ã£ãŠããŸãïŒããªãã¯17æ³ã§ãæ°Žç¶åº§ã§ãã ãã¡ãããããã§ããªãã¯å¹žéã§ãïŒ æãæããŠããã а ÑÑП гПвПÑÑÑ Ð·Ð²ÑзЎÑ, Ð²Ñ ÑзМаеÑе, запÑÑÑОв МавÑк.
åé¡ã¯ããã®ãããªåçŽãªãã€ã¢ãã°ãç¶æããããã«ãããŠãŒã¶ãŒã®ååãšçå¹Žææ¥ãèŠããŠããå¿ èŠãããããšã§ãããµãŒããŒã¬ã¹ç°å¢ã§ã¯ãããã¯ç°¡åã§ã¯ãããŸããã ã³ã³ããã¹ãã RAM ã«ä¿åãããããã£ã¹ã¯äžã®ãã¡ã€ã«ãšããŠä¿åãããããããšã¯ã§ããŸããã Yandex.Cloud ã¯ãè€æ°ã®ä»®æ³ãã·ã³ã§åæã«æ©èœãå®è¡ããããããä»»æã«åãæ¿ããããšãã§ããŸãã äœããã®å€éšã¹ãã¬ãŒãžã䜿çšããå¿ èŠããããŸãã ãªããžã§ã¯ã ã¹ãã¬ãŒãžã¯ãYandex.Cloud å ã§çŽæ¥ãããªãå®äŸ¡ã§ã·ã³ãã«ãªã¹ãã¬ãŒãž (ã€ãŸããããããé«é) ãšããŠéžæãããŸããã ç¡æã®ä»£æ¿æ¡ãšããŠãããšãã°ç¡æã®äœåã詊ãããšãã§ããŸãã ã©ããé ãã«ã Object Storage (S3 ã€ã³ã¿ãŒãã§ãŒã¹ããµããŒã) ãš Mongo ã«ã¯äž¡æ¹ãšã䟿å©ãª Python ã©ãããŒããããŸãã
ãã XNUMX ã€ã®åé¡ã¯ããªããžã§ã¯ã ã¹ãã¬ãŒãžãMongoDBããã®ä»ã®ããŒã¿ããŒã¹ãããŒã¿ ã¹ãã¢ã«ã¢ã¯ã»ã¹ããã«ã¯ã颿°ã³ãŒããšãšãã« Yandex Functions ã«ã¢ããããŒãããå¿ èŠãããå€éšäŸåé¢ä¿ãå¿ èŠã«ãªãããšã§ãã ãããŠæ°æ¥œã«ãã£ãŠãããããšæããŸãã ãã㯠(heroku ã®ããã«) éåžžã«äŸ¿å©ã§ãããæ®å¿µãªããæ©èœããŸããããç°å¢ãæ§ç¯ããããã®ã¹ã¯ãªãã (ã¡ã€ã¯ ãã¡ã€ã«) ãäœæããããšã§ãåºæ¬çãªå¿«é©ããäœãåºãããšãã§ããŸãã
ããã¹ã³ãŒãã¹ãã«ã®å§ãæ¹
- æºå: Linux ãå®è¡ããŠãããã·ã³ã«ãã°ã€ã³ããŸããåºæ¬çã«ã¯ã Windows ãããããããããŸãããã§ãããããMakefileãå®è¡ããã«ã¯å€å°ã®å·¥å€«ãå¿ èŠã§ãããããã«ããŠããPython 3.6以éãã€ã³ã¹ããŒã«ãããŠããå¿ èŠããããŸãã
- github ããã¯ããŒã³ãã .
- Ya.Cloud ã«ç»é²ããŸãã
- XNUMX ã€ã®ãã±ãããèªåã§äœæããŸã ãä»»æã®ååã§åŒãã§ãã ãã
{BUCKET NAME}Оtgalice-test-cold-storage(ãã®ããã«ããŒã ã¯çŸåšããŒãã³ãŒããããŠããŸãmain.pyç§ã®äŸïŒã æåã®ãã±ããã¯ãããã€ã¡ã³ãã«ã®ã¿å¿ èŠã§ãXNUMX çªç®ã®ãã±ããã¯ãã€ã¢ãã°ã®ç¶æ ãä¿åããããã«å¿ èŠã§ãã - äœããŸã ã圌ã«åœ¹å²ãäžããŸã
editorããã®éçèªèšŒæ å ±ãååŸããŸã{KEY ID}О{KEY VALUE}- 察話ã®ç¶æ ãèšé²ããããã«äœ¿çšããŸãã ãããã¯ãã¹ãŠãYa.Cloud ã®é¢æ°ã Ya.Cloud ã®ã¹ãã¬ãŒãžã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«å¿ èŠã§ãã ãã€ãèªèšŒãèªåçã«è¡ãããããšãé¡ã£ãŠããŸãããä»ã®ãšããã¯ããã§ãã - (ãªãã·ã§ã³) ã€ã³ã¹ããŒã«
ycã Web ã€ã³ã¿ãŒãã§ã€ã¹ãéããŠé¢æ°ãäœæããããšãã§ããŸãããããããçš®é¡ã®ã€ãããŒã·ã§ã³ãããéã衚瀺ããããããCLI ã®æ¹ãåªããŠããŸãã - ããã§ãå®éã«äŸåé¢ä¿ã®ã¢ã»ã³ããªãæºåã§ããŸããã¹ãã«ã®äŸãå«ããã©ã«ããŒããã³ãã³ã ã©ã€ã³ã§å®è¡ããŸãã
make allã 倿°ã®ã©ã€ãã©ãª (éåžžã©ãããã»ãšãã©ã¯äžèŠ) ããã©ã«ããŒã«ã€ã³ã¹ããŒã«ãããŸãdist. - ãªããžã§ã¯ãã¹ãã¬ãŒãžã«ãã³ã§èšå
¥ããŸãïŒãã±ãã«å
¥ããŸãïŒ
{BUCKET NAME}) åã®ã¹ãããã§ååŸããã¢ãŒã«ã€ãdist.zipã å¿ èŠã«å¿ããŠãããšãã°æ¬¡ã®ããã«ã³ãã³ãã©ã€ã³ãããããå®è¡ããããšãã§ããŸãã . - Web ã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯ãŠãŒãã£ãªãã£ã䜿çšããŠãµãŒããŒã¬ã¹é¢æ°ãäœæãã
ycã ãŠãŒãã£ãªãã£ã®å Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
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颿°ãæåã§äœæããå Žåããã¹ãŠã®ãã©ã¡ãŒã¿ãåãæ¹æ³ã§å ¥åãããŸãã
ããã§ãäœæãã颿°ãéçºè ã³ã³ãœãŒã«ãéããŠãã¹ãããã¹ãã«ã宿ãããŠå ¬éã§ããããã«ãªããŸãã

ãã³ãããã®äžã«ã¯äœãããã®ã
å®éãmakefile ã«ã¯ãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠã¢ãŒã«ã€ãã«å
¥ããããã®éåžžã«åçŽãªã¹ã¯ãªãããå«ãŸããŠããŸãã dist.zipã ãã®ãããªãã®ïŒ
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 ./*æ®ãã¯ã©ã€ãã©ãªã«ã©ãããããããã€ãã®åçŽãªããŒã«ã§ã tgaliceã ãŠãŒã¶ãŒããŒã¿ãå
¥åããããã»ã¹ã¯æ§æã«ãã£ãŠèšè¿°ãããŸãã 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 ã¯ã©ã¹ã¯ããã®æ§æãè§£æããŠæçµçµæãèšç®ããäœæ¥ãåŒãç¶ããŸãã
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ããæ£ç¢ºã«ã¯ãåºæ¬ã¯ã©ã¹ FormFillingDialogManager ããã©ãŒã ããžã®èšå
¥ãšåã¯ã©ã¹ã®ã¡ãœããã«åãçµãã§ããŸã handle_completed_form æºåãã§ãããäœããã¹ãããäŒããŸãã
ãŠãŒã¶ãŒã®ãã€ã¢ãã°ã®ãã®äž»ãªæµãã«å ããŠããŠãŒã¶ãŒã«æšæ¶ãããããhelpãã³ãã³ãã§ãã«ããçºè¡ãããããexitãã³ãã³ãã§ã¹ãã«ãè§£æŸãããããããšãå¿
èŠã§ãã ããã«ã€ããŠã¯ã tgalice ãã³ãã¬ãŒããããã®ã§ããã€ã¢ãã° ãããŒãžã£ãŒå
šäœã¯ããã€ãã®éšåã§æ§æãããŠããŸãã
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 åäœã¯åçŽã§ãããã€ã¢ãã°ã®ãã¹ãŠã®ã³ã³ããŒãã³ããé çªã«çŸåšã®ç¶æ
ã«é©çšããããšããæåã«é¢é£ããã³ã³ããŒãã³ããéžæããŸãã
åã¡ãã»ãŒãžãžã®å¿çãšããŠããã€ã¢ãã° ãããŒãžã£ãŒã¯ Python ãªããžã§ã¯ããè¿ããŸãã Responseããããå®è¡ãããŠããå Žæã«å¿ããŠããã¬ãŒã³ ããã¹ãã«å€æããããAlice ã Telegram ã®ã¡ãã»ãŒãžã«å€æãããã§ããŸãã ããã«ã¯ãä¿åããå¿
èŠããããã€ã¢ãã°ã®å€æŽãããç¶æ
ãå«ãŸããŸãã ãã®ãããã³ã¯ãã¹ãŠå¥ã®ã¯ã©ã¹ãæ
åœããŠããŸãã DialogConnectorãããã£ãŠã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ã芧ã®ãšããããã®ã³ãŒãã®å€§éšåã¯ãObject Storage S3 ã€ã³ã¿ãŒãã§ã€ã¹ãžã®æ¥ç¶ãäœæããŸãã ãã®æ¥ç¶ãã©ã®ããã«çŽæ¥äœ¿çšããããã¯ã次ã®ãšããã§ãã .
æåŸã®è¡ã¯é¢æ°ãäœæããŸã alice_handler - ãã©ã¡ãŒã¿ãŒãèšå®ãããšãã« Yandex.Cloud ããã«ããããã«æ³šæãããã® --entrypoint=main.alice_handler.
å®éãããã ãã§ãã ãã«ãçšã® Makefileãã³ã³ããã¹ã ã¹ãã¬ãŒãžçšã® S3 ã®ãããªãªããžã§ã¯ã ã¹ãã¬ãŒãžãããã³ Python ã©ã€ãã©ãª tgaliceã Python ã®ãµãŒããŒã¬ã¹æ©èœãšè¡šçŸåãçµã¿åããããšãããã¯å¥å
šãªäººéã®ã¹ãã«ãéçºããã®ã«ååã§ãã
ãªãäœæããå¿
èŠãããã®ãââãšçåã«æããããããŸããã tgalice? JSON ããªã¯ãšã¹ãããã¬ã¹ãã³ã¹ãã¹ãã¬ãŒãžããã¡ã¢ãªããããŠãã®éã«è»¢éããéå±ãªã³ãŒãã¯ãã¹ãŠãã®äžã«ãããŸãã éåžžã®ã¢ããªã±ãŒã·ã§ã³ãããXNUMXæãããXNUMXæãã«äŒŒãŠããããšãçè§£ããããã®æ©èœããã®ä»è²§å°å±€åãã®NLUããããŸãã ç§ã®èãã«ããã°ãæè¡çãªè©³çްã«ããŸãæ°ããšãããããšãªããyaml ãã¡ã€ã«ã§ã¹ãã«ã®ãããã¿ã€ããã¹ã±ããã§ããããã«ããã«ã¯ãããã§ååãªã¯ãã§ãã
ããæ¬æ Œç㪠NLU ãå¿ èŠãªå Žåã¯ãèªåã®ã¹ãã«ã«åãããŠèª¿æŽã§ããŸã ãŸã㯠ãã ããç¹ã«ãµãŒããŒã¬ã¹ã§ã¯ãããããã»ããã¢ããããã«ã¯ãã¿ã³ããªã³ã䜿ã£ã远å ã®ãã³ã¹ãå¿ èŠã«ãªããŸãã ã³ãŒãã£ã³ã°ããæ°ããŸã£ãããªãå Žåã¯ãããžã¥ã¢ã«ã¿ã€ãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãã ããã ã tgalice ãäœæãããšããç§ã¯ããçš®ã®äžéãã¹ãèããŸããã ãã°ããæ§åãèŠãŠã¿ãŸãããã
ããŠãä»ããåå ããŠãã ãã ã èªãã ãããŠçŽ æŽããããã®ãçã¿åºã !
åºæïŒ habr.com
