שכבת הבקרה הסודית
פרומפט הוא בקשה, הוק הוא חוק. למדו על PreToolUse ו-PostToolUse — איך לאכוף כללים קריטיים בצורה דטרמיניסטית.
יש לכם סוכן שמטפל בהחזרים כספיים. אתם כותבים בפרומפט: "אל תאשר החזר מעל 500 דולר." ברוב המקרים — זה יעבוד. אבל "ברוב המקרים" זה לא מספיק כשמדובר בכסף.
פרומפט הוא הסתברותי (Probabilistic). הוא בקשה. יש סיכוי — קטן, אבל קיים — שהמודל יתעלם ממנו. ובבחינה של Claude Certified Architect — התשובה "נשים את זה בפרומפט" כמעט תמיד טעות כשמדובר בכללים קריטיים.
Hooks הם פקודות שרצות בנקודות מסוימות בלולאה של הסוכן. הם דטרמיניסטיים (Deterministic) — תמיד רצים, תמיד אוכפים, בלי "שיקול דעת" של המודל.
שני Hooks מרכזיים שצריך לדעת לבחינה:
# PreToolUse Hook — blocks refunds over $500
def pre_tool_use_hook(tool_name: str, tool_input: dict) -> dict:
"""Runs BEFORE the tool is called. Can block the call."""
if tool_name == "process_refund":
amount = tool_input.get("amount", 0)
if amount > 500:
return {
"decision": "deny",
"message": f"Refund of ${amount} exceeds $500 limit. "
f"Escalate to human supervisor."
}
return {"decision": "allow"}
# PostToolUse Hook — logs and normalizes after execution
def post_tool_use_hook(tool_name: str, tool_output: dict) -> dict:
"""Runs AFTER the tool returns. Can modify the result."""
# Log every tool call for audit
log_to_audit_trail(tool_name, tool_output)
# Normalize date formats before model sees the result
if "date" in tool_output:
tool_output["date"] = normalize_date(tool_output["date"])
return tool_outputPreToolUse חוסם לפני שזה קורה, PostToolUse בודק ומנרמל אחרי
"אתם בונים סוכן שירות לקוחות עם גישה לכלי process_refund. איך תוודאו שהסוכן לא יאשר החזר מעל 500 דולר?"
💡 טיפ: התשובה — תמיד ב. כי פרומפט הוא הסתברותי, Hook הוא דטרמיניסטי. בבחינה, כשרואים שאלה על אכיפת כללים קריטיים (כסף, אבטחה, רגולציה) — התשובה היא תמיד אכיפה בקוד, לא בפרומפט.
"פרומפט הוא בקשה. הוק הוא חוק. כשמדובר בכסף של לקוחות — אין מקום ל'ברוב המקרים'."
💡 טיפ: בפרק הבא (יום 6) נלמד על פירוק משימות (Task Decomposition) — איך לפרק בעיות גדולות לניצחונות קטנים.