OpenAI platform :
https://platform.openai.com/home
點取最左小角的Personal
Organization settings:
Billing:
Usage Limit
Edit spend limit
setx OPENAI_API_KEY …
是 Windows 用來永久設定環境變數的指令,
通常是把你的 OpenAI API Key 存起來,
讓程式不用把金鑰寫死在程式碼中。
例如:
setx OPENAI_API_KEY “sk-proj-xxxxxxxxxxxxxxxxxxxxxxxx”
設定成功後,會看到類似:
SUCCESS: Specified value was saved.
—和 set 有什麼不同?
只對目前 Command Prompt 有效:
set OPENAI_API_KEY=sk-proj-xxxxxxxx
關掉 CMD 就消失了。
永久儲存(建議):
setx OPENAI_API_KEY “sk-proj-xxxxxxxx”
重新開啟 CMD、PowerShell 或 VS Code Terminal 後就可以使用。
—Python 怎麼讀?
import os
api_key = os.getenv("OPENAI_API_KEY")
print(api_key)或
from openai import OpenAI
client = OpenAI() # 會自動抓 OPENAI_API_KEY
# 會自動讀取 OPENAI_API_KEY不用寫:
# client = OpenAI(api_key="sk-proj-...")
—如何確認有沒有設定成功?
CMD:
echo %OPENAI_API_KEY%PowerShell:
echo $env:OPENAI_API_KEYPython:
import os
print(os.getenv("OPENAI_API_KEY"))—注意事項
setx 有兩個容易踩到的地方:
1. 不會影響目前已開啟的終端機執行 setx 後,
要重新開啟 CMD、PowerShell、VS Code Terminal,
新的環境變數才會生效。
2. 不要把 API Key 上傳到 GitHub
不要直接把 sk-proj-… 寫進程式碼或公開分享。
如果你是照 OpenAI 官方文件學習 API,
使用 setx OPENAI_API_KEY … 是
官方建議的做法之一(Windows)
最小範例:
from openai import OpenAI
# 會自動讀取環境變數 OPENAI_API_KEY ,不用寫:
# client = OpenAI(api_key="sk-proj-...")
client = OpenAI()
response = client.responses.create(
model="gpt-4.1-mini", #"gpt-5.6-terra" ,#
input="Hi"
)
print(response.output_text)輸出:
1. setx 指令
setx是 Windows 提供的用來永久寫入環境變數的指令(寫入後需重新開啟命令提示字元視窗才生效)。- Windows 上常見設法設環境變數:
- 臨時:
set OPENAI_API_KEY=...(只對目前視窗有效) - 永久:
setx OPENAI_API_KEY ...(寫到使用者環境變數)
- 臨時:
2. 在 Ubuntu/Linux 怎麼設?
- Ubuntu/Linux 沒有
setx指令。 - 通常設環境變數有以下做法:
- 臨時(只對當前 shell 有效):
export OPENAI_API_KEY=你的API金鑰永久(加到 shell 啟動檔,例如 .bashrc、.zshrc):
echo 'export OPENAI_API_KEY=你的API金鑰' >> ~/.bashrc
source ~/.bashrc總結比較表
官方文件建議
- OpenAI 官方文件會依照不同作業系統建議不同指令。
- Windows:
set或setx - Ubuntu/Linux/macOS:
export或修改.bashrc、.zshrc
- Windows:
結論
- Ubuntu/Linux 上不能用
setx,要用export。 - 若要永久生效,請寫到
.bashrc或.zshrc。
推薦hahow線上學習python: https://igrape.net/30afN
- 方法一:程式碼中指定
api_key + base_url - 方法二:統一使用
OPENAI_API_KEY + OPENAI_BASE_URL環境變數,程式碼完全不用改
第二種特別適合你做 Streamlit / LangChain / RAG 時,在不同 Provider 間切換。
OpenAI Compatible API Key:兩種設定方法完整教學
很多 AI Provider 都提供 OpenAI-compatible API,例如 Poe、OpenRouter、Ollama、vLLM 等。
所謂「OpenAI 相容」不是代表它們是 OpenAI,而是:
API 的呼叫格式盡量模仿 OpenAI SDK。
例如原本:
client.chat.completions.create(...)換成 Poe 或其他 Provider 後,通常這段程式仍然可以繼續使用;主要差別是:
API Key
Base URL
Model NamePoe 官方目前也是直接使用 OpenAI Python SDK,只修改 API Key 與 base_url。
一、先理解 OpenAI 為什麼通常不用設定 base_url
使用 OpenAI:
from openai import OpenAI
client = OpenAI()SDK 會自動讀取:
OPENAI_API_KEY而且 SDK 內建預設:
https://api.openai.com/v1所以:
client = OpenAI()實際上概念上等於:
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://api.openai.com/v1"
)只是後面兩個預設值 SDK 已經幫你處理了。OpenAI Python SDK 的程式碼也顯示:如果沒有指定 base_url,會先讀取 OPENAI_BASE_URL,再沒有才使用 OpenAI 官方預設 URL。
二、OpenAI Compatible API 有兩種設定方法
假設我們要使用 Poe:
API Key:你的 Poe API Key
Base URL:https://api.poe.com/v1Poe 官方的 OpenAI-compatible API 就是使用這個 Base URL。
方法一:在程式碼中明確指定
這是最直觀的方法。
1. 設定 API Key
Windows CMD:
setx POE_API_KEY "你的_POE_API_KEY"重新開啟 Terminal 後才會生效。
2. Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("POE_API_KEY"),
base_url="https://api.poe.com/v1"
)
response = client.chat.completions.create(
model="Claude-Sonnet-4.6",
messages=[
{
"role": "user",
"content": "Hello"
}
]
)
print(response.choices[0].message.content)這種方法的邏輯非常清楚:
程式
│
├─ API Key → POE_API_KEY
│
└─ Server → https://api.poe.com/v1Poe 官方提供的 Python 範例也是這種方式。
優點
- 一看程式就知道使用哪個 Provider
- OpenAI、Poe 可以同時使用
- 適合多 Provider 專案
例如:
import os
from openai import OpenAI
openai_client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
poe_client = OpenAI(
api_key=os.getenv("POE_API_KEY"),
base_url="https://api.poe.com/v1"
)然後:
openai_client
↓
OpenAI
poe_client
↓
Poe方法二:使用 OPENAI_API_KEY + OPENAI_BASE_URL
這個方法的最大特色是:
程式碼完全不用知道你現在連的是 OpenAI、Poe
還是其他 OpenAI-compatible API。
使用 Poe 時
Windows CMD:
setx OPENAI_API_KEY "你的_POE_API_KEY"
setx OPENAI_BASE_URL "https://api.poe.com/v1"重新開啟 Terminal。
程式就可以直接寫:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="Claude-Sonnet-4.6",
messages=[
{
"role": "user",
"content": "Hello"
}
]
)
print(response.choices[0].message.content)完全不需要:
api_key=
base_url=因為 SDK 會自動讀取:
OPENAI_API_KEY
OPENAI_BASE_URLOpenAI Python SDK 的目前實作確實會在沒有明確傳入 base_url 時讀取 OPENAI_BASE_URL;沒有設定才回退到 https://api.openai.com/v1。
三、兩種方法比較
方法一
環境變數
POE_API_KEY
│
▼
程式
api_key = POE_API_KEY
base_url = api.poe.com/v1方法二
環境變數
OPENAI_API_KEY
OPENAI_BASE_URL
│
▼
OpenAI()
│
▼
自動讀取設定最後一句話總結
方法一適合「程式明確指定 Provider」;
方法二適合「程式不變,只靠環境變數切換 Provider」。
推薦hahow線上學習python: https://igrape.net/30afN