Kursus
Saat sebuah dashboard dirilis dengan bug, siklus debugging selalu sama. Anda melihat layar, menemukan berkas yang bertanggung jawab, mengeditnya, menjalankan ulang pengujian, memuat ulang halaman, lalu memeriksa lagi. Ini melelahkan, dan setengah buktinya berada di tangkapan layar alih-alih jejak stack.
Saya memulai eksperimen ini sesaat setelah DeepSeek merilis DeepSeek V4.1 Flash. Ini adalah anggota terkecil dari keluarga arsitektur baru dan menerima masukan gambar. Saya ingin tahu apakah ia bisa memeriksa aplikasi web yang rusak, menambal kode, dan tahu kapan pekerjaannya selesai.
Tutorial ini berfokus pada satu proyek: sebuah dashboard Flask kecil bernama Nimbus Analytics Launch Metrics dengan tiga bug untuk ditemukan dan diperbaiki oleh agen melalui implementasi DeepSeek atas format Responses API. Rekaman prosesnya juga memperlihatkan celah dalam peralatan agen.
Kita akan membahas cara:
-
Melakukan panggilan pertama ke DeepSeek V4.1 Flash melalui Responses API
-
Memberi model sebuah screenshot referensi, lalu mengalirkannya screenshot Playwright terbaru sebagai keluaran alat
-
Memberi agen alat untuk daftar berkas, baca berkas, menjalankan pytest, dan menambal kode lintas berkas dalam satu panggilan dengan
apply_patch -
Menyimpan dan mengirim ulang riwayat percakapan karena API bersifat stateless
-
Mengembalikan laporan perbaikan JSON terstruktur
-
Menghitung biaya dari token masukan, penalaran, dan keluaran yang di-cache
Ringkasnya
Responses API DeepSeek V4.1 Flash bersifat stateless, sehingga kode Python menyimpan percakapan dan mengirimkannya ulang di setiap giliran. Loop yang sama menggunakan visi untuk gambar referensi dan screenshot alat, mode berpikir untuk memeriksa beberapa berkas, dan apply_patch untuk penyuntingan. Empat detail dari proses ini mengubah cara saya membangun versi berikutnya.
- Satu patch memperbaiki ketiga bug sekaligus: satu panggilan apply_patch menyentuh berkas CSS, JavaScript, dan Python secara berurutan, dalam batas empat belas giliran.
- Caching konteks menutup sebagian besar token masukan: 137.088 dari 156.724 token masukan di-cache, tingkat hit 87%.
- Diagnosis yang benar tidak menjamin verifikasi penuh: agen mengidentifikasi proses Flask yang basi dengan tepat, tetapi tidak memiliki alat untuk me-restart-nya, sehingga tidak bisa mengonfirmasi kecocokan visual sendiri.
- Biaya API terukur sekitar $0,0103: empat belas giliran dalam loop perbaikan plus permintaan laporan JSON terakhir.
Angka-angka tersebut berasal dari satu kali proses pada satu dashboard kecil, bukan tolok ukur. Jumlah giliran, tingkat hit cache, dan biaya akan berubah dengan aplikasi yang lebih besar atau kumpulan bug yang berbeda.
Apa Itu DeepSeek V4.1 Flash?
DeepSeek menyajikan V4.1 Flash melalui API dengan ID model deepseek-flash. Model ini menerima masukan gambar, mendukung mode berpikir dan non-berpikir, memiliki jendela konteks 1M token, dan dapat mengembalikan hingga 384K token melalui Chat Completions dan Responses API.
Ulasan DeepSeek V4.1 Flash kami membahas peluncuran, arsitektur, dan tolok ukurnya.
Bagaimana cara kerja DeepSeek V4.1 Flash?
DeepSeek mendeskripsikan V4.1 Flash sebagai tulang punggung MoE 552B-parameter, sementara Hugging Face melaporkan 763B parameter untuk checkpoint yang dipublikasikan. Selisihnya sebagian besar berasal dari memori kondisional Engram 196B-parameter, ditambah encoder dan proyektor visi, semua komponen yang dikirimkan dalam checkpoint tetapi berada di luar tulang punggung MoE.
Desain Causal Encoder-Decoder-nya menggunakan ulang state encoder yang di-cache, dengan 8B parameter aktif per token selama pemrosesan masukan dan 16B selama keluaran.
Apa yang baru di DeepSeek V4.1 Flash?
V4.1 Flash adalah model pertama dalam keluarga arsitektur V4.1 baru, dengan pemahaman gambar yang tertanam secara native. Embedding visual dan teks dilatih bersama sejak awal pra-pelatihan, bukan ditambahkan setelahnya seperti pada V4-Flash-Vision-Exp eksperimental.
Responses API hadir sebelum V4.1 Flash; DeepSeek menambahkan dukungan native selama peluncuran V4 sebelumnya. Nama model yang dipensiunkan deepseek-v4-flash dan deepseek-v4-flash-vision-exp kini diarahkan ke V4.1 Flash.
Berapa biaya DeepSeek V4.1 Flash?
Harga DeepSeek berbasis jam sibuk (peak), dengan tarif luar jam sibuk (off-peak) sebesar 50% dari tarif peak. Ketika saya menjalankan agen, masukan yang di-cache berbiaya $0,003 per satu juta token saat off-peak dan $0,006 saat peak, masukan yang tidak di-cache berbiaya $0,15 saat off-peak dan $0,30 saat peak, dan keluaran berbiaya $0,60 saat off-peak dan $1,20 saat peak, per halaman harga DeepSeek.
Jam peak berlangsung 01.00–04.00 dan 06.00–10.00 UTC, Senin hingga Jumat, tidak termasuk hari libur nasional Tiongkok. Setiap jam lainnya adalah off-peak, dan hari libur nasional Tiongkok sepenuhnya off-peak.
Apa yang Akan Kita Bangun: Agen Perbaikan Visual Launch Metrics
Nimbus Analytics Launch Metrics adalah dashboard Flask untuk total pengunjung, pendaftaran, tingkat konversi, pendapatan, dan pendaftaran harian. Saya menempatkan tiga bug di tiga berkas dan tidak memberi tahu agen apa saja bug tersebut. Kode dan dashboard yang rusak ada di repositori GitHub ini.

