บ่ายวันอังคาร การแก้จุดบกพร่องใช้เวลาไป 12 รอบ และเอเจนต์ก็บอกฉันอย่างมั่นใจว่าปลายทาง /users ของเราตอบสนองภายในสี่สิบเจ็ดวินาที ทั้งที่จริงแล้วคือสี่สิบเจ็ดมิลลิวินาที
ฉันตามหาข้อผิดพลาดนี้มาสองวันแล้ว ทุกครั้งที่ฉันเพิ่มคำสั่งพิมพ์ลงในเซิร์ฟเวอร์ MCP คำตอบของเอเจนต์ก็เปลี่ยนไปเล็กน้อยพอที่จะทำให้ฉันคิดว่าฉันกำลังจะเจออะไรบางอย่าง ทุกครั้งที่ฉันเขียนพรอมต์ระบบใหม่ คำตอบก็ฟังดูสมเหตุสมผลมากขึ้น แต่ก็ไม่มีอะไรถูกต้องเลย
สิ่งที่ฉันยังไม่ได้ทำจนกระทั่งบ่ายวันนั้นคือการเปิดดูร่องรอยการทำงานจริงและดูว่ามีอะไรถูกส่งผ่านไประหว่างโมเดลกับเครื่องมือบ้าง นั่นคือสิ่งที่ AI Agent Debugger ของ Apidog มีไว้สำหรับทำ ฉันได้ติดตั้งมันไว้สามสัปดาห์ก่อนแล้วแต่ลืมไป การหาสาเหตุของข้อผิดพลาดใช้เวลาแค่สิบสองนาทีเท่านั้น
นี่คือสิ่งที่ทำให้ฉันประหลาดใจ
ข้อผิดพลาดที่ฉันตามหา
การตั้งค่าเป็นเรื่องง่าย เอเจนต์ที่สร้างขึ้นบน GPT-5.5 เซิร์ฟเวอร์ MCP ตัวหนึ่งที่ฉันเขียนขึ้นในวันหยุดสุดสัปดาห์ ซึ่งเปิดเผยเครื่องมือ get_response_time(endpoint) ที่สอบถามไปป์ไลน์เมตริกของเรา พรอมต์ระบบที่มีประมาณสี่สิบคำ และพรอมต์ของผู้ใช้: “ปลายทาง /users ทำงานเร็วแค่ไหน?”
เอเจนต์ตอบเร็ว ตอบอย่างมั่นใจ ตอบผิดทุกครั้งในหลายรูปแบบ บางครั้ง “ปลายทางตอบสนองภายใน 47 วินาที” บางครั้ง “ประมาณ 0.05 วินาที” ครั้งหนึ่งที่จำได้คือ “ประสิทธิภาพเป็นที่ยอมรับได้”
ฉันได้ทำในสิ่งที่ควรทำ การเพิ่มการบันทึกข้อมูล (logging) ไปยังเซิร์ฟเวอร์ MCP การอ่านการตอบสนองของโมเดลทีละโทเค็น การเปรียบเทียบพรอมต์ระบบ การสบถ ฉันมีหน้าต่างเทอร์มินัลสามบานเปิดอยู่และหน้า Notion ที่เต็มไปด้วยสมมติฐานที่ล้มเหลวในเช้าวันอังคาร
สิ่งหนึ่งเกี่ยวกับการดีบักเอเจนต์คือ ข้อผิดพลาดไม่ค่อยจะอยู่ที่ที่คุณมองหาเป็นอันดับแรก มันสามารถอยู่ในพรอมต์ระบบ ในการเลือกโมเดล ในการกำหนดเครื่องมือ ในพารามิเตอร์ที่โมเดลส่งไปยังเครื่องมือ ในข้อมูลที่เครื่องมือส่งกลับมา หรือในการที่โมเดลตีความข้อมูลนั้นอย่างไร มีหกตำแหน่ง บันทึกคอนโซลแสดงให้เห็นเพียงหนึ่งเดียว
แผง Traces แสดงอะไรบ้าง
ตัวดีบักเกอร์ของ Apidog เปิดออกเป็นสามคอลัมน์ ส่วนเซสชันอยู่ทางซ้าย ส่วนเทิร์นอยู่ตรงกลาง ส่วนร่องรอย (Traces) อยู่ทางขวา คลิกที่เซสชันใดก็ได้ คอลัมน์ตรงกลางจะแสดงบทสนทนา: ข้อความผู้ใช้, การตอบสนองของโมเดล, การเรียกเครื่องมือ, ผลลัพธ์ของเครื่องมือ, การตอบสนองของโมเดลถัดไป คลิกที่เทิร์นใดก็ได้ คอลัมน์ทางขวาจะขยายแสดงแผนผังการทำงานทั้งหมดที่อยู่ข้างใต้
แผนผังการทำงานนี่แหละคือส่วนที่ฉันขาดไป ทุกขั้นตอนตามลำดับ:
- พรอมต์ระบบตามที่โมเดลได้รับ
- พรอมต์ผู้ใช้ตามที่โมเดลได้รับ
- ชื่อเครื่องมือที่เรียกและพารามิเตอร์ ในรูปแบบ JSON ตรงตามที่โมเดลส่งออกมา
- เพย์โหลดผลลัพธ์ของเครื่องมือ ในรูปแบบ JSON ตรงตามที่เครื่องมือส่งกลับมา
- การตอบสนองของโมเดล พร้อมเวลาและโทเค็นสำหรับเทิร์นนั้น
ฉันเปิดเซสชันที่ล้มเหลว การเรียกเครื่องมือดูปกติดี: get_response_time(endpoint="/users") โมเดลได้เลือกเครื่องมือที่ถูกต้องพร้อมอาร์กิวเมนต์ที่ถูกต้อง
จากนั้นฉันก็ขยายผลลัพธ์ของเครื่องมือ
{"value": 47, "p95": 89, "samples": 1240}
นั่นแหละใช่เลย ไปป์ไลน์เมตริกคืนค่าเป็นมิลลิวินาที โมเดลสันนิษฐานว่าเป็นวินาที 47 กลายเป็น “47 วินาที” ผ่านการหลอนอย่างมั่นใจโดยไม่สนใจหน่วย เครื่องมือถูกต้อง โมเดลผิด พรอมต์ระบบของฉันไม่มีคำสั่งเกี่ยวกับหน่วย และการตอบสนองของเครื่องมือก็ไม่มีคำอธิบายหน่วย
สิบสองนาทีหลังจากเปิดตัวดีบักเกอร์ สองวันที่ฉันตำหนิพรอมต์ระบบ
การแก้ไขใช้เวลาหกบรรทัด
ฉันเปลี่ยนสองสิ่ง ในเซิร์ฟเวอร์ MCP ฉันอัปเดตรูปแบบการตอบกลับ:
{
"value": { "amount": 47, "unit": "ms" },
"p95": { "amount": 89, "unit": "ms" },
"samples": 1240
}
จากนั้นฉันก็เพิ่มประโยคหนึ่งประโยคในพรอมต์ระบบ: “ผลลัพธ์ของเครื่องมือจะส่งคืนหน่วยอย่างชัดเจน โปรดอ่านอย่างระมัดระวัง”
ฉันรันพรอมต์ /users เดิมอีกสามครั้ง สามเซสชันที่แตกต่างกันในแผงด้านซ้าย ทั้งสามเซสชันคืนค่าได้อย่างถูกต้องว่า “ปลายทางตอบสนองประมาณ 47 มิลลิวินาที” พร้อมการวิเคราะห์มิลลิวินาทีเทียบกับเปอร์เซ็นไทล์ในเหตุผลของโมเดล ค่าใช้จ่ายโทเค็นต่ำกว่าการรันที่ล้มเหลวของฉันถึงร้อยละสิบแปด อาจเป็นเพราะโมเดลไม่ได้สร้างข้อความกู้คืนรอบ ๆ สมมติฐานที่ไม่ถูกต้องของตัวเอง
ฉันรันพรอมต์เดียวกันบน Claude Opus 4.7 ในเซสชันที่สอง เคียงข้างกัน ได้ผลลัพธ์เหมือนกัน แต่มีค่าใช้จ่ายเป็นสองเท่าและมีคำพูดที่ละเอียดกว่าเล็กน้อย ฉันรู้ว่าโมเดลไหนจะถูกนำไปใช้งานจริง
นี่คือส่วนของเครื่องมือที่ทำให้ฉันประทับใจ ไม่ใช่แค่การหาสาเหตุของข้อผิดพลาด ซึ่งตัวดีบักเกอร์ที่ดีควรจะทำได้อยู่แล้ว แต่เป็นการเปรียบเทียบโมเดลที่รันบนการกำหนดค่าเดียวกัน พร้อมเมตริกสรุปในแผงด้านซ้าย: จำนวนรอบ, จำนวนขั้นตอน, เวลา, โทเค็น, ดอลลาร์ ฉันทำการเปรียบเทียบแบบนั้นใน Google Sheet มาหกเดือนแล้ว ตอนนี้ใช้เวลาแค่สามคลิกเท่านั้น
สิ่งที่ฉันเข้าใจผิด
การสรุปแบบง่ายๆ คือ AI Agent Debugger เป็นเครื่องมือบันทึกข้อมูล แต่มันไม่ใช่ เครื่องมือบันทึกข้อมูลแสดงให้คุณเห็นว่าเกิดอะไรขึ้น ตัวดีบักเกอร์แสดงให้คุณเห็นว่าโมเดลและเครื่องมือแลกเปลี่ยนอะไรกันจริงๆ ซึ่งเป็นคนละระดับกัน
หากคุณเขียนเอเจนต์และทำในสิ่งที่ฉันเคยทำ คือการอ่านผลลัพธ์ของโมเดลและคาดเดาสาเหตุของความล้มเหลว นี่คือสิ่งที่ฉันอยากจะบอกว่าคุณเข้าใจผิด คุณไม่ได้กำลังดีบักเอเจนต์ แต่คุณกำลังดีบักสมมติฐานของคุณเกี่ยวกับเอเจนต์ ซึ่งเป็นคนละเรื่องกัน และมีเพียงหนึ่งในนั้นเท่านั้นที่จะพาคุณไปสู่การแก้ไขได้
สิ่งที่ฉันปฏิเสธที่จะเข้าใจมาหกเดือนคือ เอเจนต์เป็นระบบปิดระหว่างโมเดล พรอมต์ เครื่องมือ และการตอบสนองของเครื่องมือ ข้อผิดพลาดมักจะอยู่ในสี่สิ่งนี้เสมอ หากคุณสามารถมองเห็นทั้งสี่อย่างพร้อมกัน คุณจะพบข้อผิดพลาดได้ภายในสิบสองนาที หากไม่สามารถ คุณอาจต้องตามหามันเป็นสัปดาห์
สิ่งอื่นที่ตัวดีบักเกอร์เปิดเผยซึ่งฉันไม่คาดคิดคือความไม่แน่นอนในตัวเอเจนต์ของฉันเอง ฉันรันพรอมต์เดียวกันห้าครั้งหลังจากการแก้ไขเพียงเพื่อยืนยัน สามครั้งเรียกใช้ get_response_time หนึ่งครั้ง สองครั้งเรียกใช้สองครั้ง ครั้งที่สองด้วยเส้นทางปลายทางที่แตกต่างกัน เครื่องมือของฉันคำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ฉันไม่เคยสังเกตเห็นเพราะกรณีทดสอบที่ล้มเหลวของฉันทั้งหมดใช้ตัวพิมพ์เล็ก นั่นเป็นข้อผิดพลาดที่สองที่ฉันอาจจะปล่อยออกไปโดยไม่รู้ตัว
การวิเคราะห์แบบหลายครั้งเป็นคุณสมบัติที่ฉันจะใช้มากที่สุดในอนาคต คลิก Run ห้าครั้ง ดูที่แผงเซสชัน สิ่งใดก็ตามที่แตกต่างกันในการรันแต่ละครั้งคือจุดที่เอเจนต์ของคุณเปราะบาง
ลองด้วยตัวเอง: คำแนะนำการตั้งค่าฉบับสมบูรณ์
หากคุณต้องการการตั้งค่าแบบเดียวกับที่ฉันใช้ในระหว่างการล่าข้อผิดพลาด นี่คือเส้นทางจากโปรแกรมที่ติดตั้งใหม่เอี่ยมไปจนถึงเซสชันดีบักที่กำลังทำงานอยู่ ห้าหน้าจอตามลำดับ
ขั้นตอนที่ 1: สร้างเซสชันดีบักเอเจนต์ใหม่
เปิด Apidog และคลิก AI Agent Debugger ที่แถบแท็บด้านบน ส่วนบนของหน้าเพจจะกำหนดค่าโมเดลและสถานะการทำงาน
- เลือกผู้ให้บริการโมเดลทางซ้าย (OpenAI, Anthropic และอื่น ๆ)
- เลือกโมเดลเฉพาะตรงกลาง เช่น
gpt-5.5 - Base URL จะถูกกรอกโดยอัตโนมัติเมื่อเลือกผู้ให้บริการแล้ว ไม่จำเป็นต้องป้อนข้อมูลด้วยตนเอง
- คลิก Run เพื่อเริ่มเซสชัน

