惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
量子位
A
Arctic Wolf
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
The Cloudflare Blog
Last Week in AI
Last Week in AI
The Hacker News
The Hacker News
I
Intezer
J
Java Code Geeks
P
Privacy International News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
S
Securelist
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Jina AI
Jina AI
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
雷峰网
雷峰网
T
Tenable Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
K
Kaspersky official blog
H
Help Net Security
宝玉的分享
宝玉的分享
罗磊的独立博客
Webroot Blog
Webroot Blog
月光博客
月光博客
B
Blog RSS Feed
Recorded Future
Recorded Future

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Agen Terus Berbohong Padaku. Sampai Aku Membuka AI Agent Debugger Apidog.
Walse · 2026-05-20 · via DEV Community

Selasa sore. Dua hari saya men-debug agen yang dengan percaya diri menjawab bahwa endpoint /users merespons dalam 47 detik. Nilai sebenarnya: 47 milidetik.

Coba Apidog hari ini

Masalahnya bukan di endpoint, bukan di pipeline metrik, dan bukan di model secara langsung. Masalahnya ada di batas antara model dan tool: tool mengembalikan angka tanpa satuan, lalu model menebak satuannya.

Saya baru menemukan itu setelah membuka execution trace di AI Agent Debugger Apidog. Dalam 12 menit, bug yang saya kejar selama dua hari terlihat jelas.

Bug yang Saya Kejar

Setup-nya sederhana:

  • Agen berbasis GPT-5.5
  • Satu server MCP custom
  • Tool bernama get_response_time(endpoint)
  • Tool tersebut mengambil data dari pipeline metrik
  • Prompt pengguna: Seberapa cepat endpoint /users?

Respons agen berubah-ubah:

  • “Endpoint merespons dalam 47 detik.”
  • “Sekitar 0,05 detik.”
  • “Kinerja dapat diterima.”

Saya sudah mencoba langkah debug umum:

  • Menambahkan logging di server MCP
  • Membaca respons model token demi token
  • Membandingkan prompt sistem
  • Menulis ulang instruksi model
  • Menjalankan ulang prompt yang sama berkali-kali

Tetap tidak ketemu.

Masalah utama saat men-debug agen adalah bug bisa berada di banyak tempat:

  1. Prompt sistem
  2. Prompt pengguna
  3. Pemilihan model
  4. Definisi tool
  5. Parameter yang dikirim model ke tool
  6. Payload hasil tool
  7. Interpretasi model terhadap hasil tool

Console log biasanya hanya menunjukkan satu atau dua bagian. Untuk agen, itu tidak cukup.

Yang Terlihat di Panel Trace

Debugger Apidog menampilkan debug session dalam tiga panel:

  • Panel kiri: daftar session
  • Panel tengah: turn atau giliran percakapan
  • Panel kanan: execution trace lengkap

Saat membuka session yang gagal, saya bisa melihat urutan eksekusi secara eksplisit:

  • Prompt sistem yang diterima model
  • Prompt pengguna yang diterima model
  • Nama tool yang dipanggil model
  • Parameter tool dalam JSON
  • Payload hasil tool dalam JSON
  • Respons akhir model
  • Waktu, token, dan biaya untuk eksekusi tersebut

Panggilan tool terlihat benar:

get_response_time(endpoint="/users")

Enter fullscreen mode Exit fullscreen mode

Model memilih tool yang benar dan mengirim argumen yang benar.

Lalu saya membuka payload hasil tool:

{
  "value": 47,
  "p95": 89,
  "samples": 1240
}

Enter fullscreen mode Exit fullscreen mode

Di situlah bug-nya.

Pipeline metrik mengembalikan nilai dalam milidetik, tetapi payload tidak menyebutkan satuan. Model mengasumsikan angka 47 sebagai detik.

Tool benar. Model salah menginterpretasikan hasil tool. Prompt sistem saya juga tidak memberi instruksi tentang satuan.

Perbaikannya: Buat Payload Tool Lebih Eksplisit

Saya mengubah response schema tool dari ini:

{
  "value": 47,
  "p95": 89,
  "samples": 1240
}

Enter fullscreen mode Exit fullscreen mode

Menjadi ini:

{
  "value": {
    "amount": 47,
    "unit": "ms"
  },
  "p95": {
    "amount": 89,
    "unit": "ms"
  },
  "samples": 1240
}

Enter fullscreen mode Exit fullscreen mode

Lalu saya menambahkan satu kalimat ke prompt sistem:

Hasil tool mengembalikan satuan secara eksplisit. Bacalah dengan cermat.

Enter fullscreen mode Exit fullscreen mode

Setelah itu saya menjalankan prompt yang sama tiga kali:

Seberapa cepat endpoint /users?

Enter fullscreen mode Exit fullscreen mode

Ketiga session mengembalikan jawaban yang benar: endpoint merespons sekitar 47 ms.

Pelajarannya sederhana: untuk tool yang dipakai agen, jangan hanya mengembalikan angka. Kembalikan konteks yang dibutuhkan model untuk menafsirkan angka itu.

