Mengirim setiap langkah sesi coding ke satu model adalah kebijakan routing yang paling mudah, dan biasanya yang paling mahal. Tutorial ini menunjukkan cara menggunakan API DeepSeek V4 untuk coding di TokenLab dengan membagi pekerjaan antara deepseek-v4-pro dan deepseek-v4-flash. Kami membaca kedua catatan model dari API langsung pada 2026-10-03, dan semua informasi di bawah ini berasal dari catatan tersebut serta dokumentasi TokenLab. Anda akan mendapatkan tabel perbandingan, estimasi biaya yang telah dihitung, permintaan pemanggilan tool (tool-calling), kode untuk retry dan fallback, serta pemeriksaan preflight.
Poin Penting
- Kedua model mencantumkan batas input 1.000.000 token, batas output 384.000 token, dan tiga format permintaan yang sama. Harga adalah perbedaan utama di antara keduanya.
- Berdasarkan harga daftar,
deepseek-v4-promenelan biaya 4,4 kali lipat darideepseek-v4-flashper token input dan 3,3 kali lipat per token output. - Dalam contoh 20 panggilan kami, merutekan 4 panggilan ke pro dan 16 ke flash menelan biaya sekitar $0,18 di luar jam sibuk (off-peak). Mengirim semua 20 panggilan ke pro menelan biaya sekitar $0,46.
- Lakukan retry pada
429setelahRetry-After. Lakukan retry pada500–504hanya jikaretryablebernilaitrue. Jangan pernah melakukan retry pada400,401,402,403,404, atau413tanpa perubahan. - Katalog mencantumkan
deepseek-v4.1-flashsebagai aktif. Baikdeepseek-v4-promaupundeepseek-v4-flashtidak menyebutkan model pengganti. - Baca batas, format, dan harga dari
GET /v1/models/:modelsebelum Anda melakukan routing. Jangan melakukan hard-code pada tabel yang disalin.
API DeepSeek V4 untuk Coding: Apa Kata Katalog
Kami mengambil kedua catatan pada 2026-10-03. Tabel di bawah membandingkan keduanya secara berdampingan. Harga dalam USD per 1 juta token, dan harga katalog terakhir diperbarui pada 2026-10-02T16:53:30.068Z.
| Item | deepseek-v4-pro |
deepseek-v4-flash |
Sumber, diamati 2026-10-03 |
|---|---|---|---|
| Batas konteks (maks token input) | 1.000.000 | 1.000.000 | pro, flash |
| Batas output (maks token output) | 384.000 | 384.000 | pro, flash |
| Format permintaan yang diterima | anthropic_messages, openai_chat_completions, openai_responses |
anthropic_messages, openai_chat_completions, openai_responses |
pro, flash |
| Kapabilitas | json-mode, prompt-cache, tool-use |
json-mode, prompt-cache, tool-use |
pro, flash |
| Input off-peak | $0,66 | $0,15 | pro, flash |
| Output off-peak | $1,98 | $0,60 | pro, flash |
| Cache read off-peak | $0,022 | $0,003 | pro, flash |
| Cache write off-peak | $0,66 | tidak tercantum | pro, flash |
| Input peak | $1,32 | $0,30 | pro, flash |
| Output peak | $3,96 | $1,20 | pro, flash |
| Cache read peak | $0,044 | $0,006 | pro, flash |
| Tahap siklus hidup | aktif, dirilis 24-04-2026 | aktif, dirilis 24-04-2026 | pro, flash |
Blok harga default di setiap catatan cocok dengan entri off-peak. Waktu peak berbeda di setiap catatan. Untuk deepseek-v4-pro, harga peak berlaku pada pukul 09:00-12:00 dan 14:00-18:00 waktu Beijing. Untuk deepseek-v4-flash, catatan menyatakan jendela peak berlaku pada hari kerja, tidak termasuk hari libur nasional Tiongkok. Dikatakan bahwa off-peak mencakup akhir pekan dan hari libur tersebut, tetapi tidak memberikan jam spesifik. Periksa endpoint harga sebelum Anda membuat anggaran di sekitar jendela flash.
Siklus hidup dan model DeepSeek yang lebih baru
Kedua catatan menunjukkan lifecycle stage active, dengan replacement model, deprecated_at, dan retired_at semuanya kosong. Jadi, katalog tidak menjadwalkan penghapusan model apa pun, dan tidak menyebutkan penerus untuk keduanya.
Katalog juga mencantumkan deepseek-v4.1-flash. Catatannya, yang diamati pada 2026-10-03, aktif tanpa tanggal rilis dan tanpa pengganti. Model ini memiliki batas, format, dan harga daftar yang sama dengan deepseek-v4-flash. Model ini menambahkan reasoning dan vision ke daftar kapabilitas dan menunjukkan harga cache write sebesar $0,15 untuk off-peak.
Itu adalah ID model yang terpisah, jadi artikel ini tetap pada subjeknya. Kami menyarankan Anda menguji deepseek-v4.1-flash pada tugas Anda sendiri sebelum menukarnya. Katalog juga mencantumkan deepseek-v4-flash-vision-exp, tetapi kami tidak membaca catatannya. Verifikasi di halaman Models jika Anda membutuhkannya.
Routing deepseek-v4-pro dan deepseek-v4-flash berdasarkan Tugas
Bayangkan sesi agen yang merencanakan perubahan di lima modul, menulis edit, lalu membuat selusin stub pengujian. Langkah pertama membutuhkan konteks dan perhatian paling banyak. Langkah terakhir bersifat repetitif dan murah untuk dikerjakan ulang. Katalog tidak dapat memberi tahu Anda di mana garis kualitas berada. Panduan TokenLab tentang model coding-agent, yang diamati pada 2026-10-03, menyatakan bahwa hasil leaderboard tidak memprediksi bagaimana model mengikuti instruksi dan tool Anda sendiri.
Heuristik awal kami mengasumsikan model yang lebih mahal sepadan dengan biayanya untuk pekerjaan lintas file. Anggap ini sebagai hipotesis untuk diuji, bukan temuan:
+-------------------------------------------------------------+
| Tugas Masuk |
+-------------------------------------------------------------+
|
[Apakah tugas melibatkan konteks multi-file,
kompatibilitas mundur, atau tinjauan keamanan?]
|
+---------------+---------------+
| |
[Ya] [Tidak]
| |
v v
deepseek-v4-pro deepseek-v4-flash
Kriteria yang mendorong langkah ke deepseek-v4-pro:
- Memodifikasi logika di beberapa file yang diimpor.
- Penilaian keamanan atau kerentanan.
- Kompatibilitas mundur yang ketat pada antarmuka publik.
- Pekerjaan multi-giliran di mana akurasi lebih penting daripada kecepatan penyelesaian.
Scaffolding pengujian mandiri, pemformatan skema, docstring, dan penyelesaian sintaks diberikan ke deepseek-v4-flash.
Untuk menguji heuristik, ikuti panduan yang sama. Berikan setiap model status repositori, instruksi, tool, dan batas waktu yang sama. Kemudian bandingkan kebenaran, tes yang lulus, perubahan yang tidak perlu, total token, biaya akhir, dan seberapa sering manusia harus turun tangan. Simpan hasil berdasarkan jenis tugas, karena satu model mungkin meninjau dengan baik tetapi mengimplementasikan dengan buruk.
Mengestimasi Biaya Loop Coding-Agent
Agen mengirim ulang instruksi, riwayat, kode, dan hasil tool pada setiap panggilan. Panduan biaya, yang diamati pada 2026-10-03, mencatat bahwa sesi yang panjang bisa menelan biaya jauh lebih banyak daripada satu permintaan chat. Kami menghitung aritmatika di bawah ini dari harga daftar. Hasilnya adalah estimasi, bukan tagihan terukur.
Asumsi (milik kami, tidak terukur): loop 20 panggilan model, masing-masing dengan 30.000 token input dan 1.500 token output. Itu memberikan total 600.000 token input dan 30.000 token output.
Rumusnya adalah input_tokens / 1M × harga input + output_tokens / 1M × harga output. Harga berasal dari tabel di atas.
Semua 20 panggilan ke deepseek-v4-pro:
- Off-peak: 0,6 × $0,66 = $0,396 input, ditambah 0,03 × $1,98 = $0,0594 output, total $0,4554.
- Peak: 0,6 × $1,32 = $0,792, ditambah 0,03 × $3,96 = $0,1188, total $0,9108.
Semua 20 panggilan ke deepseek-v4-flash:
- Off-peak: 0,6 × $0,15 = $0,09, ditambah 0,03 × $0,60 = $0,018, total $0,108.
- Peak: 0,6 × $0,30 = $0,18, ditambah 0,03 × $1,20 = $0,036, total $0,216.
Campuran: 4 panggilan ke pro, 16 ke flash. Pro membawa 120.000 input dan 6.000 token output. Flash membawa 480.000 input dan 24.000 token output.
- Off-peak: pro adalah 0,12 × $0,66 + 0,006 × $1,98 = $0,0792 + $0,01188 = $0,09108. Flash adalah 0,48 × $0,15 + 0,024 × $0,60 = $0,072 + $0,0144 = $0,0864. Totalnya adalah $0,17748.
- Peak: pro adalah 0,12 × $1,32 + 0,006 × $3,96 = $0,1584 + $0,02376 = $0,18216. Flash adalah 0,48 × $0,30 + 0,024 × $1,20 = $0,144 + $0,0288 = $0,1728. Totalnya adalah $0,35496.
| Skenario | Estimasi Off-peak | Estimasi Peak |
|---|---|---|
20 panggilan pada deepseek-v4-pro |
$0,4554 | $0,9108 |
20 panggilan pada deepseek-v4-flash |
$0,1080 | $0,2160 |
| 4 pro + 16 flash | $0,1775 | $0,3550 |
Estimasi dari harga daftar yang diamati pada 2026-10-03 (pro, flash).
Varian cache (off-peak, asumsi: 80% token input adalah cache read). Itu berarti 480.000 token cache-read dan 120.000 token tanpa cache per loop.
- Pro: 0,48 × $0,022 = $0,01056, ditambah 0,12 × $0,66 = $0,0792, ditambah $0,0594 output, total $0,14916.
- Flash: 0,48 × $0,003 = $0,00144, ditambah 0,12 × $0,15 = $0,018, ditambah $0,018 output, total $0,03744.
Varian ini menagih token tanpa cache dengan harga input biasa dan mengabaikan biaya cache-write pada flash, yang tidak tercantum dalam catatan. Konfirmasikan jumlah token yang di-cache dalam respons atau di Usage sebelum Anda mengandalkan diskon ini. Panduan penagihan juga memperingatkan bahwa harga terendah per token tidak selalu berarti biaya terendah per tugas yang diselesaikan, karena retry akan menambah biaya.
Permintaan Tool-Calling untuk Coding Agent
Kedua catatan mencantumkan tool-use, dan keduanya menerima openai_chat_completions. Permintaan di bawah ini hanya menggunakan bidang dari panduan tool-calling (diamati 2026-10-03): model, messages, dan tools dengan type: "function". Kami menambahkan max_tokens, yang menurut panduan penagihan adalah cara untuk membatasi panjang respons. Kami tidak menyertakan tool_choice, karena panduan tersebut hanya mendokumentasikannya untuk format Responses.
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"max_tokens": 2000,
"messages": [
{"role": "system", "content": "You are a software engineering assistant."},
{"role": "user", "content": "The pagination test in tests/test_api.py fails. Find the cause."}
],
"tools": [
{
"type": "function",
"function": {
"name": "read_file",
"description": "Read a file from the repository",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"]
}
}
},
{
"type": "function",
"function": {
"name": "run_tests",
"description": "Run the test suite for one path",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"]
}
}
}
]
}'
Model mengembalikan nama fungsi dan argumen dalam tool_calls. Backend Anda menjalankan tool tersebut. Loop kemudian berjalan dalam lima langkah:
- Kirim pesan ditambah definisi tool.
- Baca respons untuk
tool_calls. - Jalankan tool di backend Anda sendiri.
- Lampirkan hasil tool dalam format API yang sama.
- Lanjutkan sampai model mengembalikan jawaban akhir.
Panduan tidak menunjukkan bentuk pesan hasil tool secara inline. Ambil dari referensi Create Chat Completion (/api-reference/chat/create-completion) daripada menebak-nebak.
Sebelum menjalankan panggilan apa pun, validasi argumen dan terapkan pemeriksaan izin Anda sendiri. Buat eksekusi menjadi idempoten, karena retry klien dapat mengulangi panggilan tool yang sama. Gunakan satu format API untuk seluruh pertukaran, karena format tersebut merepresentasikan status tool secara berbeda.
Retry, Backoff, dan Fallback Antara Kedua Model
Panduan error dan panduan rate-limit, keduanya diamati pada 2026-10-03, menetapkan kebijakannya. Lakukan percabangan pada status HTTP dan code, jangan pernah pada message.
| Status | Ulangi permintaan yang sama? | Tindakan |
|---|---|---|
400, 401, 402, 403, 404, 413 |
Tidak | Perbaiki permintaan, kunci, saldo, izin, atau input |
429 |
Ya | Tunggu Retry-After; jika tidak ada, gunakan eksponensial backoff dengan jitter |
500–504 |
Hanya jika retryable adalah true |
Hormati retry_after dan batasi upaya |
| Koneksi terputus sebelum respons | Terkadang | Retry dengan hati-hati jika panggilan tool dapat mengulangi efek samping |
| Stream terputus setelah output tiba | Tidak | Anggap sebagai tidak lengkap; pengulangan mungkin menghasilkan output yang berbeda atau tagihan kedua |
Dua kasus memerlukan perhatian ekstra. 503 all_channels_failed atau 503 delivery_tier_unavailable tidak selalu bersifat sementara. Ketika retryable adalah false dan retry_after tidak ada, jangan ulangi permintaan. Periksa GET /v1/models sebelum memilih model lain. Selain itu, context_length_exceeded tidak akan diperbaiki dengan beralih di antara kedua model ini, karena keduanya mencantumkan batas input 1.000.000 token yang sama.
Kode di bawah ini menerapkan kebijakan tersebut. Kode ini menetapkan max_retries=0 agar SDK tidak melakukan retry di belakang Anda. Setiap model mendapatkan empat upaya, dan fallback hanya berjalan setelah model pertama menghabiskan error yang dapat di-retry.
import os
import random
import time
from openai import OpenAI, APIStatusError, APIConnectionError
client = OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
)
FALLBACK = {
"deepseek-v4-pro": "deepseek-v4-flash",
"deepseek-v4-flash": "deepseek-v4-pro",
}
def error_fields(exc):
body = getattr(exc, "body", None)
if isinstance(body, dict):
return body.get("error", body)
return {}
def backoff(attempt):
return min(30, 2 ** attempt + random.random())
def retry_delay(exc, attempt):
"""Detik untuk menunggu, atau None jika permintaan tidak boleh diulangi."""
if isinstance(exc, APIConnectionError):
return backoff(attempt)
fields = error_fields(exc)
header = exc.response.headers.get("Retry-After")
if exc.status_code == 429:
return float(header) if header else backoff(attempt)
if exc.status_code >= 500 and fields.get("retryable") is True:
wait = fields.get("retry_after") or header
return float(wait) if wait else backoff(attempt)
return None
def chat_with_fallback(model, messages, tools=None, attempts=4):
last_exc = None
for candidate in (model, FALLBACK[model]):
kwargs = {"model": candidate, "messages": messages}
if tools:
kwargs["tools"] = tools
for attempt in range(attempts):
try:
return candidate, client.chat.completions.create(**kwargs)
except (APIStatusError, APIConnectionError) as exc:
delay = retry_delay(exc, attempt)
if delay is None:
raise # 4xx atau 5xx yang tidak dapat di-retry: jangan ulangi atau fallback
last_exc = exc
if attempt < attempts - 1:
time.sleep(delay)
print(f"{candidate} kehabisan upaya retry, mencoba {FALLBACK[candidate]}")
raise last_exc
def pick_model(is_complex):
return "deepseek-v4-pro" if is_complex else "deepseek-v4-flash"
used, response = chat_with_fallback(
pick_model(is_complex=False),
[{"role": "user", "content": "Write a pytest case: an empty list returns 0 for sum_items()."}],
)
print(used, response.choices[0].message.content)
Selalu catat model mana yang menjawab. Panduan coding-agent memperingatkan bahwa fallback dapat mengubah harga, batas konteks, format tool, atau gaya output, jadi beri tahu pengguna saat model berubah. Melakukan fallback dari flash ke pro kira-kira melipatgandakan biaya input pada harga daftar, jadi berikan peringatan. Simpan ID Permintaan dari header respons dengan setiap panggilan agar dukungan dapat melacak kegagalan.
Baca Batas, Format, dan Harga Sebelum Routing
Referensi Get a Model, yang diamati pada 2026-10-03, menjelaskan GET /v1/models/:model. Respons membawa objek tokenlab dengan capabilities, pricing, max_input_tokens, max_output_tokens, accepted_request_formats, dan lifecycle. Model yang tidak dikenal mengembalikan 404 model_not_found. Panduan penagihan juga mengarahkan ke GET /v1/models/:model/pricing untuk harga saat ini.
import json
import urllib.request
def read_model(model_id):
url = f"https://api.tokenlab.sh/v1/models/{model_id}"
with urllib.request.urlopen(url, timeout=10) as resp:
meta = json.load(resp)["tokenlab"]
return {
"max_input_tokens": meta.get("max_input_tokens"),
"max_output_tokens": meta.get("max_output_tokens"),
"formats": meta.get("accepted_request_formats"),
"capabilities": meta.get("capabilities"),
"lifecycle": meta.get("lifecycle"),
"pricing": meta.get("pricing"),
}
def preflight(model_id, input_tokens):
info = read_model(model_id)
problems = []
if "openai_chat_completions" not in (info["formats"] or []):
problems.append("chat completions not accepted")
if "tool-use" not in (info["capabilities"] or []):
problems.append("no tool-use capability")
if info["max_input_tokens"] and input_tokens > info["max_input_tokens"]:
problems.append("input exceeds max_input_tokens")
return info, problems
for model_id in ("deepseek-v4-pro", "deepseek-v4-flash"):
info, problems = preflight(model_id, input_tokens=30_000)
print(model_id, json.dumps(info, indent=2), problems)
Kami mencetak lifecycle dan pricing secara mentah karena bukti artikel ini tidak menunjukkan tata letak JSON yang tepat di dalam respons tersebut. Periksa output sekali, lalu parse bidang yang Anda butuhkan. Dokumentasi menyarankan untuk tidak melakukan hard-code pada tabel harga yang disalin, jadi jalankan pemeriksaan saat startup atau sesuai jadwal. Endpoint penemuan publik seperti GET /v1/models memiliki batas rate-limit sendiri, jadi cache hasilnya alih-alih memanggilnya per permintaan.
Untuk rate-limit, tingkat Pengguna standar memungkinkan 1.000 permintaan per menit per kunci API, sebagaimana diamati pada 2026-10-03. Panduan mengatakan konfigurasi aktif mungkin berbeda. Pada 429, percayai nilai X-RateLimit-Limit dan Retry-After yang dikembalikan daripada angka yang disalin.
FAQ
Bisakah saya memanggil deepseek-v4-pro melalui format Anthropic Messages?
Ya. Kedua catatan mencantumkan anthropic_messages di antara format yang diterima, diamati pada 2026-10-03. Panduan coding-agent memberikan URL dasar Anthropic Messages sebagai https://api.tokenlab.sh, tanpa akhiran /v1 yang digunakan Chat Completions. Skema tool berbeda menurut format, jadi gunakan satu format untuk seluruh percakapan.
Haruskah saya melakukan retry pada 503 dari deepseek-v4-pro atau deepseek-v4-flash?
Hanya jika isi error menyatakan retryable adalah true, lalu tunggu retry_after. 503 all_channels_failed dengan retryable: false berarti permintaan tidak memiliki pasokan di tingkat Pengiriman yang dipilih. Mengulanginya tidak akan membantu. Periksa GET /v1/models sebelum Anda memilih model lain, seperti yang dijelaskan dalam panduan error.
Apakah deepseek-v4.1-flash menggantikan deepseek-v4-flash?
Katalog tidak menyatakan demikian. Pada 2026-10-03, catatan deepseek-v4-flash tidak menunjukkan model pengganti, dan deepseek-v4.1-flash menunjukkan status aktif. Keduanya berbagi batas dan harga daftar, dan yang lebih baru menambahkan kapabilitas reasoning dan vision. Uji pada tugas Anda dan beralihlah secara sengaja berdasarkan ID model.
Apakah token yang di-cache membuat deepseek-v4-flash lebih murah dalam loop agen?
Bisa jadi. Catatan mencantumkan harga cache read off-peak sebesar $0,003 per 1 juta token, dibandingkan $0,15 untuk input biasa. Panduan biaya mengatakan untuk mengonfirmasi penggunaan token yang di-cache dalam respons atau di Usage sebelum mengandalkan diskon. Perilaku dan harga cache berbeda menurut model.
Apakah routing ke deepseek-v4-flash akan menaikkan rate-limit saya?
Tidak. Panduan rate-limit mengatakan model yang lebih cepat tidak menaikkan batas permintaan akun Anda. Kecepatan model, batas token, dan rate-limit akun adalah batasan terpisah, dan batas berlaku per kunci API.
Periksa entri deepseek-v4-pro dan deepseek-v4-flash saat ini di halaman model TokenLab sebelum Anda memasang router Anda.
Sumber
Harga diamati pada 2026-10-03
- TokenLab Docs: QuickstartDiamati pada 2026-10-03
- TokenLab Docs: Choose a model for coding agentsDiamati pada 2026-10-03
- TokenLab Docs: Control coding agent costsDiamati pada 2026-10-03
- TokenLab Docs: Structured Outputs & Tool CallingDiamati pada 2026-10-03
- TokenLab Docs: Handle API errorsDiamati pada 2026-10-03
- TokenLab Docs: Rate limitsDiamati pada 2026-10-03
- TokenLab Docs: Get a ModelDiamati pada 2026-10-03
- TokenLab Docs: Billing and pricingDiamati pada 2026-10-03