ขั้นตอนที่ 2: กำหนดค่าพรอมต์
แท็บ Prompts มีพื้นที่ป้อนข้อมูลสองส่วน
- System Prompt: กำหนดบทบาท, เป้าหมาย, ข้อจำกัด, และกฎการใช้เครื่องมือของเอเจนต์
- User Prompt: ข้อมูลทดสอบสำหรับเซสชันนี้ เช่น “Apidog คืออะไร?”
คลิก Run ที่มุมขวาบนเมื่อตั้งค่าทั้งสองเรียบร้อย หากต้องการให้ช่องป้อนข้อมูลถูกล้างโดยอัตโนมัติหลังจากการรันแต่ละครั้ง ให้เลือก Clear after Send
ขั้นตอนที่ 3: กำหนดค่าเครื่องมือ
แท็บ Tools แสดงรายการทุกสิ่งที่เอเจนต์สามารถเรียกใช้ได้ในขณะรันไทม์ ตัวเลขบนแท็บคือจำนวนเครื่องมือที่มีหรือที่กำหนดค่าไว้ในปัจจุบัน
เครื่องมือในตัว (Built-in tools) มาพร้อมกับตัวดีบักเกอร์ เปิดหรือปิดตามต้องการ
| เครื่องมือ | ทำอะไรได้บ้าง |
|---|---|
bash |
รันคำสั่งในเซสชันเชลล์ที่ยังคงอยู่ |
web_fetch |
ดึงเนื้อหาเว็บและแปลงเป็น Markdown, ข้อความ หรือ HTML |
read |
อ่านไฟล์ข้อความ รูปภาพ หรือ PDF |
edit |
ใช้การแทนที่สตริงที่แม่นยำกับไฟล์ |
write |
สร้างหรือเขียนทับไฟล์ |
grep |
ค้นหาเนื้อหาไฟล์ด้วยนิพจน์ทั่วไป |
glob |
ค้นหาไฟล์โดยใช้รูปแบบ glob |
kill_shell |
รีเซ็ตเซสชันเชลล์ปัจจุบัน |
เครื่องมือ MCP เพิ่มระบบภายนอกหรือความสามารถที่กำหนดเองผ่าน MCP Servers มีวิธีการเชื่อมต่อสามวิธี:
- STDIO: เปิดกระบวนการ MCP Server ในเครื่อง
- HTTP: เชื่อมต่อกับ MCP Server ที่รองรับ Streamable HTTP
- SSE: เชื่อมต่อกับ MCP Server โดยอิงตาม Server-Sent Events
MCP Servers ที่ต้องการการยืนยันตัวตนจะยอมรับเฮดเดอร์คำขอหรือกระบวนการ OAuth 2.0 เมื่อการเชื่อมต่อสำเร็จ ให้เลือกเครื่องมือที่เซิร์ฟเวอร์จะเปิดเผยให้เอเจนต์ใช้งาน