Dashboard rusak di samping desain referensi. Gambar oleh Penulis.
Ketiga bug memerlukan bukti yang berbeda. Satu muncul di tangkapan layar, satu memengaruhi perilaku peramban, dan satu gagal pytest. Agen tidak menerima daftar bug.
Sebelum menyerahkan ini kepada agen, saya mendefinisikan arti "sudah diperbaiki": rangkaian pytest harus lolos, dan tangkapan layar baru harus cocok secara visual dengan gambar referensi. Pendapat model saja tidak cukup, jadi runner memeriksa kedua bentuk bukti tersebut.
Cara kerja loop perbaikan
Loop bergantian antara permintaan model dan eksekusi alat lokal. V4.1 Flash mengembalikan penalaran, pesan, atau panggilan alat; Python menjalankan alat yang diminta dan menambahkan hasilnya ke riwayat. Loop berhenti saat model menjawab tanpa panggilan alat lain atau mencapai batas empat belas giliran.

Loop perbaikan yang menghubungkan model, alat, dan peramban. Gambar oleh Penulis.
Cara Menyiapkan API DeepSeek V4.1 Flash
Anda memerlukan Python 3.10 atau lebih baru dan kunci API DeepSeek dengan kredit. API DeepSeek mengikuti format permintaan OpenAI, jadi proyek ini menggunakan paket openai Python dengan base_url disetel ke DeepSeek.
Buat lingkungan virtual dan instal kebutuhan proyek.
python3 -m venv .venv
source .venv/bin/activate
pip install openai flask playwright pytest python-dotenv requests streamlit
playwright install chromium
Saya menguji ini dengan openai 3.14.1, flask 3.1.3, dan playwright 1.63.0. Simpan kunci di berkas .env di root proyek sebagai DEEPSEEK_API_KEY=sk-... dan muat dengan python-dotenv. Jika kunci Anda sudah berfungsi dengan Responses API, lewati blok kode berikut; jika tidak, permintaan ini memeriksa kunci dan base URL.
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"], base_url="https://api.deepseek.com")
response = client.responses.create(model="deepseek-flash", input="Say hi in five words.")
print(response.output_text)
Jika itu mencetak sapaan singkat, kunci dan base URL berfungsi.
Langkah 1: Tunjukkan ke Model Seperti Apa Bentuk "Sudah Diperbaiki"
Masukan pertama agen berisi screenshot referensi, tugas singkat, dan URL live. Ini adalah satu-satunya gambar yang dikirim dalam pesan pengguna. Setiap screenshot berikutnya berasal dari alat.
Runner mengirimkan gambar referensi sebagai data URL base64 di setiap permintaan. DeepSeek merekomendasikan Files API saat satu gambar digunakan ulang. Sebuah file_id menghindari pengiriman data gambar yang sama setiap kali.
Mendapatkan reaksi awal sebelum mengizinkan perubahan apa pun
Dalam gambar terlampir, saya menanyakan apa yang akan diperiksa model terlebih dahulu, tetapi tidak ada alat. Ini memungkinkan saya meninjau rencananya sebelum bisa mengedit apa pun. Responsnya mengusulkan untuk mencantumkan berkas proyek, melacak variabel CSS, dan mengambil screenshot; saya menggunakan reasoning: {"effort": "high"}, tingkat berpikir bawaan DeepSeek.
Langkah 2: Beri Agen Alat yang Dapat Digunakan
Agen mendapatkan empat alat fungsi dan satu alat kustom.
-
list_filesdanread_filememeriksa proyek, keduanya dibatasi padadashboard/dantests/. -
run_testsmenjalankan pytest. -
capture_dashboard_screenshotmeluncurkan Chromium headless melalui Playwright.
Alat kustomnya adalah apply_patch, dideklarasikan sebagai {"type": "custom", "name": "apply_patch"} dan diterima "demi kompatibilitas Codex." Nama alat kustom lain akan mengembalikan galat 400, sementara tipe bawaan seperti pencarian web dan penggunaan komputer diabaikan secara diam-diam.
Argumen fungsi datang sebagai teks JSON dan diperiksa sebelum Python menjalankannya. apply_patch datang sebagai masukan alat kustom, jadi kodenya menanganinya secara terpisah dan memeriksa patch sebelum menulis berkas. Galat alat dikembalikan ke model alih-alih menghentikan loop.
Mengirim balik screenshot Playwright sebagai keluaran alat
Saat capture_dashboard_screenshot dijalankan, hasilnya tidak disimpan ke disk. Python mengembalikannya sebagai bagian input_image di dalam function_call_output. DeepSeek kemudian membaca screenshot sebagai gambar, bukan deskripsi teks.
history.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": [{"type": "input_image", "image_url": f"data:image/png;base64,{png_b64}"}],
})
Agen dapat menambal CSS, mengambil screenshot lain, dan memeriksa apakah angka-angkanya dapat dibaca.
Langkah 3: Bangun Loop Agen dan Kelola Riwayat Sendiri
Riwayat disimpan dalam daftar Python karena API tidak mendukung previous_response_id atau percakapan di sisi server. Mode berpikir juga memerlukan setiap item penalaran dari giliran alat sebelumnya.
Penting: Jika keluaran alat disisipkan di antara dua panggilan dari giliran yang sama, permintaan berikutnya akan mengembalikan galat 400. Tambahkan setiap item dari response.output secara berurutan, lalu jalankan alat dan tambahkan hasilnya.
Runner membatasi agen pada empat belas giliran dan direktori dashboard/ serta tests/. Ia tidak menyediakan akses shell, memeriksa argumen alat, dan menggunakan pytest untuk verifikasi.
Apakah DeepSeek V4.1 Flash mendukung keluaran terstruktur?
Ya, melalui Responses API, DeepSeek V4.1 Flash menerima JSON Schema lewat text.format. response_format pada Chat Completions mendukung mode JSON tetapi tidak mendukung skema. Setelah loop berhenti, permintaan terakhir mencatat bug, perbaikan, hasil pengujian, hasil screenshot, dan metode verifikasi.
Proyek ini juga menyertakan aplikasi Streamlit di app_streamlit.py. Agen yang sama berjalan sebagai generator dengan stream=True, sehingga halaman menampilkan teks penalaran dan panggilan alat saat keduanya tiba. Sidebar mengubah upaya penalaran dan detail gambar.
UI Streamlit men-stream proses agen. Video oleh Penulis.
Langkah 4: Jalankan Agen Perbaikan Bug Visual
Prosesnya tampak selesai setelah satu patch, tetapi halaman live berpendapat lain.
Menemukan dan memperbaiki bug
Agen menggunakan dua giliran pertama untuk melihat sebelum menyentuh apa pun: giliran pertama mencantumkan berkas dan mengambil screenshot baseline, giliran kedua membaca app.py, index.html, style.css, dan berkas pengujian.
Giliran ketiga menjalankan pytest, lalu giliran keempat menerapkan satu patch yang memperbaiki rumus konversi, mengganti warna metrik, dan mencocokkan lookup JavaScript dengan ID kanvas.
- conversion_rate = data["conversions"] / data["signups"] * 100
+ conversion_rate = data["conversions"] / data["total_visitors"] * 100
Menjalankan pengujian pada giliran kelima menunjukkan semua lima lolos. Di sinilah prosesnya berhenti rapi. Setiap screenshot baru masih menampilkan tingkat konversi 15% dan grafik kosong.
Menemukan kebasaan sistem dan memperbaikinya
Agen mengonfirmasi bahwa berkas di disk berisi perbaikan, mencoba ulang screenshot, dan menyelidiki apakah server memuat berkas Python dan template yang diubah. Dua pemeriksaan kesegaran sementara juga gagal muncul di halaman live.
Pada giliran keempat belas, loop mencapai batasnya dan mengidentifikasi penyebabnya: run_tests memeriksa kode di disk, sementara screenshot memeriksa proses yang sedang berjalan dengan state yang basi. Flask dijalankan dengan debug=False, sehingga tidak ada reloader yang memuat modul Python yang diubah, dan auto-reload template tidak diaktifkan.
Perubahan CSS tampak, sementara nilai yang berasal dari Python dan grafik berbasis template tetap basi. Pytest mengimpor app.py dari disk, jadi hasil pengujian hijau tidak menjamin halaman yang segar.
Setelah saya me-restart Flask, dashboard cocok dengan gambar referensi. Potongan yang hilang adalah sebuah alat restart_server, bukan patch kode lain.

