Berikut panduan ringkas untuk mulai memakai DeepSeek V4 API. Karena detail endpoint, nama model, dan fitur bisa berubah, ganti placeholder sesuai dokumentasi resmi DeepSeek.
Langkah persiapan
- Dapatkan API key dari konsol/developer portal DeepSeek.
- Catat Base URL layanan API (misal: <BASE_URL>), dan nama model (misal: <MODEL_NAME>, contohnya “deepseek-v4” jika tersedia).
- Simpan API key sebagai variabel lingkungan (misal: DEEPSEEK_API_KEY).
Permintaan dasar (Chat Completions)
- Endpoint (contoh pola): POST <BASE_URL>/chat/completions
- Header:
- Authorization: Bearer <API_KEY>
- Content-Type: application/json
- Body (contoh minimal):
{
"model": "<MODEL_NAME>",
"messages": [
{"role": "user", "content": "Jelaskan teori relativitas secara singkat."}
],
"temperature": 0.7,
"max_tokens": 512
}
Contoh cURL
curl -X POST "<BASE_URL>/chat/completions" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_NAME>",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tuliskan ringkasan 3 poin tentang pembelajaran mesin."}
],
"temperature": 0.6,
"max_tokens": 300
}'
Contoh JavaScript (fetch)
const resp = await fetch("<BASE_URL>/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.DEEPSEEK_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "<MODEL_NAME>",
messages: [
{role: "user", content: "Beri contoh prompt yang baik untuk analisis sentimen."}
],
temperature: 0.7,
max_tokens: 256
})
});
const data = await resp.json();
console.log(data.choices?.[0]?.message?.content);
Contoh Python (requests)
import os, requests, json
BASE_URL = os.getenv("DEEPSEEK_BASE_URL") # isi dengan <BASE_URL>
API_KEY = os.getenv("DEEPSEEK_API_KEY")
payload = {
"model": "<MODEL_NAME>",
"messages": [
{"role": "user", "content": "Apa perbedaan supervised dan unsupervised learning?"}
],
"temperature": 0.7,
"max_tokens": 256
}
r = requests.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
data=json.dumps(payload),
timeout=60
)
r.raise_for_status()
print(r.json()["choices"][0]["message"]["content"])
Streaming respons (SSE)
- Banyak penyedia mendukung SSE dengan parameter "stream": true dan mengembalikan event data per chunk.
- Permintaan (body):
{
"model": "<MODEL_NAME>",
"messages": [{"role": "user", "content": "Tuliskan puisi 4 baris tentang laut."}],
"stream": true
}
- Tangani event “data:” hingga menerima [DONE].
Contoh Node.js streaming (fetch + ReadableStream)
const resp = await fetch("<BASE_URL>/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.DEEPSEEK_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "<MODEL_NAME>",
messages: [{role: "user", content: "Buatkan ringkasan 5 poin."}],
stream: true
})
});
const reader = resp.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
while (true) {
const {value, done} = await reader.read();
if (done) break;
buffer += decoder.decode(value, {stream: true});
for (const line of buffer.split("\n")) {
if (!line.startsWith("data:")) continue;
const chunk = line.slice(5).trim();
if (chunk === "[DONE]") break;
try {
const json = JSON.parse(chunk);
const delta = json.choices?.[0]?.delta?.content || "";
if (delta) process.stdout.write(delta);
} catch {}
}
}
Parameter umum yang berguna
- temperature: 0–2 (semakin tinggi semakin kreatif/acak).
- max_tokens: batas token keluaran.
- top_p: sampling berbasis nucleus (alternatif temperature).
- stop: array string untuk menghentikan output saat token tertentu muncul.
- presence_penalty/frequency_penalty: menyesuaikan repetisi/kebaruan (jika didukung).
Penanganan error dan praktik baik
- 401/403: periksa API key dan izin.
- 429: terkena rate limit; tambahkan retry dengan backoff eksponensial.
- 5xx: retry dengan jitter; log request-id jika disediakan.
- Tetapkan timeout, batasi ukuran prompt, cache hasil yang deterministik jika perlu.
- Simpan API key di variabel lingkungan/secret manager, bukan di kode.
- Patuhi kuota dan kebijakan penggunaan model.
Catatan penting
- Ganti <BASE_URL>, <MODEL_NAME>, dan parameter lain sesuai dokumentasi DeepSeek V4 terbaru.
- Beberapa fitur lanjutan (function/tool calling, JSON mode, multimodal) bisa memiliki payload khusus; ikuti skema resmi jika tersedia.
Bagi para pengembang, kombinasi itu penting karena satu alasan sederhana: ini mengurangi hambatan migrasi sekaligus meningkatkan batas kemampuan dari apa yang dapat Anda bangun. Anda tidak perlu mempelajari struktur API yang benar-benar baru. Anda memperbarui nama model, mempertahankan URL dasar, dan merilis dengan memanfaatkan jendela konteks yang lebih besar serta perilaku penalaran yang lebih mutakhir. Dokumentasi resmi DeepSeek secara eksplisit menyatakan untuk mempertahankan URL dasar dan mengganti parameter model menjadi deepseek-v4-pro atau deepseek-v4-flash.