ขั้นตอนที่ 4: กำหนดค่าทักษะ การยืนยันตัวตน และพารามิเตอร์ของโมเดล
แท็บขนาดเล็กสามแท็บช่วยเสริมการตั้งค่าให้สมบูรณ์
- Skills (ทักษะ): เวิร์กโฟลว์ที่นำมาใช้ซ้ำได้สำหรับเอเจนต์ มีประโยชน์สำหรับเวิร์กโฟลว์โครงการคงที่ ข้อมูลจำเพาะการดำเนินงานทั่วไป และการลดข้อความยาวๆ ซ้ำๆ ในพรอมต์ระบบ ทักษะจะถูกโหลดตามความจำเป็นในขณะรันไทม์

- Authentication (การยืนยันตัวตน): ข้อมูลรับรองที่จำเป็นสำหรับบริการโมเดลหรือบริการ MCP
- Settings (การตั้งค่า): พารามิเตอร์รันไทม์ของโมเดล เช่น Temperature, Max Tokens และ Top P พารามิเตอร์ที่รองรับจะแตกต่างกันไปตามผู้ให้บริการ ดังนั้นโปรดตรวจสอบว่าโมเดลของคุณรองรับอะไรบ้าง

ขั้นตอนที่ 5: อ่านทั้งสามแผง
หลังจากคลิก Run เซสชันที่คุณเพิ่งสร้างจะปรากฏในแผงด้านซ้าย แต่ละเซสชันจะแสดงข้อมูลสรุปหนึ่งบรรทัด:
Session 3
1 turn · 1 step · 10s · 3.1k tokens · $0.02
gpt-5.5
- แผง Sessions (ซ้าย): ประวัติการรันแต่ละครั้งพร้อมเมตริกสรุป
- แผง Turns (กลาง): แต่ละรอบของการสนทนาระหว่างผู้ใช้/โมเดล คลิกที่รอบใดก็ได้เพื่อโหลดรายละเอียดการทำงานของมันทางด้านขวา
- แผง Traces (ขวา): ห่วงโซ่การทำงานทั้งหมดของเอเจนต์ตามลำดับ รวมถึงพรอมต์ระบบและผู้ใช้ การเรียกโมเดลทุกครั้ง กระบวนการคิดของโมเดลหากโมเดลเปิดเผย การเรียกใช้เครื่องมือ MCP และการดำเนินการ Skill ที่กำหนดเอง พารามิเตอร์อินพุตของเครื่องมือ ผลลัพธ์ เวลาที่ใช้ ข้อความแสดงข้อผิดพลาด และผลลัพธ์สุดท้าย
เมื่อการเรียกใช้เครื่องมือล้มเหลวหรือโมเดลส่งคืนข้อยกเว้น ขั้นตอนที่ล้มเหลวจะอยู่ตรงนั้นในแผง Traces พร้อมอินพุตและเอาต์พุตที่มองเห็นได้ ไม่ต้องดำดิ่งลงไปในล็อก

