لو 2023 كانت سنة الشات بوت، فـ 2026 هي سنة الـ Agents. الفرق جوهري: الشات بوت بيرد على كلامك وخلاص، لكن الـ Agent بيفكر، بياخد قرار، بيستخدم أدوات، وبينفّذ مهمة كاملة — من غير ما توقف جنبه خطوة بخطوة.
الفرق ببساطة
| شات بوت | Agent | |
|---|---|---|
| الدور | يجاوب على سؤال | ينفّذ مهمة |
| الأدوات | لا يوجد | بيستدعي دوال وAPIs |
| الخطوات | رد واحد | حلقة: فكّر → نفّذ → راجع → كرّر |
| مثال | «إيه عاصمة فرنسا؟» | «ابحث عن سعر الدولار النهاردة واحسب لي تكلفة 500 ألف توكن بالجنيه» |
السحر كله في حاجة اسمها Tool Calling (استدعاء الأدوات): انت بتعرّف للموديل دوال متاحة، وهو بيقرر لوحده يستخدم أنهي واحدة وبأي مدخلات.
ابنِ أول Agent — كود كامل شغّال
مثال عملي: Agent بسيط عنده أداتين (حساب رياضي + «قاعدة بيانات» أسعار)، وبيقرر لوحده يستخدم إيه:
import json
from openai import OpenAI
client = OpenAI(api_key="sk-...", base_url="https://soal.help/api/v1")
# 1) الأدوات المتاحة للـ Agent
def calculate(expression: str) -> str:
return str(eval(expression, {"__builtins__": {}})) # مثال تعليمي فقط
def get_price(product: str) -> str:
prices = {"لابتوب": 45000, "موبايل": 15000, "سماعة": 800}
return f"{prices.get(product, 'غير موجود')} جنيه"
TOOLS = [
{"type": "function", "function": {
"name": "calculate", "description": "حساب تعبير رياضي",
"parameters": {"type": "object", "properties": {
"expression": {"type": "string"}}, "required": ["expression"]}}},
{"type": "function", "function": {
"name": "get_price", "description": "سعر منتج من المتجر",
"parameters": {"type": "object", "properties": {
"product": {"type": "string"}}, "required": ["product"]}}},
]
FUNCS = {"calculate": calculate, "get_price": get_price}
# 2) حلقة الـ Agent: فكّر → استخدم أداة → كرّر لحد الإجابة النهائية
messages = [{"role": "user", "content": "عايز أشتري 3 موبايلات وسماعتين — هيكلفوا كام؟"}]
while True:
resp = client.chat.completions.create(
model="gpt-5.4", messages=messages, tools=TOOLS)
msg = resp.choices[0].message
if not msg.tool_calls: # خلّص — دي الإجابة النهائية
print(msg.content)
break
messages.append(msg)
for call in msg.tool_calls: # نفّذ اللي الموديل طلبه
args = json.loads(call.function.arguments)
result = FUNCS[call.function.name](**args)
messages.append({"role": "tool", "tool_call_id": call.id,
"content": result})
شغّل الكود وهتلاقي الموديل بيستدعي get_price مرتين، وبعدين calculate، وبعدين بيرد عليك بالإجمالي — من غير ما تقوله الخطوات. ده جوهر الـ Agent.
أفكار Agents تقدر تبنيها (وتبيعها)
- Agent خدمة عملاء: بيبص في حالة الأوردر من الداتابيز وبيرد على العميل فعليًا — مش بيقول «تواصل مع الدعم». (كمّل بعدها مع شرح بوت واتساب وتليجرام).
- Agent محتوى: بيبحث عن تريندات، بيكتب بوست، وبيجهّز الصورة بموديل زي gpt-image-2 — سلسلة كاملة أوتوماتيك.
- Agent تقارير: كل يوم الصبح بيلم أرقام مبيعاتك ويبعت ملخص ذكي على تليجرام.
- Agent برمجة: ده اللي أدوات زي Claude Code بتعمله جوّا — اقرأ عن الـ Vibe Coding.
نصائح من أرض الواقع
- ابدأ بأداة واحدة. Agent بأداتين شغالين أحسن من عشرة نظري.
- حط حد أقصى للحلقة (مثلاً 10 لفّات) عشان الـ Agent ميلفّش للأبد ويحرق رصيدك.
- اختار الموديل بذكاء: الموديلات المتوسطة زي gpt-5.4 أو claude-sonnet-5-5 ممتازة في الـ tool calling وأرخص بكتير من موديلات القمة. قارن بالجنيه.
- سجّل كل خطوة: في الإنتاج لازم تعرف الـ Agent عمل إيه وليه — تابع استهلاكك من صفحة الاستخدام.
- الأمان أولًا: ماتديش الـ Agent أداة بتمسح أو بتدفع من غير خطوة تأكيد بشري.
أسئلة بتتكرر
محتاج فريم وورك زي LangChain؟ في البداية لا — الحلقة اللي فوق دي هي 80% من الفكرة. الفريم ووركس بتفيد لما الـ Agents تتعقد (ذاكرة، أكتر من Agent، مراقبة).
إيه علاقة MCP بالموضوع؟ الـ MCP هو المعيار الجديد لتوصيل الأدوات بالموديلات — اقرأ شرح MCP بالعربي.
أجرب بكام؟ الكود اللي فوق بيكلف أجزاء من الجنيه في كل تشغيلة. سجّل، اشحن بالجنيه، وجرّب في دقايق.