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