ขั้นตอนที่ 6: เปรียบเทียบประสิทธิภาพของโมเดล
พรอมต์เดียวกัน การกำหนดค่าเครื่องมือเดียวกัน แต่เป็นโมเดลที่แตกต่างกัน การรันแต่ละครั้งจะสร้างเซสชันใหม่ และแผงด้านซ้ายช่วยให้คุณเปรียบเทียบพวกมันได้แบบเคียงข้างกัน
เมตริกที่มีประโยชน์ในการเปรียบเทียบ:
- จำนวนขั้นตอนการทำงานสำหรับงานเดียวกัน
- โมเดลใดเลือกเครื่องมือได้แม่นยำกว่า
- โมเดลใดมีเวลาตอบสนองที่ต่ำกว่า
- โมเดลใดรักษาการใช้โทเค็นและค่าใช้จ่ายให้คาดเดาได้มากกว่า
ประเด็นสำคัญ
การดีบักสองวันยุบลงเหลือเพียงบ่ายวันเดียว และฉันไม่ได้เรียนรู้บทเรียนเกี่ยวกับข้อผิดพลาด แต่ฉันเรียนรู้เรื่องเครื่องมือต่างหาก เหตุผลที่ฉันตามหาการแก้ไขที่ผิดมาตลอดก็เพราะเครื่องมือที่ฉันใช้ไม่ได้แสดงสิ่งที่ฉันจำเป็นต้องเห็น ฉันมีผลลัพธ์ของโมเดลและผลลัพธ์ของเครื่องมือ แต่ไม่มีกรอบร่วมกันในการมองทั้งสองอย่างพร้อมกัน กรอบร่วมกันนี่แหละคือประเด็นสำคัญ
หากคุณเคยเขียนเอเจนต์มาแล้วมากกว่าหนึ่งตัวและยังไม่เคยเปิด AI Agent Debugger ของ Apidog เอเจนต์ตัวถัดไปที่คุณจะนำออกใช้จะต้องมีข้อผิดพลาดที่อยู่ระหว่างโมเดลกับเครื่องมือ คุณจะต้องใช้เวลาหนึ่งสัปดาห์กับมัน คุณจะต้องเขียนหน้า Notion ที่เต็มไปด้วยสมมติฐานที่ล้มเหลว ข้อผิดพลาดจะอยู่ตรงที่ตัวดีบักเกอร์จะแสดงให้คุณเห็นตั้งแต่แรกเลย
ดาวน์โหลด Apidog และเปิดใช้งานกับเอเจนต์ตัวถัดไปที่ให้คำตอบผิดพลาดด้วยน้ำเสียงที่มั่นใจ สิบสองนาที สี่สิบเจ็ดมิลลิวินาที ไม่ใช่สี่สิบเจ็ดวินาที
การอ้างอิงคุณสมบัติฉบับเต็ม รวมถึงการตั้งค่าการขนส่ง MCP และความพร้อมใช้งานของแผนการบริการ มีอยู่ใน Apidog AI Agent Debugger: ความพร้อมใช้งาน, ขอบเขตครอบคลุม และการตั้งค่า
