1. Pengantar
Dalam lab ini, Anda akan membuat layanan web untuk membuat kuis trivia dan mengintegrasikannya ke dalam aplikasi yang berfungsi dan menyenangkan. Anda akan menggunakan bahasa pemrograman yang berbeda dari yang mungkin pernah Anda gunakan sebelumnya: Inggris!
Yang akan Anda lakukan ...
- Anda akan membuat perintah yang menghasilkan kuis trivia sesuai dengan serangkaian kriteria.
- Anda akan membuat aplikasi web sederhana dan memverifikasi bahwa aplikasi tersebut berjalan sesuai harapan di lingkungan pengembangan Anda.
- Anda akan menambahkan logika secara bertahap ke aplikasi web untuk mengubahnya menjadi server API yang membuat kuis sesuai dengan serangkaian parameter input.
- Anda akan melihat betapa mudahnya men-deploy layanan pembuatan kuis ke cloud menggunakan Google Cloud Run.
- Terakhir, Anda akan mengonfigurasi aplikasi sungguhan ( quizaic.com) untuk menggunakan layanan pembuat kuis yang di-deploy dan Anda akan dapat memainkan kuis live berdasarkan outputnya.
Yang akan Anda pelajari ...
- Cara membuat perintah ber-template untuk Model Bahasa Besar (LLM).
- Cara membuat aplikasi server web sederhana di Python.
- Cara menambahkan dukungan untuk LLM Google ke aplikasi web Anda.
- Cara men-deploy aplikasi Anda ke cloud sehingga siapa pun dapat mencoba kreasi baru Anda.
- Cara mengintegrasikan generator kuis ke dalam aplikasi yang lebih besar.
Yang Anda butuhkan ...
- Browser web Chrome
- Akun Google
- Project Cloud dengan penagihan diaktifkan
Lab ini ditujukan bagi developer dari semua level, termasuk para pemula. Meskipun Anda akan menggunakan Python, Anda tidak harus familier dengan pemrograman Python untuk memahami maksudnya karena kami akan menjelaskan semua kode yang akan Anda lihat.
2. Penyiapan

Bagian ini membahas semua hal yang perlu Anda lakukan untuk memulai lab ini.
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Dalam lab ini, Anda akan bekerja di sesi Cloud Shell, yang merupakan interpreter perintah yang dihosting oleh mesin virtual yang berjalan di cloud Google. Anda dapat menjalankan bagian ini dengan mudah secara lokal di komputer Anda sendiri, tetapi menggunakan Cloud Shell memberi semua orang akses ke pengalaman yang dapat direproduksi dalam lingkungan yang konsisten. Setelah menyelesaikan lab ini, Anda dapat mencoba kembali bagian ini di komputer Anda sendiri.

Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
.

Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Continue.

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project telah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
Mengaktifkan beberapa API
Pada langkah-langkah selanjutnya, Anda akan melihat tempat layanan ini diperlukan (dan alasannya), tetapi untuk saat ini, jalankan perintah ini untuk memberi project Anda akses ke Cloud Build, Artifact Registry, Vertex AI, dan Cloud Run:
gcloud services enable cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
aiplatform.googleapis.com \
run.googleapis.com
Perintah di atas akan menampilkan pesan seperti berikut yang menandakan bahwa proses berhasil:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Perintah - Pemrograman dalam Bahasa Natural

Kita akan mulai dengan mempelajari cara membuat perintah untuk Model Bahasa Besar. Buka Konsol Google Cloud > Vertex AI > Vertex AI Studio (Language). Anda akan melihat halaman seperti ini:

Di bagian Generate Text, klik tombol Text Prompt. Dalam dialog berikutnya, masukkan perintah yang menurut Anda efektif untuk membuat kuis trivia sesuai dengan persyaratan berikut:
- Topik: Sejarah Dunia
- Jumlah pertanyaan: 5
- Tingkat kesulitan: menengah
- Bahasa: Inggris
Klik tombol Kirim untuk melihat output.
Seperti yang ditunjukkan pada screenshot berikut, panel sebelah kanan memberi Anda kemampuan untuk memilih model yang ingin digunakan dan menyesuaikan beberapa setelan:

