المستوى: مبتدئ
AI Agents للمبتدئ: ايه الفرق بين Chatbot و Agent وامتى تستخدم انهي
لو سألت ChatGPT "ابعتلي إيميل لعميل فلان فيه الفاتورة الجديدة"، هيقولك "آسف، مش قادر أبعت emails". لو نفس السؤال للـ AI Agent، هيفتح Gmail بنفسه، يكتب الإيميل، يضيف الـ attachment، ويبعت. الفرق مش في الذكاء، الفرق في الصلاحيات والقدرة على التنفيذ.
المشكلة باختصار
أغلب الناس بتستخدم Claude و ChatGPT كـ chatbot — تسأل، يرد، خلاص. ده بيخلّيك تخسر 80% من قيمة الموديل. الـ Agent بيشتغل لوحده، يقرر يستخدم انهي tool، يجمع المعلومات، ويرجع بالنتيجة النهائية. الفرق العملي: chatbot بيوفّرلك المعرفة، agent بيوفرلك التنفيذ.
تخيّل المشهد ده الأول (مثال للمبتدئ)
تخيل عندك مساعدين في المكتب. الأول اسمه "أحمد" بيرد على التليفون بس. لو سألته "ايه آخر سعر للأرز؟" بيفتحلك الكاتالوج ويقرا. لو طلبت منه "اطلب لي 100 شوال أرز"، بيقولك "اتفضل رقم المورد، اتصل بنفسك". ده الـ chatbot.
المساعد التاني اسمها "سارة". لو طلبت "اطلب 100 شوال أرز"، بتفتح نظام المشتريات، تحدد المورد الأرخص اللي عنده مخزون، تبعت الـ purchase order، تأكد الاستلام، وترجعلك تقولك "تمام، الطلب في الطريق وسعر الشوال 240 جنيه". دي الـ agent.
الفرق مش إن سارة "أذكى" من أحمد. الفرق إنها عندها صلاحيات تستخدم أدوات، وعندها قدرة تخطّط خطوة بخطوة بدل ما تستنّى تعليمات مفصّلة لكل خطوة.
التعريف العلمي الدقيق
الـ AI Agent هو نظام بياخد قرارات تلقائية في loop ثلاثي الخطوات:
- Perceive: الموديل يفهم الـ goal والـ context الحالي.
- Plan and Decide: الموديل يختار انهي tool يستخدم وبأي parameters.
- Act and Observe: التنفيذ بيرجع نتيجة، والـ loop بيرجع للخطوة 1 مع الـ context الجديد.
الـ loop دي بتفضل شغالة لحد ما الموديل يقول "خلاص، عندي الإجابة النهائية" أو لحد ما يضرب في حد أقصى للخطوات (max_iterations). البنية دي اسمها ReAct pattern (Reasoning + Acting) من ورقة Yao et al. ICLR 2023، وهي الأساس اللي اتبنى عليه أغلب الـ agent frameworks الحديثة زي LangGraph و CrewAI.
كود شغّال على Anthropic SDK
from anthropic import Anthropic
client = Anthropic()
tools = [{
"name": "get_weather",
"description": "يرجّع درجة الحرارة الحالية لمدينة معينة",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}]
def execute_tool(name, args):
if name == "get_weather":
return {"temp_c": 32, "city": args["city"]}
def run_agent(user_message, max_steps=5):
messages = [{"role": "user", "content": user_message}]
for step in range(max_steps):
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages,
)
if response.stop_reason == "end_turn":
return response.content[-1].text
tool_use = next(b for b in response.content if b.type == "tool_use")
result = execute_tool(tool_use.name, tool_use.input)
messages.append({"role": "assistant", "content": response.content})
messages.append({"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool_use.id,
"content": str(result),
}]})
return "وصلت للحد الأقصى من الخطوات بدون إجابة نهائية"
print(run_agent("الجو إيه في القاهرة دلوقتي؟"))