เมื่อเอเจนต์ของคุณทำงานผิดพลาด คุณรู้หรือไม่ว่าตัวไหนเป็นคนทำ?
เอเจนต์ลบข้อมูลที่ไม่ควรแตะต้อง ส่งข้อความไปยังเทแนนท์ (tenant) ที่ผิด หรือเรียก API วนลูปจนทำให้ค่าใช้จ่ายพุ่งสูงขึ้น
เมื่อเกิดเหตุการณ์ขึ้นผ่านไป 10 นาที คุณจะตั้งคำถามเพียงข้อเดียวคือ: เอเจนต์ตัวไหนเป็นคนทำ?
หากคุณไม่รู้ คุณก็ไม่สามารถแก้ไขมันได้ คุณไม่สามารถหยุดการ Build ได้ คุณไม่สามารถตรวจสอบข้อผิดพลาดได้ และคุณไม่สามารถเรียนรู้จากความผิดพลาดนั้นได้
นี่คือปัญหาเรื่องอัตลักษณ์ (Identity)
ทีมส่วนใหญ่มักเผชิญกับ 3 รูปแบบที่บดบังการทำงานของเอเจนต์:
- บัญชีบริการที่ใช้ร่วมกัน (Shared service accounts): เอเจนต์ 10 ตัวใช้ชุดข้อมูลประจำตัว (credentials) ชุดเดียวกัน ทุกการกระทำจะดูเหมือนกันหมดใน Log ของคุณ
- ข้อมูลประจำตัวของมนุษย์ (Human credentials): เอเจนต์ใช้การล็อกอินของคุณ Log จะแสดงชื่อของคุณ ไม่ใช่ชื่อของเอเจนต์ ซึ่งสร้างความเสี่ยงด้านความปลอดภัยอย่างมหาศาล
- การเปลี่ยนแปลงที่เงียบเชียบ (Silent drift): การ Build สองเวอร์ชันที่ต่างกันใช้ชื่อเดียวกัน เวอร์ชันหนึ่งอาจใช้โมเดลใหม่หรือ Prompt ใหม่ แต่ Log กลับแสดงอัตลักษณ์เดิม
เพื่อแก้ไขปัญหานี้ ให้ทำตามขั้นตอนต่อไปนี้:
มอบอัตลักษณ์เฉพาะให้เอเจนต์ทุกตัว อย่าใช้ข้อมูลประจำตัวของมนุษย์ อย่าใช้บัญชีที่ใช้ร่วมกัน เอเจนต์ต้องทำการยืนยันตัวตน (authenticate) ในฐานะตัวมันเอง
ระบุฟิลด์เฉพาะ 6 ฟิลด์ในการกระทำทุกครั้ง:
- Accountable party: ใครเป็นผู้รับผิดชอบเอเจนต์ตัวนี้?
- Operational owner: ใครเป็นผู้ดูแลรักษาในแต่ละวัน?
- Tenant: ลูกค้าคนไหนคือเป้าหมายของสิ่งนี้?
- Agent-type-id: นี่คือการ Build เวอร์ชันไหน?
- Agent-instance-id: นี่คือการรัน (run) ครั้งไหน?
- Trace context: ตำแหน่งนี้อยู่ในลำดับการเรียกใช้งาน (call chain) ตรงไหน?
ใช้ Hash สำหรับการทำ Versioning อย่าตั้งชื่อเอเจนต์ว่า "support-agent-v2" เพราะหากคุณเปลี่ยน System Prompt ชื่อจะยังคงเดิมแต่พฤติกรรมจะเปลี่ยนไป ให้ใช้ Content Hash แทน โดยสร้าง Hash จาก Container image, Prompt, Model และ Config หากคุณเปลี่ยนโค้ดเพียงบรรทัดเดียว ID จะเปลี่ยนทันที วิธีนี้จะทำให้การเปลี่ยนแปลงที่เงียบเชียบ (silent drift) มองเห็นได้ชัดเจน
บันทึกสายลำดับ (Lineage) เอเจนต์สามารถสร้างเอเจนต์ย่อย (sub-agents) ได้ คุณต้องบันทึกว่าเอเจนต์ตัวแม่ (parent agent) ตัวไหนเป็นผู้เริ่มการทำงานของเอเจนต์ย่อย และต้องบันทึก Prompt ที่ตัวแม่ส่งให้ตัวย่อยด้วย นี่เป็นวิธีเดียวที่จะตรวจพบคำสั่งที่ถูกแทรกแซง (injected instructions) หรือข้อมูลที่ถูกวางยา (poisoned data)
อัตลักษณ์คือพื้นฐานในการกู้คืนระบบ (recovery surface) มันช่วยให้คุณสามารถใช้ปุ่มหยุดการทำงานฉุกเฉิน (kill switch) และสร้างเส้นทางการตรวจสอบ (audit trail) ได้ คุณต้องตั้งค่าสิ่งนี้ก่อนที่จะเกิดเหตุการณ์ขึ้น การพยายามเพิ่มอัตลักษณ์ในช่วงวิกฤตนั้นสายเกินไป
ตรวจสอบ Log ของคุณตอนนี้เลย ลองดูการกระทำเมื่อหนึ่งชั่วโมงที่แล้ว คุณสามารถระบุได้ไหมว่าการ Build เวอร์ชันไหนเป็นคนทำ? หากคุณระบุไม่ได้ แสดงว่าคุณยังมีช่องว่างที่ต้องปิด
Source: https://dev.to/brennhill/when-your-agent-does-something-bad-can-you-tell-which-agent-did-it-37a2
Optional learning community: https://t.me/GyaanSetuAi
