Claude API + Python, מהמפתח הראשון לאפליקציה עובדת

📚 פיתוח עם Claude, Claude Code & API ⏱️ 10 דק׳ 🎓 בינוני ✓ חינם לגמרי
Claude API + Python, מהמפתח הראשון לאפליקציה עובדת

למה Python + Claude API הם הצמד שכל מפתח צריך ללמוד ב-2026

בסוף 2025 Anthropic עדכנה את ה-Python SDK לגרסה שמטפלת אוטומטית ב-rate limits, מספרת טוקנים לפני שליחה, ומאפשרת בניית tool agents בעשרות שורות קוד. אם עד עכשיו נמנעת מה-API כי נראה מסובך, זה השיעור שיוכיח לך שלא.

ב-30 דקות תצא עם: API key מוגדר נכון, קריאה ראשונה עובדת, streaming, טיפול בשגיאות, וchatbot בעברית שרץ ב-terminal. אין קסמים, רק כלים שמפתחים ישראלים משתמשים בהם מדי יום בסטארטאפים בתל אביב ובשוק ת"א.

שלב 1, API Key: ההגדרה שקובעת הכל

לפני שורת קוד, API key. מגיע מ-console.anthropic.com תחת Settings > API Keys. שים לב: זה לא מפתח Claude.ai הרגיל, זה מפתח API נפרד שדורש חיוב.

כלל מספר 1 שלא משתנה: לעולם לא מכניסים את ה-key ישירות בקוד. קוד ב-GitHub = key גלוי לכולם. Anthropic עוקבת אחרי keys חשופים ומבטלת אותם אוטומטית, אבל הנזק הכספי כבר נגרם. הדרך הנכונה:

# אפשרות 1: משתנה סביבה (מומלץ)
export ANTHROPIC_API_KEY="sk-ant-..."

# אפשרות 2: קובץ .env (נוח לפיתוח)
# התקן: pip install python-dotenv
# קובץ .env:
ANTHROPIC_API_KEY=sk-ant-...

# קובץ Python:
from dotenv import load_dotenv
load_dotenv()  # טוען .env אוטומטית

# חשוב: הוסף .env ל-.gitignore!
echo ".env" >> .gitignore

ה-SDK קורא את ANTHROPIC_API_KEY אוטומטית, לא צריך להעביר אותו ידנית לconstructor.

שלב 2, הקריאה הראשונה: Messages API

התקנה: pip install anthropic. מינימום Python 3.9. ואז, הקריאה הפשוטה ביותר:

import anthropic

client = anthropic.Anthropic()  # קורא ANTHROPIC_API_KEY אוטומטית

message = client.messages.create(
    model="claude-opus-4-7",  # מודל הדגל, אפריל 2026
    max_tokens=1024,          # חובה! בלעדיו, שגיאת 422
    messages=[
        {"role": "user", "content": "שלום! תסביר לי מה זה REST API במשפט אחד."}
    ]
)

print(message.content[0].text)

שני דברים שתופסים מפתחים שבאים מ-OpenAI: (1) max_tokens הוא שדה חובה, בלעדיו תקבל שגיאה 422. (2) system הוא פרמטר עצמאי, לא הודעה ב-messages array.

פרמטר חובה? מה הוא עושה ערך מומלץ
model כן איזה מודל לרוץ claude-opus-4-7
max_tokens כן תקרת טוקנים בתשובה 512–2048 לפי צורך
system לא System prompt, הוראות קבועות תמיד להגדיר בproduction
temperature לא יצירתיות: 0=עקבי, 1=יצירתי 0 לקוד/חילוץ, 0.7 לכתיבה
messages כן היסטוריית שיחה user/assistant מגבילים ל-20 הודעות אחרונות

שלב 3, Streaming: התגובה מגיעה בזמן אמת

בלי streaming, האפליקציה קפואה עד שClaude מסיים לחשוב. עם streaming, המשתמש רואה טקסט שמגיע בזמן אמת, כמו ב-Claude.ai. ה-SDK מספק שתי שיטות:

