Deployment cepat sebuah GenAI Chat App dengan VertexAI + Langchain + Strimlit

Johanes Glenn
Google Cloud Indonesia
4 min readAug 7, 2023

--

Latar Belakang

Pada saat ini, GenAI adalah salah satu topik yang banyak dibicarakan ataupun dikembangkan dengan tujuan untuk meningkatkan produk/service yang ditawarkan untuk mencapai tingkatan yang lebih tinggi. Hanya saja untuk memulai perjalanan membangun applikasi yang tertintegrasi dengan GenAI, membutuhkan pembelajaran yang panjang terutama untuk saya yang datang dari background Software Engineering tetapi tidak berpengalaman pada Artificial Intelligence.

Dengan berjalannya waktu, ekosistem dari GenAI berkembang dan saat ini tersedia tools/frameworks yang dapat kita gunakan untuk memulai membangun aplikasi. Dengan adanya Large Language Model yang tersedia + Framework untuk membantu kita membangun applikasi + User Interface sebagai antar muka dengan pengguna. Pada tulisan ini saya akan berpusat dengan konsep untuk membangun aplikasi chat dengan cepat dengan VertexAI + Langchain + Strimlit dan bagaimana menjalankan aplikasi tersebut diatas Cloud Run.

Langkah-Langkah

Untuk menjalankan hal ini akan dibutuhkan beberapa hal:

  1. IDE untuk membantu menuliskan kode, dan untuk hal ini saya menggunakan VSCode diatas Cloud Workstation untuk mempermudah development terutama karena terintegrasi dengan services di Google Cloud.
  2. Project yang aktif di Google Cloud dan IAM User untuk mengakses services yang ada.
  3. Beberapa service yang saya gunakan: VertexAI, Cloud Workstation, Cloud Build, Cloud Run, Cloud Source Repository, Artifact Registry.
  4. Pengetahuan dasar mengenai Python untuk mengerjakan Langchain dengan VertexAI dan Strimlit sebagai UI.

Tahapan

[Satu] Persiapkan sebuah project untuk menjalankan aplikasi tersebut dengan service yang sudah di persiapkan sesuai kebutuhan.

[Dua] Saya menggunakan Cloud Workstation sebagai development environment diatas VSCode. Pada penulisan dokumen ini saya akan menggunakan nama file chatllm-memory-cache.py.

Beberapa hal yang saya pelajari saat penulisan ini adalah:

  1. Langchain memberikan kita sebuah framework untuk membangun aplikasi dengan lebih terstruktur dan mempercepat karena tersedianya modul-modul yang akan berguna ketika kita membangun aplikasi. Salah satu saat ini adalah ketika saya ingin membangun sebuah aplikasi chat tentunya saya ingin aplikasi saya dapat mengingat konteks dari pembicaraan yang ada. Untuk hal ini saya dibantu melalui Langchain Memory: https://python.langchain.com/docs/modules/memory/
  2. Strimlit akan sangat berguna (terutama untuk saya yang bukan ahli di bidang Front End) untuk membangun antar muka. Tetapi strimlit memiliki behavior untuk menjalankan kembali keseluruhan kode ketika ada state yang berubah, hal ini membutuhkan perhatian khusus terutama ketika akan melakukan inisiasi dari sebuah resources. Untuk membantu hal ini saya bisa menggunakan cache_resource di dalam Strimlit untuk menyimpan inisiasi dari LLM dan Memory dari Langchain. https://docs.streamlit.io/library/advanced-features/caching

Catatan: Template yang digunakan hanya ditujukan untuk development cepat.

Setelah saya cukup puas untuk permulaan kode yang ada, tentunya saya ingin melihat hasilnya terlebih dahulu sebelum saya melakukan commit dan melanjutkan dengan CI/CD. Untuk hal ini Cloud Workstation sangat membantu dengan memberikan port-forwarding (Cloud Workstation running diatas browser saya dan bukan local machine) sehingga saya hanya butuh mengganti suffix (awalan) dari url dengan nomor port yang saya gunakan.

pip install --no-cache-dir -r requirements.txt

streamlit run chatllm-memory-cache.py \
--server.port=8080 \
--server.address=0.0.0.0 \
--server.enableCORS=false

Tambahan catatan ketika menggunakan Cloud Workstation saya menggunakan diatas browser dengan memanggil URL workstation sehingga ketika saya butuh mengakses aplikasi di dalamnya ada CORS yang harus saya perhatikan.

Lalu kita panggil dengan mengganti awalan dari URL Cloud Workstation yang ada.

[Tiga] untuk menjalankan aplikasi di atas Cloud Run saya akan membutuhkan dua file yang akan membantu flow CI/CD.

cloudbuild.yaml file yang akan membantu untuk menjalankan Cloud Build dengan steps yang tersedia sedangkan Dockefile adalah config yang digunakan untuk membangun Container Image untuk aplikasi ini. Sebagai tambahan karena saya ingin lebih seamless ketika menjalankan hal ini saya akan membutuhkan lokasi git repo (saya menggunakan Code Source Repo tetapi tentunya anda bisa menggunakan opsi lainnya seperti Gitlab ataupun Github).

Catatan: saya membuat sebuah trigger dimana jika ada sebuah push ke dalam sebuah branch maka Cloud Build akan memulai steps yang ada dengan artifacts yang ada di dalam repo.

Untuk menjalankannya saya hanya butuh melakukan commit dan push ke repository.

Ketika semua proses selesai saya dapat melihat hasil pada Cloud Run yang sudah terbuat. That’s It !

--

--

Johanes Glenn
Google Cloud Indonesia

Cloud Customer Engineer — Infrastructure Modernization @GoogleCloud. Stories are my own opinion. https://linktr.ee/alevz