Contoh payload yang lebih aman:

{
  "metric": "response_time",
  "endpoint": "/users",
  "value": {
    "amount": 47,
    "unit": "ms"
  },
  "percentile": {
    "p95": {
      "amount": 89,
      "unit": "ms"
    }
  },
  "samples": 1240
}

Enter fullscreen mode Exit fullscreen mode

Pola Debug yang Lebih Praktis

Sebelum mengubah prompt, cek dulu empat hal ini di trace:

  1. Apakah prompt sistem benar-benar diterima model?
  2. Apakah model memilih tool yang benar?
  3. Apakah parameter tool sesuai?
  4. Apakah payload tool cukup jelas untuk diinterpretasikan model?

Dalam kasus saya, nomor 1 sampai 3 benar. Masalahnya ada di nomor 4.

Itu sebabnya menambahkan logging di server MCP tidak cukup. Log server hanya menunjukkan bahwa tool mengembalikan data. Trace menunjukkan bagaimana model membaca data itu.

Yang Saya Salah Pahami

Saya awalnya menganggap AI Agent Debugger sebagai alat logging. Ternyata bukan itu poin utamanya.

Logging menjawab:

Apa yang terjadi di server?

Debugger menjawab:

Apa yang sebenarnya dipertukarkan antara model, prompt, tool, dan hasil tool?

Untuk agen AI, pertanyaan kedua jauh lebih penting.

Agen adalah sistem yang terdiri dari:

  • Model
  • Prompt
  • Tool
  • Respons tool

Bug biasanya muncul di batas antarbagian itu. Kalau Anda hanya melihat output akhir model, Anda sedang men-debug asumsi, bukan sistemnya.

Bug Kedua: Non-determinism

Setelah memperbaiki satuan, saya menjalankan prompt yang sama lima kali.

Hasilnya:

  • Tiga run memanggil get_response_time satu kali
  • Dua run memanggil get_response_time dua kali
  • Pada beberapa run, endpoint dikirim dengan kapitalisasi berbeda

Tool saya ternyata case-sensitive. Semua test case sebelumnya memakai huruf kecil, jadi bug itu tidak terlihat.

Ini pola debug yang sekarang saya pakai:

  1. Jalankan prompt yang sama minimal lima kali
  2. Bandingkan session di panel kiri
  3. Cari bagian yang berubah antar-run
  4. Perbaiki bagian yang membuat agen rapuh

Jika prompt yang sama menghasilkan tool call yang berbeda, parameter berbeda, atau urutan langkah berbeda, berarti ada area yang perlu distabilkan.

Coba Sendiri: Setup AI Agent Debugger Apidog

Berikut alur dari instalasi baru sampai session debug berjalan.

Langkah 1: Buat Session Debug Agen Baru

Buka Apidog, lalu klik AI Agent Debugger di tab atas.

Konfigurasikan bagian model:

  • Pilih provider model, misalnya OpenAI atau Anthropic
  • Pilih model spesifik, misalnya gpt-5.5
  • Base URL akan terisi otomatis setelah provider dipilih
  • Klik Jalankan untuk memulai session

Tab AI Agent Debugger dengan penyedia model dan pemilih model di bagian atas, URL Dasar terisi otomatis, dan tombol Jalankan di kanan atas.

Langkah 2: Konfigurasi Prompt

Buka tab Prompts.

Isi dua bagian utama:

  • Prompt Sistem: peran agen, tujuan, batasan, dan aturan penggunaan tool
  • Prompt Pengguna: input uji untuk session ini

Contoh prompt sistem:

Anda adalah agen observability internal.
Gunakan tool yang tersedia untuk membaca metrik.
Jika tool mengembalikan satuan, gunakan satuan tersebut secara eksplisit.
Jangan menebak satuan.

Enter fullscreen mode Exit fullscreen mode

Contoh prompt pengguna:

Seberapa cepat endpoint /users?

Enter fullscreen mode Exit fullscreen mode

Klik Jalankan di kanan atas.

Jika ingin input dibersihkan otomatis setelah setiap run, aktifkan Bersihkan setelah Kirim.

Langkah 3: Konfigurasi Tool

Tab Alat berisi semua tool yang dapat dipanggil agen saat runtime.

Debugger menyediakan beberapa tool bawaan:

Tool Fungsi
bash Menjalankan perintah dalam sesi shell persisten
web_fetch Mengambil konten web dan mengubahnya ke Markdown, teks, atau HTML
read Membaca file teks, gambar, atau PDF
edit Menerapkan penggantian string yang tepat pada file
write Membuat atau menimpa file
grep Mencari konten file dengan ekspresi reguler
glob Menemukan file menggunakan pola glob
kill_shell Mengatur ulang sesi shell saat ini