Restart membuat perubahan dashboard yang ditambal terlihat. Gambar oleh Penulis.
Apakah Agen Berhasil Memperbaiki Dashboard?
Ya, agen memperbaiki dashboard di disk. Ia hanya mengubah tiga berkas yang bermasalah, dan pytest berubah dari empat kegagalan menjadi lima pengujian lolos. Halaman live menampilkan semua perbaikan setelah Flask di-restart.
Langkah 5: Ukur Penggunaan, Caching, dan Biaya
Karena agen mengirim ulang riwayatnya, permintaan berikutnya mengulang banyak masukan dari giliran sebelumnya. DeepSeek memeriksa prefiks berulang ini terhadap cache otomatisnya. Cache beroperasi dengan pendekatan best-effort, jadi angka-angka ini hanya berlaku untuk proses ini.
Melintasi empat belas giliran perbaikan dan permintaan laporan JSON terakhir, API melaporkan 156.724 token masukan, termasuk 137.088 token yang di-cache, tingkat hit 87%. Keluaran berjumlah 11.497 token, termasuk 9.362 token penalaran. Proses ini berlangsung saat off-peak, sehingga seluruh lima belas permintaan hanya berbiaya sekitar $0,0103.

Keluaran penalaran adalah kategori biaya terbesar. Gambar oleh Penulis.
Basis kode yang lebih besar, lebih banyak screenshot, atau lebih sedikit hit cache akan mengubah jumlah token dan biaya.
Batasan API DeepSeek V4.1 Flash yang Perlu Diketahui
Tiga batas API penting sebelum runner ini berkembang melampaui demo.
-
Respons latar belakang tidak didukung, jadi giliran yang lama memblokir hingga selesai.
-
parallel_tool_callsdanmax_tool_callsdiabaikan; pemanggilan alat paralel tetap diaktifkan. -
Trunkasi otomatis tidak didukung, sehingga permintaan yang melampaui batas konteks mengembalikan galat 400.
Daftar Periksa Deployment Agen DeepSeek V4.1 Flash
Sebelum menggunakan pola ini dalam layanan live, letakkan kendali di kode aplikasi, bukan di instruksi model.
- Terapkan batas giliran dan biaya, serta beri peringatan saat salah satunya tercapai
- Batasi akses berkas dan periksa setiap argumen alat
- alat untuk me-restart dan memeriksa layanan, sehingga verifikasi menggunakan kode saat ini
- Catat penggunaan token, panggilan alat, hasil pengujian, dan status akhir
Kapan Anda Harus Menggunakan apply_patch vs Alat Fungsi Biasa?
Gunakan apply_patch saat satu perubahan harus memperbarui beberapa berkas, seperti di sini. Jalankan pengujian setelah patch, karena satu panggilan buruk dapat merusak beberapa berkas.
Gunakan read_file dan write_file saat setiap penyuntingan memerlukan pemeriksaan atau persetujuan terpisah. Ini memakan lebih banyak giliran, tetapi penyuntingan yang buruk hanya memengaruhi satu berkas pada satu waktu.
Penutup
Loop perbaikan visual memperbaiki ketiga bug dalam satu patch, tetapi prosesnya bukan keberhasilan yang mulus. Pytest lolos sementara Flask masih menyajikan keluaran Python dan template lama, sehingga agen tidak bisa mengonfirmasi halaman akhir sampai saya me-restart server.
Saya akan menambahkan alat restart_server dan perbandingan piksel sebelum menguji aplikasi yang lebih besar. Saya akan mempertahankan batas berkas dan batas giliran, lalu memperlakukan pytest dan perbandingan screenshot sebagai pemeriksaan terpisah. Lolos satu tidak boleh menggantikan yang lain.
FAQ
Bisakah DeepSeek V4.1 Flash membaca gambar dari URL?
Ya. Responses API menerima URL gambar publik, data URL base64, atau file_id dari Files API.
Bagaimana jika patch agen menyebabkan lebih banyak kegagalan pengujian?
Panggilan run_tests berikutnya menampilkan regresi, dan loop berlanjut hingga berhenti atau mencapai batas giliran. Aplikasi juga sebaiknya menyimpan salinan yang dapat dipulihkan.
Apakah DeepSeek V4 Pro akan dipensiunkan?
DeepSeek berencana untuk menghentikan V4 Pro tak lama setelah V4.1 Flash diluncurkan, lalu membalikkan keputusan itu setelah permintaan pengguna. V4 Pro tetap tersedia dengan penagihan yang sama.
Bisakah apply_patch digunakan dengan model lain selain DeepSeek?
Formatnya berasal dari alat Codex milik OpenAI, dan DeepSeek menggambarkan dukungannya sebagai "demi kompatibilitas Codex." API lain akan menerima {"type": "custom", "name": "apply_patch"} hanya jika mendukung deklarasi alat yang sama.
Bisakah saya menjalankan DeepSeek V4.1 Flash secara lokal?
Ya. Bobot model tersedia di Hugging Face di bawah lisensi MIT. Tutorial ini menggunakan API terhosting DeepSeek dan tidak membahas penyajian model atau kebutuhan perangkat keras.
Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.
