በዜና እንጀምር። ትናንት Yandex.Cloud አገልጋይ አልባ የኮምፒውተር አገልግሎት መጀመሩን አስታውቋል . ይህ ማለት፡ የአገልግሎታችሁን ኮድ ብቻ ነው የምትጽፉት (ለምሳሌ፡ ዌብ አፕሊኬሽን ወይም ቻትቦት) እና ክላውድ ራሱ በሚሰራባቸው ቦታዎች ቨርቹዋል ማሽኖችን ይፈጥራል እና ይጠብቃል እና ጭነቱ ከጨመረ ይደግማል። በጭራሽ ማሰብ የለብዎትም, በጣም ምቹ ነው. እና ክፍያው የሚካሄደው ለስሌቶች ጊዜ ብቻ ነው.
ይሁን እንጂ አንዳንድ ሰዎች ጨርሶ ላይከፍሉ ይችላሉ። እነዚህ ገንቢዎች ናቸው ማለትም በውስጡ የተሰሩ ቻትቦቶች። ማንኛውም ገንቢ እንደዚህ አይነት ክህሎት መጻፍ፣ ማስተናገድ እና መመዝገብ ይችላል፣ እና ከዛሬ ጀምሮ ክህሎቶች እንኳን ማስተናገድ አያስፈልጋቸውም - ኮዳቸውን በቅጹ ላይ ወደ ደመናው ይስቀሉ .
ግን ሁለት ጥቃቅን ነገሮች አሉ. በመጀመሪያ፣ የእርስዎ የቤት እንስሳ ኮድ አንዳንድ ጥገኞችን ሊፈልግ ይችላል፣ እና እነሱን ወደ ክላውድ መጎተት ቀላል አይደለም። በሁለተኛ ደረጃ ፣ ማንኛውም መደበኛ ቻትቦት የንግግር ሁኔታን በሆነ ቦታ ማከማቸት አለበት (ስለዚህ ሁኔታዊ)። አገልጋይ በሌለው ተግባር ውስጥ ቀላሉ መንገድ እንዴት ማድረግ እንደሚቻል? በሶስተኛ ደረጃ ፈጣን እና የቆሸሸ ክህሎት ለአሊስ ወይም ዜሮ ያልሆነ ሴራ ያለው አንድ አይነት ቦት እንዴት መፃፍ ይቻላል? ስለእነዚህ ጥቃቅን ነገሮች, በእውነቱ, ጽሑፉ.

