跳至主要內容
ESC
Study Jam:GenAI 開發者實戰 — 第 20/29 篇

Gemini + Streamlit 開發 GenAI App

GCP

課程概述

Streamlit 是很多 Python 開發者愛用的快速原型工具,用純 Python 就能做出互動式 Web 應用,完全不用碰前端。再接上 Gemini API,你常常幾個小時就能把一個 GenAI 的點子變成跑得起來的原型。這門課就是要帶你走通這條從想法到原型的捷徑。

你將學到

  • 使用 Streamlit 建構 GenAI 應用的互動介面
  • 整合 Gemini API 進行文字生成、多模態問答與對話
  • 實作對話記憶與 Session State 管理
  • 將 Streamlit 應用容器化並部署到 Cloud Run
  • 理解原型與生產應用之間的架構差異

核心概念

Streamlit 的優勢與適用場景

Streamlit 讓你用寫 Python 腳本的方式做 Web 應用:st.text_input() 建輸入框、st.write() 顯示內容、st.chat_message() 做對話介面。它最大的好處就是快,不用碰 HTML、CSS、JavaScript,也不用搞前後端分離。最適合拿來做這些東西:內部工具、PoC 展示、資料探索應用、AI Demo。

Gemini 與 Streamlit 的整合

接 Gemini API 其實幾行就搞定:用新版 google-genai SDK 建立 client = genai.Client(),把使用者輸入當成 Prompt 丟進 client.models.generate_content(model=..., contents=...),再用 st.write() 把結果印出來(舊版 google-generativeai SDK 那套 GenerativeModel(...).generate_content() 寫法已經被標成 legacy,建議改用 google-genai)。如果是對話應用,就用 Streamlit 的 st.session_state 存對話歷史,每次請求都把完整歷史丟給 Gemini 的 Chat 模式,多輪對話才接得上前後文。

Session State 管理

Streamlit 的執行模型是「每次互動就把整個腳本重跑一遍」,所以跨互動的狀態得靠 st.session_state 存起來。以 GenAI 對話應用來說,至少有三種狀態要管:對話歷史(messages 列表)、模型設定(Temperature、System Instruction 等),還有應用狀態(載入中、錯誤等)。

從原型到生產的差距

Streamlit 拿來做原型很順,但搬到生產環境就有幾個地方要小心:並行處理撐不太住(所有使用者 Session 共用同一個 Python 進程,各自跑在獨立執行緒裡,會被 GIL 跟單進程的資源卡住)、沒有內建的認證跟權限管理、複雜的前端互動也很難做。等原型驗證過了,建議把核心邏輯抽出來變成獨立的 API 服務,另外做一套生產級的前端,Streamlit 應用就留著當內部的快速測試工具。

實作重點

  • 建立一個 Streamlit 聊天應用,整合 Gemini API 實現多輪對話
  • 加入側邊欄控制面板:Temperature 滑桿、模型選擇、System Instruction 輸入
  • 實作檔案上傳功能,讓使用者上傳圖片後用 Gemini 的多模態能力分析
  • 撰寫 Dockerfile 將應用容器化,部署到 Cloud Run 並設定環境變數
  • 加入基本的使用者回饋機制(如按讚/按倒讚按鈕)收集回應品質資料

Lab 導讀

Lab 連結Develop GenAI Apps with Gemini and Streamlit — Google Cloud Skills Boost

這個 Lab 會從零帶你做一個 Streamlit + Gemini 的應用,再部署到 Cloud Run。操作起來算直覺,很適合拿來練手 GenAI 應用開發。建議把 Lab 的基本要求做完後,再試著加點額外功能(像是多模態上傳、Prompt 模板選擇),順便想想這套架構怎麼套到你自己的應用場景。

延伸學習

Study Jam:GenAI 開發者實戰 — 20/29 完成 查看系列全覽 →

留言討論

徽章解鎖!