Ada beberapa setelan yang tersedia, sebagai berikut:
- Region adalah tempat permintaan pembuatan Anda harus dijalankan.
- Model memilih model bahasa besar yang ingin Anda gunakan. Untuk codelab ini, gunakan "gemini-1.0-pro-001".
- Suhu mengontrol tingkat keacakan dalam pemilihan token. Temperatur yang lebih rendah cocok untuk perintah yang mengharapkan respons benar, sementara temperatur yang lebih tinggi dapat memberikan hasil yang lebih beragam atau tidak terduga.
- Batas token menentukan jumlah maksimal output teks dari satu prompt. Token terdiri atas sekitar empat karakter. Nilai defaultnya adalah 1024.
- Top-k mengubah cara model memilih token untuk output. Top-k 1 berarti token yang dipilih adalah yang paling mungkin di antara semua token dalam kosakata model (disebut juga greedy decoding), sedangkan top-k 3 berarti bahwa token berikutnya dipilih dari antara 3 token yang paling mungkin (menggunakan suhu). Nilai top-k default adalah 40.
- Top-p mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-p.
- Respons maks adalah jumlah maksimum respons model yang dihasilkan per perintah.
- Urutan penghentian adalah serangkaian karakter (termasuk spasi) yang menghentikan pembuatan respons jika model menemukannya.
- Respons streaming memilih apakah respons harus dicetak saat dihasilkan atau disimpan dan ditampilkan saat selesai.
- Nilai minimum filter keamanan menyesuaikan seberapa besar kemungkinan Anda melihat respons yang dapat berbahaya.
Setelah Anda memiliki perintah yang tampaknya menghasilkan kuis yang wajar sesuai dengan persyaratan yang disebutkan di atas, kita dapat mengurai kuis ini menggunakan kode kustom, tetapi bukankah lebih baik jika LLM menghasilkan kuis dalam format terstruktur yang dapat kita muat langsung ke dalam program? Program yang akan kita gunakan nanti di lab ini untuk memanggil generator Anda mengharapkan kuis dinyatakan dalam JSON, yang merupakan format lintas bahasa populer untuk merepresentasikan data terstruktur.
Kuis di lab ini dinyatakan sebagai array objek, di mana setiap objek berisi pertanyaan, array kemungkinan respons terhadap pertanyaan tersebut, dan respons yang benar. Berikut adalah encoding JSON untuk kuis dalam lab ini:
[
{
"question": "Who was the first person to walk on the moon?",
"responses": [
"Neil Armstrong",
"Buzz Aldrin",
"Michael Collins",
"Yuri Gagarin"
],
"correct": "Neil Armstrong"
},
{
"question": "What was the name of the war that took place between the British and the French in North America from 1754 to 1763??",
"responses": [
"The French and Indian War",
"The Seven Years' War",
"The War of the Austrian Succession",
"The Great War"
],
"correct": "The French and Indian War"
},
...
]
Lihat apakah Anda dapat mengubah perintah untuk menghasilkan kuis dalam format JSON yang diperlukan.
- Tentukan dalam kata-kata format persis yang Anda cari (misalnya, kalimat yang dicetak miring di atas).
- Sertakan contoh format JSON yang diinginkan dalam perintah Anda.
Setelah Anda memiliki perintah yang menghasilkan kuis sesuai spesifikasi yang diinginkan, klik tombol GET CODE di sudut kanan atas halaman untuk melihat kode Python yang dapat digunakan untuk mengirimkan perintah Anda secara terprogram ke LLM Vertex AI. Jika Anda tertarik menggunakan bahasa pemrograman selain Python, lihat https://cloud.google.com/vertex-ai/docs/samples?text=generative.
4. Membangun Server Web Sederhana

Setelah memiliki perintah yang berfungsi, kita ingin mengintegrasikannya ke dalam aplikasi yang lebih besar. Tentu saja, kita dapat menyematkan perintah Anda ke dalam kode sumber aplikasi yang lebih besar, tetapi kita ingin generator Anda berfungsi sebagai microservice yang menyediakan layanan pembuatan kuis untuk aplikasi lain. Untuk mewujudkannya, kita perlu membuat server web sederhana dan membuatnya tersedia secara publik. Kita akan melakukannya pada langkah-langkah berikut.
Mulai dengan mengklik tombol Open Editor di bagian atas panel Cloud Shell. Tampilannya terlihat seperti ini:

