Getting error in executing api using openai 1.2.4 with python
隨著 AI 技術的迅速普及,開發者經常會在使用 OpenAI 官方 SDK 時遇到各種安裝與執行時的錯誤。尤其是在 Python 3.12 與 openai‑1.2.4 的組合下,開發者常見到的問題包括 SSL 憑證驗證失敗、aiohttp 版本衝突以及 API 呼叫失敗。以下詳細說明常見錯誤、診斷方法與修正步驟,並提供可直接複製使用的範例程式碼。
1. 常見錯誤類型
- SSL: certificate_verify_failed – 這通常是因為 Python 內建的憑證庫缺失或不完整。(OpenAI Community, 2025)
- aiohttp error – 由於 openai 1.2.4 依賴 aiohttp 3.x,在 Python 3.12 上預設的 aiohttp 版本可能使用 asyncio 原生事件迴圈,導致不相容。(OpenAI Community, 2025)
- 安裝失敗:`pip install openai` 之後出現 `Cannot find openai` 或 `ImportError`,多半是 pip 無法正確下載最新版或舊版的 wheel。(OpenAI Community, 2025)
2. 先導入必備套件
為避免衝突,先確保 pip 與 setuptools 都是最新:
python -m pip install --upgrade pip setuptools
接著安裝 openai 1.2.4 與相關依賴:
pip install openai==1.2.4 aiohttp==3.8.5 certifi==2023.7.22
如果已經存在舊版 aiohttp,先升級或降級:
pip install --upgrade aiohttp==3.8.5
3. 解決 SSL 憑證問題
在某些環境(尤其是 Windows 10/11、Ubuntu 22.04 等)下,Python 3.12 內建的憑證庫可能缺少憑證。以下方法能快速修復:
- 安裝 certifi(已在前一步安裝)。
- 在程式碼中設定
ssl_context,明確使用 certifi 的根憑證。
import ssl
from certifi import where
import openai
# 建立 SSL Context
ssl_context = ssl.create_default_context(cafile=where())
# 設定 openai 的 HTTP Client 使用上方的 SSL Context
openai.api_requestor._client._http._ssl_context = ssl_context
# 或直接在呼叫時加入 verify 參數
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[{"role":"user","content":"Hello"}],
verify=ssl_context
)
4. 處理 aiohttp 版本衝突
如果在執行時仍然收到 `RuntimeError: Cannot run the event loop while another loop is running`,表示 aiohttp 於 3.8+ 需要 Python 3.8 以上,但在 3.12 與某些 asyncio 後台版本不完全相容。可採取以下措施:
- 使用
aiohttp==3.8.5,這是目前最相容於 Python 3.12 的版本。 - 若仍有問題,暫時降級 Python 至 3.10,或使用
nest_asyncio做回包。(OpenAI Community, 2025)
5. 測試 API 呼叫
以下範例示範如何在 Python 3.12 + openai 1.2.4 中成功執行 Chat API,並套用 certifi SSL context,避免 SSL: CERTIFICATE_VERIFY_FAILED。
import os
import ssl
from certifi import where
from openai import OpenAI
# 1. 設定 API 金鑰
os.environ["OPENAI_API_KEY"] = "sk-xxxx"
# 2. 建立 SSL Context(避免 SSL 錯誤)
ssl_context = ssl.create_default_context(cafile=where())
# 3. 建立客戶端
client = OpenAI()
# 4. 發送測試訊息
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "Hello, can you respond?"}
],
# ⭐ 關鍵:加入 SSL Context
extra_request_kwargs={"ssl": ssl_context}
)
print(response.choices[0].message["content"])
注意:「extra_request_kwargs」是 openai-1.2.x 的正確寫法
OpenAI 1.x SDK 不再使用 openai.ChatCompletion.create(),而是:
client.chat.completions.create()
client.responses.create()
client.images.generate()
如果使用舊語法會出現:
AttributeError: module 'openai' has no attribute 'ChatCompletion'
6. 常見錯誤速查表(最新版)
| 錯誤訊息 | 原因 | 解法 |
|---|---|---|
| SSL: CERTIFICATE_VERIFY_FAILED | Python 憑證不完整、Windows 缺 CA | 安裝 certifi + 使用 SSL Context |
| ImportError: No module named openai | 使用舊版 openai 或 pip 安裝失敗 | pip install openai==1.2.4 |
| RuntimeError: event loop is running | Python 3.12 + aiohttp 衝突 | 安裝 aiohttp==3.8.5 或使用 nest_asyncio |
| APIConnectionError | SSL / Proxy / 防火牆問題 | 加 SSL Context、禁用 MITM Proxy |
| OpenAIError: Not Found | 使用錯誤的 API 方法 | 確認使用 client.chat.completions.create() |
7. Bonus:若你想用同步 (sync) 而非 async 模式
openai 1.2.4 預設走 aiohttp(async),但也支援同步呼叫,只要加入:
client = OpenAI(
# 強制使用 requests 模式(Sync)
http_client=OpenAI.default_httpx_client()
)
搭配 SSL 就是:
client = OpenAI(
http_client=OpenAI.default_httpx_client(verify=where())
)
8. Bonus:最乾淨的環境建議(避免 99% 錯誤) 你可以完全隔離你的執行環境:
python -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate
pip install --upgrade pip setuptools wheel
pip install openai==1.2.4 aiohttp==3.8.5 certifi
結語:Python 3.12 + openai 1.2.x 的核心要點
✔ 必須使用 新 SDK 寫法
✔ Python 3.12 需自己處理 aiohttp + SSL
✔ 使用 certifi 解決憑證錯誤最有效
✔ openai 1.2.4 預設 async,如不相容可切回 sync
✔ 使用 virtualenv 可避免 90% 衝突問題
🧠 本文由 DreamJ AI 自動網路探索生成系統撰寫,內容經 AI 模型審核與自動優化, 僅供技術參考與研究用途。













發佈留言