Quick Start

5 分鐘寫出第一支 AI 程式

這台叢集的用法和 OpenAI 的 ChatGPT API 完全相同,所以我們直接用官方的 openai 套件,只是把網址換成校內的叢集。

你需要的三樣東西

項目內容
網址(base_url)http://192.168.16.233:4000/v1(只有校內網路連得到)
模型名稱(model)gpt-oss-120b
API key向資訊老師申請,長得像 sk-exo- 開頭的一串亂碼

步驟 1:安裝 openai 套件

在終端機(Windows 是「命令提示字元」或 PowerShell)輸入:

pip install openai

用 PyCharm 的同學也可以在 PyCharm 下方的 Terminal 分頁輸入同一行,或看 PyCharm 設定。

步驟 2:第一支程式

建立一個 hello_ai.py,把 你的API key 換成老師給你的 key:

hello_ai.py
from openai import OpenAI

client = OpenAI(
    base_url="http://192.168.16.233:4000/v1",
    api_key="你的API key",
)

response = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[
        {"role": "user", "content": "用一句話介紹 Python"},
    ],
)

print(response.choices[0].message.content)

執行後,大約幾秒內就會印出 AI 的回答。恭喜,你已經在用 1200 億參數的模型了。

key 不要寫死在程式裡交出去。 練習時可以先這樣寫,但要上傳 GitHub 或交作業前,請改用下面的「環境變數」寫法,或把 key 刪掉。外流的 key 老師會直接停用。

更安全的寫法:從環境變數讀 key

import os
from openai import OpenAI

client = OpenAI(
    base_url="http://192.168.16.233:4000/v1",
    api_key=os.environ["EXO_API_KEY"],  # key 存在電腦的環境變數裡
)

PyCharm 設定環境變數的方法見 PyCharm 設定。

步驟 3:讓回答一個字一個字出現(串流)

加上 stream=True,回答就會像 ChatGPT 一樣邊想邊打字,不用等整段完成:

stream = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[{"role": "user", "content": "寫一首關於臺南的短詩"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
print()

步驟 4:給 AI 一個角色(system prompt)

messages 最前面加一則 "role": "system",就能設定 AI 的身分、語氣和規則:

messages = [
    {"role": "system", "content": "你是高中 Python 助教。用繁體中文回答,先給提示,不要直接給完整答案。"},
    {"role": "user", "content": "我的 while 迴圈停不下來"},
]

步驟 5:做一個會記得上下文的聊天機器人

AI 本身不會記得之前說過什麼。要讓它「記得」,就把整段對話都放進 messages 再送一次:

chatbot.py
from openai import OpenAI

client = OpenAI(base_url="http://192.168.16.233:4000/v1", api_key="你的API key")
messages = [{"role": "system", "content": "你是友善的聊天夥伴,用繁體中文簡短回答。"}]

while True:
    user = input("你:")
    if user in ("bye", "再見"):
        break
    messages.append({"role": "user", "content": user})
    reply = client.chat.completions.create(model="gpt-oss-120b", messages=messages)
    answer = reply.choices[0].message.content
    print("AI:", answer)
    messages.append({"role": "assistant", "content": answer})

gpt-oss 的特色:先思考,再回答

gpt-oss-120b 是「推理模型」:回答前會先在內部想一遍。這讓它答得更準,但有兩件事要知道:

1. max_tokens 不要設太小

max_tokens 限制的是「思考+回答」的總長度。我們實測設成 40 時,40 個 token 全被拿去思考,回答變成空白。

建議: 不設 max_tokens(閘道預設上限 4096),或至少設 500 以上。如果發現 content 是空的,而且 finish_reason 是 "length",就是這個原因。

2. 用 reasoning_effort 調整思考深度

response = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[{"role": "user", "content": "17 × 23 = ?"}],
    reasoning_effort="low",   # low / medium / high
)
設定適合
"low"聊天、翻譯、簡單問答。回得最快
"medium"預設值,一般程式問題
"high"難的數學、邏輯題、除錯。比較慢但比較準

想看它在想什麼?

思考過程放在 reasoning_content 欄位,通常是英文:

msg = response.choices[0].message
print("思考:", getattr(msg, "reasoning_content", None))
print("回答:", msg.content)

讓 AI 輸出 JSON(給程式用)

要把 AI 的回答交給程式處理(例如自動出題系統),可以要求它只輸出 JSON:

import json

response = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[{"role": "user", "content":
        '出一題高中數學選擇題,只輸出 JSON:{"q": 題目, "options": [四個選項], "answer": 正確選項}'}],
    response_format={"type": "json_object"},
)
quiz = json.loads(response.choices[0].message.content)
print(quiz["q"])
for opt in quiz["options"]:
    print(" -", opt)

出錯了怎麼辦?

錯誤意思怎麼辦
401 AuthenticationErrorkey 錯了或被停用檢查 key 有沒有多複製到空白;仍不行請問老師
400 沒有這個模型model 名稱打錯改成 gpt-oss-120b
502叢集沒有回應可能正在重開機,稍後再試或通知老師
APIConnectionError / 逾時連不到伺服器確認你在校內網路;在 Google Colab 上一定連不到,見 說明
回答是空白思考把 max_tokens 用完了把 max_tokens 調大,或拿掉

下一步:在 PyCharm 裡設定 AI 助教 →