Kemudian, Anda akan berada di lingkungan IDE yang mirip dengan Visual Studio Code, tempat Anda dapat membuat project, mengedit kode sumber, menjalankan program, dll.
Jika layar terlalu sempit, Anda dapat memperluas atau memperkecil garis pemisah antara konsol dan jendela edit/terminal dengan menarik batang horizontal di antara kedua area tersebut, yang ditandai di sini:

Anda dapat beralih antara Editor dan Terminal dengan mengklik tombol Open Editor dan Open Terminal. Sekarang, coba beralih di antara kedua lingkungan ini.
Selanjutnya, buat folder untuk menyimpan pekerjaan Anda untuk lab ini dengan mengklik tombol tambahkan folder
, masukkan quiz-generator, lalu tekan enter. Semua file yang Anda buat di lab ini, dan semua pekerjaan yang Anda lakukan di Cloud Shell, akan berada di folder ini.
Sekarang, buat file requirements.txt. Hal ini memberi tahu Python library mana yang menjadi dependensi aplikasi Anda. Untuk aplikasi web sederhana ini, Anda akan menggunakan modul Python populer untuk membangun server web yang disebut Flask,, library klien google-cloud-aiplatform, dan framework server web yang disebut gunicorn. Di panel navigasi file, klik kanan folder quiz-generator, lalu pilih item menu New file, seperti ini:

Saat diminta untuk memasukkan nama file baru, masukkan requirements.txt, lalu tekan tombol enter. Pastikan file baru berada di folder project quiz-generator.
Tempelkan baris berikut di file baru untuk menentukan bahwa aplikasi Anda bergantung pada paket flask Python, server web gunicorn, dan library klien google-cloud-aiplatform, beserta versi terkait masing-masing.
flask==3.0.0 gunicorn==21.2.0 google-cloud-aiplatform==1.47.0
Anda tidak perlu menyimpan file ini secara eksplisit karena Cloud Editor akan menyimpan perubahan secara otomatis untuk Anda.
Dengan menggunakan teknik yang sama, buat file baru lainnya bernama main.py. Ini akan menjadi file sumber Python utama (dan satu-satunya) aplikasi Anda. Sekali lagi, pastikan file baru berada di folder quiz-generator.
Masukkan kode berikut ke dalam file ini:
from flask import Flask
import os
app = Flask(__name__) # Create a Flask object.
PORT = os.environ.get("PORT") # Get PORT setting from environment.
if not PORT:
PORT = 8080
# The app.route decorator routes any GET requests sent to the root path
# to this function, which responds with a "Hello world!" HTML document.
@app.route("/", methods=["GET"])
def say_hello():
html = "<h1>Hello world!</h1>"
return html
# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
app.run(host="0.0.0.0", port=PORT)
Beralih kembali ke terminal dan pindah ke folder project dengan perintah ini:
cd quiz-generator
Jalankan perintah berikut untuk menginstal dependensi project Anda:
pip3 install -r requirements.txt
Setelah menginstal dependensi, Anda akan melihat output yang berakhir seperti ini:
Successfully installed flask-3.0.0
Sekarang luncurkan aplikasi Anda dengan menjalankan perintah ini di terminal:
flask --app main.py --debug run --port 8080
Pada tahap ini, aplikasi Anda berjalan di virtual machine yang dikhususkan untuk sesi Cloud Shell Anda. Cloud Shell menyertakan mekanisme proxy yang memungkinkan Anda mengakses server web (seperti yang baru saja Anda mulai) yang berjalan di virtual machine Anda dari mana saja di internet global.
Klik tombol web preview, lalu item menu Preview on Port 8080 seperti ini:

Tab browser akan terbuka ke aplikasi yang sedang berjalan, yang akan terlihat seperti ini:

5. Menambahkan metode pembuatan dengan penguraian parameter
Sekarang kita ingin menambahkan dukungan untuk menerapkan metode baru yang disebut generate. Lakukan ini dengan menambahkan pernyataan impor untuk memanipulasi permintaan HTTP dan mengubah rute utama untuk mengurai permintaan ini dan mencetak parameter, sebagai berikut:
from flask import Flask
from flask import request #<-CHANGED
import os
app = Flask(__name__) # Create a Flask object.
PORT = os.environ.get("PORT") # Get PORT setting from environment.
if not PORT:
PORT = 8080
# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"]) #<-CHANGED
def generate(): #<-CHANGED
params = request.args.to_dict() #<-CHANGED
html = f"<h1>Quiz Generator</h1>" #<-CHANGED
for param in params: #<-CHANGED
html += f"<br>{param}={params[param]}" #<-CHANGED
return html #<-CHANGED
# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
app.run(host="0.0.0.0", port=PORT)
Sekarang muat ulang tab browser web yang ada untuk melihat hasilnya. Kali ini Anda akan melihat "Quiz Generator", beserta parameter kueri yang otomatis ditambahkan ke URL Anda (authuser). Coba tambahkan dua parameter tambahan dengan menambahkan string "`¶m1=val1¶m2=val2`" ke bagian akhir URL di kolom URL browser Anda, muat ulang halaman, dan Anda akan melihat sesuatu seperti ini:

Setelah melihat cara mengirim dan mengurai parameter kueri di URL, kita akan menambahkan dukungan untuk parameter tertentu yang akan kita kirim ke generator kuis, yang adalah sebagai berikut:
topic- materi kuis yang diinginkannum_q- jumlah pertanyaan yang diinginkandiff- tingkat kesulitan yang diinginkan (mudah, sedang, sulit)lang- bahasa kuis yang diinginkan
from flask import Flask
from flask import request
import os
# Default quiz settings #<-CHANGED
TOPIC = "History" #<-CHANGED
NUM_Q = "5" #<-CHANGED
DIFF = "intermediate" #<-CHANGED
LANG = "English" #<-CHANGED
app = Flask(__name__) # Create a Flask object.
PORT = os.environ.get("PORT") # Get PORT setting from environment.
if not PORT:
PORT = 8080
# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default): #<-CHANGED
if name in args: #<-CHANGED
return args[name] #<-CHANGED
return default #<-CHANGED
# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
args = request.args.to_dict() #<-CHANGED
topic = check(args, "topic", TOPIC) #<-CHANGED
num_q = check(args, "num_q", NUM_Q) #<-CHANGED
diff = check(args, "diff", DIFF) #<-CHANGED
lang = check(args, "lang", LANG) #<-CHANGED
html = f"""
<h1>Quiz Generator</h1><br>
{topic=}<br>
{num_q=}<br>
{diff=}<br>
{lang=}""" #<-CHANGED
return html
# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
app.run(host="0.0.0.0", port=PORT)
Sekarang muat ulang tab browser web yang ada untuk melihat hasilnya. Anda akan melihat halaman web yang mirip dengan berikut ini:

Coba ubah URL untuk menetapkan nilai berbagai parameter. Misalnya, coba gunakan akhiran "?authuser=0&topic=Literature&num_q=10&diff=easy&lang=French" di akhir URL di kolom URL Anda:

6. Menambahkan dan memformat perintah Anda
Selanjutnya, kita akan menambahkan dukungan untuk parameter tertentu yang akan kita kirim ke generator kuis, yang adalah sebagai berikut:
topic- materi kuis yang diinginkannum_q- jumlah pertanyaan yang diinginkandiff- tingkat kesulitan yang diinginkan (mudah, sedang, sulit)lang- bahasa kuis yang diinginkan
Salin perintah yang Anda kembangkan dengan Vertex Generative AI Studio pada langkah sebelumnya, tetapi ubah nilai hard code untuk topik, jumlah pertanyaan, dan tingkat kesulitan dengan string ini:
- {topic}
- {num_q}
- {diff}
- {lang}
from flask import Flask
from flask import request
import os
# Default quiz settings
TOPIC = "History"
NUM_Q = 5
DIFF = "intermediate"
LANG = "English"
PROMPT = """
Generate a quiz according to the following specifications:
- topic: {topic}
- num_q: {num_q}
- diff: {diff}
- lang: {lang}
Output should be (only) an unquoted json array of objects with keys:
"Question", "responses", and "correct".
""" #<-CHANGED
app = Flask(__name__) # Create a Flask object.
PORT = os.environ.get("PORT") # Get PORT setting from environment.
if not PORT:
PORT = 8080
# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default):
if name in args:
return args[name]
return default
# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
args = request.args.to_dict()
topic = check(args, "topic", TOPIC)
num_q = check(args, "num_q", NUM_Q)
diff = check(args, "diff", DIFF)
lang = check(args, "lang", LANG)
prompt = PROMPT.format(topic=topic, num_q=num_q, diff=diff, lang=lang) #<-CHANGED
html = f"<h1>Prompt:</h1><br><pre>{prompt}</pre>" #<-CHANGED
return html
# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
app.run(host="0.0.0.0", port=PORT)
Sekarang muat ulang tab browser web yang ada untuk melihat hasilnya. Anda akan melihat halaman web yang mirip dengan berikut ini:

