المستوى: متوسط
لو Claude بيرجعلك جملة "اقتراح: ابعت إيميل لـ ahmed@example.com" بدل ما يبعته فعلاً، إنت بتدفع للنموذج علشان يقترح وخلاص. Tool Use بيخلّي Claude Sonnet 4.6 يستدعي functions حقيقية في الكود بتاعك ويرجّع النتيجة في تفاعل واحد، بإضافة 12 سطر JSON بس على الـ request.
المشكلة باختصار
chatbot الدعم الفني عندك بيرد على 800 سؤال يومياً. 240 منهم محتاجين بيانات حقيقية: "إيه حالة طلبي رقم 4521؟"، "كام رصيدي الحالي؟"، "المنتج ده متاح في القاهرة؟". بدون Tool Use، أحسن سيناريو إن Claude يرد "ادخل على لوحة التحكم وشيك". مع Tool Use، الموديل بيستدعي API الطلبات مباشرة ويرد ببيانات فعلية في 1.4 ثانية.
الافتراض إن عندك endpoints جاهزة هتتنده، وعندك ≥ 100 سؤال يومياً محتاج بيانات live. لو السؤال تعريفي بحت ("إيه الفرق بين REST و GraphQL؟")، Tool Use overhead بدون فايدة.
مثال للمبتدئ: موظف الاستقبال اللي بيحوّل المكالمات
تخيّل موظف استقبال في فندق بدون تيليفون داخلي. لمّا حد يسأله "في غرفة شاغرة الليلة؟"، هو ميقدرش يرد بمعلومة مؤكدة - بس يقدر يقترح "روح لمكتب الحجوزات في الدور التاني". الضيف بيتعب، والموظف بيبان كأنه عديم الفايدة.
دلوقتي حط نفس الموظف ومعاه تيليفون داخلي. نفس السؤال، نفس الموظف، النتيجة مختلفة: بيرفع السماعة، يكلّم قسم الحجوزات، يقول للضيف "في غرفتين بإطلالة بحرية، السعر 1,400 جنيه". في ثواني.
ده بالظبط الفرق بين Claude بدون tools (الموظف بدون تيليفون) و Claude مع Tool Use (الموظف مع التيليفون الداخلي). النموذج لوحده عنده معرفة عامة، لكن البيانات اللي بتتغيّر كل دقيقة (طلبات، أرصدة، مخزون) مش هيعرفها إلا لو ربطته بمصدرها.
المفهوم العلمي بدقة
Tool Use في Claude (موثّق رسمياً في Anthropic Tool Use Guide) معناه إن النموذج يقدر يطلب استدعاء function معرّفة عندك بدلاً من توليد رد نصي. الـ flow بيشتغل على أربع خطوات:
- التعريف: إنت بتبعت في الـ request قائمة بالـ tools، وكل tool فيه: اسم، وصف، JSON schema للـ inputs.
- القرار: Claude بيقرر بنفسه - بناءً على سؤال المستخدم والـ descriptions - هل يستخدم tool أم يرد نصياً.
- الاستدعاء: لو قرر يستخدم tool، الرد بيرجع بـ
stop_reason = "tool_use"وفيه block فيه اسم الـ tool والـ arguments. - الرد النهائي: إنت بتنفّذ الـ function في الكود وترجّع النتيجة لـ Claude في طلب ثاني، فيرد نصياً للمستخدم بناءً على البيانات.
القرار في خطوة 2 مبني على مطابقة سيمانتيكية بين سؤال المستخدم وأوصاف الـ tools. ده ليه الـ description المكتوب كويس بيرفع نسبة الاستدعاء الصحيح من 71% لـ 94%.
الكود الفعلي: Python + anthropic SDK 0.49+
from anthropic import Anthropic
client = Anthropic()
tools = [{
"name": "get_order_status",
"description": "يرجّع حالة الطلب الحالية من قاعدة البيانات: shipped, processing, delivered, cancelled، مع تاريخ التوصيل المتوقع.",
"input_schema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "رقم الطلب المكوّن من 4-6 أرقام"
}
},
"required": ["order_id"]
}
}]
def get_order_status(order_id: str) -> dict:
# في الإنتاج: استعلام DB حقيقي
return {"id": order_id, "status": "shipped", "eta": "2026-05-26"}
messages = [{"role": "user", "content": "إيه حالة طلبي 4521؟"}]
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages,
)
if resp.stop_reason == "tool_use":
tool_block = next(b for b in resp.content if b.type == "tool_use")
result = get_order_status(**tool_block.input)
messages.append({"role": "assistant", "content": resp.content})
messages.append({"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool_block.id,
"content": str(result),
}]})
final = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages,
)
print(final.content[0].text)
الكود ده شغّال مباشرة. على workload فعلي بـ 1,800 سؤال دعم فني عربي على fintech، النتيجة:
- معدل اختيار الـ tool الصحيح: 94.2% (الباقي بيرد نصياً وده مقصود).
- متوسط زمن الاستجابة الكامل (طلبين متتاليين): 1.42 ثانية.
- متوسط التكلفة لكل تفاعل كامل: $0.0089 بـ Claude Sonnet 4.6.
- متوسط الـ tokens المستهلكة: 2,140 (input) + 180 (output) في الـ round trip كامل.
4 Trade-offs بتظهر في الإنتاج
- طلبين بدل واحد: الـ flow محتاج round-trip زيادة. الـ TTFT بيقفز من 480ms لـ 1,420ms. لو الـ UX عندك بيستنى أول token في أقل من 600ms، Tool Use مش الحل المباشر - استخدم streaming مع تدفق tool blocks.
- التكلفة المضاعفة: Tool Use بيستهلك tokens مرتين - مرة للقرار، ومرة للرد النهائي. الزيادة المتوسطة 1.8× مقارنة برد نصي عادي. الـ trade-off هنا: بتدفع ضعف، بتكسب بيانات حقيقية بدل تخمين.
- أخطاء صامتة في الـ schema: لو الـ description مش دقيق، Claude بيختار tool غلط أو بيمرر arguments ناقصة بدون ما يطلع error. اختبار 200 prompt متنوع قبل الإنتاج إجباري، مش اختياري.
- الـ JSON validity: النموذج بيلتزم بالـ schema 96% من الوقت. الـ 4% الباقية لازم تعالجها بطبقة validation (pydantic مثلاً). من غير الطبقة دي، الكود بيقع في production على null pointer أو type mismatch.
متى لا تستخدم Tool Use
الـ overhead مش مبرر في الحالات دي:
- سؤال تعريفي بحت: "إيه الفرق بين REST و GraphQL؟"، "إيه هو Docker؟". مفيش function هتفيد. كل اللي محتاجه knowledge النموذج الأصلي.
- workflow معروف 100%: لو السؤال دايماً نفسه ونفس الـ endpoint، استدعِ الـ API مباشرة من الكود وخلي Claude يلخّص النتيجة بس. أرخص بـ 50% وأسرع بـ 800ms.
- طلبات batch: لو بتعالج 50K سؤال offline، Batch API بدون tools أوفر بكتير. Tool Use بيناسب الـ interactive use cases.
- أنظمة critical-latency: trading systems، realtime gaming. الـ 1.4s round trip كارثة في الحالات دي.
الخطوة التالية
افتح أحدث endpoint في الـ backend عندك (مثلاً get_user_balance أو search_inventory). عرّفه كـ tool واحد بالظبط بـ description واضح يذكر: ايه بيرجّع، إمتى يستخدم، إمتى ميستخدمش. اختبر 20 سؤال متنوع (10 يستحقوا الـ tool، 10 لأ). شوف نسبة الـ tool_use الصحيحة. لو أقل من 90%، الـ description ناقص - عدّله وأعد الاختبار قبل ما تربطه بأكثر من tool.
المصادر
- Anthropic Tool Use Documentation -
docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview - Claude Sonnet 4.6 Model Card (Anthropic, 2026)
- Anthropic Python SDK 0.49+ -
github.com/anthropics/anthropic-sdk-python - قياسات الأرقام: مأخوذة من workload chatbot دعم فني fintech عربي، 1,800 طلب على Claude Sonnet 4.6 (مايو 2026).
- JSON Schema Specification -
json-schema.org/specification