
Hai, habrozhiteli! Buku Hadiah Nuh ini untuk siapa saja yang tertarik dengan AI, pembelajaran mesin, komputasi awan, dan segala kombinasi topik data. Pemrogram dan teknisi yang peduli akan menemukan informasi yang bermanfaat di sini. Contoh kode diberikan dalam Python. Ini mencakup banyak topik canggih seperti penggunaan platform cloud (misalnya, AWS, GCP, dan Azure), serta teknik pembelajaran mesin dan penerapan AI. Jedi yang fasih dalam Python, komputasi awan, dan ML juga akan menemukan banyak ide berguna untuk diri mereka sendiri yang dapat segera diterapkan dalam pekerjaan mereka saat ini.
Kami mengundang Anda untuk membaca kutipan dari buku "Membuat Bot Slack Cerdas di AWS"
Orang-orang telah lama bermimpi menciptakan "kehidupan buatan." Paling sering, sementara ini dimungkinkan dengan membuat bot. Bot menjadi bagian yang semakin tidak terpisahkan dari kehidupan kita sehari-hari, terutama sejak kedatangan Siri dari Apple dan Alexa dari Amazon. Dalam bab ini, kami akan mengungkapkan semua rahasia membuat bot.
Pembuatan bot
Untuk membuat bot, kita akan menggunakan perpustakaan Slack untuk bahasa Python (https://github.com/slackapi/python-slackclient). Untuk memulai dengan Slack, Anda perlu membuat token identifikasi. Secara umum, masuk akal ketika bekerja dengan spidol tersebut untuk mengekspor variabel lingkungan. Saya sering melakukan ini di virtualenv, sehingga secara otomatis mendapatkan akses ketika dieksekusi di lingkungan saat ini. Untuk melakukan ini, Anda perlu “meretas” utilitas virtualenv dengan mengedit skrip aktivasi.
Saat mengekspor variabel Slack di skrip ~ / .env / bin / activ, ini akan terlihat seperti di bawah ini.
Dan hanya untuk informasi, jika Anda ingin mengikuti inovasi terbaru, disarankan untuk menggunakan utilitas Python resmi baru untuk mengelola lingkungan - pipenv (https://github.com/pypa/pipenv):
_OLD_VIRTUAL_PATH="$PATH" PATH="$VIRTUAL_ENV/bin:$PATH" export PATH SLACK_API_TOKEN=<Your Token Here> export SLACK_API_TOKEN
Lebih mudah menggunakan perintah printenv dari sistem operasi OS X dan Linux untuk memeriksa apakah variabel lingkungan diatur. Setelah itu, Anda dapat menggunakan skrip pendek berikut untuk memverifikasi pengiriman pesan:
import os from slackclient import SlackClient slack_token = os.environ["SLACK_API_TOKEN"] sc = SlackClient(slack_token) sc.api_call( "chat.postMessage", channel="#general", text="Hello from my bot! :tada:" )
Perlu juga dicatat bahwa utilitas pipenv adalah solusi yang disarankan menggabungkan kemampuan utilitas pip dan virtualenv dalam satu komponen. Ini telah menjadi standar baru, jadi masuk akal untuk melihatnya dari sudut pandang manajemen paket.
Konversi pustaka ke utilitas baris perintah
Seperti contoh lain dalam buku ini, merupakan ide bagus untuk mengubah kode kami menjadi utilitas baris perintah untuk membuatnya lebih mudah untuk menguji ide-ide baru. Perlu dicatat bahwa banyak pengembang pemula sering lebih suka tidak alat baris perintah, tetapi solusi lain, misalnya, mereka hanya bekerja di notebook Jupiter. Saya akan memainkan peran advokat iblis untuk sementara waktu dan mengajukan pertanyaan yang mungkin dimiliki pembaca: "Mengapa kita memerlukan utilitas baris perintah dalam proyek yang didasarkan pada buku catatan Jupiter? Bukankah titik dari notepad Jupiter membuat shell perintah dan baris perintah tidak perlu? " Menambahkan utilitas baris perintah ke proyek adalah baik karena memungkinkan Anda untuk dengan cepat mencoba opsi input yang berbeda. Blok kode notebook Jupiter tidak menerima input, dalam arti tertentu, ini adalah skrip dengan data terprogram.
Banyak utilitas baris perintah di kedua platform GCP dan AWS tidak ada secara kebetulan: mereka menyediakan fleksibilitas dan kemampuan yang tidak tersedia pada antarmuka grafis. Kumpulan esai yang luar biasa tentang subjek ini oleh penulis fiksi ilmiah Neal Stephenson disebut "Di Awal ... Ada Sebuah Baris Perintah". Di dalamnya, Stevenson mengatakan: "GUI memerlukan overhead tambahan yang signifikan untuk setiap, bahkan komponen perangkat lunak terkecil, yang sepenuhnya mengubah lingkungan pemrograman." Dia mengakhiri koleksi dengan kata-kata: “... hidup adalah hal yang sangat sulit dan sulit; tidak ada antarmuka yang akan mengubahnya; dan siapa pun yang berpikir sebaliknya adalah orang bodoh ... "Cukup tangguh, tetapi pengalaman saya menunjukkan bahwa itu cukup benar. Hidup dengan baris perintah semakin baik. Cobalah dan Anda tidak ingin kembali ke GUI.
Untuk melakukan ini, kami akan menggunakan paket klik, seperti yang ditunjukkan di bawah ini. Mengirim pesan menggunakan antarmuka baru sangat sederhana.
./clibot.py send --message "from cli" sending message from cli to #general
Gambar 7.1 menunjukkan nilai default serta pesan khusus dari utilitas cli.
#!/usr/bin/env python import os import click from slackclient import SlackClient SLACK_TOKEN = os.environ["SLACK_API_TOKEN"] def send_message(channel="#general", message="Hello from my bot!"): """ """ slack_client = SlackClient(SLACK_TOKEN) res = slack_client.api_call( "chat.postMessage", channel=channel, text=message ) return res @click.group() @click.version_option("0.1") def cli(): """ """ @cli.command("send") @click.option("--message", default="Hello from my bot!", help="text of message") @click.option("--channel", default="#general", help="general channel") def send(channel, message): click.echo(f"sending message {message} to {channel}") send_message(channel, message=message) if __name__ == '__main__': cli()
Kami membawa bot ke level baru menggunakan layanan AWS Step Functions
Setelah membuat saluran komunikasi untuk mengirim pesan ke Slack, Anda dapat meningkatkan kode kami, yaitu: menjalankannya sesuai jadwal dan menggunakannya untuk tindakan yang berguna. Layanan AWS Step Functions sangat bagus untuk ini. Di bagian selanjutnya, bot Slack kami akan belajar mengikis halaman olahraga Yahoo! Pemain NBA, ambil tempat lahir mereka, dan kemudian kirim data ini ke Slack.
Gambar 7.2 menunjukkan fungsi langkah-demi-langkah yang siap pakai dalam aksi. Langkah pertama adalah mengekstrak URL profil pemain NBA, dan yang kedua adalah menggunakan perpustakaan Beautiful Soup untuk menemukan tempat kelahiran masing-masing pemain. Setelah menyelesaikan fungsi langkah demi langkah, hasilnya akan dikirim kembali ke Slack.
AWS Lambda dan Chalice dapat digunakan untuk mengoordinasikan masing-masing bagian pekerjaan dalam fungsi langkah. Lambda (https://aws.amazon.com/lambda/) memungkinkan pengguna untuk melakukan fungsi di AWS, dan kerangka kerja Chalice (http://chalice.readthedocs.io/en/latest/) memungkinkan Anda membuat aplikasi tanpa server dengan Python. Berikut ini beberapa prasyarat:
- Pengguna harus memiliki akun AWS.
- pengguna membutuhkan kredensial untuk menggunakan API;
- peran Lambda (dibuat oleh Chalice) harus memiliki kebijakan dengan hak istimewa yang diperlukan untuk menjalankan layanan AWS yang sesuai, seperti S3.
Konfigurasikan Kredensial IAM
Instruksi terperinci untuk menyiapkan kredensial AWS dapat ditemukan di
boto3.readthedocs.io/en/latest/guide/configuration.html . Informasi tentang mengekspor variabel AWS pada sistem operasi Windows dan Linux
dapat ditemukan di sini . Ada banyak cara untuk mengonfigurasi kredensial, tetapi pengguna virtualenv dapat menempatkan kredensial AWS di lingkungan virtual lokal di skrip / bin / activate:
# AWS AWS_DEFAULT_REGION=us-east-1 AWS_ACCESS_KEY_ID=xxxxxxxx AWS_SESSION_TOKEN=xxxxxxxx
# export AWS_DEFAULT_REGION export AWS_ACCESS_KEY_ID export AWS_DEFAULT_REGION
Bekerja dengan Piala. Chalice memiliki utilitas baris perintah dengan banyak perintah yang tersedia:
Usage: chalice [OPTIONS] COMMAND [ARGS]... Options: --version Show the version and exit. --project-dir TEXT The project directory. Defaults to CWD --debug / --no-debug Print debug logs to stderr. --help Show this message and exit. Commands: delete deploy gen-policy generate-pipeline Generate a cloudformation template for a... generate-sdk local logs new-project package url
Kode di dalam templat app.py dapat diganti dengan fungsi layanan Lambda. AWS Chalice nyaman karena memungkinkan untuk membuat, selain layanan web, fungsi "berdiri sendiri" Lambda. Berkat fungsi ini, Anda dapat membuat beberapa fungsi Lambda, mengaitkannya dengan fungsi langkah-demi-langkah, dan menyatukannya seperti kubus Lego.
Misalnya, Anda dapat dengan mudah membuat fungsi Lambda terjadwal yang akan melakukan tindakan apa pun:
@app.schedule(Rate(1, unit=Rate.MINUTES)) def every_minute(event): """, """ # Slack
Untuk membangun interaksi dengan bot untuk pengikisan web, Anda perlu membuat beberapa fungsi. Di awal file ada impor dan sejumlah variabel dinyatakan:
import logging import csv from io import StringIO import boto3 from bs4 import BeautifulSoup import requests from chalice import (Chalice, Rate) APP_NAME = 'scrape-yahoo' app = Chalice(app_name=APP_NAME) app.log.setLevel(logging.DEBUG)
Bot mungkin perlu menyimpan beberapa data dalam S3. Fungsi berikut menggunakan Boto untuk menyimpan hasil dalam file CSV:
def create_s3_file(data, name="birthplaces.csv"): csv_buffer = StringIO() app.log.info(f"Creating file with {data} for name") writer = csv.writer(csv_buffer) for key, value in data.items(): writer.writerow([key,value]) s3 = boto3.resource('s3') res = s3.Bucket('aiwebscraping').\ put_object(Key=name, Body=csv_buffer.getvalue()) return res
Fungsi fetch_page menggunakan
perpustakaan Beautiful Soup untuk mem-parsing halaman HTML yang terletak sesuai dengan URL statistik NBA dan mengembalikan objek sup:
def fetch_page(url="https://sports.yahoo.com/nba/stats/"): """ URL Yahoo""" # # Beautiful Soup app.log.info(f"Fetching urls from {url}") res = requests.get(url) soup = BeautifulSoup(res.content, 'html.parser') return soup
Fungsi get_player_links dan fetch_player_urls mendapatkan tautan ke URL profil pemain:
def get_player_links(soup): """ URL URL 'a' 'nba/players' """ nba_player_urls = [] for link in soup.find_all('a'): link_url = link.get('href') # if link_url: if "nba/players" in link_url: print(link_url) nba_player_urls.append(link_url) return nba_player_urls def fetch_player_urls(): """ URL """ soup = fetch_page() urls = get_player_links(soup) return urls
Selanjutnya, dalam fungsi find_birthplaces, kami mengekstrak tempat kelahiran para pemain dari URL yang terletak di halaman-halaman ini:
def find_birthplaces(urls): """ NBA Yahoo""" birthplaces = {} for url in urls: profile = requests.get(url) profile_url = BeautifulSoup(profile.content, 'html.parser') lines = profile_url.text res2 = lines.split(",") key_line = [] for line in res2: if "Birth" in line: #print(line) key_line.append(line) try: birth_place = key_line[0].split(":")[-1].strip() app.log.info(f"birth_place: {birth_place}") except IndexError: app.log.info(f"skipping {url}") continue birthplaces[url] = birth_place app.log.info(birth_place) return birthplaces
Sekarang kita akan beralih ke fungsi Chalice. Harap dicatat: untuk kerangka kerja Chalice, jalur default harus dibuat:
# HTTP- @app.route('/') def index(): """ URL""" app.log.info(f"/ Route: for {APP_NAME}") return {'app_name': APP_NAME}
Fungsi Lambda berikut adalah rute yang menghubungkan URL HTTP ke fungsi yang ditulis sebelumnya:
@app.route('/player_urls') def player_urls(): """ URL """ app.log.info(f"/player_urls Route: for {APP_NAME}") urls = fetch_player_urls() return {"nba_player_urls": urls}
Fungsi Lambda berikut ini berdiri sendiri, mereka dapat dipanggil di dalam fungsi langkah-demi-langkah:
# Lambda @app.lambda_function() def return_player_urls(event, context): """ Lambda, URL """ app.log.info(f"standalone lambda 'return_players_urls'\ {APP_NAME} with {event} and {context}") urls = fetch_player_urls() return {"urls": urls} # Lambda @app.lambda_function() def birthplace_from_urls(event, context): """ """ app.log.info(f"standalone lambda 'birthplace_from_urls'\ {APP_NAME} with {event} and {context}") payload = event["urls"] birthplaces = find_birthplaces(payload) return birthplaces # Lambda @app.lambda_function() def create_s3_file_from_json(event, context): """ S3 JSON""" app.log.info(f"Creating s3 file with event data {event}\ and context {context}") print(type(event)) res = create_s3_file(data=event) app.log.info(f"response of putting file: {res}") return True
Jika Anda menjalankan aplikasi Piala yang dihasilkan secara lokal, hasil berikut akan ditampilkan:
→ scrape-yahoo git:(master) chalice local Serving on 127.0.0.1:8000 scrape-yahoo - INFO - / Route: for scrape-yahoo 127.0.0.1 - - [12/Dec/2017 03:25:42] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [12/Dec/2017 03:25:42] "GET /favicon.ico" scrape-yahoo - INFO - / Route: for scrape-yahoo 127.0.0.1 - - [12/Dec/2017 03:25:45] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [12/Dec/2017 03:25:45] "GET /favicon.ico" scrape-yahoo - INFO - /player_urls Route: for scrape-yahoo scrape-yahoo - INFO - https://sports.yahoo.com/nba/stats/ https://sports.yahoo.com/nba/players/4563/ https://sports.yahoo.com/nba/players/5185/ https://sports.yahoo.com/nba/players/3704/ https://sports.yahoo.com/nba/players/5012/ https://sports.yahoo.com/nba/players/4612/ https://sports.yahoo.com/nba/players/5015/ https://sports.yahoo.com/nba/players/4497/ https://sports.yahoo.com/nba/players/4720/ https://sports.yahoo.com/nba/players/3818/ https://sports.yahoo.com/nba/players/5432/ https://sports.yahoo.com/nba/players/5471/ https://sports.yahoo.com/nba/players/4244/ https://sports.yahoo.com/nba/players/5464/ https://sports.yahoo.com/nba/players/5294/ https://sports.yahoo.com/nba/players/5336/ https://sports.yahoo.com/nba/players/4390/ https://sports.yahoo.com/nba/players/4563/ https://sports.yahoo.com/nba/players/3704/ https://sports.yahoo.com/nba/players/5600/ https://sports.yahoo.com/nba/players/4624/ 127.0.0.1 - - [12/Dec/2017 03:25:53] "GET /player_urls" 127.0.0.1 - - [12/Dec/2017 03:25:53] "GET /favicon.ico"
Untuk menyebarkan aplikasi, jalankan perintah menyebarkan piala:
→ scrape-yahoo git:(master) chalice deploy Creating role: scrape-yahoo-dev Creating deployment package. Creating lambda function: scrape-yahoo-dev Initiating first time deployment. Deploying to API Gateway stage: api https://bt98uzs1cc.execute-api.us-east-1.amazonaws.com/api/
Berkat antarmuka baris perintah untuk HTTP (https://github.com/jakubroztocil/httpie) kami memanggil rute HTTP dari AWS dan mengekstrak tautan yang tersedia di / api / player_urls:
→ scrape-yahoo git:(master) http \ https://<a lambda route>.amazonaws.com/api/player_urls HTTP/1.1 200 OK Connection: keep-alive Content-Length: 941 Content-Type: application/json Date: Tue, 12 Dec 2017 11:48:41 GMT Via: 1.1 ba90f9bd20de9ac04075a8309c165ab1.cloudfront.net (CloudFront) X-Amz-Cf-Id: ViZswjo4UeHYwrc9e-5vMVTDhV_Ic0dhVIG0BrDdtYqd5KWcAuZKKQ== X-Amzn-Trace-Id: sampled=0;root=1-5a2fc217-07cc12d50a4d38a59a688f5c X-Cache: Miss from cloudfront x-amzn-RequestId: 64f24fcd-df32-11e7-a81a-2b511652b4f6 { "nba_player_urls": [ "https://sports.yahoo.com/nba/players/4563/", "https://sports.yahoo.com/nba/players/5185/", "https://sports.yahoo.com/nba/players/3704/", "https://sports.yahoo.com/nba/players/5012/", "https://sports.yahoo.com/nba/players/4612/", "https://sports.yahoo.com/nba/players/5015/", "https://sports.yahoo.com/nba/players/4497/", "https://sports.yahoo.com/nba/players/4720/", "https://sports.yahoo.com/nba/players/3818/", "https://sports.yahoo.com/nba/players/5432/", "https://sports.yahoo.com/nba/players/5471/", "https://sports.yahoo.com/nba/players/4244/", "https://sports.yahoo.com/nba/players/5464/", "https://sports.yahoo.com/nba/players/5294/", "https://sports.yahoo.com/nba/players/5336/", "https://sports.yahoo.com/nba/players/4390/", "https://sports.yahoo.com/nba/players/4563/", "https://sports.yahoo.com/nba/players/3704/", "https://sports.yahoo.com/nba/players/5600/", "https://sports.yahoo.com/nba/players/4624/" ] }
Cara mudah lain untuk bekerja dengan fungsi Lambda adalah dengan memanggilnya langsung menggunakan paket klik dan pustaka Python Boto.
Kita dapat membuat utilitas baris perintah baru yang disebut wscli.py (kependekan dari antarmuka baris perintah pengikisan web - “antarmuka baris perintah untuk pengikisan web”). Di bagian pertama kode, kami mengonfigurasi pencatatan dan impor pustaka:
#!/usr/bin/env python import logging import json import boto3 import click from pythonjsonlogger import jsonlogger # log = logging.getLogger(__name__) log.setLevel(logging.INFO) LOGHANDLER = logging.StreamHandler() FORMMATTER = jsonlogger.JsonFormatter() LOGHANDLER.setFormatter(FORMMATTER) log.addHandler(LOGHANDLER)
Tiga fungsi berikut dirancang untuk terhubung ke fungsi Lambda melalui invoke_lambda:
### API Boto Lambda def lambda_connection(region_name="us-east-1"): """ Lambda""" lambda_conn = boto3.client("lambda", region_name=region_name) extra_msg = {"region_name": region_name, "aws_service": "lambda"} log.info("instantiate lambda client", extra=extra_msg) return lambda_conn def parse_lambda_result(response): """ Boto JSON""" body = response['Payload'] json_result = body.read() lambda_return_value = json.loads(json_result) return lambda_return_value def invoke_lambda(func_name, lambda_conn, payload=None, invocation_type="RequestResponse"): """ Lambda""" extra_msg = {"function_name": func_name, "aws_service": "lambda", "payload":payload} log.info("Calling lambda function", extra=extra_msg) if not payload: payload = json.dumps({"payload":"None"}) response = lambda_conn.invoke(FunctionName=func_name, InvocationType=invocation_type, Payload=payload ) log.info(response, extra=extra_msg) lambda_return_value = parse_lambda_result(response) return lambda_return_value
Kami membungkus fungsi invoke_lambda dengan paket Python untuk membuat utilitas baris perintah Klik. Harap perhatikan bahwa kami menetapkan nilai default untuk opsi --func, yang menggunakan fungsi Lambda yang sebelumnya kami gunakan:
@click.group() @click.version_option("1.0") def cli(): """ -""" @cli.command("lambda") @click.option("--func", default="scrape-yahoo-dev-return_player_urls", help="name of execution") @click.option("--payload", default='{"cli":"invoke"}', help="name of payload") def call_lambda(func, payload): """ Lambda ./wscli.py lambda """ click.echo(click.style("Lambda Function invoked from cli:", bg='blue', fg='white')) conn = lambda_connection() lambda_return_value = invoke_lambda(func_name=func, lambda_conn=conn, payload=payload) formatted_json = json.dumps(lambda_return_value, sort_keys=True, indent=4) click.echo(click.style( "Lambda Return Value Below:", bg='blue', fg='white')) click.echo(click.style(formatted_json,fg="red")) if __name__ == "__main__": cli()
Hasil yang ditampilkan oleh utilitas ini mirip dengan memanggil antarmuka HTTP:
→ X ./wscli.py lambda \ --func=scrape-yahoo-dev-birthplace_from_urls\ --payload '{"url":["https://sports.yahoo.com/nba/players/4624/",\ "https://sports.yahoo.com/nba/players/5185/"]}' Lambda Function invoked from cli: {"message": "instantiate lambda client", "region_name": "us-east-1", "aws_service": "lambda"} {"message": "Calling lambda function", "function_name": "scrape-yahoo-dev-birthplace_from_urls", "aws_service": "lambda", "payload": "{\"url\":[\"https://sports.yahoo.com/nba/players/4624/\", \"https://sports.yahoo.com/nba/players/5185/\"]}"} {"message": null, "ResponseMetadata": {"RequestId": "a6049115-df59-11e7-935d-bb1de9c0649d", "HTTPStatusCode": 200, "HTTPHeaders": {"date": "Tue, 12 Dec 2017 16:29:43 GMT", "content-type": "application/json", "content-length": "118", "connection": "keep-alive", "x-amzn-requestid": "a6049115-df59-11e7-935d-bb1de9c0649d", "x-amzn-remapped-content-length": "0", "x-amz-executed-version": "$LATEST", "x-amzn-trace-id": "root=1-5a3003f2-2583679b2456022568ed0682;sampled=0"}, "RetryAttempts": 0}, "StatusCode": 200, "ExecutedVersion": "$LATEST", "Payload": "<botocore.response.StreamingBody object at 0x10ee37dd8>", "function_name": "scrape-yahoo-dev-birthplace_from_urls", "aws_service": "lambda", "payload": "{\"url\":[\"https://sports.yahoo.com/nba/players/4624/\", \"https://sports.yahoo.com/nba/players/5185/\"]}"} Lambda Return Value Below: { "https://sports.yahoo.com/nba/players/4624/": "Indianapolis", "https://sports.yahoo.com/nba/players/5185/": "Athens" }
Selesai membuat fungsi langkah demi langkah
Langkah terakhir dalam menciptakan fungsi langkah-demi-langkah, seperti yang dijelaskan dalam dokumentasi AWS (https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-activity-state-machine.html), adalah membuat dengan menggunakan antarmuka web dari struktur mesin negara dalam format JavaScript Object Notation (JSON). Kode berikut menunjukkan saluran ini, mulai dari fungsi Lambda asli untuk mengikis Yahoo !, menyimpan data dalam file S3, dan akhirnya mengirim konten ke Slack:
{ "Comment": "Fetch Player Urls", "StartAt": "FetchUrls", "States": { "FetchUrls": { "Type": "Task", "Resource": \ "arn:aws:lambda:us-east-1:561744971673:\ function:scrape-yahoo-dev-return_player_urls", "Next": "FetchBirthplaces" }, "FetchBirthplaces": { "Type": "Task", "Resource": \ "arn:aws:lambda:us-east-1:561744971673:\ function:scrape-yahoo-dev-birthplace_from_urls", "Next": "WriteToS3" }, "WriteToS3": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:\ 561744971673:function:scrape-yahoo-dev-create_s3_file_from_json", "Next": "SendToSlack" }, "SendToSlack": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:561744971673:\ function:send_message", "Next": "Finish" }, "Finish": { "Type": "Pass", "Result": "Finished", "End": true } } }
Dalam gbr. 7.2 pelaksanaan bagian pertama dari pipa ini ditunjukkan. Sangat berguna untuk melihat hasil antara dari mesin negara. Selain itu, kemungkinan pemantauan real-time dari setiap bagian dari mesin negara sangat nyaman untuk debugging.
Gambar 7.3 menunjukkan saluran lengkap dengan penambahan langkah-langkah penulisan ke file S3 dan mengirim konten ke Slack. Tetap hanya untuk memutuskan bagaimana menjalankan utilitas memo ini - pada interval waktu tertentu atau sebagai respons terhadap suatu peristiwa.
Ringkasan
Dalam bab ini, Anda telah diperkenalkan dengan banyak konsep luar biasa untuk membangun aplikasi AI. Itu menciptakan Slack bot dan utilitas pengikisan web, yang kemudian dihubungkan menggunakan layanan serverless dari AWS. Anda dapat menambahkan lebih banyak ke kerangka kerja awal - misalnya, fungsi Lambda untuk memproses teks yang ditulis dalam bahasa alami untuk membaca halaman web dan mendapatkan konten singkat atau algoritma pengelompokan tanpa seorang guru, yang akan mengelompokkan pemain NBA baru dengan atribut sewenang-wenang.
»Informasi lebih lanjut tentang buku ini dapat ditemukan di
situs web penerbit»
Isi»
KutipanDiskon 20% pada kupon untuk Kurir -
HadiahPS: 7% dari biaya buku akan masuk ke terjemahan buku komputer baru, daftar buku yang diserahkan ke percetakan ada di
sini .