Coba ubah URL untuk mengubah keempat parameter tersebut.
7. Menambahkan library klien Vertex AI
Sekarang kita siap menggunakan library klien Python Vertex AI untuk membuat kuis Anda. Hal ini akan mengotomatiskan perintah interaktif yang Anda lakukan di langkah #3 dan memberi layanan generator Anda akses terprogram ke kemampuan LLM Google. Perbarui file main.py Anda seperti berikut:
Pastikan untuk mengganti "YOUR_PROJECT" dengan project ID Anda.
from flask import Flask
from flask import request
from flask import Response #<-CHANGED
import os
import vertexai
from vertexai.generative_models import GenerativeModel #<-CHANGED
# Default quiz settings
TOPIC = "History"
NUM_Q = 5
DIFF = "intermediate"
LANG = "English"
MODEL = "gemini-1.0-pro" #<-CHANGED
PROMPT = """
Generate a quiz according to the following specifications:
- topic: {topic}
- num_q: {num_q}
- diff: {diff}
- lang: {lang}
Output should be (only) an unquoted json array of objects with keys "question", "responses", and "correct".
"""
app = Flask(__name__) # Create a Flask object.
PORT = os.environ.get("PORT") # Get PORT setting from environment.
if not PORT:
PORT = 8080
# Initialize Vertex AI access.
vertexai.init(project="YOUR_PROJECT", location="us-central1") #<-CHANGED
parameters = { #<-CHANGED
"candidate_count": 1, #<-CHANGED
"max_output_tokens": 1024, #<-CHANGED
"temperature": 0.5, #<-CHANGED
"top_p": 0.8, #<-CHANGED
"top_k": 40, #<-CHANGED
} #<-CHANGED
model = GenerativeModel(MODEL) #<-CHANGED
# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default):
if name in args:
return args[name]
return default
# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
args = request.args.to_dict()
topic = check(args, "topic", TOPIC)
num_q = check(args, "num_q", NUM_Q)
diff = check(args, "diff", DIFF)
lang = check(args, "lang", LANG)
prompt = PROMPT.format(topic=topic, num_q=num_q, diff=diff, lang=lang)
response = model.generate_content(prompt, generation_config=parameters) #<-CHANGED
print(f"Response from Model: {response.text}") #<-CHANGED
html = f"{response.text}" #<-CHANGED
return Response(html, mimetype="application/json") #<-CHANGED
# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
app.run(host="0.0.0.0", port=PORT)
Sekarang muat ulang tab browser web yang ada untuk melihat hasilnya. Perhatikan bahwa proses ini dapat memerlukan waktu beberapa detik karena sekarang Anda benar-benar membuat permintaan LLM. Anda akan melihat halaman web yang mirip dengan berikut ini:

Coba ubah URL untuk meminta topik kuis, jumlah pertanyaan, dan tingkat kesulitan yang berbeda.
Dengan demikian, microservice Anda telah selesai - selamat! Pada langkah berikutnya, Anda akan mempelajari cara men-deploy layanan di Cloud sehingga siapa pun dapat mengaksesnya dari mana saja.
8. Menuju Cloud!

