跳至主要內容

SDK 與語言整合

用官方 OpenAI SDK、原生 HTTP,或 LangChain、Vercel AI SDK 等常見框架接上 Inference。

SDK 與語言整合

Inference 是 OpenAI 相容 API,因此任何支援自訂 base URL 的 OpenAI 用戶端都能直接使用,不需要專屬 SDK。

共同設定:

base URL : https://api.alphacurve.io/v1
API key  : sk-inf-...

curl

export INFERENCE_API_KEY="sk-inf-xxxxxxxxxxxxxxxxxxxxxxxx"

curl https://api.alphacurve.io/v1/chat/completions \
  -H "Authorization: Bearer $INFERENCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{ "role": "user", "content": "Hello" }]
  }'

Python — openai SDK

pip install openai
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.alphacurve.io/v1",
    api_key=os.environ["INFERENCE_API_KEY"],
    timeout=60.0,
    max_retries=3,
)

resp = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

非同步版本:

import asyncio
import os
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://api.alphacurve.io/v1",
    api_key=os.environ["INFERENCE_API_KEY"],
)

async def main():
    resp = await client.chat.completions.create(
        model="google/gemini-2.5-flash",
        messages=[{"role": "user", "content": "Hello"}],
    )
    print(resp.choices[0].message.content)

asyncio.run(main())

Python — 不用 SDK

import os
import requests

resp = requests.post(
    "https://api.alphacurve.io/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {os.environ['INFERENCE_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "openai/gpt-4o-mini",
        "messages": [{"role": "user", "content": "Hello"}],
    },
    timeout=60,
)
resp.raise_for_status()
print(resp.json()["choices"][0]["message"]["content"])

Node / TypeScript — openai SDK

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.alphacurve.io/v1",
  apiKey: process.env.INFERENCE_API_KEY!,
  timeout: 60_000,
  maxRetries: 3,
});

const resp = await client.chat.completions.create({
  model: "openai/gpt-4o-mini",
  messages: [{ role: "user", content: "Hello" }],
});

console.log(resp.choices[0].message.content);

Node / TypeScript — 原生 fetch

const res = await fetch("https://api.alphacurve.io/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.INFERENCE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "openai/gpt-4o-mini",
    messages: [{ role: "user", content: "Hello" }],
  }),
});

if (!res.ok) {
  const { error } = await res.json();
  throw new Error(`${error.code}: ${error.message}`);
}

const data = await res.json();
console.log(data.choices[0].message.content);

Vercel AI SDK

npm install ai @ai-sdk/openai-compatible
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { streamText } from "ai";

const inference = createOpenAICompatible({
  name: "inference",
  baseURL: "https://api.alphacurve.io/v1",
  apiKey: process.env.INFERENCE_API_KEY!,
});

const result = streamText({
  model: inference("anthropic/claude-sonnet-4-5"),
  prompt: "用一句話說明什麼是路由。",
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

LangChain(Python)

pip install langchain-openai
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="anthropic/claude-sonnet-4-5",
    base_url="https://api.alphacurve.io/v1",
    api_key=os.environ["INFERENCE_API_KEY"],
)

print(llm.invoke("用一句話說明什麼是路由。").content)

LlamaIndex(Python)

import os
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="google/gemini-2.5-pro",
    api_base="https://api.alphacurve.io/v1",
    api_key=os.environ["INFERENCE_API_KEY"],
    is_chat_model=True,
)

print(llm.complete("用一句話說明什麼是路由。"))

Go

Go 沒有官方 OpenAI SDK 統一標準,用標準函式庫即可:

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

func main() {
	body, _ := json.Marshal(map[string]any{
		"model": "openai/gpt-4o-mini",
		"messages": []map[string]string{
			{"role": "user", "content": "Hello"},
		},
	})

	req, _ := http.NewRequest("POST",
		"https://api.alphacurve.io/v1/chat/completions",
		bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("INFERENCE_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	var out struct {
		Choices []struct {
			Message struct {
				Content string `json:"content"`
			} `json:"message"`
		} `json:"choices"`
	}
	json.NewDecoder(resp.Body).Decode(&out)
	fmt.Println(out.Choices[0].Message.Content)
}

設定建議

設定建議值原因
timeout60–120 秒長輸出或推理型模型需要較長時間,預設 timeout 常常太短。
max_retries3–5SDK 內建重試會處理 429 與 5xx。
base URL用環境變數之後要切換環境或改回直連原廠時不必改程式碼。