用 AI 一起寫 Python 專題
Vibe coding 是用自然語言描述你想要的東西,讓 AI 幫你產生程式,你負責測試、理解、修正和做決定。這台叢集在專題裡可以扮演兩種角色:幫你寫程式的助教,以及你程式裡的 AI 功能。
角色一:寫程式的助教
Vibe coding 的循環
- 描述說清楚你要什麼:輸入是什麼、輸出是什麼、有什麼限制。
- 產生讓 AI 寫出第一版。一次只做一個小功能,不要一口氣要整個專題。
- 執行真的跑起來,用你自己準備的資料測試。
- 讀錯誤出錯時把完整錯誤訊息貼給 AI,問它「為什麼」,而不只是「幫我修」。
- 弄懂確定你看懂每一行再進下一步。看不懂就請 AI 逐行解釋。
好的提示詞長這樣
| ✗ 太模糊 | ✓ 具體 |
|---|---|
| 幫我寫一個成績程式 | 寫一個 Python 函式 grade(score):輸入 0~100 的整數,90 以上回傳 "A"、80 以上 "B"、70 以上 "C",其餘 "F"。輸入超出範圍時 raise ValueError。附上 5 個測試。 |
| 程式壞了 | 我執行 python main.py 出現下面的錯誤,第 12 行的 data 是從 CSV 讀進來的 list。請解釋原因,先給我提示,不要直接改:(貼上完整錯誤) |
| 讓它更好 | 這段程式在處理 1 萬筆資料時要跑 30 秒。可能的瓶頸在哪?給我兩種改法並比較優缺點。 |
角色二:放進你程式裡的 AI 功能
你的專題程式本身也可以呼叫 AI。幾個高中生做得到的方向:
自動出題機
輸入一段課文,用 JSON 輸出選擇題,再用 Python 做成測驗小遊戲並計分。
作文回饋助手
依照你們自訂的評分規準,給出具體的修改建議,而不是直接改寫。
會說話的 NPC
用 system prompt 設定角色個性,讓文字冒險遊戲的角色真的能跟玩家對話。
資料分析小幫手
讀入 CSV,讓 AI 用自然語言解釋統計結果,或建議可以畫哪些圖。
解籤機器人
結合籤詩資料庫與 AI,給出白話解釋。可以搭配下面的 RAG 做。
校園問答
把校規、行事曆、社團介紹做成問答系統,新生入學時就能用。
RAG:讓 AI 根據你的資料回答
AI 不知道你們學校的校規,也可能憑空編造。RAG(檢索增強生成)的做法是:先從你的資料裡找出相關段落,再把這些段落和問題一起交給 AI,要求它「只根據這些資料回答」。
下面是最簡單的版本,不需要額外安裝其他套件。把你的資料存成 校規.txt,段落之間空一行:
from openai import OpenAI
client = OpenAI(base_url="http://192.168.16.233:4000/v1", api_key="你的API key")
# 1. 讀入資料,用空行切成段落
text = open("校規.txt", encoding="utf-8").read()
chunks = [p.strip() for p in text.split("\n\n") if p.strip()]
# 2. 找出和問題最相關的段落(比對「兩個字的詞組」重疊多少)
def bigrams(s):
return {s[i:i+2] for i in range(len(s) - 1)}
def search(question, k=2):
q = bigrams(question)
return sorted(chunks, key=lambda c: len(q & bigrams(c)), reverse=True)[:k]
# 3. 把找到的段落放進提示詞,請 AI 只根據資料回答
def ask(question):
context = "\n\n".join(search(question))
response = client.chat.completions.create(
model="gpt-oss-120b",
messages=[
{"role": "system", "content": "只根據提供的資料,用繁體中文回答。資料裡沒有的,就回答「資料中沒有提到」。"},
{"role": "user", "content": f"資料:\n{context}\n\n問題:{question}"},
],
reasoning_effort="low",
)
return response.choices[0].message.content
print(ask("圖書館的書可以借多久?"))
print(ask("學校有游泳池嗎?")) # 資料裡沒有 → 應回答「資料中沒有提到」
想看一個「即時從網路抓資料、再交給 AI 整理」的完整網站範例?見 實作範例:考試小幫手。
Agent:讓 AI 會使用工具
gpt-oss 支援「工具呼叫」(function calling):你告訴它有哪些 Python 函式可以用,它會自己決定什麼時候呼叫、要帶什麼參數。這是 AI Agent 的基礎。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查詢城市目前天氣",
"parameters": {"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]},
},
}]
response = client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user", "content": "台南現在天氣怎樣?"}],
tools=tools,
)
call = response.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments) # get_weather {"city": "Tainan"}
接著由你的程式真的去執行 get_weather,把結果用 "role": "tool" 傳回給 AI,它就會用結果組出最後的回答。
把叢集本身當研究題目
很少高中有機會直接觀察大型語言模型怎麼在多台電腦上運作。可以發展成科展或小論文的方向:
- 分散方式的比較:Pipeline(分層接力)和 Tensor(每層拆開同時算)在速度上差多少?我們實測 2 台 Tensor 比單機快 1.85 倍,3 台 Pipeline 則和單機差不多。為什麼?
- 量化對品質的影響:同一個模型的 4bit、8bit 版本,答題正確率和速度差多少?
- 能源效率:每產生一個 token 要消耗多少焦耳?和雲端服務比較如何?
- 多人使用:同時 1、5、10、30 人使用時,等待時間怎麼變化?可以設計更公平的排隊方式嗎?
- 提示詞工程:同一題用不同的提示詞或
reasoning_effort,正確率差多少?
做這類研究需要更多權限或資料,請和資訊老師討論。
用量的禮貌
叢集同時大約只能服務 6 個請求,是全校共用的資源:
- 要大量處理資料(例如一次分析 500 篇文章)時,迴圈裡加
time.sleep(3),並避開上課時間。 - 聊天、翻譯這類簡單任務用
reasoning_effort="low",回得快也比較不佔資源。 - 先用 5 筆資料測試成功,再跑全部。