Skip to content

建立 2026-09-14 更新 2026-09-14

進階技巧

掌握 20% 核心之後,這幾項會在實際專案裡反覆用到。

Secrets

本機建立 .streamlit/secrets.toml

OPENAI_API_KEY = "sk-..."

[connections.snowflake]
account = "xy12345"
user = "me"
password = "..."

程式裡讀:

import streamlit as st

client_key = st.secrets["OPENAI_API_KEY"]
conn = st.connection("snowflake")

不要把 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。官方工程師的兩集教學見 自訂元件