CCA · Foundations

บังคับเงื่อนไขก่อนหน้าเชิงโปรแกรม ไม่ใช่แค่ prompt

แนวคิด

ในเวิร์กโฟลว์ที่ลำดับสำคัญต่อ business logic เรามีสองวิธีบังคับลำดับ วิธีแรกคือ prompt-based guidance เขียนใน system prompt ว่า "ต้องยืนยันตัวตนลูกค้าก่อนคืนเงินเสมอ" วิธีที่สองคือ programmatic enforcement ใช้ hook หรือ prerequisite gate ที่บล็อกการเรียก tool ปลายทางจนกว่าขั้นก่อนหน้าจะเสร็จ

ความต่างสำคัญคือ prompt เป็นการชี้นำเชิงความน่าจะเป็น โมเดลจะทำตามส่วนใหญ่ แต่มีอัตราพลาดที่ไม่เป็นศูนย์ ส่วน gate เชิงโปรแกรมเป็นการรับประกันเชิงกำหนดแน่ ถ้าเงื่อนไขก่อนหน้ายังไม่ครบ tool ปลายทางจะเรียกไม่ได้เลย ไม่ว่าโมเดลจะพยายามแค่ไหน ใน Agent SDK เราทำ gate นี้ด้วย PreToolUse hook ที่คืน permissionDecision: "deny" เพื่อบล็อกก่อน tool จะรัน

ทำไมสำคัญ

เมื่อความผิดพลาดมีผลทางการเงินหรือความปลอดภัย ความน่าจะเป็นไม่พอ พิจารณ Sample Question ข้อ 1 ข้อมูลจริงพบว่า 12 เปอร์เซ็นต์ของเคส agent ข้าม get_customer ไปเลย แล้วเรียก lookup_order ด้วยแค่ชื่อที่ลูกค้าบอก บางครั้งนำไปสู่การระบุบัญชีผิดและคืนเงินผิด คำถามคือการเปลี่ยนแปลงใดแก้ปัญหาความน่าเชื่อถือนี้ได้ผลที่สุด

คำตอบคือเพิ่ม prerequisite เชิงโปรแกรมที่บล็อก lookup_order และ process_refund จนกว่า get_customer จะคืน customer ID ที่ยืนยันแล้ว การเสริม system prompt ให้ย้ำว่าต้องยืนยันก่อน หรือเพิ่มตัวอย่าง few-shot ล้วนพึ่งการทำตามเชิงความน่าจะเป็นของโมเดล ซึ่งไม่พอเมื่อพลาดแล้วเสียเงินจริง

ส่วนการทำ routing classifier ที่เปิดเฉพาะชุด tool ที่เหมาะกับคำขอ เป็นการแก้เรื่อง "มี tool ให้ใช้ไหม" ไม่ใช่ "ลำดับการเรียก" ซึ่งไม่ตรงกับปัญหาจริงที่เป็นเรื่องลำดับ

ตัวอย่าง

async def require_verified_customer(input_data, tool_use_id, context):
    tool = input_data["tool_name"]
    if tool in ("lookup_order", "process_refund") and not state.verified_customer_id:
        return {
            "hookSpecificOutput": {
                "hookEventName": "PreToolUse",
                "permissionDecision": "deny",
                "permissionDecisionReason": "ต้องเรียก get_customer ให้ยืนยัน customer ID ก่อน",
            }
        }
    return {}  # ผ่าน

hook นี้บล็อกการคืนเงินอย่างแน่นอนจนกว่าจะมี customer ID ที่ยืนยันแล้ว ต่างจาก prompt ที่ได้แค่ขอความร่วมมือ

เช็คความเข้าใจ

เมื่อ business logic ต้องยืนยันตัวตนก่อนทำธุรกรรมการเงิน ทำไม prompt guidance อย่างเดียวจึงไม่พอ

ใน Agent SDK เราทำ prerequisite gate ที่บล็อก process_refund ได้ด้วยกลไกใด

อ่านต่อ