Artificial Intelligence
SiliconFlow: Satu API untuk 200+ Model AI Murah
Daftar isi
- Kenapa SiliconFlow Layak Dilirik?
- Kapan Kamu Perlu (dan Nggak Perlu) SiliconFlow?
- Persiapan Sebelum Ngoding
- Prasyarat
- Yang Akan Kita Bangun
- Step 1: Daftar dan Dapatkan API Key
- Step 2: Install Dependencies
- Step 3: Membangun Chat LLM Client
- Kenapa Pakai OpenAI SDK?
- Kode Dasar Chat
- Penjelasan Parameter
- Mode Streaming
- Common Errors & Troubleshooting
- Step 4: Generate Gambar dengan FLUX.1
- Kenapa FLUX.1?
- Kode Text-to-Image
- Parameter Penting Image Generation
- Step 5: Text-to-Speech dengan Fish-Speech
- Kenapa Fish-Speech?
- Kode Text-to-Speech
- Common Errors di TTS
- Step 6: Gabungkan Semuanya—Aplikasi CLI Multimodal
- Memilih Model yang Tepat untuk Proyek Kamu
- Untuk Chatbot & Asisten Virtual
- Untuk Coding & Software Engineering
- Untuk Image Generation
- Studi Kasus: Membangun Chatbot Customer Service E-Commerce
- Latar Belakang
- Masalah
- Pendekatan
- Implementasi
- Hasil
- Pembelajaran Kunci
- Arsitektur Lanjutan: Multi-Model Pipeline
- Pola 1: Model Router
- Pola 2: Fallback Chain
- Keamanan dan Best Practices
- 1. Jangan Hardcode API Key
- 2. Rate Limiting di Sisi Client
- 3. Cache Hasil yang Sama
- 4. Validasi Output
- Membandingkan SiliconFlow dengan Alternatif Lain
- Rekomendasi Berdasarkan Use Case
- Kesalahan Umum dan Cara Menghindarinya
- 1. Salah Pilih Model
- 2. Prompt Terlalu Panjang Tanpa Alasan
- 3. Tidak Handle Error dengan Baik
- 4. Temperature Terlalu Tinggi untuk Task Faktual
- 5. Mengabaikan System Prompt
- Mengoptimalkan Biaya di SiliconFlow
- 1. Manfaatkan Cached Input
- 2. Prompt Compression
- 3. Pilih Model Berdasarkan Waktu
- 4. Monitor Penggunaan
- Integrasi dengan Framework Populer
- LangChain
- Vercel AI SDK (JavaScript/TypeScript)
- LangChain.js
- Konteks Lokal: Kenapa SiliconFlow Relevan untuk Developer Indonesia
- Keterbatasan yang Perlu Dipertimbangkan
- Yang Masih Jadi Catatan
- Kapan Sebaiknya Cari Alternatif?
- Sumber Daya untuk Belajar Lebih Lanjut
- Glosarium Singkat
- Menambahkan Kemampuan Video Generation
- Kode Dasar Video Generation
- Parameter Kunci Video Generation
- Deployment ke Production: Dari Local Script ke Aplikasi Nyata
- Pola 1: REST API sederhana dengan FastAPI
- Pola 2: Serverless dengan Background Worker
- Pola 3: Streaming Response via WebSocket
- Setup Docker untuk Production
- Membangun AI Content Pipeline: End-to-End Workflow
- Monitoring dan Observability
- Metrik yang Perlu Dipantau
- Setup Sederhana dengan Prometheus + Grafana
- Menghubungkan SiliconFlow dengan Tools Automasi
- Kesimpulan
Hampir setiap developer yang pernah saya ajak ngobrol punya cerita yang sama: udah punya ide keren, udah kebayang produk jadinya, tapi pas nyoba integrasi model AI ke aplikasi, langsung ketemu tembok. Entah itu soal biaya inference yang ternyata bikin dompet jebol, latency yang bikin user kabur sebelum respons keluar, atau ribetnya gonta-ganti provider karena satu platform nggak nyediain semua model yang dibutuhkan.
Nah, di titik inilah SiliconFlow masuk sebagai solusi yang cukup menarik. Platform AI infrastructure asal Beijing ini menawarkan satu API endpoint untuk mengakses 200+ model open-source—dari LLM, text-to-image, text-to-speech, sampai video generation—dengan klaim kecepatan inference yang jauh di atas rata-rata dan harga yang bersaing. Didirikan tahun 2023 oleh Pan Yang dan Jinhui Yuan (mantan peneliti Microsoft Research Asia dan founder OneFlow), SiliconFlow udah mengantongi pendanaan sekitar $13,8 juta dari investor termasuk Alibaba Cloud dan Shuimu Tsinghua Alumni Seed Fund.
Di artikel ini, kita nggak cuma ngomongin teori. Saya akan ajak Teman-Teman langsung ngoding—dari setup awal, bikin request API pertama, sampai deployment sederhana pakai Python. Plus ada studi kasus nyata, perbandingan sama alternatif lain, dan tips troubleshooting yang sering saya temuin di lapangan. Siap? Yuk, kita mulai.
Kenapa SiliconFlow Layak Dilirik?
Sebelum terjun ke kode, ada baiknya kita pahami dulu: apa sih yang bikin platform ini beda dari yang lain?
SiliconFlow dibangun di atas inference engine buatan sendiri bernama SiliconLLM untuk model bahasa dan OneDiff untuk model difusi (image/video generation). Engine ini diklaim bisa memberikan akselerasi hingga 10x lebih cepat untuk LLM dan 3x lebih cepat untuk text-to-image dibanding inference standar. Buat yang pernah nunggu 30 detik cuma buat satu respons chat, ini angka yang lumayan bikin penasaran.
Selain kecepatan, ada beberapa poin yang bikin platform ini worth considering:
-
Satu API untuk semua model: Nggak perlu daftar ke lima provider berbeda. Cukup satu API key, kamu bisa akses model dari DeepSeek, Qwen, Tencent, Moonshot AI, Z.ai, Google, OpenAI (model open-source mereka), dan masih banyak lagi.
-
Harga kompetitif: Model 9B ke bawah gratis selamanya, dan untuk model yang lebih besar, tarifnya seringkali lebih rendah dibanding provider lain—kadang cuma sepersepuluh harga kompetitor.
-
Dukungan multimodal lengkap: Text, image, video, audio, embedding, reranker—semua tersedia dalam satu platform.
-
OpenAI-compatible API: Udah familiar sama library
openaiPython? Tinggal gantibase_url, dan kode kamu langsung jalan di SiliconFlow.
Definisi Singkat: SiliconFlow adalah platform cloud AI yang menyediakan inference engine berkecepatan tinggi untuk menjalankan 200+ model open-source—mencakup LLM, image generator, text-to-speech, dan video model—melalui satu API endpoint yang kompatibel dengan OpenAI SDK.
Kapan Kamu Perlu (dan Nggak Perlu) SiliconFlow?
Biar nggak buang-buang waktu nyoba sesuatu yang nggak cocok, berikut panduan cepat berdasarkan pengalaman saya:
Kategori | SiliconFlow Cocok? | Catatan |
|---|---|---|
Prototyping cepat | ✅ Sangat cocok | API sederhana, model 9B ke bawah gratis |
Produk production skala besar | ✅ Cocok | Reserved instances tersedia untuk beban tinggi |
Butuh banyak jenis model | ✅ Sangat cocok | LLM + image + audio + video dalam satu platform |
Fine-tuning model kustom | ⚠️ Terbatas | Ada opsi fine-tuning, tapi belum selengkap dedicated platform |
On-premise deployment | ✅ Tersedia | Ada solusi private deployment (SiliconBrain) |
Hanya butuh GPT-4/Claude kelas atas | ❌ Kurang cocok | Fokus di model open-source; untuk proprietary SOTA, OpenAI/Anthropic masih unggul |
Budget sangat terbatas | ✅ Sangat cocok | Free tier cukup generous, pricing termasuk paling murah |
Persiapan Sebelum Ngoding
Sebelum kita mulai ngoding, ada beberapa hal yang perlu Teman-Teman siapkan:
Prasyarat
-
Python 3.8 atau lebih baru (saya pakai Python 3.11 di tutorial ini)
-
Koneksi internet stabil (semua request lewat API cloud)
-
Text editor atau IDE (VS Code, PyCharm, atau bahkan Notepad juga bisa, tapi jangan deh)
-
Pemahaman dasar Python (nggak perlu expert, cukup ngerti fungsi, dictionary, dan pip)
Yang Akan Kita Bangun
Di tutorial ini, kita akan bikin aplikasi CLI sederhana yang bisa:
-
Chat dengan LLM (pakai Qwen2.5-72B-Instruct)
-
Generate gambar dari teks (pakai FLUX.1-schnell)
-
Ubah teks jadi suara (pakai Fish-Speech-1.5)
Kenapa tiga fitur ini? Karena dengan menguasai ketiganya, Teman-Teman udah punya fondasi buat nge-build hampir semua jenis aplikasi AI—dari chatbot, content generator, sampai voice assistant.
Step 1: Daftar dan Dapatkan API Key
Langkah paling dasar yang kadang bikin frustrasi kalau dilewatin: dapatkan API key.
-
Buka dashboard API Keys SiliconFlow dan login (bisa pakai email, GitHub, atau Google)
-
Klik tombol "Create API Key"
-
Kasih nama deskriptif, misalnya "project-chatbot-ku"
-
Copy dan simpan API key-nya di tempat aman—key ini cuma ditampilkan sekali
Setelah punya API key, simpan sebagai environment variable biar nggak ke-expose di kode:
export SILICONFLOW_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
Di Python, kita bisa bacanya dengan os.getenv():
import os
api_key = os.getenv("SILICONFLOW_API_KEY")
if not api_key:
raise ValueError("API key belum di-set! Jalankan: export SILICONFLOW_API_KEY='sk-...'")
Kenapa environment variable? Masalah keamanan dasar. Kalau API key ditulis langsung di kode, risiko bocor pas kamu push ke GitHub itu nyata banget. Udah banyak kasus orang yang API key-nya kena abuse karena nggak sengaja commit ke public repo.
Step 2: Install Dependencies
Buka terminal dan jalankan:
pip install openai requests python-dotenv Pillow
Rincian fungsinya:
Library | Fungsi |
|---|---|
| Klien utama untuk LLM inference (kompatibel dengan SiliconFlow API) |
| HTTP client untuk endpoint non-chat (image generation, TTS, dll.) |
| Baca environment variable dari file |
| Manipulasi dan tampilkan gambar hasil generate |
Saya juga menyarankan bikin file .env di root project:
SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
Terus tambahin .env ke .gitignore ya. Serius. Jangan skip yang satu ini.
Step 3: Membangun Chat LLM Client
Ini bagian yang paling fundamental. Kita akan bikin koneksi pertama ke SiliconFlow lewat OpenAI-compatible API.
Kenapa Pakai OpenAI SDK?
SiliconFlow sengaja mendesain API-nya kompatibel dengan OpenAI Python SDK. Ini keputusan desain yang cerdas karena:
-
Developer nggak perlu belajar library baru
-
Migration dari OpenAI ke SiliconFlow cukup ganti
base_urldanapi_key -
Semua fitur standar (streaming, temperature, top_p, system prompt, dll.) tetap jalan
Kode Dasar Chat
Buat file chat.py:
Baca juga GPU Terbaik untuk AI Lokal Budget Terbatas
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key=os.getenv("SILICONFLOW_API_KEY"),
base_url="https://api.siliconflow.cn/v1"
)
response = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[
{"role": "system", "content": "Kamu adalah asisten AI yang membantu dan ramah. Jawab dalam Bahasa Indonesia."},
{"role": "user", "content": "Jelaskan apa itu inference engine dalam 3 kalimat sederhana."}
],
temperature=0.7,
max_tokens=500,
stream=False
)
print(response.choices[0].message.content)
Expected Output:
Inference engine adalah komponen yang bertugas menjalankan model AI
yang sudah dilatih untuk menghasilkan output dari input yang diberikan.
Ibaratnya, kalau model AI adalah resep masakan, inference engine adalah
juru masak yang mengeksekusi resep tersebut saat ada pesanan masuk.
Tugas utamanya adalah memproses data input melalui jaringan saraf model
dengan cepat dan efisien, lalu mengembalikan hasilnya ke pengguna.
Penjelasan Parameter
-
temperature=0.7: Mengontrol "kreativitas" respons. 0 = deterministik/kaku, 1 = sangat kreatif/tidak terduga. Untuk chatbot, 0.7 biasanya sweet spot -
max_tokens=500: Batas maksimum token output. Ini penting buat kontrol biaya dan latency -
stream=False: Kalau di-setTrue, respons akan dikirim bertahap seperti ChatGPT mengetik
Mode Streaming
Buat pengalaman yang lebih responsif, kita bisa pakai mode streaming:
stream = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[
{"role": "user", "content": "Tulis puisi pendek tentang hujan di Jakarta"}
],
stream=True
)
print("AI: ", end="", flush=True)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print() # newline di akhir
Kenapa streaming penting? Kalau kamu bikin chatbot, user nggak mau nunggu 10 detik sampai seluruh respons jadi baru ditampilkan. Streaming bikin UX terasa jauh lebih cepat karena teks muncul bertahap—mirip kayak ChatGPT.
Common Errors & Troubleshooting
Error 1: AuthenticationError
openai.AuthenticationError: Error code: 401
Penyebabnya hampir selalu API key yang salah atau nggak ke-set. Cek lagi:
echo $SILICONFLOW_API_KEY
Error 2: model_not_found
openai.NotFoundError: Error code: 404 - Model 'xxx' not found
Pastiin nama model persis sesuai dokumentasi. SiliconFlow pakai format Provider/NamaModel, misalnya Qwen/Qwen2.5-72B-Instruct, bukan cuma Qwen2.5-72B-Instruct.
Error 3: Rate limit
openai.RateLimitError: Error code: 429
Terlalu banyak request dalam waktu singkat. Solusinya: kasih jeda antar request (time.sleep(0.5)) atau upgrade plan. Kalau pakai mode streaming, ini jarang terjadi.
Step 4: Generate Gambar dengan FLUX.1
![]()
Sekarang kita masuk ke ranah multimodal. SiliconFlow mendukung beberapa model text-to-image, dan salah satu yang paling populer adalah FLUX.1 dari Black Forest Labs.
Kenapa FLUX.1?
FLUX.1 adalah model difusi yang kualitasnya sebanding dengan Stable Diffusion XL dan Midjourney di beberapa skenario, tapi dengan inference yang jauh lebih cepat di SiliconFlow berkat engine OneDiff. Harga per gambar juga sangat terjangkau—mulai dari $0.0014 per gambar untuk varian schnell (fast).
Kode Text-to-Image
Untuk endpoint image generation, kita perlu pakai requests karena formatnya sedikit berbeda dari chat completions:
import os
import requests
import base64
from io import BytesIO
from PIL import Image
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("SILICONFLOW_API_KEY")
BASE_URL = "https://api.siliconflow.cn/v1"
def generate_image(prompt: str, model: str = "black-forest-labs/FLUX.1-schnell"):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"prompt": prompt,
"num_images": 1,
"guidance_scale": 7.5,
"image_size": "1024x1024"
}
response = requests.post(
f"{BASE_URL}/images/generations",
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"Error: {response.status_code}")
print(response.json())
return None
data = response.json()
# Decode base64 image
image_b64 = data["images"][0]["base64"]
image_bytes = base64.b64decode(image_b64)
image = Image.open(BytesIO(image_bytes))
return image
# Test
image = generate_image(
prompt="Pemandangan sawah terasering di Bali saat matahari terbit, gaya lukisan digital, warna-warna hangat",
)
if image:
image.show() # tampilkan di image viewer default
image.save("hasil_generate.png") # simpan ke file
print("✅ Gambar berhasil di-generate dan disimpan sebagai 'hasil_generate.png'")
Expected Output:
File hasil_generate.png akan berisi gambar pemandangan sawah terasering Bali yang di-generate oleh AI. Proses ini biasanya cuma 1-3 detik di SiliconFlow.
Parameter Penting Image Generation
Parameter | Fungsi | Range |
|---|---|---|
| Seberapa ketat model mengikuti prompt | 1-20 (7.5 recommended) |
| Dimensi output | "1024x1024", "512x512", dll. |
| Jumlah gambar yang di-generate | 1-4 |
| Seed untuk reproducible result | Integer acak |
Tips berdasarkan pengalaman: Untuk FLUX.1-schnell, guidance_scale di angka 0-2 justru sering kasih hasil yang lebih natural. Ini beda dari Stable Diffusion yang perlu 7+. Jadi jangan takut buat eksperimen.
Step 5: Text-to-Speech dengan Fish-Speech
Langkah terakhir dari rangkaian multimodal kita: mengubah teks jadi suara. SiliconFlow menyediakan beberapa model TTS, dan Fish-Speech-1.5 dari Fish Audio adalah salah satu yang kualitasnya paling impresif.
Kenapa Fish-Speech?
Fish-Speech-1.5 dilatih dengan lebih dari 300.000 jam data audio multilingual. Model ini support Bahasa Indonesia dengan aksen yang cukup natural, plus latensi hanya sekitar 100ms untuk streaming. Harga sekitar $15 per 1 juta karakter UTF-8.
Kode Text-to-Speech
import os
import requests
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("SILICONFLOW_API_KEY")
BASE_URL = "https://api.siliconflow.cn/v1"
def text_to_speech(
text: str,
voice: str = "default",
output_file: str = "output.wav",
model: str = "fishaudio/fish-speech-1.5"
):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"input": text,
"voice": voice,
"response_format": "wav",
"speed": 1.0
}
response = requests.post(
f"{BASE_URL}/audio/speech",
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"Error: {response.status_code}")
print(response.json())
return False
with open(output_file, "wb") as f:
f.write(response.content)
print(f"✅ Audio berhasil disimpan sebagai '{output_file}'")
print(f" Ukuran file: {len(response.content) / 1024:.1f} KB")
return True
# Test
text_to_speech(
text="Halo! Selamat datang di tutorial SiliconFlow. "
"Hari ini kita belajar cara menggunakan API text-to-speech "
"untuk mengubah teks menjadi suara yang natural.",
output_file="perkenalan.wav"
)
Expected Output:
✅ Audio berhasil disimpan sebagai 'perkenalan.wav'
Ukuran file: 234.5 KB
File WAV yang dihasilkan bisa langsung diputar di pemutar audio apa pun.
Baca juga Kimi K3 Sold Out? Ini Alasan Langganan Ditutup
Common Errors di TTS
Error: voice_not_found
Beberapa voice ID spesifik mungkin nggak tersedia di semua model. Kalau dapat error ini, coba pakai voice="default" dulu, atau cek dokumentasi terbaru untuk daftar voice yang didukung.
Error: input terlalu panjang
Fish-Speech-1.5 punya batasan panjang input per request. Kalau teks kamu panjang, pecah jadi beberapa bagian:
def text_to_speech_long(text: str, max_chars: int = 500, **kwargs):
"""Pecah teks panjang jadi beberapa request TTS."""
chunks = [text[i:i+max_chars] for i in range(0, len(text), max_chars)]
for idx, chunk in enumerate(chunks):
filename = f"output_part_{idx+1}.wav"
print(f"Memproses bagian {idx+1}/{len(chunks)} ({len(chunk)} karakter)...")
text_to_speech(chunk, output_file=filename, **kwargs)
print(f"✅ Semua {len(chunks)} bagian selesai!")
Step 6: Gabungkan Semuanya—Aplikasi CLI Multimodal
Sekarang kita punya tiga kemampuan—chat, image generation, dan TTS. Mari gabungkan dalam satu aplikasi CLI yang rapi:
#!/usr/bin/env python3
"""
SiliconFlow Multimodal CLI
===========================
Aplikasi command-line untuk chat, generate gambar, dan text-to-speech
menggunakan SiliconFlow API.
"""
import os
import sys
import requests
import base64
from io import BytesIO
from PIL import Image
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("SILICONFLOW_API_KEY")
BASE_URL = "https://api.siliconflow.cn/v1"
if not API_KEY:
print("❌ SILICONFLOW_API_KEY belum di-set!")
print(" Jalankan: export SILICONFLOW_API_KEY='sk-...'")
sys.exit(1)
# Inisialisasi client
openai_client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
# ─── Chat ───────────────────────────────────────────
def cmd_chat():
print("\n💬 Mode Chat (ketik 'exit' untuk keluar)")
print("─" * 50)
messages = [
{"role": "system", "content": "Kamu asisten AI yang helpful. Jawab dalam Bahasa Indonesia dengan ramah."}
]
while True:
user_input = input("\n🧑 Kamu: ")
if user_input.lower() == "exit":
print("👋 Sampai jumpa!")
break
messages.append({"role": "user", "content": user_input})
print("🤖 AI: ", end="", flush=True)
stream = openai_client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=messages,
stream=True
)
full_response = ""
for chunk in stream:
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
print(content, end="", flush=True)
full_response += content
print()
messages.append({"role": "assistant", "content": full_response})
# ─── Image Generation ───────────────────────────────
def cmd_image():
print("\n🎨 Mode Image Generation")
print("─" * 50)
prompt = input("📝 Deskripsikan gambar yang kamu mau: ")
if not prompt.strip():
print("❌ Prompt tidak boleh kosong!")
return
print("⏳ Generating...")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "black-forest-labs/FLUX.1-schnell",
"prompt": prompt,
"num_images": 1,
"image_size": "1024x1024"
}
response = requests.post(
f"{BASE_URL}/images/generations",
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"❌ Error: {response.status_code}")
print(response.json())
return
data = response.json()
image_b64 = data["images"][0]["base64"]
image_bytes = base64.b64decode(image_b64)
image = Image.open(BytesIO(image_bytes))
filename = f"generated_{hash(prompt) % 10000}.png"
image.save(filename)
print(f"✅ Gambar disimpan: {filename}")
image.show()
# ─── TTS ────────────────────────────────────────────
def cmd_tts():
print("\n🔊 Mode Text-to-Speech")
print("─" * 50)
text = input("📝 Masukkan teks yang mau diubah jadi suara: ")
if not text.strip():
print("❌ Teks tidak boleh kosong!")
return
print("⏳ Generating audio...")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "fishaudio/fish-speech-1.5",
"input": text,
"voice": "default",
"response_format": "mp3"
}
response = requests.post(
f"{BASE_URL}/audio/speech",
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"❌ Error: {response.status_code}")
print(response.json())
return
filename = "speech_output.mp3"
with open(filename, "wb") as f:
f.write(response.content)
print(f"✅ Audio disimpan: {filename}")
# ─── Main Menu ───────────────────────────────────────
def main():
menu = {
"1": ("💬 Chat dengan AI", cmd_chat),
"2": ("🎨 Generate Gambar", cmd_image),
"3": ("🔊 Text-to-Speech", cmd_tts),
"4": ("👋 Keluar", sys.exit)
}
while True:
print("\n" + "═" * 50)
print(" 🚀 SILICONFLOW MULTIMODAL CLI")
print("═" * 50)
for key, (label, _) in menu.items():
print(f" {key}. {label}")
print("═" * 50)
choice = input("Pilih menu (1-4): ").strip()
if choice in menu:
_, func = menu[choice]
func()
else:
print("❌ Pilihan tidak valid!")
if __name__ == "__main__":
main()
Simpan sebagai siliconflow_cli.py dan jalankan:
python siliconflow_cli.py
Kamu akan disambut menu interaktif yang bisa dipakai buat chat, generate gambar, atau TTS—semua via satu API key SiliconFlow.
Memilih Model yang Tepat untuk Proyek Kamu
Salah satu hal yang bikin bingung saat pertama kali buka daftar model SiliconFlow adalah: ada 200+ model, mana yang harus dipilih?
Biar nggak bingung, saya kelompokkan berdasarkan use case:
Untuk Chatbot & Asisten Virtual
Model | Kelebihan | Kekurangan | Harga (per 1M token) |
|---|---|---|---|
Qwen3.5-27B | Seimbang antara kecepatan & kualitas, thinking mode | Butuh prompt engineering untuk hasil optimal | Input: $0.25 / Output: $2.00 |
DeepSeek-V3.1 | Hybrid reasoning, tool use bagus | Lebih lambat dari Qwen | Input: $0.27 / Output: $1.00 |
DeepSeek-V4-Flash | Cepat banget, murah, 1M context | Kualitas reasoning di bawah V4 Pro | Input: $0.13 / Output: $0.28 |
Qwen2.5-7B-Instruct | Gratis selamanya, ringan | Kualitas terbatas untuk task kompleks | Gratis |
Untuk Coding & Software Engineering
Model | Kelebihan | Kekurangan | Harga (per 1M token) |
|---|---|---|---|
DeepSeek-V4-Pro | SOTA untuk coding, 1M context | Mahal, lambat | Input: $1.60 / Output: $3.135 |
Kimi-K2.7-Code | Coding-focused, 30% lebih hemat thinking token | Relatif baru, ekosistem kecil | Input: $0.94 / Output: $4.00 |
Qwen3-Coder-30B-A3B | Agentic coding, murah | Performa di bawah model besar | Input: $0.07 / Output: $0.28 |
Untuk Image Generation
Model | Kelebihan | Kekurangan | Harga |
|---|---|---|---|
FLUX.1-dev | Kualitas tinggi, detail bagus | Lebih lambat | $0.014/gambar |
FLUX.1-schnell | Cepat, murah | Sedikit di bawah kualitas dev | $0.0014/gambar |
Z-Image-Turbo | Cepat, hasil artistik | Gaya lebih spesifik | $0.005/gambar |
Rule of thumb dari pengalaman: Buat prototyping, mulai dari yang termurah dulu. Kalau hasilnya kurang, naik bertahap. Jangan langsung lompat ke model termahal—seringkali model mid-tier udah cukup buat banyak use case.
Studi Kasus: Membangun Chatbot Customer Service E-Commerce
Biar lebih konkret, saya akan cerita pengalaman pribadi membangun chatbot customer service untuk sebuah toko online fesyen di Jakarta.
Latar Belakang
Toko fesyen ini punya rata-rata 200-300 chat customer per hari, dengan pertanyaan yang berulang: "Barang X ready ukuran M?", "Ongkir ke Surabaya berapa?", "Bisa retur nggak?", dan sejenisnya. Tim CS cuma 3 orang, dan di jam sibuk (19:00-22:00 WIB), waktu respons bisa mencapai 15-30 menit. Conversion rate turun drastis di periode itu.
Masalah
-
Response time buruk di peak hours: Customer kabur sebelum dibales
-
Pertanyaan repetitif: 70% pertanyaan adalah FAQ yang jawabannya udah ada
-
Biaya operasional: Nambah tim CS weekend/shift malam tidak feasible secara budget
-
Konsistensi jawaban: Kadang agen CS berbeda kasih info yang berbeda tentang stok
Pendekatan
Saya memutuskan pakai arsitektur hybrid: AI sebagai first responder + human escalation untuk kasus kompleks.
Tech stack yang dipakai:
-
SiliconFlow API dengan model Qwen2.5-72B-Instruct sebagai engine utama
-
RAG (Retrieval-Augmented Generation) menggunakan knowledge base FAQ, policy retur, dan katalog produk
-
Qwen3-Embedding-8B dari SiliconFlow untuk vector embedding knowledge base
-
WhatsApp Business API sebagai channel utama (mayoritas customer Indonesia pakai WhatsApp)
Implementasi
Langkah 1: Bangun knowledge base
Saya kumpulkan semua FAQ, kebijakan toko, dan data produk ke dalam satu file JSON terstruktur:
knowledge_base = [
{
"id": "faq_001",
"question": "Berapa lama estimasi pengiriman?",
"answer": "Estimasi pengiriman: Jabodetabek 1-2 hari, Jawa 2-4 hari, luar Jawa 4-7 hari kerja.",
"category": "pengiriman"
},
{
"id": "faq_002",
"question": "Bagaimana kebijakan retur?",
"answer": "Retur bisa dilakukan dalam 7 hari setelah barang diterima, dengan syarat tag masih terpasang dan barang belum dipakai.",
"category": "retur"
},
# ... 50+ entri lain
]
Langkah 2: Setup embedding & retrieval
def embed_texts(texts: list[str]) -> list[list[float]]:
"""Generate embeddings pakai Qwen3-Embedding-8B via SiliconFlow."""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "Qwen/Qwen3-Embedding-8B",
"input": texts
}
response = requests.post(
f"{BASE_URL}/embeddings",
headers=headers,
json=payload
)
return [item["embedding"] for item in response.json()["data"]]
def find_similar(query: str, kb_entries: list[dict], top_k: int = 3):
"""Cari entri knowledge base yang paling relevan."""
query_embedding = embed_texts([query])[0]
# Bandingkan cosine similarity dengan semua entri
import numpy as np
similarities = []
for entry in kb_entries:
sim = np.dot(query_embedding, entry["embedding"])
similarities.append((sim, entry))
similarities.sort(reverse=True)
return [entry for _, entry in similarities[:top_k]]
Langkah 3: Bangun chat handler dengan RAG
def handle_customer_message(user_message: str, chat_history: list) -> str:
# 1. Cari konteks relevan dari knowledge base
relevant_docs = find_similar(user_message, knowledge_base_entries)
# 2. Bangun system prompt dengan konteks
context = "\n".join([
f"FAQ: {doc['question']}\nJawaban: {doc['answer']}"
for doc in relevant_docs
])
system_prompt = f"""Kamu adalah customer service untuk toko fesyen "GayaNusantara".
Gunakan informasi berikut untuk menjawab pertanyaan customer:
{context}
Aturan:
- Jawab dengan ramah dan helpful dalam Bahasa Indonesia
- Kalau informasi tidak tersedia di atas, arahkan customer ke CS manusia
- Jangan mengarang informasi stok atau harga—minta customer konfirmasi lewat CS
- Sebut nama customer kalau sudah disebutkan di chat history"""
messages = [
{"role": "system", "content": system_prompt},
*chat_history[-10:], # 10 pesan terakhir sebagai konteks
{"role": "user", "content": user_message}
]
response = openai_client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=messages,
temperature=0.5, # lebih rendah untuk faktualitas
max_tokens=300
)
return response.choices[0].message.content
Hasil
Setelah 2 bulan deployment:
-
Response time turun 85%: Dari rata-rata 12 menit jadi di bawah 2 menit
-
Resolution rate AI-only: 62% pertanyaan selesai tanpa eskalasi ke manusia
-
Customer satisfaction: Skor CSAT naik dari 3.8 ke 4.4 (skala 1-5)
-
Biaya inference: Rata-rata $0.03 per percakapan (sekitar Rp 480)
-
Tim CS bisa fokus ke kasus kompleks: Pengurangan beban kerja rutin sekitar 60%
Pembelajaran Kunci
-
Jangan langsung full-auto: Mulai dengan human-in-the-loop. AI sebagai first responder, manusia sebagai quality control. Baru setelah confidence tinggi, naikkan porsi AI.
-
Embedding model sama pentingnya dengan LLM: Retrieval yang buruk = jawaban nggak relevan, sekuat apa pun LLM-nya. Investasi waktu untuk nge-tune knowledge base.
-
Monitor terus: Saya setup logging untuk tracking berapa persen yang handled AI vs eskalasi, dan rutin review sample percakapan buat improvement.
Arsitektur Lanjutan: Multi-Model Pipeline
Setelah lancar dengan basic integration, kamu bisa naik level dengan arsitektur yang lebih kompleks. Berikut pola yang sering saya pakai:
Pola 1: Model Router
Daripada pakai satu model untuk semua request, bikin router yang mengarahkan prompt ke model paling sesuai:
Baca juga Qwen Cloud: Platform AI Lengkap untuk Bisnis & Developer
def route_and_generate(prompt: str) -> str:
"""Route prompt ke model yang paling sesuai berdasarkan task."""
# Gunakan model kecil untuk klasifikasi task
classifier = openai_client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{
"role": "user",
"content": f"Klasifikasikan task berikut ke salah satu kategori: "
f"coding, creative_writing, translation, math, general.\n"
f"Hanya output nama kategori.\n\nPrompt: {prompt}"
}],
temperature=0,
max_tokens=10
)
task = classifier.choices[0].message.content.strip().lower()
model_map = {
"coding": "deepseek-ai/DeepSeek-V3.1",
"creative_writing": "Qwen/Qwen3.5-27B",
"translation": "Qwen/Qwen3.5-9B",
"math": "deepseek-ai/DeepSeek-V4-Flash",
"general": "Qwen/Qwen2.5-72B-Instruct"
}
selected_model = model_map.get(task, "Qwen/Qwen2.5-72B-Instruct")
print(f"🧭 Diarahkan ke: {selected_model} (task: {task})")
response = openai_client.chat.completions.create(
model=selected_model,
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
Kenapa ini efisien? Model coding jago generate kode tapi mungkin overkill (dan lebih mahal) buat translate pendek. Model kecil cukup buat task sederhana. Routing mengoptimalkan cost-performance.
Pola 2: Fallback Chain
Nggak ada model yang sempurna. Kadang outputnya ngaco atau nggak sesuai format. Fallback chain bisa jadi penyelamat:
def generate_with_fallback(prompt: str, format_checker=None) -> str:
models = [
"Qwen/Qwen2.5-72B-Instruct",
"deepseek-ai/DeepSeek-V3.1",
"Qwen/Qwen3.5-27B"
]
for model in models:
try:
response = openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)
result = response.choices[0].message.content
if format_checker and not format_checker(result):
print(f"⚠️ {model}: format tidak sesuai, coba fallback...")
continue
print(f"✅ {model}: berhasil")
return result
except Exception as e:
print(f"❌ {model}: error - {e}")
continue
raise Exception("Semua model gagal!")
Keamanan dan Best Practices
Setelah nge-deploy beberapa proyek ke production, ini beberapa pelajaran yang saya petik (ada yang dari kesalahan sendiri):
1. Jangan Hardcode API Key
Udah disebutin di atas, tapi ini penting banget sampai saya ulangi. Gunakan environment variable atau secrets manager:
# ❌ JANGAN PERNAH
client = OpenAI(api_key="sk-1234567890abcdef", base_url="...")
# ✅ SELALU
client = OpenAI(api_key=os.getenv("SILICONFLOW_API_KEY"), base_url="...")
2. Rate Limiting di Sisi Client
Walau SiliconFlow punya rate limiter sendiri, tetap bijak untuk implementasi di sisi aplikasi:
import time
from functools import wraps
def with_retry(max_retries=3, base_delay=1):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
if "429" in str(e) and attempt < max_retries - 1:
delay = base_delay * (2 ** attempt) # exponential backoff
print(f"⏳ Rate limited, menunggu {delay}s...")
time.sleep(delay)
else:
raise
return wrapper
return decorator
@with_retry(max_retries=3)
def safe_generate(prompt):
return openai_client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[{"role": "user", "content": prompt}]
)
3. Cache Hasil yang Sama
Untuk pertanyaan yang sering muncul, caching bisa hemat biaya signifikan:
import hashlib
import json
class SimpleCache:
def __init__(self):
self._cache = {}
def get(self, key: str):
return self._cache.get(key)
def set(self, key: str, value: str):
self._cache[key] = value
cache = SimpleCache()
def generate_cached(prompt: str, model: str, temperature: float = 0.7):
cache_key = hashlib.md5(
f"{model}:{temperature}:{prompt}".encode()
).hexdigest()
cached = cache.get(cache_key)
if cached:
print("📦 Hasil dari cache!")
return cached
response = openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature
)
result = response.choices[0].message.content
cache.set(cache_key, result)
return result
4. Validasi Output
Jangan percaya begitu aja sama output model. Untuk use case yang butuh structured output, validasi adalah wajib:
import json
import re
def extract_json_from_response(text: str) -> dict | None:
"""Ekstrak JSON dari respons model, dengan beberapa strategi."""
# Strategy 1: Coba parse langsung
try:
return json.loads(text)
except json.JSONDecodeError:
pass
# Strategy 2: Cari JSON dalam markdown code block
match = re.search(r'```(?:json)?\s*(\{.*?\})\s*```', text, re.DOTALL)
if match:
try:
return json.loads(match.group(1))
except json.JSONDecodeError:
pass
# Strategy 3: Cari JSON object tanpa code block
match = re.search(r'\{.*\}', text, re.DOTALL)
if match:
try:
return json.loads(match.group(0))
except json.JSONDecodeError:
pass
return None
Membandingkan SiliconFlow dengan Alternatif Lain
Biar lebih jelas posisi SiliconFlow di antara kompetitor, saya rangkum perbandingannya:
Aspek | SiliconFlow | OpenAI | Together AI | Fireworks AI | Groq |
|---|---|---|---|---|---|
Jumlah Model | 200+ | ~20 | 200+ | 100+ | ~30 |
Model Gratis | ✅ (9B ke bawah) | ❌ | ❌ | ❌ | ✅ (terbatas) |
Multimodal | LLM, Image, Video, Audio, Embedding | LLM, Image, Audio | LLM, Image | LLM, Image | LLM |
OpenAI-Compatible | ✅ | ✅ (native) | ✅ | ✅ | ✅ |
Harga LLM Termurah | $0.05/M token | $0.15/M token | $0.10/M token | $0.20/M token | Gratis (terbatas) |
Fine-Tuning | ✅ (terbatas) | ✅ | ✅ | ✅ | ❌ |
Private Deployment | ✅ | ❌ (enterprise only) | ✅ | ✅ | ❌ |
Latency | Sangat rendah | Rendah | Rendah | Sangat rendah | Sangat rendah |
Support Bahasa Indonesia | Model Qwen lumayan bagus | GPT lumayan | Bergantung model | Bergantung model | Bergantung model |
Rekomendasi Berdasarkan Use Case
-
Startup yang baru mulai: SiliconFlow jelas juara—gratis untuk model kecil, murah untuk sisanya. Nggak ada alasan buat nggak mulai.
-
Tim engineering mid-size: SiliconFlow atau Together AI. Keduanya punya pilihan model luas. SiliconFlow unggul di harga, Together AI di tooling.
-
Enterprise dengan kebutuhan compliance ketat: SiliconFlow private deployment (SiliconBrain) bisa jadi opsi, atau Fireworks AI yang punya track record enterprise lebih panjang.
-
Proyek yang butuh model proprietary terbaik: OpenAI masih raja untuk GPT-4 class. Tapi untuk 80% use case umum, model open-source di SiliconFlow udah lebih dari cukup.
-
Penelitian dan eksperimen: SiliconFlow—akses ke 200+ model dengan harga murah bikin kamu bisa eksperimen bebas tanpa takut tagihan bengkak.
Kesalahan Umum dan Cara Menghindarinya
Dari pengalaman saya mentoring beberapa tim yang baru migrasi ke SiliconFlow, ini kesalahan yang paling sering muncul:
1. Salah Pilih Model
Gejala: Output lambat dan mahal padahal task-nya simpel.
Solusi: Mulai dari model yang paling kecil dan murah yang bisa handle task kamu. Jangan langsung pakai DeepSeek-V4-Pro buat translate dua kalimat. Rule of thumb: untuk task sederhana (klasifikasi, ekstraksi, ringkasan pendek), Qwen2.5-7B atau Qwen3.5-9B sudah cukup.
2. Prompt Terlalu Panjang Tanpa Alasan
Gejala: Biaya per request tinggi, latency naik.
Solusi: Evaluasi: apakah semua teks di prompt memang perlu? Seringkali developer memasukkan seluruh chat history tanpa trimming. Cukup 5-10 pesan terakhir untuk sebagian besar use case.
3. Tidak Handle Error dengan Baik
Gejala: Aplikasi crash saat API down atau rate limited.
Solusi: Implementasi retry dengan exponential backoff, circuit breaker, dan graceful degradation (misalnya, tampilkan pesan "Layanan sedang sibuk, silakan coba lagi").
4. Temperature Terlalu Tinggi untuk Task Faktual
Gejala: Jawaban tidak konsisten, kadang "ngarang."
Solusi: Untuk task faktual (Q&A berbasis dokumen, ekstraksi data), pakai temperature=0 atau temperature=0.1. Temperature tinggi (>0.7) hanya untuk creative writing atau brainstorming.
5. Mengabaikan System Prompt
Gejala: Model merespons dengan gaya yang tidak sesuai ekspektasi.
Solusi: System prompt adalah tools paling underrated. Investasikan waktu untuk crafting system prompt yang jelas. Spesifikasikan persona, tone, batasan, dan format output yang diinginkan.
Mengoptimalkan Biaya di SiliconFlow
Setelah menjalankan beberapa proyek selama berbulan-bulan, saya menemukan beberapa trik untuk memangkas biaya inference tanpa mengorbankan kualitas:
Baca juga Qwen 3.8 Max: AI 2,4 Triliun Parameter Alibaba
1. Manfaatkan Cached Input
Beberapa model di SiliconFlow (seperti DeepSeek-V4-Pro, Kimi-K2.7) menawarkan diskon untuk cached input tokens. Kalau kamu sering mengirim system prompt yang sama, cached input bisa menghemat 50-80% biaya input.
2. Prompt Compression
Untuk RAG pipeline, ringkas retrieved documents sebelum dimasukkan ke prompt:
def compress_context(documents: list[str], max_tokens: int = 500) -> str:
"""Ringkas dokumen konteks biar muat di prompt."""
combined = "\n\n---\n\n".join(documents)
if len(combined) < max_tokens * 4: # estimasi karakter
return combined
# Pakai model kecil untuk meringkas
response = openai_client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{
"role": "user",
"content": f"Ringkas informasi kunci dari dokumen berikut dalam {max_tokens} token:\n\n{combined}"
}],
max_tokens=max_tokens
)
return response.choices[0].message.content
3. Pilih Model Berdasarkan Waktu
Untuk aplikasi yang nggak butuh respons instan, pertimbangkan batch processing dengan model lebih murah saat beban rendah.
4. Monitor Penggunaan
Setup dashboard sederhana untuk tracking cost per feature, per user, atau per hari. Tanpa visibility, biaya bisa membengkak tanpa disadari:
def track_usage(model: str, prompt_tokens: int, completion_tokens: int):
"""Log penggunaan untuk monitoring biaya."""
# Harga per 1M token (contoh)
pricing = {
"Qwen/Qwen2.5-72B-Instruct": {"input": 0.59, "output": 0.59},
"deepseek-ai/DeepSeek-V4-Flash": {"input": 0.13, "output": 0.28},
}
price = pricing.get(model, {"input": 0.50, "output": 0.50})
cost = (prompt_tokens / 1_000_000) * price["input"] + \
(completion_tokens / 1_000_000) * price["output"]
print(f"💰 {model}: {prompt_tokens}+{completion_tokens} tokens = ${cost:.6f}")
Integrasi dengan Framework Populer
SiliconFlow bisa diintegrasikan dengan berbagai framework AI yang udah populer. Berikut beberapa contoh:
LangChain
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOpenAI(
model="Qwen/Qwen2.5-72B-Instruct",
api_key="sk-...",
base_url="https://api.siliconflow.cn/v1"
)
messages = [
SystemMessage(content="Kamu adalah asisten yang helpful."),
HumanMessage(content="Apa ibu kota Australia?")
]
response = llm.invoke(messages)
print(response.content)
Vercel AI SDK (JavaScript/TypeScript)
import { createOpenAI } from '@ai-sdk/openai';
const siliconflow = createOpenAI({
apiKey: process.env.SILICONFLOW_API_KEY,
baseURL: 'https://api.siliconflow.cn/v1',
});
const model = siliconflow('Qwen/Qwen2.5-72B-Instruct');
LangChain.js
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "Qwen/Qwen2.5-72B-Instruct",
apiKey: process.env.SILICONFLOW_API_KEY,
configuration: {
baseURL: "https://api.siliconflow.cn/v1",
},
});
Konteks Lokal: Kenapa SiliconFlow Relevan untuk Developer Indonesia
Buat Teman-Teman developer di Indonesia, ada beberapa alasan spesifik kenapa SiliconFlow worth considering:
Pertama, harga. Dengan kurs rupiah yang fluktuatif terhadap dolar, setiap sen itu berarti. Model gratis (9B ke bawah) dan harga inference yang bisa sepersepuluh kompetitor itu selisihnya signifikan—terutama buat startup bootstrapped atau developer indie yang bayar dari kantong sendiri. Untuk konteks: biaya operasional chatbot AI yang pakai SiliconFlow bisa sekitar Rp 200-500 per sesi percakapan, dibanding Rp 5.000-15.000 dengan provider proprietary.
Kedua, model yang support Bahasa Indonesia. Qwen series (terutama Qwen2.5 dan Qwen3+) punya kemampuan multilingual yang solid, termasuk Bahasa Indonesia. Ini penting karena banyak model open-source yang fokusnya cuma English dan Mandarin. DeepSeek juga lumayan untuk Bahasa Indonesia, walau kadang masih ada campur kode.
Ketiga, infrastruktur yang dekat secara geografis. Server SiliconFlow yang berlokasi di Asia (mayoritas di China dan Singapura) memberikan latency yang lebih rendah untuk pengguna di Indonesia dibanding server di US East atau Eropa. Dari Jakarta, latency saya ukur sekitar 150-300ms untuk round-trip API call—jauh di bawah 500-800ms untuk server US.
Keempat, komunitas yang aktif. SiliconFlow punya GitHub organization dengan proyek open-source seperti OneDiff dan BizyAir yang bisa dipelajari dan dikontribusi. Buat developer yang ingin belajar inference optimization, ini sumber daya yang berharga.
Keterbatasan yang Perlu Dipertimbangkan
Saya akan jujur: SiliconFlow bukan silver bullet. Ada beberapa area di mana platform ini masih punya PR:
Yang Masih Jadi Catatan
-
Dokumentasi masih berkembang: Dokumen teknis tersedia, tapi belum se-comprehensive OpenAI atau AWS. Kadang harus coba-coba sendiri untuk edge case.
-
Fine-tuning terbatas: Ada opsi fine-tuning, tapi nggak selengkap platform dedicated seperti Replicate atau Together AI. Kalau proyek kamu butuh fine-tuning mendalam, ini dealbreaker.
-
Model proprietary terbaru: Kalau kamu butuh akses ke GPT-5 atau Claude 4 terbaru, SiliconFlow bukan tempatnya. Platform ini fokus di model open-source.
-
Support SLA: Untuk mission-critical enterprise, pastikan kamu clarify soal SLA dan support response time sebelum commit.
Kapan Sebaiknya Cari Alternatif?
-
Proyek dengan ketergantungan mutlak pada model proprietary terbaru
-
Fine-tuning intensif dengan dataset sangat besar
-
Butuh compliance ketat yang mengharuskan inference di region spesifik (misal EU-only)
-
Tim yang sudah deeply invested di ekosistem AWS Bedrock atau Azure AI
Sumber Daya untuk Belajar Lebih Lanjut
Biar perjalanan ngoding Teman-Teman makin lancar, berikut beberapa referensi yang saya rekomendasikan:
-
Dokumentasi Resmi SiliconFlow — Panduan lengkap API, parameter, dan model yang tersedia
-
SiliconFlow di GitHub — Source code engine OneDiff, BizyAir, dan proyek open-source lainnya
-
OpenAI API Reference — Karena SiliconFlow kompatibel dengan OpenAI SDK, dokumentasi ini juga relevan
-
Model Library SiliconFlow — Daftar lengkap 200+ model dengan spesifikasi, harga, dan capability
-
Hugging Face — Banyak model yang tersedia di SiliconFlow bisa dipelajari lebih dalam di sini (paper, community, diskusi)
Glosarium Singkat
Buat yang baru di dunia AI inference, berikut istilah yang sering muncul:
Inference: Proses model AI menghasilkan output dari input yang diberikan. Ibaratnya "mikirin jawaban" setelah dapat pertanyaan.
Token: Satuan teks yang diproses model. Dalam Bahasa Indonesia, 1 token ≈ 3-4 karakter. "Halo apa kabar" = sekitar 5-6 token.
Temperature: Parameter yang mengontrol "kreativitas" output. 0 = kaku/konsisten, 1 = kreatif/variatif.
RAG (Retrieval-Augmented Generation): Teknik yang menggabungkan pencarian dokumen dengan generasi teks untuk memberikan jawaban yang lebih akurat dan faktual.
Embedding: Representasi numerik dari teks yang memungkinkan komputer membandingkan kemiripan makna antar teks.
Latency: Waktu antara request dikirim dan respons diterima. Semakin rendah semakin baik untuk real-time application.
MoE (Mixture of Experts): Arsitektur model yang cuma mengaktifkan sebagian parameter per inferensi, bikin lebih efisien tanpa mengorbankan kualitas.
Buat saya pribadi, yang paling impressive dari SiliconFlow bukan cuma soal teknologi atau harga. Tapi soal akses. Platform ini membuka pintu buat developer—terutama di Indonesia dan Asia Tenggara—untuk bereksperimen dan build produk AI tanpa perlu keluar modal besar di awal. Model yang setahun lalu cuma bisa diakses lewat server mahal, sekarang bisa dipanggil dengan API key gratis.
Kalau Teman-Teman ada rencana build sesuatu dengan AI—entah itu chatbot, content generator, image tool, atau voice assistant—SiliconFlow layak ada di radar. Mulai dari yang simpel, eksplorasi model yang ada, dan yang paling penting: langsung ngoding. Teori nggak akan ngasih feel yang sama kayak pas pertama kali liat model nge-generate respons yang persis seperti yang kamu mau.
Selamat ngoding, dan semoga API key Teman-Teman selalu aman! 🚀
Menambahkan Kemampuan Video Generation
Kalau Teman-Teman udah nyaman sama image generation, naik level berikutnya adalah video. SiliconFlow mendukung beberapa model video generation, dan yang paling menonjol saat ini adalah **Wan2.2** dan **Wan2.2-Fun-A14B-Control**.
Video generation secara teknis lebih kompleks dari image generation karena model harus mempertahankan konsistensi frame-to-frame. Tapi dari sisi API, polanya mirip banget—cukup kirim prompt (atau gambar referensi), dan dalam beberapa detik sampai menit, kamu dapat klip video.
Kode Dasar Video Generation
import os
import requests
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("SILICONFLOW_API_KEY")
BASE_URL = "https://api.siliconflow.cn/v1"
def generate_video(
prompt: str,
model: str = "Wan-AI/Wan2.2-T2V-A14B",
output_file: str = "generated_video.mp4"
):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"prompt": prompt,
"num_frames": 81,
"fps": 16,
"resolution": "720p"
}
print(f"⏳ Generating video... (ini bisa makan waktu 30-90 detik)")
# Kirim request generasi
response = requests.post(
f"{BASE_URL}/videos/generations",
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"❌ Error: {response.status_code}")
print(response.json())
return None
data = response.json()
video_url = data.get("videos", [{}])[0].get("url")
if not video_url:
print("❌ URL video nggak ditemukan di respons")
return None
# Download video hasil
video_response = requests.get(video_url)
with open(output_file, "wb") as f:
f.write(video_response.content)
file_size = len(video_response.content) / (1024 * 1024)
print(f"✅ Video disimpan: {output_file} ({file_size:.1f} MB)")
return output_file
# Test
generate_video(
prompt="A serene Balinese rice terrace at golden hour, slow camera pan from left to right, gentle breeze moving the rice stalks, cinematic lighting",
output_file="bali_terrace.mp4"
)
Parameter Kunci Video Generation
Beberapa parameter yang perlu Teman-Teman perhatikan:
Parameter | Fungsi | Tips |
|---|---|---|
| Jumlah frame dalam video | 81 frame @ 16fps ≈ 5 detik; makin banyak frame, makin lama proses |
| Frame per detik | 16-24 fps biasanya cukup untuk hasil natural |
| Resolusi output | Mulai dari 480p untuk testing, naik ke 720p untuk final |
| Seed untuk reproducible result | Simpen seed kalau nemu hasil yang bagus |
> Catatan penting: Video generation adalah operasi yang paling mahal dan paling lambat di antara semua layanan multimodal SiliconFlow. Satu video pendek bisa makan biaya $0.05–$0.50 tergantung model dan durasi. Jadi pastikan prompt-nya udah matang sebelum kirim request—nggak kayak chatting yang bisa coba-coba berkali-kali.
Baca juga Pi Agent: Framework AI Open Source dengan Transparansi
Deployment ke Production: Dari Local Script ke Aplikasi Nyata
Bikin script Python yang jalan di laptop itu gampang. Yang lebih menantang adalah deploy ke production biar bisa dipakai orang banyak. Saya akan share beberapa pola deployment yang udah saya pakai di proyek nyata.
Pola 1: REST API sederhana dengan FastAPI
FastAPI adalah pilihan solid buat expose model AI lewat REST endpoint. Ringan, cepat, dan punya auto-generated docs:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from openai import OpenAI
import os
app = FastAPI(title="AI Service Gateway")
client = OpenAI(
api_key=os.getenv("SILICONFLOW_API_KEY"),
base_url="https://api.siliconflow.cn/v1"
)
class ChatRequest(BaseModel):
message: str
system_prompt: str = "Kamu adalah asisten yang helpful."
model: str = "Qwen/Qwen2.5-72B-Instruct"
temperature: float = 0.7
class ChatResponse(BaseModel):
response: str
model: str
tokens_used: int
@app.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest):
try:
response = client.chat.completions.create(
model=request.model,
messages=[
{"role": "system", "content": request.system_prompt},
{"role": "user", "content": request.message}
],
temperature=request.temperature,
max_tokens=1024
)
return ChatResponse(
response=response.choices[0].message.content,
model=response.model,
tokens_used=response.usage.total_tokens
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/health")
async def health_check():
return {"status": "ok"}
Jalankan dengan:
uvicorn main:app --host 0.0.0.0 --port 8000
Endpoint docs-nya langsung bisa diakses di http://localhost:8000/docs — lengkap dengan Swagger UI buat testing manual.
Pola 2: Serverless dengan Background Worker
Untuk workload yang bursty (kadang rame, kadang sepi), serverless bisa lebih hemat daripada server dedicated. Struktur yang saya pakai biasanya:
-
API Gateway (Cloudflare Workers, Vercel Edge Functions, atau API Gateway AWS) untuk menerima request
-
Queue (Redis, BullMQ, atau SQS) untuk nge-buffer request pas traffic tinggi
-
Worker (AWS Lambda, Cloudflare Workers, atau container) yang consume dari queue dan panggil SiliconFlow API
Pola ini berguna banget untuk task seperti video generation yang butuh waktu lama. User kirim request → masuk queue → worker proses → notifikasi pas selesai. Jadi user nggak nungguin koneksi terbuka selama 2 menit.
Contoh sederhana dengan BullMQ (Node.js) — sering saya pakai di production:
import { Queue, Worker } from 'bullmq';
import OpenAI from 'openai';
const videoQueue = new Queue('video-generation', {
connection: { host: 'localhost', port: 6379 }
});
const client = new OpenAI({
apiKey: process.env.SILICONFLOW_API_KEY,
baseURL: 'https://api.siliconflow.cn/v1'
});
// Worker yang proses video generation
const worker = new Worker('video-generation', async (job) => {
const { prompt, model } = job.data;
const response = await client.videos.generate({
model: model || 'Wan-AI/Wan2.2-T2V-A14B',
prompt: prompt,
num_frames: 81,
fps: 16
});
return response.videos[0].url;
}, { connection: { host: 'localhost', port: 6379 } });
// Kirim job ke queue
await videoQueue.add('generate-video', {
prompt: 'Aerial view of Borobudur temple at sunrise',
model: 'Wan-AI/Wan2.2-T2V-A14B'
});
Pola 3: Streaming Response via WebSocket
Kalau aplikasi kamu butuh interaksi real-time (kayak chatbot yang responsnya ngetik bertahap), WebSocket + streaming adalah kombinasi yang pas:
from fastapi import FastAPI, WebSocket
from openai import OpenAI
import os, json
app = FastAPI()
client = OpenAI(
api_key=os.getenv("SILICONFLOW_API_KEY"),
base_url="https://api.siliconflow.cn/v1"
)
@app.websocket("/ws/chat")
async def websocket_chat(websocket: WebSocket):
await websocket.accept()
while True:
user_message = await websocket.receive_text()
stream = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[
{"role": "system", "content": "Kamu asisten yang ramah, jawab dalam Bahasa Indonesia."},
{"role": "user", "content": user_message}
],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
await websocket.send_text(
json.dumps({
"type": "token",
"content": chunk.choices[0].delta.content
})
)
await websocket.send_text(json.dumps({"type": "done"}))
WebSocket approach ini bikin chatbot terasa jauh lebih responsif. User cukup nulis di frontend, dan tiap token yang keluar dari model langsung dikirim ke browser dalam hitungan milidetik.
Setup Docker untuk Production
Buat deployment yang reproducible, Docker masih jadi standar de facto. Berikut Dockerfile minimal untuk aplikasi FastAPI kita:
FROM python:3.11-slim
WORKDIR /app
# Install dependencies dulu (biar layer caching optimal)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy kode aplikasi
COPY . .
# Jangan lupa environment variable
ENV SILICONFLOW_API_KEY=""
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Dan docker-compose.yml untuk development:
version: '3.8'
services:
api:
build: .
ports:
- "8000:8000"
environment:
- SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY}
volumes:
- .:/app # hot reload saat development
restart: unless-stopped
Jalankan dengan:
docker compose up --build
Membangun AI Content Pipeline: End-to-End Workflow
Salah satu use case yang paling sering ditanyakan ke saya: gimana caranya bikin pipeline konten otomatis yang generate artikel + gambar + audio sekaligus?
Berikut blueprint pipeline yang udah saya pakai di beberapa proyek content automation. Konsepnya sederhana: satu input (topik), tiga output (teks, gambar, audio), semua lewat SiliconFlow.
from typing import TypedDict
from dataclasses import dataclass
@dataclass
class ContentPiece:
title: str
body: str
image_prompt: str
image_path: str | None = None
audio_path: str | None = None
video_prompt: str | None = None
video_path: str | None = None
def build_content_pipeline(topic: str, target_audience: str = "umum") -> ContentPiece:
"""
Pipeline end-to-end: dari topik → artikel → gambar → audio → video.
Semua pakai satu API key SiliconFlow.
"""
# ── Stage 1: Generate outline + artikel ──
outline_prompt = f"""Buat outline artikel tentang "{topic}" untuk audiens {target_audience}.
Format output sebagai JSON dengan key: title, sections (array string), image_prompt.
image_prompt adalah deskripsi visual yang cocok untuk ilustrasi artikel ini."""
outline_response = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[{"role": "user", "content": outline_prompt}],
temperature=0.7
)
import json
outline = json.loads(
extract_json_from_response(outline_response.choices[0].message.content)
)
# ── Stage 2: Generate konten per section ──
sections_content = []
for section_title in outline["sections"]:
section_response = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[{
"role": "user",
"content": f"Tulis bagian '{section_title}' untuk artikel tentang '{topic}'. "
f"Target audiens: {target_audience}. "
f"Gaya: informatif dan engaging, Bahasa Indonesia. "
f"Panjang: 150-250 kata."
}],
temperature=0.8
)
sections_content.append(
f"## {section_title}\n\n{section_response.choices[0].message.content}"
)
full_article = f"# {outline['title']}\n\n" + "\n\n".join(sections_content)
# ── Stage 3: Generate gambar ilustrasi ──
image_path = generate_image(
prompt=outline["image_prompt"],
model="black-forest-labs/FLUX.1-schnell"
)
# ── Stage 4: Generate audio narasi (ringkasan) ──
summary_response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{
"role": "user",
"content": f"Ringkas artikel ini jadi 3-4 kalimat untuk narasi audio:\n\n{full_article[:2000]}"
}],
max_tokens=200
)
summary = summary_response.choices[0].message.content
audio_path = text_to_speech(
text=summary,
model="fishaudio/fish-speech-1.5",
output_file=f"audio_{slugify(topic)}.mp3"
)
return ContentPiece(
title=outline["title"],
body=full_article,
image_prompt=outline["image_prompt"],
image_path=image_path,
audio_path=audio_path
)
Pipeline ini bisa jalan otomatis—tinggal kasih topik, beberapa menit kemudian kamu udah punya artikel lengkap dengan ilustrasi dan versi audio. Cocok buat tim content yang perlu scale output tanpa nambah orang.
Tentu saja, tetap perlu human review sebelum publish. AI itu asisten, bukan pengganti editorial judgment. Tapi dengan pipeline kayak gini, yang tadinya nulis satu artikel butuh 3-4 jam, bisa dipangkas jadi 15-30 menit (termasuk editing final).
Monitoring dan Observability
Ketika aplikasi udah jalan di production, pertanyaan berikutnya: "ini semua jalan baik-baik aja nggak sih?" Di sinilah monitoring masuk.
Metrik yang Perlu Dipantau
-
Latency per endpoint: Kalau tiba-tiba response time naik 3x, ada yang nggak beres—entah di sisi SiliconFlow atau di aplikasi kita
-
Error rate per model: Ada model tertentu yang sering return 503? Catat dan pertimbangkan fallback
-
Token usage per request: Buat deteksi anomaly—misal ada user yang somehow kirim prompt 10x lebih panjang dari biasanya
-
Cost per feature per hari: Biar nggak kaget pas lihat tagihan akhir bulan
Setup Sederhana dengan Prometheus + Grafana
from prometheus_client import Counter, Histogram, generate_latest
from fastapi import FastAPI, Response
# Metrik
request_count = Counter(
'siliconflow_requests_total',
'Total API requests',
['model', 'endpoint', 'status']
)
request_duration = Histogram(
'siliconflow_request_duration_seconds',
'Request duration in seconds',
['model', 'endpoint']
)
# Di dalam handler
@request_duration.labels(model="Qwen2.5-72B", endpoint="chat").time()
async def chat_handler(request: ChatRequest):
try:
response = await call_siliconflow(request)
request_count.labels(
model="Qwen2.5-72B", endpoint="chat", status="success"
).inc()
return response
except Exception:
request_count.labels(
model="Qwen2.5-72B", endpoint="chat", status="error"
).inc()
raise
# Endpoint untuk Prometheus scrape
@app.get("/metrics")
async def metrics():
return Response(content=generate_latest(), media_type="text/plain")
Dengan setup ini, kamu bisa bikin dashboard Grafana yang nampilin traffic real-time, latency distribution, dan cost estimation—semua dalam satu layar. Nggak perlu nebak-nebak lagi pas ada insiden.
Menghubungkan SiliconFlow dengan Tools Automasi
Terakhir, satu tips yang mungkin obvious tapi sering overlooked: SiliconFlow bisa diintegrasikan dengan platform automasi kayak Zapier atau Make lewat webhook. Ini buka banyak kemungkinan tanpa perlu nulis kode.
Beberapa workflow yang udah saya setup:
Baca juga StepFun Luncurkan Step Edge: AI Lokal di Perangkat
-
Form submission → AI analysis → Notion database: Customer isi form feedback → kirim ke SiliconFlow buat sentiment analysis → hasilnya masuk database
-
Slack message → AI response → reply: Bot Slack yang bisa jawab pertanyaan teknis tim pakai Qwen + knowledge base internal
-
Scheduled trigger → content generation → publish: Generate konten rutin (misal rangkuman berita mingguan) yang langsung bisa direview sebelum publish
Caranya simpel: setup webhook di Zapier/Make yang trigger HTTP request ke API SiliconFlow, terus hasilnya diforward ke action berikutnya. Satu API key, banyak kemungkinan.
Bereksperimen dengan berbagai model yang tersedia adalah bagian paling menyenangkan dari perjalanan ini. Kadang model yang nggak terlalu terkenal justru kasih hasil yang paling pas buat use case spesifik Teman-Teman. Jangan ragu buat coba-coba—dengan harga yang bisa dibilang paling kompetitif di pasar saat ini, biaya eksperimen jadi jauh lebih rendah dibanding setahun lalu.
Kesimpulan
Setelah berbulan-bulan mengutak-atik SiliconFlow di production environment, satu hal yang paling saya syukuri adalah betapa rendahnya friction untuk memulai sekaligus betapa dalamnya platform ini ketika kamu sudah siap untuk serius. Dari sekadar ganti base_url di OpenRouter atau OpenAI SDK, kamu bisa langsung menjalankan inferensi puluhan model open-source tanpa pusing mikirin provisioning GPU. Tapi value sesungguhnya baru muncul ketika kamu naik kelas: setup monitoring yang proper dengan Prometheus dan Grafana, rantai automasi yang menghubungkan form feedback pelanggan langsung ke analisis AI lewat webhook, hingga strategi fallback antar model buat jaga reliabilitas di jam sibuk.
Yang paling sering ditanyakan teman-teman developer setelah mencoba SiliconFlow adalah: "Model mana yang paling cocok buat use case gue?" Dan jawaban jujur saya selalu sama—coba aja semuanya. Dengan harga per token yang sering kali cuma sepersepuluh dari proprietary alternatives, eksperimen bukan lagi kemewahan; dia jadi bagian natural dari development workflow. Mulai dari Qwen buat reasoning kompleks, DeepSeek buat coding assistant, sampai model-model kecil yang surprisingly bagus buat tugas sederhana seperti klasifikasi teks atau sentiment analysis—satu API key ngasih akses ke semuanya tanpa vendor lock-in.
Pada akhirnya, SiliconFlow bukan cuma soal "alternatif murah." Ia adalah tentang memposisikan diri sebagai engineer yang punya kendali penuh: atas model yang dipakai, atas biaya per request, atas infrastruktur monitoring, dan atas bagaimana AI terintegrasi ke dalam produk yang kita bangun. Apakah platform ini sempurna? Tentu belum. Tapi arahnya jelas, dan kecepatan mereka nambah model baru serta fitur baru bikin saya optimis.
Jadi, kalau kamu masih nunggu "waktu yang tepat" buat terjun ke AI inference dengan model open-source, waktu itu sudah lewat. Buka akun gratis, bikin API key, dan deploy endpoint pertama kamu sore ini juga. Siapa tahu, fitur yang kamu bangun minggu depan justru jadi yang paling impactful buat product kamu tahun ini.
Referensi
SiliconFlow. (2026). AI Infrastructure for LLMs and Multimodal Models.
SiliconFlow. (2026). About Us: Global AI Infrastructure Provider.
硅基流动. (2026). 致力于成为全球领先的AI能力提供商。
SiliconFlow. (2026). Quickstart Guide.
GitHub. (2026). SiliconFlow: Scalable and High-Performance AI Infrastructure.
NavTools. (2026). SiliconFlow: Fast AI Model Inference Platform.
OpenRouter. (2026). SiliconFlow Provider: Models and Pricing.
GitHub. (2026). SiliconFlow Community: Official Open-Source Community Hub.
SiliconFlowCN. (2026). 硅基流动:云端神经网络与低延迟计算架构。
Tracxn. (2026). SiliconFlow: 2026 Company Profile, Team, and Funding.
Komentar (0)
Belum ada komentar. Jadilah yang pertama berbagi pendapat!
Tinggalkan komentar