የሞራል ዝግጅት
ትዕግስት ለሌላቸው ሰዎች: ተግባሩን ወደ ደመናው ከመጫንዎ በፊት አስፈላጊውን ጥገኝነቶችን በፋይል እሰበስባለሁ, የንግግር ሁኔታን በ Yandex Object Storage ውስጥ አከማቸዋለሁ (የ S3 APIን ይደግፋል) እና ንግግሩን ለማስተዳደር የራሴን ቤተ-መጽሐፍት እጠቀማለሁ . በውጤቱም, ይወጣል ማሳያ ችሎታ. እና አሁን ይህንን ሁሉ በጥቂቱ በዝርዝር እንመርምር።
ትንሽ ትዕግስት ለሌላቸው፣ ወደ ውስብስብነት ታሪኬ ከመግባቴ በፊት፣ ቀላል እንዲጀምሩ እመክራለሁ። ይኸውም ባለአንድ ፋይል echobot ተግባር ይፍጠሩ፣ ይመዝገቡ እና በዲያሎግ ገንቢ ኮንሶል ውስጥ ይሞክሩት። ዝርዝሮች - ውስጥ и . እና ከዚያ ብቻ ይጀምሩ።
የምንታገለው ምን እንደሆነ ወዲያውኑ እንዲሰማዎት ከፈለጉ አሊስን ይጠይቁ' . የሚከተለው ውይይት መደረግ አለበት፡-
አሊስ: ሰላም! በ"IT ሆሮስኮፕ" ክህሎት ውስጥ ነዎት። ኮከቦቹ ለአንተ ቃል የገቡትን ለማወቅ "ጀምር" ይበሉ።
ተጠቃሚ፡ ጀምር
መልስ፡ እባክህ ስምህን ግለጽ።
ዩ፡ ቫሲሱሊ
መልስ፡ አሁን የተወለድክበትን አመት ንገረኝ። አራት አሃዞች ብቻ፣ ምንም ተጨማሪ የለም።
ዩ: ሁለተኛ
መ: እባክዎ እንደገና ይሞክሩ። የተወለዱበትን ዓመት ይግለጹ - አራት አሃዞች.
ዩ: 2002
ታላቅ! አሁን የተወለድክበትን ወር ጥቀስ።
ዩ፡ የካቲት
ታላቅ! በመጨረሻም የትውልድ ቀንዎን ይንገሩኝ - ቁጥር ብቻ አንድ ወይም ሁለት አሃዞች ብቻ።
ዩ: 18
መ: አመሰግናለሁ Vasisual! አሁን እናውቃለን፡ 17 አመትህ ነህ እና አኳሪየስ ነህ። እዚህ ፣ በእርግጥ ፣ እድለኛ ነዎት! ኮከቦቹ ይነግሩሃል а что говорят звёзды, вы узнаете, запустив навык.
ችግሩ እንደዚህ ቀላል ንግግር እንኳን ለማቆየት የተጠቃሚውን ስም እና የትውልድ ቀን ማስታወስ ያስፈልግዎታል ፣ እና አገልጋይ በሌለው አካባቢ ይህ ቀላል አይደለም። አውድ በ RAM ውስጥ ወይም በዲስክ ላይ እንደ ፋይል ማከማቸት አይሰራም, ምክንያቱም Yandex.Cloud ተግባሩን በበርካታ ቨርቹዋል ማሽኖች ላይ በተመሳሳይ ጊዜ ማሄድ እና በዘፈቀደ በመካከላቸው መቀያየር ይችላል። አንድ ዓይነት ውጫዊ ማከማቻ መጠቀም አለብህ። የነገሮች ማከማቻ በቀጥታ በYandex.Cloud (ይህም ፈጣን ሳይሆን አይቀርም) ልክ እንደ ርካሽ እና ቀላል ማከማቻ ተመርጧል። እንደ ነፃ አማራጭ, መሞከር ይችላሉ, ለምሳሌ, ነፃ ቁራጭ ሩቅ የሆነ ቦታ ። ሁለቱም የነገሮች ማከማቻ (የ S3 በይነገጽን ይደግፋል) እና ሞንጎ ምቹ የፓይዘን መጠቅለያዎች አሏቸው።
ሌላው ችግር ደግሞ ወደ Object Storage፣ MongoDB እና ወደ ሌላ ማንኛውም የውሂብ ጎታ ወይም የውሂብ ማከማቻ ለመሄድ፣ ወደ Yandex Functions ከተግባር ኮድዎ ጋር መስቀል የሚፈልጓቸው አንዳንድ ውጫዊ ጥገኛዎች ያስፈልጉዎታል። እና በምቾት ላደርገው እፈልጋለሁ። ሙሉ በሙሉ ምቹ ነው (እንደ ሄሮኩ ላይ) ፣ ወዮ ፣ አይሰራም ፣ ግን አከባቢን ለመገንባት ስክሪፕት በመፃፍ አንዳንድ መሰረታዊ ምቾት መፍጠር ይችላሉ (ፋይል ይስሩ)።
የኮከብ ቆጠራ ችሎታ እንዴት እንደሚጀመር
- አዘጋጅ፡ ሊኑክስን በሚያሄድ ማንኛውም ማሽን ውስጥ ይግቡ። በመሠረቱ፣ ከ ጋር Windows ይህ ምናልባት ሊሠራ ይችላል፣ ነገር ግን የmakefile ን ማስኬድ አስማት ይጠይቃል። እና ያም ሆነ ይህ፣ Python 3.6 ወይም ከዚያ በላይ መጫን ያስፈልግዎታል።
- ክሎን ከgithub .
- በYa.Cloud ይመዝገቡ፡
- እራስዎን ሁለት ባልዲዎች ይፍጠሩ , በማንኛውም ስም ይደውሉላቸው
{BUCKET NAME}иtgalice-test-cold-storage(ይህ የአማካይ ስም አሁን በሃርድ ኮድ ተቀምጧልmain.pyየእኔ ምሳሌ)። የመጀመሪያው ባልዲ የሚፈለገው ለመዘርጋት ብቻ ነው, ሁለተኛው - የንግግር ግዛቶችን ለማከማቸት. - ፈጠረ ፣ ሚና ስጠው
editor, እና ለእሱ የማይንቀሳቀሱ ምስክርነቶችን ያግኙ{KEY ID}и{KEY VALUE}- የውይይቱን ሁኔታ ለመመዝገብ እንጠቀማቸዋለን. ከYa.Cloud ያለው ተግባር ከYa.Cloud ማከማቻውን ማግኘት እንዲችል ይህ ሁሉ ያስፈልጋል። አንድ ቀን፣ እኔ ተስፋ አደርጋለሁ፣ ፈቃድ አውቶማቲክ ይሆናል፣ ግን ለአሁን - እንዲሁ። - (አማራጭ) መጫን
yc. እንዲሁም በድር በይነገጽ በኩል አንድ ተግባር መፍጠር ይችላሉ, ነገር ግን ሁሉም አይነት ፈጠራዎች በፍጥነት ስለሚታዩ CLI ጥሩ ነው. - አሁን እርስዎ, በእውነቱ, የጥገኛዎችን ስብስብ ማዘጋጀት ይችላሉ: በትእዛዝ መስመር ላይ ከአቃፊው በችሎታ ምሳሌ ያሂዱ
make all. ብዙ ቤተ-መጻሕፍት (በአብዛኛው፣ እንደተለመደው፣ አላስፈላጊ) በአቃፊው ውስጥ ይጫናሉ።dist. - በእቃ ማከማቻ ውስጥ (በባልዲ ውስጥ) እስክሪብቶዎችን ይሙሉ
{BUCKET NAME}) በቀድሞው ደረጃ የተገኘው ማህደርdist.zip. ከተፈለገ ይህንን ከትዕዛዝ መስመሩ ለምሳሌ መጠቀም ይችላሉ . - በድር በይነገጽ ወይም መገልገያውን በመጠቀም አገልጋይ አልባ ተግባር ይፍጠሩ
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አንድ ተግባርን በእጅ ሲፈጥሩ, ሁሉም መለኪያዎች በተመሳሳይ መንገድ ይሞላሉ.
አሁን የፈጠሩት ተግባር በገንቢ ኮንሶል በኩል ሊሞከር ይችላል፣ እና ከዚያ የተጠናቀቀ እና የታተመ ችሎታ።

