進階技巧
掌握 20% 核心之後,這幾項會在實際專案裡反覆用到。
Secrets
本機建立 .streamlit/secrets.toml:
程式裡讀:
不要把 secrets.toml 提交到 Git。 Community Cloud 在 App settings 另外貼上。
檔案上傳與下載
uploaded = st.file_uploader("上傳 CSV", type="csv")
if uploaded:
import pandas as pd
df = pd.read_csv(uploaded)
st.dataframe(df)
st.download_button("下載結果", df.to_csv(index=False), "out.csv", "text/csv")
st.file_uploader 回傳的是檔案物件,可直接給 pandas.read_csv。
聊天介面
LLM App 的標準骨架是 st.chat_message + st.chat_input + Session State 存歷史:
import streamlit as st
if "messages" not in st.session_state:
st.session_state.messages = []
for m in st.session_state.messages:
with st.chat_message(m["role"]):
st.markdown(m["content"])
if prompt := st.chat_input("問點什麼"):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("assistant"):
st.write("這是示範回覆。")
串流輸出用 st.write_stream()。完整教學見官方 Build a basic LLM chat app。
Fragments
大頁面裡只有一張圖要隨滑桿更新時,用 @st.fragment 只重跑那一塊,其餘 KPI 與表格不必跟著算。Tech With Tim 的 迷你課程 後半有示範。
自訂元件
內建 Widget 不夠時,可用社群元件,或自己寫前端再接到 Python。官方工程師的兩集教學見 自訂元件。