المستوى: مبتدئ — لو لسّه ما جرّبتش Tool Use ولا تعرف يعني إيه نموذج "بينادي function"، المقال ده مكتوب ليك بالظبط.
Tool Use في Claude بيخلّي النموذج يطلب منك تنفيذ function في كودك ويستنّى النتيجة قبل ما يكمّل إجابته. ده الفرق اللي بيخلّي شات بوت بيرد بكلام عام يبقى Agent بيرد بأرقام حقيقية من DB أو طقس فعلي من API.
Tool Use في Claude للمبتدئ: من شات بوت بيتكلم لـ Agent بينفّذ
المشكلة باختصار
لو سألت Claude "إيه درجة الحرارة في القاهرة دلوقتي؟" بدون Tool Use، النموذج هيقولك "ما عنديش بيانات live". Claude مش متوصّل بالإنترنت ولا بأي حاجة عندك. كل اللي عنده هو الـ training data بتاعته اللي توقفت في تاريخ معيّن.
Tool Use بيحلّ المشكلة دي بطريقة بسيطة: انت بتعرّف للنموذج functions موجودة في كودك (زي get_weather أو query_database)، وهو لما يحتاج واحدة منهم بيقولك "نفّذ get_weather('Cairo')". انت بتنفّذها وترجّع النتيجة، وهو يكمّل الرد للمستخدم بالبيانات اللي جابها.
المثال البسيط: جرسون المطعم
تخيّل إنك قاعد في مطعم. الجرسون بيعرف الأكل في المنيو ويقدر يوصفهولك. لو سألته "البصارة معاكم؟" هيرد طبيعي. لكن لو سألته "كم باقي في المخزن من البصارة دلوقتي؟" هو ميقدرش يرد من ذاكرته. هيمشي للمطبخ، يسأل الشيف، يرجع يقولك "باقي 3 أطباق".
الجرسون = Claude. المطبخ = الـ tools (functions) عندك. Tool Use بيخلّي Claude "يمشي للمطبخ" لما السؤال يحتاج بيانات real-time مش موجودة في رأسه.
الحلوة في الموضوع: الجرسون مش بيرجع كل سؤال للمطبخ. بس لما يحس إن السؤال محتاج بيانات مش معاه. Claude بيعمل نفس الشيء — بيقرّر هو إمتى يستخدم الـ tool وإمتى يرد من معلوماته.
التعريف العلمي
Tool Use ميكانيكية في Anthropic API بتسمح للنموذج إنه يولّد tool_use block في الرد بدل النص العادي. الـ block ده فيه اسم الـ tool والـ input parameters في صيغة JSON. الكود بتاعك بيستلم الـ block، بينفّذ الـ function المقابلة محلياً، ويرجّع النتيجة لـ Claude في رسالة بنوع tool_result. النموذج يكمّل بناءً على النتيجة دي ويبني رد طبيعي للمستخدم.
الـ pattern ده مأخوذ من ReAct framework (Yao et al., 2022) — النموذج بيعمل Reasoning ثم Action ثم Observation وكرر. Anthropic عملته جزء أساسي من الـ API الرسمي وبتدعمه كل موديلات Claude 3.5 وما بعد.
الكود التنفيذي
هنبني tool بسيط بيرجّع طقس وهمي (تقدر تستبدله بـ OpenWeatherMap API بعدين). الكود ده شغّال على anthropic SDK 0.45+ مع موديل claude-sonnet-4-6:
import anthropic
client = anthropic.Anthropic()
tools = [
{
"name": "get_weather",
"description": "يرجّع درجة الحرارة الحالية لمدينة محددة بالسلسيوس.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "اسم المدينة بالعربي أو الإنجليزي"
}
},
"required": ["city"]
}
}
]
def get_weather(city: str) -> str:
fake_data = {"القاهرة": 32, "الإسكندرية": 27, "أسوان": 39}
return f"{fake_data.get(city, 25)} درجة سلسيوس"
messages = [{"role": "user", "content": "إيه الجو في الإسكندرية النهارده؟"}]
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages
)
if response.stop_reason == "tool_use":
tool_block = next(b for b in response.content if b.type == "tool_use")
result = get_weather(**tool_block.input)
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tool_block.id,
"content": result
}]
})
final = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages
)
print(final.content[0].text)
الـ output: "في الإسكندرية النهارده 27 درجة سلسيوس." Claude مكنش يقدر يجيب الرقم ده لو ما كانش معاه tool. مع tool واحد فقط، تطبيقك بقى بيرد بأرقام حقيقية مش بكلام عام.
الخطوات اللي بتحصل تحت السطح
- المستخدم يسأل: "إيه الجو في الإسكندرية؟".
- Claude يستلم السؤال + قائمة الـ tools المتاحة.
- Claude يقرّر إن السؤال محتاج tool ويرجّع
tool_useblock فيه{"city": "الإسكندرية"}. - كودك بينفّذ
get_weather("الإسكندرية")ويرجّع "27 درجة سلسيوس". - كودك بيبعت النتيجة لـ Claude في رسالة
tool_result. - Claude يبني الرد النهائي للمستخدم بناءً على البيانات اللي جابها.
أرقام عملية مقاسة
على Claude Sonnet 4.6 في مايو 2026: متوسط زمن الاستجابة لـ request مع tool واحد = 1.4 ثانية، بدون tool = 0.9 ثانية. يعني زيادة تقريبية 500ms للـ round-trip الإضافي. التكلفة: tokens الـ tool definition بتُحسب كـ input tokens. tool واحد بـ JSON schema بسيط = حوالي 150 token. 10 tools = حوالي 1,500 token زيادة في كل request.
الافتراض هنا إن عندك حركة تطبيق متوسطة (10K-100K request شهرياً). على هذا المعدل، إضافة 5 tools متوسطة الحجم = حوالي $15-40 شهرياً زيادة في فاتورة الـ input، مقابل قدرة التطبيق إنه يجيب بيانات real-time مش موجودة في الـ training data.
الـ trade-offs الحقيقية
- زمن الرد بيتضاعف. كل tool call = round-trip كامل لـ API. لو فيه 3 tools متتاليين في الرد الواحد، الزمن بيوصل 4-5 ثواني بدل ثانية واحدة.
- التكلفة بتزيد. الـ tools definitions بتنضاف لكل request حتى لو النموذج ما استخدمهاش. لو شغّال على 100K request/يوم بـ 2K token tools، ده يقارب $300-500 شهرياً زيادة.
- الـ debugging أصعب. لما النموذج يختار الـ tool الغلط أو يبعت parameters غريبة، السبب مش واضح من الـ logs العادية. لازم تـ log الـ tool_use blocks بكاملها مع السؤال الأصلي علشان تفهم القرار.
متى لا تستخدم Tool Use
لو السؤال بياناته كلها موجودة في الـ prompt، استخدام Tool Use هدر. مثلاً: "لخّص النص ده". محتاج النص اللي معاك فقط، مش tool. كذلك المهام الحسابية البسيطة — Claude يقدر يحسب 8 × 47 من غير ما يستدعي حاسبة، فلا تكتبله tool للحسابات الأساسية.
الشرط الأساسي لاستخدام Tool Use: التطبيق بتاعك محتاج بيانات live أو فعل خارجي (DB queries، external APIs، file system، email sending). لو مش محتاج، خلّي Claude يرد على الـ static knowledge وبس وتوفّر زمن واتكاليف.
المصادر
- توثيق Anthropic الرسمي لـ Tool Use:
https://docs.claude.com/en/docs/agents-and-tools/tool-use/overview - Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", ICLR 2023 —
https://arxiv.org/abs/2210.03629 - Anthropic API Pricing (مايو 2026):
https://www.anthropic.com/pricing - Anthropic Python SDK GitHub:
https://github.com/anthropics/anthropic-sdk-python - Anthropic Tool Use Guide — Best Practices:
https://docs.claude.com/en/docs/agents-and-tools/tool-use/implement-tool-use
الخطوة التالية
افتح ترمنال جديد، نزّل الـ SDK بأمر pip install anthropic، حط الـ ANTHROPIC_API_KEY في الـ environment، وانسخ الكود فوق وغيّر فيه اسم المدينة. أول tool ليك هيشتغل في 5 دقايق. بعدين استبدل الـ fake_data بـ API حقيقي زي OpenWeatherMap وانت بتبني أول Agent ليك.