Vibe Coding × Projects

用 AI 一起寫 Python 專題

Vibe coding 是用自然語言描述你想要的東西,讓 AI 幫你產生程式,你負責測試、理解、修正和做決定。這台叢集在專題裡可以扮演兩種角色:幫你寫程式的助教,以及你程式裡的 AI 功能。

角色一:寫程式的助教

Vibe coding 的循環

  1. 描述說清楚你要什麼:輸入是什麼、輸出是什麼、有什麼限制。
  2. 產生讓 AI 寫出第一版。一次只做一個小功能,不要一口氣要整個專題。
  3. 執行真的跑起來,用你自己準備的資料測試。
  4. 讀錯誤出錯時把完整錯誤訊息貼給 AI,問它「為什麼」,而不只是「幫我修」。
  5. 弄懂確定你看懂每一行再進下一步。看不懂就請 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 協助產生的,以及你做了哪些修改和判斷。

角色二:放進你程式裡的 AI 功能

你的專題程式本身也可以呼叫 AI。幾個高中生做得到的方向:

教育

自動出題機

輸入一段課文,用 JSON 輸出選擇題,再用 Python 做成測驗小遊戲並計分。

寫作

作文回饋助手

依照你們自訂的評分規準,給出具體的修改建議,而不是直接改寫。

遊戲

會說話的 NPC

用 system prompt 設定角色個性,讓文字冒險遊戲的角色真的能跟玩家對話。

資料

資料分析小幫手

讀入 CSV,讓 AI 用自然語言解釋統計結果,或建議可以畫哪些圖。

文化

解籤機器人

結合籤詩資料庫與 AI,給出白話解釋。可以搭配下面的 RAG 做。

生活

校園問答

把校規、行事曆、社團介紹做成問答系統,新生入學時就能用。

RAG:讓 AI 根據你的資料回答

AI 不知道你們學校的校規,也可能憑空編造。RAG(檢索增強生成)的做法是:先從你的資料裡找出相關段落,再把這些段落和問題一起交給 AI,要求它「只根據這些資料回答」。

下面是最簡單的版本,不需要額外安裝其他套件。把你的資料存成 校規.txt,段落之間空一行:

rag.py
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("學校有游泳池嗎?"))   # 資料裡沒有 → 應回答「資料中沒有提到」
進階挑戰: 把第 2 步換成「向量搜尋」(embedding),讓「借書期限」和「書可以借多久」這種用字不同但意思相同的問題也找得到。這就是專題可以深入比較的地方。

想看一個「即時從網路抓資料、再交給 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,它就會用結果組出最後的回答。

把叢集本身當研究題目

很少高中有機會直接觀察大型語言模型怎麼在多台電腦上運作。可以發展成科展或小論文的方向:

做這類研究需要更多權限或資料,請和資訊老師討論。

用量的禮貌

叢集同時大約只能服務 6 個請求,是全校共用的資源: