Gemini + Streamlit 開發 GenAI App
課程概述
Streamlit 很適合讓 Python 開發者快速做出可操作的介面,再接上 Gemini 驗證一個點子值不值得繼續。不過原型跑得動,和多人使用、資料不外洩、失敗能復原是兩回事。這堂課會帶你完成原型,也會一起判斷它什麼時候能繼續用 Streamlit,什麼時候該把核心邏輯拆出去。

Streamlit 能快速證明想法,但原型的 Session State、金鑰和單機錯誤處理不足以直接生產。容器化上 Cloud Run 後,還要補多使用者隔離、持久化、安全、限流、快取、成本與 CI/CD,才算跨過就緒門檻。
你將學到
- 使用 Streamlit 建構 GenAI 應用的互動介面
- 整合 Gemini API 進行文字生成、多模態問答與對話
- 實作對話記憶與 Session State 管理
- 將 Streamlit 應用容器化並部署到 Cloud Run
- 理解原型與生產應用之間的架構差異
核心概念
Streamlit 的優勢與適用場景
Streamlit 讓你用 Python 腳本建立 Web 介面:st.text_input() 做輸入框、st.write() 顯示內容、st.chat_message() 組對話畫面。它省掉不少前端樣板,很適合內部工具、PoC、資料探索與 AI Demo;但需要高度客製互動、複雜前端狀態或大量即時使用者時,就要提早評估是否仍符合需求。
Gemini 與 Streamlit 的整合
整合 Gemini 時,先用新版 google-genai SDK 建立 Client,再呼叫 client.models.generate_content(...) 或 Chat/Streaming 方法。舊版 google-generativeai 範例不適合直接拿來開新專案,遷移方式可參考官方 SDK 指南。對話歷史可先放在 st.session_state,但不要每次無上限地送出全部內容;應設定 Token 預算,保留近期訊息並摘要較舊對話。
Session State 管理
Streamlit 的執行模型是互動後重新執行腳本,因此跨互動狀態通常放在 st.session_state。對話應用至少會有訊息、模型設定和載入/錯誤狀態。Session State 跟著使用者連線,不是可靠的永久資料庫;連線重建、服務換版或工作階段結束後,不應假設內容還在。需要跨裝置歷史、稽核或復原時,應另存到有使用者隔離與保存政策的資料庫。
從原型到生產的差距
Streamlit 可以正式部署,但要依情境補齊能力。它已支援 st.login()、st.user 與 st.logout() 串接 OIDC,解決的是「使用者是誰」;角色、資料範圍與操作權限仍要由應用自行判斷,詳見官方認證文件。若只是少量內部使用者、互動也單純,Streamlit 搭配 Cloud Run、Secret Manager、資料庫與監控可以繼續用。若面向大量外部流量、需要多前端共用 API、複雜授權或高度客製體驗,再把模型與商業邏輯抽成獨立服務,不必一驗證成功就整套重寫。
流程圖暫時無法顯示,請重新整理頁面後再試。
實作重點
- 建立一個 Streamlit 聊天應用,整合 Gemini API 實現多輪對話
- 加入側邊欄控制面板:Temperature 滑桿、模型選擇、System Instruction 輸入
- 實作檔案上傳功能,讓使用者上傳圖片後用 Gemini 的多模態能力分析
- 撰寫 Dockerfile 部署到 Cloud Run,讓服務監聽平台指定連接埠,並以 Secret Manager 或服務身分提供憑證
- 加入基本的使用者回饋機制(如按讚/按倒讚按鈕)收集回應品質資料
Lab 導讀
Lab 連結:Develop GenAI Apps with Gemini and Streamlit — Google Cloud Skills Boost
這個 Lab 會從零做出 Streamlit+Gemini 應用,再部署到 Cloud Run。基本功能完成後,可以刻意測試重新整理、兩個瀏覽器工作階段、模型逾時和上傳錯誤,確認狀態沒有串到別人、錯誤也不會讓整個 App 卡死。這些測試比再多加一個 Demo 按鈕更接近真正上線會遇到的事。
延伸學習
- 建構 GenAI 應用 — 更生產級的 GenAI 應用架構
- Gemini 開發者指南 — Gemini API 的進階功能
- GenAI 驅動網站現代化 — 在既有網站中整合 AI 功能