Modul 3 · Bab 3: Agen pertama
Membaca jejak agen
Intinya
Laporan akhir agen adalah klaim; jejak eksekusinya adalah bukti. Untuk setiap klaim penting, cari panggilan alat dan keluarannya di jejak, dan catat putaran serta biaya setiap jalan.
Setelah pelajaran ini kamu bisa
- Membaca jejak eksekusi (trace) untuk melihat apa yang dilakukan agen, langkah demi langkah
- Mencocokkan klaim selesai dengan keluaran perintah yang dijalankan agen
Istilah di pelajaran ini
Pahami
Setiap kali agen bekerja, ada dua hal yang ia hasilkan: laporan di akhir, dan jejak eksekusi (trace) di sepanjang jalan. Laporan adalah tulisan model tentang apa yang menurutnya sudah terjadi. Jejak adalah catatan urut tentang apa yang terjadi: setiap pesan model, setiap panggilan alat dengan masukannya, setiap hasil atau error (galat) yang kembali, dan biaya serta jumlah putarannya.
Keduanya sering cocok, tetapi tidak selalu. Model bisa melaporkan "semua tes lulus" padahal tes terakhir yang ia jalankan masih gagal, atau ia tidak menjalankannya. Model bisa menulis "saya sudah memeriksa semua berkas" padahal ia membuka tiga dari dua puluh. Ini bukan kebohongan yang disengaja; model menulis apa yang masuk akal sebagai penutup tugas. Karena itu laporan adalah klaim, dan jejak adalah bukti.
Cara membaca jejak tidak perlu rumit. Mulai dari akhir: apa klaim di laporan? Lalu cari di jejak panggilan alat yang seharusnya membuktikan klaim itu, dan baca keluarannya sendiri. Kalau laporan bilang tes lulus, cari keluaran tes terakhir. Kalau laporan bilang lima berkas diubah, hitung panggilan alat ubah berkas. Kalau buktinya tidak ada, klaimnya belum terbukti, seyakin apa pun kalimatnya.
Selain mencocokkan klaim, jejak memberi tahu tiga hal lain yang berguna:
- Putaran yang sia-sia. Pencarian yang diulang dengan kata yang sama, berkas yang dibaca dua kali, atau alat yang terus mengembalikan error yang sama. Ini tanda tujuan atau deskripsi alat perlu diperbaiki.
- Sentuhan yang tidak diminta. Berkas atau folder yang dibuka padahal tidak relevan, terutama yang berisi data pribadi atau rahasia. Ini tanda izin perlu dipersempit.
- Biaya per tugas. Jumlah putaran, token (potongan kata yang dihitung dan dibaca model) masuk dan keluar, dan perkiraan biaya, termasuk biaya subagen (subagent) yang dipanggil agen utama. Catat angka ini untuk setiap jalan; dari situlah kamu tahu apakah perubahan prompt (perintah atau instruksi yang kamu tulis untuk AI) membuat agen lebih hemat atau lebih boros.
Untuk satu jalan, membaca jejak memang terasa lambat. Tetapi kebiasaan ini yang membuatmu bisa mempercayai agen nanti. Setelah beberapa puluh jalan, kamu akan tahu pola normalnya, dan jejak yang tidak biasa langsung terlihat. Langkah berikutnya adalah evaluasi yang sistematis: set tugas uji yang dijalankan ulang setiap kali sesuatu berubah. Itu proyek di akhir fase ini.
Langkah khusus Anthropic, cek versi terbaru.
Sebagai contoh yang dikerjakan, Claude Agent SDK untuk Python mengalirkan jejak sebagai rangkaian pesan dari query(). AssistantMessage memuat tulisan model dan permintaan alatnya; ResultMessage di akhir memuat subtype (berhasil atau jenis galatnya), num_turns, duration_ms, total_cost_usd, dan usage (token masuk, token keluar, dan token cache):
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
async def main():
options = ClaudeAgentOptions(tools=["Read", "Glob", "Grep"], allowed_tools=["Read", "Glob", "Grep"], permission_mode="dontAsk", max_turns=12)
async for message in query(prompt="Saya perlu daftar keputusan dengan nama berkas sumbernya.", options=options):
if isinstance(message, AssistantMessage):
print(message)
if isinstance(message, ResultMessage):
print(message.subtype, message.num_turns, message.duration_ms)
print(message.total_cost_usd, message.usage)
asyncio.run(main())Seperti di pelajaran sebelumnya: opsi tools hanya menyediakan tiga alat baca bawaan, allowed_tools membiarkan ketiganya berjalan tanpa bertanya, dan permission_mode="dontAsk" menolak panggilan lain yang seharusnya bertanya. Tanpa tools, dontAsk saja masih meloloskan panggilan yang tidak butuh persetujuan, seperti perintah shell baca-saja dan memulai subagen. Untuk agen yang memakai subagen, usage hanya mencakup putaran utama; baca model_usage, yang mencakup seluruh pohon panggilan.
Simpan pesan-pesan itu ke berkas log per jalan, tanpa rahasia, supaya bisa dibaca ulang dan dibandingkan. total_cost_usd adalah perkiraan dari pustaka; untuk tagihan resmi, pakai laporan penyedia. Langkah khusus Anthropic; cek versi terbaru di dokumentasinya karena nama pesan dan kolomnya bisa berubah.
Sebelum
Permintaan
Apakah tugasnya sudah selesai?
Hasilnya
Keluaran lemah: Ya, tugas selesai. Saya sudah memperbaiki fungsi tanggal dan semua tes lulus.
Sesudah
Permintaan
Tujuan: saya ingin memastikan klaim "semua tes lulus" di laporan agen. Bahan: jejak jalan ini. Batas: jangan menjalankan apa pun lagi; hanya kutip dari jejak. Bentuk: tempel perintah tes terakhir yang dijalankan dan keluarannya apa adanya, lalu daftar berkas yang diubah beserta alat yang mengubahnya. Cek: kalau tidak ada keluaran tes di jejak, tulis "tidak ada bukti".
Hasilnya
Perintah tes terakhir di jejak dijalankan sebelum perubahan kedua pada fungsi tanggal. Keluarannya: satu tes gagal. Setelah perubahan kedua, tes tidak dijalankan lagi. Untuk klaim "semua tes lulus": tidak ada bukti. Berkas yang diubah: satu, lewat alat ubah berkas, dua kali.
Yang berubah
- Pertanyaan pertama hanya meminta laporan ulang, dan model mengulang klaimnya.
- Pertanyaan kedua meminta kutipan dari jejak dan memberi jalan untuk menjawab "tidak ada bukti".
- Langkah berikutnya: jalankan tesnya sendiri, atau minta agen menjalankannya dan tempel keluarannya.
Kesalahan umum
- Kesalahan
- Menyalin laporan akhir agen ke catatan tim sebagai status pekerjaan, tanpa melihat jejaknya.
- Kenapa merugikan
- Klaim yang tidak terbukti menjadi "fakta" di catatan tim. Orang berikutnya membangun di atasnya, dan kesalahan baru ketahuan ketika sudah sampai ke pengguna, jauh dari tempat asalnya.
- Lakukan ini
- Untuk setiap klaim penting di laporan, temukan buktinya di jejak: keluaran perintah, berkas yang memang diubah. Tulis status beserta buktinya; kalimat agen saja tidak cukup.
Coba
Laporan agen berbunyi: "Saya sudah memeriksa kedua puluh kontrak dan tidak menemukan klausul denda." Apa bukti terbaik untuk klaim itu?
Kamu melihat pola ini di jejak. Apa artinya?
Putaran sia-sia: agen tidak tahu cara lain untuk mencari. Perjelas tujuan atau deskripsi alat pencarian.
Sentuhan yang tidak diminta: izinnya terlalu luas. Persempit ke folder notulen saja.
Ada yang berubah: prompt, berkas yang lebih besar, atau putaran yang lebih banyak. Bandingkan kedua jejak.
Bawa pulang
Membaca jejak setelah setiap jalan
- Saya menemukan bukti di jejak untuk setiap klaim penting
- Saya mencari putaran yang sia-sia dan sentuhan yang tidak diminta
- Saya mencatat putaran, token, dan biaya per jalan
- Log jejak disimpan tanpa rahasia
- Status di catatan tim selalu disertai buktinya
Latihan untuk jalan agen berikutnya: sebelum membaca laporannya, tulis dulu tiga klaim yang kamu harapkan muncul, misalnya "tes lulus", "dua berkas diubah", "tidak ada berkas di luar folder yang disentuh". Lalu buka jejaknya dan cari bukti untuk ketiganya. Catat berapa klaim yang terbukti, berapa yang tidak ada buktinya, dan berapa yang ternyata keliru. Setelah sepuluh jalan, angka itu memberi gambaran jujur seberapa jauh laporan agenmu bisa dipercaya, dan bagian mana yang selalu perlu kamu cek sendiri.
Yang salah di tempat kami
Pipeline hijau yang tidak mengganti apa pun
- Konteks
- Pipeline deploy kami mencadangkan database, lalu mengganti kontainer aplikasi dengan versi baru.
- Yang terjadi
- Langkah cadangan salah membaca input dan ikut menelan sisa skrip. Langkah penggantian kontainer tidak pernah berjalan, tetapi pipeline tetap melapor sukses.
- Dampaknya
- Beberapa rilis yang dianggap sudah live ternyata belum terpasang.
- Akar masalah
- Skrip tidak berhenti saat satu langkah gagal, dan tidak ada yang memeriksa versi yang sedang berjalan setelah deploy.
- Yang kami lakukan
- Langkah cadangan diperbaiki agar tidak membaca input skrip, dan rilis yang tertunda dipasang ulang. Satu aplikasi diserahkan ke pemiliknya untuk di-deploy ulang.
- Pengaman yang kami pasang
- Setiap langkah memeriksa kode keluarnya, dan pipeline diakhiri dengan memeriksa versi image yang sedang berjalan.
PelajarannyaHijau berarti skrip selesai; periksa sendiri bahwa perubahannya terpasang.
Artinya untuk kerjamuLaporan "berhasil" dari otomasi belum tentu berarti hasilnya sampai. Periksa hasil akhirnya sendiri, misalnya apakah email sampai ke kotak masuk penerima.
Sumber
- Agent SDK docs: Python reference (diakses 26 Oktober 2026)