# שיטה 1: .messages.stream(), context manager עם helpers
with client.messages.stream(
    model="claude-opus-4-7",
    max_tokens=1024,
    system="אתה עוזר טכני. ענה בעברית, קצר ומדויק.",
    messages=[{"role": "user", "content": "מה ההבדל בין list ל-tuple בPython?"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    print()  # שורה חדשה בסוף
    final = stream.get_final_message()  # גישה לusage, stop_reason
    print(f"\nטוקנים: {final.usage.input_tokens} in, {final.usage.output_tokens} out")

הנה טיפ שרוב המדריכים מחמיצים: stream.get_final_message() מחזיר את המסמך המלא כולל usage, כך תוכל לעקוב אחרי עלויות בזמן אמת.

שלב 4, טיפול בשגיאות: מה ה-SDK עושה בשבילך ומה עלייך

חדשות טובות: מ-2025, ה-SDK מבצע 2 retries אוטומטיים על שגיאות 429 (rate limit), 408, 409, ו-5xx עם exponential backoff. אין צורך לכתוב retry loop ידני בסיסי. מה שצריך לטפל בו:

import anthropic

client = anthropic.Anthropic(
    max_retries=3,  # ברירת מחדל: 2. אפשר להגדיל לproduction
    timeout=30.0    # 30 שניות (ברירת מחדל: 10 דקות!)
)

try:
    message = client.messages.create(
        model="claude-opus-4-7",
        max_tokens=512,
        messages=[{"role": "user", "content": "שאלה כלשהי"}]
    )
    print(message.content[0].text)
    print(f"Request ID: {message._request_id}")  # לדיבוג עם Anthropic support

except anthropic.AuthenticationError:
    print("API key שגוי או פג תוקף, בדוק console.anthropic.com")
except anthropic.RateLimitError:
    print("Rate limit, ה-SDK ניסה שוב אבל לא הצליח. שדרג tier")
except anthropic.APIConnectionError as e:
    print(f"בעיית רשת: {e}")
except anthropic.APIStatusError as e:
    print(f"שגיאת API {e.status_code}: {e.message}")

ה-_request_id הוא כלי זהב: כל תגובה מ-Claude מקבלת מזהה ייחודי. שמור אותו ב-logs, כשיש באג, Anthropic support יכולה לעקוב אחרי הבקשה המדויקת.

client = anthropic.Anthropic() # timeout = 10 דקות! response = client.messages.create( model="claude-opus-4-7", max_tokens=4096, # בזבוז! לשאלות קצרות messages=[{"role": "user", "content": user_input}] # אין system = Claude לא יודע מי הוא ומה מותר לו )
client = anthropic.Anthropic( max_retries=3, timeout=20.0 # 20 שניות, ריאלי לproduction ) response = client.messages.create( model="claude-opus-4-7", max_tokens=512, # מותאם לצורך, חוסך כסף ומהיר יותר temperature=0.2, # עקבי לשירות לקוחות system="אתה נציג שירות לקוחות של MedTech ישראלית. ענה בעברית, מקצועי וקצר.", messages=history[-20:] # רק 20 הודעות אחרונות, לא כל ההיסטוריה )

שלב 5, Chatbot עובד: קוד שלם עם כל הטכניקות

הנה chatbot CLI שלם שמשלב system prompt בעברית, היסטוריה מנוהלת, וstreaming, זה בדיוק מה שחברות SaaS ישראליות משתמשות בו כבסיס לbots פנימיים:

import anthropic

client = anthropic.Anthropic(max_retries=3, timeout=30.0)
history = []
MAX_HISTORY = 20  # שומרים רק 20 הודעות אחרונות

SYSTEM = """אתה עוזר אישי חכם. כללים:
- ענה תמיד בעברית
- היה ממוקד וישיר
- אם לא בטוח, אמור זאת"""

print("Chatbot מוכן. הקלד 'יציאה' לסיום.")

while True:
    user_input = input("\nאתה: ").strip()
    if not user_input or user_input in ["יציאה", "exit", "quit"]:
        break

    history.append({"role": "user", "content": user_input})

    print("Claude: ", end="", flush=True)
    with client.messages.stream(
        model="claude-opus-4-7",
        max_tokens=1024,
        system=SYSTEM,
        messages=history[-MAX_HISTORY:]
    ) as stream:
        reply = ""
        for text in stream.text_stream:
            print(text, end="", flush=True)
            reply += text
    print()

    history.append({"role": "assistant", "content": reply})

ספירת טוקנים לפני שליחה, פיצ'ר חדש שחוסך כסף

מ-2025, ה-SDK מאפשר לספור טוקנים לפני שליחת הבקשה. שימושי מאוד לפני בקשות יקרות עם מסמכים גדולים:

# ספור טוקנים לפני שליחה
count = client.messages.count_tokens(
    model="claude-opus-4-7",
    system="System prompt שלך",
    messages=[{"role": "user", "content": long_document}]
)
print(f"הבקשה תעלה {count.input_tokens} input tokens")

# בדיקה לפני שולחים בקשה יקרה:
if count.input_tokens > 50000:
    print("אזהרה: בקשה גדולה! שקול לפצל למקטעים.")
else:
    # שלח
    response = client.messages.create(...)

דוגמה ישראלית: חברת FinTech בת"א שמנתחת חוזי לקוחות עם Claude, לפני כל ניתוח בודקים כמה טוקנים יעלה המסמך. חוזה של 40 עמוד = ~35,000 טוקנים. חוזה של 200 עמוד = ~170,000 טוקנים. הספירה מראש מונעת הפתעות בחשבונית.

שגיאות נפוצות שכדאי להימנע מהן

Claude ממלא ערך ברירת מחדל של 1024
שגיאת 422, הפרמטר חובה ב-Claude API
Claude מגיב ללא הגבלת אורך
הקוד ב-Python קורס מיד
שומר היסטוריית שיחה בין קריאות
בוחר אוטומטית את המודל הזול ביותר
מבצע retry אוטומטי על שגיאות rate limit ו-5xx
מגביל אוטומטית prompt ארוך מדי
Claude מאט בכוונה שיחות ארוכות
הזיכרון של השרת מתמלא
כל בקשה שולחת את כל היסטוריית השיחה מחדש
Claude עובר אוטומטית למודל חזק יותר
לספור כמה tokens השתמשת
לדעת איזה גרסת מודל רצה
מזהה לדיבוג, Anthropic support יכולה לאתר את הבקשה המדויקת
למדוד כמה זמן לקחה הבקשה
5000: print(f'אזהרה: בקשה גדולה, {count.input_tokens} tokens') try: response = client.messages.create( model='claude-opus-4-7', max_tokens=512, temperature=0, system=system, messages=messages ) return response.content[0].text except anthropic.APIStatusError as e: return f'שגיאת API {e.status_code}: {e.message}'">

סיכום: מה לקחת מהשיעור הזה

רוצה ללמוד עם מעקב התקדמות, קוויזים ותעודה?

כל 130 השיעורים פתוחים בחינם, כולל נגן אינטראקטיבי, שמירת התקדמות ותעודה דיגיטלית בסיום.