Untuk tool custom, gunakan MCP Tool. Ada tiga metode koneksi:

  • STDIO: menjalankan server MCP lokal sebagai proses
  • HTTP: menghubungkan ke server MCP dengan HTTP Streamable
  • SSE: menghubungkan ke server MCP berbasis Server-Sent Events

Jika server MCP membutuhkan autentikasi, konfigurasikan header request atau OAuth 2.0. Setelah koneksi berhasil, pilih tool mana yang diekspos ke agen.

Langkah 4: Konfigurasi Skills, Autentikasi, dan Parameter Model

Ada tiga tab tambahan yang perlu dicek.

Skills

Skills adalah workflow yang dapat digunakan ulang oleh agen.

Gunakan skills untuk:

  • Workflow proyek yang sering dipakai
  • Instruksi operasi yang panjang
  • Mengurangi prompt sistem yang terlalu besar
  • Memuat instruksi hanya saat dibutuhkan runtime

Otentikasi

Gunakan tab Otentikasi untuk kredensial yang dibutuhkan oleh:

  • Provider model
  • Server MCP
  • Layanan eksternal yang dipanggil tool

Pengaturan

Gunakan tab Pengaturan untuk parameter runtime model, seperti:

  • Temperature
  • Max Tokens
  • Top P

Parameter yang tersedia bergantung pada provider dan model. Pastikan parameter yang Anda atur memang didukung oleh model yang dipakai.

Langkah 5: Baca Tiga Panel Debug

Setelah klik Jalankan, session baru muncul di panel kiri.

Contoh ringkasan session:

Session 3
1 turn · 1 step · 10s · 3.1k tokens · $0.02
gpt-5.5

Enter fullscreen mode Exit fullscreen mode

Gunakan panel berikut saat debug:

  • Panel Sesi kiri: riwayat eksekusi dan metrik ringkasan
  • Panel Giliran tengah: dialog pengguna/model per turn
  • Panel Trace kanan: rantai eksekusi lengkap agen

Panel trace dapat menampilkan:

  • Prompt sistem
  • Prompt pengguna
  • Panggilan model
  • Proses berpikir model jika diekspos oleh model
  • Panggilan tool MCP
  • Eksekusi custom skill
  • Parameter input tool
  • Payload hasil tool
  • Waktu eksekusi
  • Error message
  • Output akhir

Saat tool gagal atau model mengembalikan exception, buka langkah yang gagal di panel trace. Input dan output-nya bisa langsung dilihat tanpa masuk ke log server.

Langkah 6: Bandingkan Model

Untuk membandingkan model, gunakan setup yang sama:

  • Prompt sama
  • Tool sama
  • Parameter sedekat mungkin sama
  • Model berbeda

Setiap run membuat session baru. Dari panel kiri, bandingkan:

  • Jumlah step untuk tugas yang sama
  • Model mana yang memilih tool dengan lebih akurat
  • Model mana yang lebih cepat
  • Konsumsi token
  • Biaya
  • Stabilitas output antar-run

Dalam kasus saya, prompt yang sama dijalankan pada GPT-5.5 dan Claude Opus 4.7. Hasilnya sama, tetapi biaya dan verbosity berbeda. Itu cukup untuk membantu memilih model untuk produksi.

Checklist Debug Agen

Gunakan checklist ini setiap kali agen memberi jawaban salah:

[ ] Prompt sistem terlihat benar di trace
[ ] Prompt pengguna terlihat benar di trace
[ ] Model memilih tool yang benar
[ ] Parameter tool sesuai schema
[ ] Payload tool berisi satuan dan konteks
[ ] Model tidak menebak nilai yang tidak ada di payload
[ ] Prompt yang sama stabil saat dijalankan beberapa kali
[ ] Perbandingan model dilakukan dengan konfigurasi identik

Enter fullscreen mode Exit fullscreen mode

Untuk tool response, hindari payload ambigu seperti ini:

{
  "value": 47
}

Enter fullscreen mode Exit fullscreen mode

Lebih baik gunakan payload eksplisit:

{
  "metric": "response_time",
  "endpoint": "/users",
  "value": {
    "amount": 47,
    "unit": "ms"
  }
}

Enter fullscreen mode Exit fullscreen mode

Poin Penting

Bug agen sering berada di antara model dan tool, bukan hanya di kode backend atau prompt.

Dalam kasus ini, bug dua hari selesai setelah melihat execution trace:

  • Tool mengembalikan 47
  • Satuan tidak disebutkan
  • Model menafsirkan sebagai detik
  • Response schema diperbaiki
  • Prompt sistem diberi instruksi singkat
  • Output menjadi stabil

Jika Anda sedang membangun agen dengan MCP tool, jangan hanya mengandalkan log server. Lihat seluruh pertukaran antara prompt, model, tool call, dan tool result.

Unduh Apidog dan jalankan debugger pada agen berikutnya yang memberi jawaban salah dengan percaya diri.

Referensi fitur lengkap, termasuk pengaturan transportasi MCP dan ketersediaan paket, tersedia di Apidog AI Agent Debugger: ketersediaan, cakupan, dan pengaturan.