SDK milik Anthropic sangat baik, tetapi seluruh ekosistem AI telah menstandarkan bentuk klien OpenAI — setiap contoh, setiap adapter framework, dan setiap tutorial "hello world" mengasumsikan Anda memiliki instance OpenAI(...) yang siap. Memigrasikan kode Anda untuk memanggil SDK Anthropic secara langsung adalah refaktor yang cukup berarti.
Tidak harus begitu. Tulisan ini menunjukkan cara memanggil Claude Opus 4.7, Sonnet 4.6, dan Haiku 4.5 melalui SDK OpenAI tanpa perubahan — dengan merutekan panggilan melalui Kunavo. SDK, tipe, streaming, dan penggunaan tool tetap sama. Satu-satunya baris yang berubah adalah base_url.
Perubahan minimum
Dengan paket openai Python yang sudah terpasang, migrasi lengkapnya terlihat seperti ini.
from openai import OpenAI
client = OpenAI(
api_key="sk-kn-...",
base_url="https://api.kunavo.com/v1", # the only line that changes
)
resp = client.chat.completions.create(
model="claude-sonnet-4-6", # a Claude slug, not gpt-4o
messages=[
{"role": "system", "content": "You are a senior platform engineer."},
{"role": "user", "content": "Critique this SQL migration..."},
],
)
print(resp.choices[0].message.content)api_key menjadi kunci Kunavo Anda (dibuat di /app/keys). base_url menunjuk ke gateway kami. Id model berubah dari gpt-4o menjadi slug Claude — claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5. Body permintaan, bentuk respons, dan setiap helper dalam SDK bekerja persis seperti saat digunakan dengan OpenAI.
Pengaliran data
Streaming bekerja secara identik. Kunavo meneruskan chunk SSE Anthropic dalam format chat.completion.chunk OpenAI, sehingga pola iterasi asinkron yang ada bekerja tanpa modifikasi.
for chunk in client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "Explain Raft in 200 words."}],
stream=True,
):
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Penggunaan alat / pemanggilan fungsi
Protokol penggunaan alat Anthropic secara semantik sama dengan pemanggilan fungsi OpenAI—perbedaannya hanya pada level wire. Kunavo menerjemahkan array tools, tool_calls respons, dan pesan tool lanjutan di kedua arah. Gunakan tool_choice="auto", "none", atau alat bernama—semuanya dipetakan.
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather in a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["city"],
},
},
}
]
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
tools=tools,
tool_choice="auto",
)
print(resp.choices[0].message.tool_calls)Visi
Claude sudah multimodal sejak 3.5; mengirim gambar menggunakan array OpenAI standar content: [{ type: 'text' }, { type: 'image_url' }]. image_url.url dapat berupa URL https atau URI base64 data:.
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{"type": "image_url",
"image_url": {"url": "https://example.com/cat.jpg"}},
],
}],
)Saat Anda memang ingin menggunakan SDK Anthropic native
Beberapa fitur khusus Anthropic tidak dapat diekspresikan dalam bentuk OpenAI—yang paling penting adalah direktif cache_control untuk caching prompt dan token thinking yang diperluas. Jika memerlukan salah satunya, beralihlah ke SDK tersebut tetapi tetap gunakan kunci yang sama: Kunavo juga menyediakan endpoint native /v1/messages, sehingga SDK Anthropic cukup digunakan dengan satu perubahan base_url.
from anthropic import Anthropic
client = Anthropic(
api_key="sk-kn-...",
base_url="https://api.kunavo.com", # SDK appends /v1/messages
)
resp = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system="You are a senior platform engineer.",
messages=[{"role": "user", "content": "What is a hot standby?"}],
)
print(resp.content[0].text)Lihat dokumentasi native Messages API untuk daftar lengkap parameter pass-through, dan /docs/caching untuk cara caching prompt menghemat hingga 90% biaya input pada prompt berulang.
Caching prompt itu sendiri tidak mengharuskan Anda beralih SDK. Untuk prompt yang panjang, Kunavo menetapkan breakpoint cache untuk Anda pada rute berbentuk OpenAI: pada prompt sistem, pada definisi alat, dan pada pesan terakhir dalam percakapan yang sudah berisi giliran asisten. cache_control yang Anda tambahkan sendiri ke pesan sistem, pesan pengguna, atau definisi alat akan diteruskan ke Claude.
Yang Anda korbankan—dan yang Anda dapatkan
Rute berbentuk OpenAI adalah terjemahan, bukan protokol native. Ada dua hal kecil yang tidak melewati batas ini:
- Kontrol thinking—
thinkingdanreasoning_efforttidak diteruskan ke Claude pada rute ini. Untuk mengaktifkan extended thinking atau menyesuaikannya, gunakan Messages API native. - Output thinking—saat model melakukan thinking, respons tidak menyertakan thinking tersebut, dan objek penggunaan tidak memiliki hitungan terpisah untuknya: token thinking dihitung di dalam
completion_tokens.
Manfaatnya signifikan: satu SDK untuk Claude, GPT, GPT-Image, Veo, dan seluruh katalog lainnya; di bawah harga resmi upstream tergantung model; penagihan native Stripe dalam mata uang lokal Anda; tanpa pergantian model diam-diam—failover mengganti vendor, tidak pernah model, dan dasbor merinci model, token, serta biaya setiap panggilan.
Konfirmasi dalam dua menit
Daftar di kunavo.com/app/signup—top-up $10 mencakup beberapa ribu panggilan Claude, bayar sesuai pemakaian, dan saldo Anda tidak pernah kedaluwarsa. Masukkan base_url, ganti ID model ke slug Claude, lalu jalankan rangkaian pengujian yang sudah ada. Jika ada yang tidak diteruskan dengan baik, kirim email ke contact@kunavo.com—kami membaca setiap pesan.