الدرس 8 من 9
الـ Agents و Tool Use
الخطوة من chatbot بيرد، لـ agent بينفذ.
الموديل لوحده محبوس في النص
Claude مايقدرش يعرف حالة أوردر رقم ١٠٢٤ في السيستم بتاعك، ولا يعمل حجز، ولا يحسب بدقة على داتا حقيقية. بس لو اديته أدوات (tools)، يقدر يقرر إمتى يستخدمها، وانت كودك اللي بينفذها فعلاً.
الدورة
- بتبعت للموديل السؤال ووصف الأدوات المتاحة (اسمها، بتعمل إيه، ومحتاجة مدخلات إيه).
- الموديل يقرر: يرد على طول، ولا يطلب يستخدم أداة بمدخلات معينة.
- كودك ينفذ الأداة (استعلام من قاعدة بيانات، API، حساب) ويرجّع النتيجة للموديل.
- الموديل يكمل: يستخدم أداة تانية أو يكتب الرد النهائي.
from dotenv import load_dotenv import anthropic load_dotenv() client = anthropic.Anthropic() # ---- your real business logic (a fake DB here) ---- ORDERS = {"1024": {"status": "out for delivery", "eta": "today before 9 PM"}, "1031": {"status": "processing", "eta": "in 2 days"}} def get_order_status(order_id): order = ORDERS.get(order_id) return str(order) if order else "Order not found" # ---- describe the tool to the model ---- tools = [{ "name": "get_order_status", "description": "Get the current status and delivery estimate of a customer order.", "input_schema": { "type": "object", "properties": {"order_id": {"type": "string", "description": "The order number"}}, "required": ["order_id"], }, }] messages = [{"role": "user", "content": "الأوردر رقم 1024 هيوصل إمتى؟"}] while True: reply = client.messages.create(model="claude-sonnet-5", max_tokens=500, tools=tools, messages=messages) if reply.stop_reason != "tool_use": # model is done -> final answer print(reply.content[0].text) break messages.append({"role": "assistant", "content": reply.content}) results = [] for block in reply.content: if block.type == "tool_use": # the model asked to use a tool output = get_order_status(**block.input) results.append({"type": "tool_result", "tool_use_id": block.id, "content": output}) messages.append({"role": "user", "content": results})
لاحظ إن الموديل مابينفذش حاجة بنفسه. هو بيطلب، وكودك هو اللي بيقرر ينفذ ولا لأ. وده مهم جداً للأمان: انت اللي ماسك الصلاحيات.
⚠ خلي بالك من الأدوات الخطيرةأداة بتقرا حالة أوردر حاجة، وأداة بتلغي أوردر أو بتحول فلوس حاجة تانية خالص. الأدوات اللي بتغيّر حاجات لازم يبقى فيها تأكيد من اليوزر، وحدود واضحة، و log لكل عملية. وأي نص جاي من برا (إيميل، صفحة ويب) ممكن يكون فيه تعليمات مدسوسة للموديل، فمتسيبهوش يعمل حاجة خطيرة بناءً عليه من غير مراجعة.
الـ Frameworks
| الأداة | بتستخدمها لإيه |
|---|---|
| LangChain / LangGraph | بناء agents وسلاسل خطوات معقدة، ومعاها integrations كتير |
| LlamaIndex | متخصصة في RAG: تحميل المستندات وتقطيعها والبحث فيها |
| MCP | بروتوكول مفتوح بيخلي أي أداة أو مصدر بيانات يتوصل بأي موديل بطريقة موحدة |
💡 افهم قبل ما تستخدم frameworkالـ loop اللي فوق ده هو قلب أي agent. لو فهمته، أي framework هيبقى مجرد اختصارات فوقه، ولما حاجة تبوظ هتعرف تصلحها. ناس كتير بتبدأ بـ framework ومش فاهمة هو بيعمل إيه من جوه.