ከመከለያው ስር ያለው
ሜክፋይሉ ጥገኞችን ለመጫን እና ወደ ማህደር ለማስቀመጥ በጣም ቀላል የሆነ ስክሪፕት ይዟል። 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 ዝግጁ ስትሆን ምን ማድረግ እንዳለባት ትናገራለች።
ከዚህ ዋና የተጠቃሚው የውይይት ፍሰት በተጨማሪ ለተጠቃሚው ሰላምታ መስጠት እንዲሁም በ "እርዳታ" ትዕዛዝ ላይ እገዛን መስጠት እና በ "መውጫ" ትዕዛዝ ላይ ካለው ችሎታ መልቀቅ አስፈላጊ ነው. ለዚህ በ 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, ከዚያም ወደ ግልጽ ጽሑፍ, ወይም በአሊስ ወይም በቴሌግራም መልእክት ውስጥ - ቦት በሚሠራበት ቦታ ላይ በመመስረት; እንዲሁም መቀመጥ ያለበት የንግግር ልውውጥ ሁኔታን ይዟል. ይህ ሁሉ ኩሽና በሌላ ክፍል ነው የሚሰራው 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.
እንደ እውነቱ ከሆነ ያ ብቻ ነው። ሜክፋይሎች ለግንባታ፣ S3 የሚመስል ነገር ማከማቻ ለአውድ ማከማቻ እና የፓይቶን ቤተ-መጽሐፍት። tgalice. ከአገልጋይ አልባ ባህሪያት እና የፓይቶን ገላጭነት ጋር ይህ የጤነኛ ሰው ችሎታን ለማዳበር በቂ ነው።
ለምን መፍጠር እንዳለብህ ልትጠይቅ ትችላለህ tgalice? JSONsን ከጥያቄ ወደ ምላሽ እና ከማከማቻ ወደ ማህደረ ትውስታ እና ጀርባ የሚያስተላልፍ ሁሉም አሰልቺ ኮድ በውስጡ አለ። እንዲሁም መደበኛ አገላለጽ አፕሊኬሽን አለ፣ "የካቲት" ከ"የካቲት" ጋር እንደሚመሳሰል የመረዳት ተግባር እና ሌላ NLU ለድሆች ነው። እንደ እኔ ሀሳብ፣ በቴክኒካዊ ዝርዝሮች ሳይበታተኑ የችሎታ ፕሮቶታይፕዎችን በ yaml ፋይሎች ለመሳል ይህ ቀድሞውኑ በቂ መሆን አለበት።
ይበልጥ ከባድ የሆነ NLU ከፈለክ፣ ከችሎታህ ጋር ማዛመድ ትችላለህ ወይም ነገር ግን እነሱን ማዋቀር በከበሮ በተለይም አገልጋይ በሌለው ላይ ተጨማሪ ጭፈራ ያስፈልገዋል። ጨርሶ ኮድ ማድረግ የማይፈልጉ ከሆነ የእይታ አይነት ገንቢን መጠቀም አለብዎት . tgaliceን ስፈጥር፣ ስለ አንድ ዓይነት መካከለኛ መንገድ አስብ ነበር። የሚሆነውን እንይ።
ደህና፣ አሁን ተቀላቀል ፣ አንብብ እና አስደናቂ ይፍጠሩ !
ምንጭ: hab.com
