Python 串接 OpenAI API
這篇 OpenAI API 教學帶你用 Python 呼叫 GPT 模型:用官方 SDK 與目前主力的 Responses API,從取得金鑰到發出第一個請求。學會這套模式後,下一篇的 Gemini 幾乎只是換個套件名。
事前準備:
- 到 OpenAI Platform 註冊並建立 API Key(API 採用量計費,與 ChatGPT 訂閱是分開的)
- 安裝 SDK:
uv add openai
金鑰管理:先把安全做對
API Key 絕對不要寫在程式碼裡。SDK 預設會讀取環境變數 OPENAI_API_KEY:
# Windows(PowerShell)
$env:OPENAI_API_KEY = "sk-..."
# macOS / Linux
export OPENAI_API_KEY="sk-..."
設定好之後,程式裡完全不需要出現金鑰。
第一個請求:Responses API
from openai import OpenAI
client = OpenAI() # 自動讀取 OPENAI_API_KEY
response = client.responses.create(
model="gpt-5.5",
input="用一句話解釋什麼是 Python 的 List",
)
print(response.output_text)
執行輸出(AI 回應每次不同):
List 是 Python 中有順序、可修改、能存放任何型別元素的容器。
就這麼短:建立 client、responses.create() 給模型與輸入、output_text 拿回文字。模型名稱會隨版本更新,寫文當下的主力是 gpt-5.5;正式專案建議把模型名稱抽成設定值。
instructions:設定 AI 的角色
instructions 相當於系統提示,規範模型的行為與口吻:
response = client.responses.create(
model="gpt-5.5",
instructions="你是繁體中文的 Python 家教,回答簡潔、一定附程式碼範例。",
input="怎麼把 list 反轉?",
)
print(response.output_text)
執行輸出(AI 回應每次不同):
用切片最簡潔:
nums = [1, 2, 3]
print(nums[::-1]) # [3, 2, 1]
多輪對話
Responses API 用 previous_response_id 延續對話,不用自己維護歷史:
first = client.responses.create(
model="gpt-5.5",
input="我叫小明,請記住。",
)
second = client.responses.create(
model="gpt-5.5",
previous_response_id=first.id, # 接續上一輪
input="我叫什麼名字?",
)
print(second.output_text)
執行輸出(AI 回應每次不同):
你叫小明。
錯誤處理與費用觀念
from openai import OpenAI, APIError, RateLimitError, AuthenticationError
client = OpenAI()
try:
response = client.responses.create(model="gpt-5.5", input="你好")
print(response.output_text)
except AuthenticationError:
print("金鑰錯誤或未設定 OPENAI_API_KEY")
except RateLimitError:
print("請求太頻繁或額度用盡")
except APIError as e:
print("API 錯誤:", e)
API 依 token(約等於字詞片段)計費,輸入與輸出都算。開發時先用小額度上限測試,避免迴圈寫錯狂打 API 噴錢。
常見錯誤
1. AuthenticationError: 401
金鑰沒設、打錯、或已撤銷。確認環境變數名稱是 OPENAI_API_KEY,且設定後重開終端機才會生效(第 2 篇講過的 PATH 同款問題)。
2. 金鑰不小心 commit 上 GitHub
金鑰寫進程式碼又推上公開 repo,幾分鐘內就會被掃走盜用。永遠用環境變數;真的洩漏立刻到後台撤銷重發。
3. model not found
模型名稱打錯或該模型已下架。到官方文件確認目前可用的模型清單。
總結
流程:金鑰放環境變數 → OpenAI() 建 client → responses.create(model, input) → output_text 取文字;instructions 定角色、previous_response_id 接對話;錯誤處理與費用上限是上線前的必修。下一篇用同樣的思路串 Google Gemini。
延伸閱讀
- Python 教學(系列目錄)
- Python requests 網路請求
- Python 虛擬環境與 uv 套件管理
- Python 例外處理 (try except)
- Python 串接 Gemini API(下一篇)