Setelah membuat generator kuis sendiri, Anda pasti ingin membagikan kecanggihan ini kepada dunia. Jadi, sekarang saatnya men-deploy-nya ke Cloud. Namun, Anda ingin melakukan lebih dari sekadar membagikannya. Anda ingin memastikan bahwa:
- berjalan dengan andal - Anda mendapatkan toleransi fault otomatis jika komputer yang menjalankan aplikasi Anda mengalami error
- melakukan penskalaan otomatis - aplikasi Anda akan terus menangani tingkat traffic yang besar, dan secara otomatis mengurangi jejaknya saat tidak digunakan
- meminimalkan biaya Anda, dengan tidak mengenakan biaya untuk resource yang tidak Anda gunakan - Anda hanya dikenai biaya untuk resource yang digunakan saat merespons traffic
- dapat diakses melalui nama domain kustom - Anda memiliki akses ke solusi sekali klik untuk menetapkan nama domain kustom ke layanan Anda
- menawarkan waktu respons yang sangat baik - cold start cukup responsif, tetapi Anda dapat menyempurnakannya dengan menentukan konfigurasi instance minimum
- mendukung enkripsi end-to-end menggunakan keamanan web SSL/TLS standar - saat Anda men-deploy layanan, Anda akan mendapatkan enkripsi web standar, dan sertifikat yang diperlukan yang sesuai, secara gratis dan otomatis
Dengan men-deploy aplikasi ke Google Cloud Run, Anda akan mendapatkan semua hal di atas dan banyak lagi. Elemen penyusun dasar untuk membagikan aplikasi Anda dengan Cloud Run adalah container.
Container memberi kita kemampuan untuk membuat kotak modular tempat menjalankan aplikasi dengan semua dependensinya yang dipaketkan menjadi satu. Karena container dapat digunakan di hampir semua server virtual atau nyata, hal ini memberi kita cara untuk men-deploy aplikasi Anda di mana pun Anda inginkan, dari lokal hingga Cloud, dan bahkan untuk memindahkan aplikasi Anda dari satu penyedia layanan ke penyedia layanan lain.
Untuk mempelajari lebih lanjut container dan cara kerjanya di Google Cloud Run, lihat codelab Dev to Prod in Three Easy Steps with Cloud Run.
Men-deploy Aplikasi ke Cloud Run
Cloud Run adalah layanan regional, yang berarti infrastruktur yang menjalankan layanan Cloud Run Anda terletak di region tertentu dan dikelola oleh Google agar tersedia secara redundan di semua zona dalam region tersebut. Untuk mempermudah, dalam lab ini kita akan menggunakan region us-central1 yang di-hardcode.
Kita akan menggunakan sesuatu yang disebut buildpack untuk membuat container Anda secara otomatis. Buat file baru bernama Procfile di Cloud Editor dan masukkan satu baris teks ini:
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Hal ini memberi tahu sistem buildpack cara menjalankan aplikasi Anda di container yang dibuat otomatis. Selanjutnya, jalankan perintah berikut di Terminal Cloud Shell (dari direktori quiz-generator yang sama) :
gcloud run deploy quiz-generator \
--source . \
--region us-central1 \
--allow-unauthenticated
Perintah ini memberi tahu perintah gcloud bahwa Anda ingin perintah tersebut menggunakan buildpack untuk membuat image container, berdasarkan file sumber yang ditemukan di direktori saat ini (dot dalam --source . adalah singkatan untuk direktori saat ini). Karena layanan menangani image container secara implisit, Anda tidak perlu menentukan image pada perintah gcloud ini.
Tunggu sebentar sampai proses deployment selesai. Jika berhasil, perintah gcloud akan menampilkan URL layanan baru:
Building using Buildpacks and deploying container to Cloud Run service [quiz-generator] in project [YOUR_PROJECT] region [YOUR_REGION] OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/0cf1383f-35db-412d -a973-557d5e2cd4a4?project=780573810218]. OK Creating Revision... OK Routing traffic... OK Setting IAM Policy... Done. Service [quiz-generator] revision [quiz-generator-00001-xnr] has been deployed and is serving 100 percent of traffic. Service URL: https://quiz-generator-co24gukjmq-uc.a.run.app
Anda juga dapat mengambil URL layanan dengan perintah ini:
gcloud run services describe quiz-generator \ --region us-central1 \ --format "value(status.url)"
Tampilannya akan terlihat seperti:
https://quiz-generator-co24gukjmq-uc.a.run.app
Link ini adalah URL khusus, dengan keamanan TLS, untuk layanan Cloud Run Anda. Link ini bersifat permanen (selama Anda tidak menonaktifkan layanan) dan dapat digunakan di mana saja di internet. Tidak menggunakan mekanisme proxy Cloud Shell yang disebutkan sebelumnya, yang bergantung pada virtual machine sementara.
Klik Service URL yang disorot untuk membuka tab browser web ke aplikasi yang sedang berjalan. Pastikan hasilnya sama dengan yang Anda lihat saat berada di lingkungan pengembangan. Pastikan juga Anda dapat menyesuaikan kuis yang dihasilkan dengan memberikan parameter di akhir URL.
Selamat! Aplikasi Anda kini berjalan di Cloud Google. Tanpa perlu memikirkannya, aplikasi Anda tersedia untuk publik, dengan enkripsi TLS (HTTPS), dan penskalaan otomatis ke tingkat traffic yang luar biasa.
9. Menggabungkan semua bagian
Pada langkah terakhir ini, kita siap menjalankan generator kuis sebagai bagian dari aplikasi quizaic. Buka URL quizaic, login ke Akun Google Anda, lalu buka tab Create Quiz. Pilih jenis generator Custom, tempelkan URL Cloud Run Anda ke kolom URL, isi kolom wajib diisi lainnya, lalu kirimkan formulir.

