【LLM API】實作串接 OpenAI
隨著生成式 AI 的快速發展,OpenAI 提供的 API 成為許多開發者進行自然語言處理與生成應用的首選工具(學會串接OpenAI就可以說是AI工程師了XD)。本文將詳細介紹兩種串接 OpenAI API 的方法:使用官方 Python 套件,以及通過發送 HTTP 請求。
各模型價格
OpenAI 提供多種模型,價格與功能各有不同。模型可以選擇價格較實惠且效能優於 gpt-3.5-turbo
的 gpt-4o mini
。不過如果需要更強的理解與推理能力,則可以考慮使用 gpt-4o
。
Model | 1M input tokens |
1M output tokens |
Context Window |
Max output tokens |
---|---|---|---|---|
gpt-4o | $2.50 | $10.00 | 128K | 16,384 |
gpt-4o-mini | $0.150 | $0.600 | 128K | 16,384 |
o1-preview | $15.00 | $60.00 | 128K | 32,768 |
o1-mini | $3.00 | $12.00 | 128K | 65,536 |
(資料來源:
OpenAI API Pricing)
OpenAI API key
記得要先去取得一組 OpenAI API key。
用 OpenAI 套件
OpenAI 提供了官方的 Python 及 JavaScript 套件,我們會使用 Python 套件來實作串接。
1 | pip install openai |
1 | from openai import OpenAI |
發送 HTTP 請求
什麼是 curl?
cURL(client URL)是一個好用的命令列工具,用於透過 URL 與伺服器進行資料傳輸,可以利用 cURL 發送請求到伺服器並接收回應,支援多達 25 種以上的協定(如 HTTP/HTTPS、FTP/FTPS 等),通常廣泛應用於測試和調試 API(Application Programming Interface)。
- URL: 就是 API 的目標網址。
- H 表示 Headers: 定義 HTTP 請求的表頭。
- Content-Type:指定資料的格式,通常為 application/json。
- Authorization:用於身份驗證,例如傳遞 API 金鑰(Token)。
- d 表示 Data: 指定請求的資料內容,通常為 JSON 格式,如
{"key": "value"}
。
1 | curl "https://api.openai.com/v1/chat/completions" \ |
Python requests
我們可以透過 Python 的 requests 套件來發送 HTTP 請求,並實現 cURL 的功能。
功能 | cURL | requests |
---|---|---|
發送請求 | curl <URL> |
requests.get("<URL>") requests.post("<URL>") |
設定表頭 | -H "key: value" |
headers={"key": "value"} |
傳遞資料 | -d "key=value" |
data={"key": "value"} |
處理回應 | 終端機檢視輸出(stdout) | response.json() |
1 | pip install requests |
1 | import requests |
比較兩者差異
方法 | 優點 | 缺點 |
---|---|---|
HTTP 請求 | 掌控請求流程與錯誤處理。 可用自己熟悉的程式語言。 不依賴官方套件版本。 直接基於 API 文件開發。 |
需要熟悉 HTTP 請求結構。 無法使用官方套件內建功能。 需自行設計相應邏輯。 API 更新時需調整程式碼。 |
使用官方套件 | 官方套件簡化 API 調用。 提供官方套件內建功能。 通常有技術文檔與社群支持。 會隨 API 更新進行同步調整。 |
套件更新需等待官方釋出。 大版本更新時需調整程式碼。 僅支持官方指定程式語言。 需熟悉官方套件使用方法。 |
HTTP 請求:
- 優點:
- 開發者可完全掌控請求流程與錯誤處理。
- 適用於非 Python,可用自己熟悉的程式語言。
- 不依賴官方套件版本,直接基於 API 文件開發。
- 缺點:
- 需要開發者熟悉 API 文件與 HTTP 請求的結構。
- 無法使用官方套件內建功能(如重試機制或錯誤處理)。
- 需自行設計重試機制或錯誤處理等相應邏輯。
- API 更新(如端點或參數調整)時,需要調整程式碼。
使用官方套件:
- 優點:
- 官方套件簡化 API 調用,只需熟悉 API 文件即可。
- 提供如自動重試、錯誤處理等內建功能。
- 通常有技術文檔與社群支持,可加快解決問題。
- 會隨 API 更新進行同步調整,減少不兼容風險。
- 缺點:
- 需要等待官方開發團隊釋出套件更新。
- 當有大版本更新時,會需要調整現有程式碼。
- 僅支持官方提供的程式語言,如 Python、JavaScript。
- 需要熟悉官方套件的使用方法與特定語法。