ดักการเรียก tool ด้วย hook เพื่อบังคับนโยบาย
แนวคิด
นอกจากแปลงผลลัพธ์ hook ยังดักการเรียก tool "ขาออก" เพื่อบังคับกฎเชิงนโยบายได้ด้วย รูปแบบนี้ใช้ PreToolUse hook ซึ่งทำงานก่อน tool จะรัน มันเห็นชื่อ tool กับอาร์กิวเมนต์ แล้วตัดสินได้ว่าจะปล่อยผ่านหรือบล็อก
การบล็อกทำผ่านการคืน permissionDecision: "deny" พร้อม permissionDecisionReason ที่อธิบายเหตุผลให้โมเดลรู้ว่าทำไมถูกปฏิเสธ เพื่อมันจะได้ไม่ลองซ้ำและปรับวิธี ตัวอย่างคลาสสิกคือกฎ "ห้ามคืนเงินเกิน 500 ดอลลาร์โดยอัตโนมัติ" ถ้า agent พยายามเรียก tool คืนเงินเกินเพดาน hook จะบล็อกและเปลี่ยนเส้นทางไปสู่เวิร์กโฟลว์อื่น เช่น การยกให้คนพิจารณา
ความต่างที่ต้องเข้าใจคือ hook ให้การรับประกันเชิงกำหนดแน่ ขณะที่ prompt ให้แค่การทำตามเชิงความน่าจะเป็น ถ้ากฎธุรกิจต้องการการปฏิบัติตามที่การันตีได้ hook คือคำตอบ ไม่ใช่การเขียนย้ำใน system prompt
ทำไมสำคัญ
การเลือก hook เหนือ prompt เมื่อกฎต้องการการปฏิบัติตามที่การันตีได้ เป็นหลักที่ป้องกันความเสียหายจริง prompt ที่เขียนว่า "อย่าคืนเงินเกิน 500" จะได้ผลส่วนใหญ่ แต่มีวันที่โมเดลพลาด และถ้าวันนั้นคือธุรกรรมจริง เงินก็ออกไปแล้ว hook ที่บล็อกเชิงโปรแกรมไม่มีวันปล่อยให้เกิดเหตุนั้น เพราะการเรียก tool ถูกหยุดตั้งแต่ก่อนรัน
จุดนี้ต่อยอดจากบทเรื่อง prerequisite gate โดยตรง ทั้งคู่ใช้ PreToolUse แต่มุมต่างกัน gate เน้นบังคับ "ลำดับ" ว่าต้องทำขั้นก่อนหน้าให้ครบก่อน ส่วนการดักนี้เน้นบังคับ "นโยบาย" ว่าค่าอาร์กิวเมนต์ต้องไม่ละเมิดกฎ ทั้งสองเป็นการย้ายความรับผิดชอบที่สำคัญออกจากความน่าจะเป็นของโมเดล มาไว้ในโค้ดที่เราควบคุมได้แน่นอน
หมายเหตุสำคัญ เมื่อมีหลาย hook ตัดสิน deny มีสิทธิ์เหนือกว่าเสมอ ถ้ามี hook ใดคืน deny การเรียก tool จะถูกบล็อกไม่ว่า hook อื่นจะว่าอย่างไร
ตัวอย่าง
async def cap_refunds(input_data, tool_use_id, context):
if input_data["tool_name"] == "process_refund":
amount = input_data["tool_input"].get("amount", 0)
if amount > 500:
return {
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "เกินเพดาน 500 ต้องยกให้คนพิจารณา",
}
}
return {}
เช็คความเข้าใจ
ถ้ากฎธุรกิจต้องการห้ามคืนเงินเกินเพดานแบบการันตีได้ ควรใช้ hook หรือ prompt และเพราะอะไร
เมื่อมีหลาย hook ตัดสินขัดกัน ผลใดมีสิทธิ์เหนือกว่า