模型與命名規則
GET /v1/models、provider/model 命名規則,以及如何挑選與限制模型。
模型與命名規則
命名規則
模型 ID 一律使用 provider/model 的形式:
openai/gpt-4o
openai/gpt-4o-mini
anthropic/claude-sonnet-4-5
anthropic/claude-haiku-4-5
google/gemini-2.5-pro
google/gemini-2.5-flash
| 區段 | 說明 |
|---|---|
provider | 上游供應商:openai、anthropic、google,以及其他 OpenAI 相容供應商。 |
model | 供應商端的模型名稱,盡量與原廠一致,方便對照文件。 |
加上前綴的好處是名稱不會撞號,而且從 model 字串就能一眼看出請求會送去哪裡。
列出可用模型
GET https://api.alphacurve.io/v1/models
回傳的是這把金鑰目前可用的模型。如果金鑰設定了模型白名單,清單只會包含白名單內的項目。
curl
curl https://api.alphacurve.io/v1/models \
-H "Authorization: Bearer $INFERENCE_API_KEY"
Python
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.alphacurve.io/v1",
api_key=os.environ["INFERENCE_API_KEY"],
)
for m in client.models.list().data:
print(m.id)
Node / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.alphacurve.io/v1",
apiKey: process.env.INFERENCE_API_KEY!,
});
for (const m of (await client.models.list()).data) {
console.log(m.id);
}
回應
{
"object": "list",
"data": [
{
"id": "openai/gpt-4o",
"object": "model",
"created": 1753776000,
"owned_by": "openai",
"context_length": 128000,
"capabilities": {
"streaming": true,
"tools": true,
"vision": true
},
"pricing": {
"input_per_1m": "2.50",
"cached_input_per_1m": "1.25",
"output_per_1m": "10.00",
"currency": "USD"
}
}
]
}
pricing 是套用平台加成後、你實際會被扣款的單價,單位為每 1M tokens。詳見 計費。
挑選模型
| 情境 | 建議 |
|---|---|
| 大量分類、抽取、摘要 | 小型快速模型,例如 openai/gpt-4o-mini、google/gemini-2.5-flash、anthropic/claude-haiku-4-5。 |
| 複雜推理、程式碼 | 旗艦模型,例如 openai/gpt-4o、anthropic/claude-sonnet-4-5、google/gemini-2.5-pro。 |
| 超長文件 | 選 context_length 大的模型,例如 Gemini 系列。 |
| 圖片理解 | capabilities.vision 為 true 的模型,見 Vision。 |
| Function calling | capabilities.tools 為 true 的模型,見 Tools。 |
務實的做法:先用便宜模型跑通流程,再針對品質不足的環節換上旗艦模型。
限制可用模型
在 Dashboard 為每把金鑰設定模型白名單,可避免不小心呼叫到昂貴模型。
- 呼叫平台上不存在的模型 →
404 model_not_found - 呼叫存在、但不在此金鑰白名單內的模型 →
403 model_not_allowed
備援
上游供應商偶爾會逾時或回傳 5xx。建議在應用層準備一個備援模型:
MODELS = ["anthropic/claude-sonnet-4-5", "openai/gpt-4o"]
def complete(messages):
last_error = None
for model in MODELS:
try:
return client.chat.completions.create(model=model, messages=messages)
except Exception as exc: # 逾時或 upstream_error
last_error = exc
raise last_error