Dalam beberapa saat, Anda akan memiliki kuis baru (lihat "Kuis baru saya" pada gambar di bawah), dengan gambar thumbnail yang dibuat AI, yang dapat Anda edit, mainkan, kloning, atau hapus melalui tombol yang sesuai. Kuis baru ini dibuat menggunakan layanan web yang baru saja Anda deploy berdasarkan perintah ber-template Anda.

10. Membersihkan

Meskipun Cloud Run tidak mengenakan biaya selama layanannya tidak digunakan, Anda mungkin akan tetap ditagih atas penyimpanan image container yang telah dibuat.
Anda dapat menghapus project GCP Anda untuk menghentikan tagihan, yang artinya akan menghentikan penagihan atas semua resource yang digunakan dalam project tersebut, atau cukup hapus image container Anda dengan perintah ini:
gcloud config set artifacts/repository cloud-run-source-deploy gcloud config set artifacts/location us-central1 gcloud artifacts docker images list # Note image tag for resulting list gcloud artifacts docker images delete <IMAGE-TAG>
Untuk menghapus layanan Cloud Run, gunakan perintah ini:
gcloud run services delete quiz-generator --region us-central1 --quiet
11. Anda Berhasil!

Selamat - Anda telah berhasil membuat perintah LLM dan men-deploy microservice Cloud Run menggunakan perintah tersebut. Sekarang Anda dapat memprogram dalam bahasa alami dan membagikan kreasi Anda kepada dunia.
Saya ingin mengajukan satu pertanyaan penting kepada Anda:
Setelah aplikasi Anda berfungsi di lingkungan developer, berapa baris kode yang harus Anda ubah untuk men-deploy-nya ke cloud, dengan semua atribut tingkat produksi yang ditawarkan oleh Cloud Run?
Jawabannya tentu saja adalah nol. :)
Codelab lain yang perlu diperiksa...
- Dev ke Prod dalam Tiga Langkah Mudah dengan Cloud Run
- Aplikasi Text Summarizer dengan Vertex AI dan Svelte Kit
- Aplikasi Chat dengan PaLM API di Cloud Run
- Cloud Function yang membungkus Model Text Bison PaLM
- Data ke AI Generatif dengan Spanner dan Vertex AI Imagen API
Dokumen referensi ...
12. Pesan Ajakan
Jika Anda menikmati codelab ini dan cenderung menghabiskan lebih banyak waktu untuk berinteraksi langsung dengan Google Cloud, Anda sebaiknya Bergabung dengan Google Cloud Innovators sekarang.

Google Cloud Innovators Gratis dan mencakup:
- Diskusi live, AMA, dan sesi roadmap untuk mempelajari hal terbaru langsung dari karyawan Google
- Berita Google Cloud terbaru langsung di kotak masuk Anda
- Badge digital dan latar belakang konferensi video
- 500 kredit lab dan pembelajaran di Skills Boost
Klik di sini untuk mendaftar.
