شرح وكلاء الذكاء الاصطناعي: ما هي حلقة إعادة الفعل (ReAct Loop) وكيف تعمل؟
حلقة ReAct تجمع بين التفكير والفعل لتمكين وكلاء الذكاء الاصطناعي من حل المهام المعقدة بشكل متكرر. من خلال التناوب بين الفكر والفعل والملاحظة، يتكيف الوكلاء ديناميكيًا مع المعلومات الجديدة، مما يحسن عملية اتخاذ القرار وإنجاز المهام.
الوسوم
ملخص سريع
حلقة ReAct تجمع بين التفكير والفعل لتمكين وكلاء الذكاء الاصطناعي من حل المهام المعقدة بشكل متكرر. من خلال التناوب بين الفكر والفعل والملاحظة، يتكيف الوكلاء ديناميكيًا مع المعلومات الجديدة، مما يحسن عملية اتخاذ القرار وإنجاز المهام.
شرح وكلاء الذكاء الاصطناعي: ما هي حلقة ReAct وكيف تعمل؟
لقد تطورت وكلاء الذكاء الاصطناعي إلى ما هو أبعد من مجرد روبوتات المحادثة البسيطة. اليوم، لا تقوم أنظمة الذكاء الاصطناعي الأكثر قدرة بتوليد النصوص فحسب، بل إنها تفكر وتتصرف وتتكيف في الوقت الفعلي. في قلب هذا التطور يكمن نمط قوي يُسمى **حلقة ReAct**. إذا كنت تتساءل يومًا كيف يقرر وكيل الذكاء الاصطناعي أي أداة يستخدمها، أو متى يطلب توضيحًا، أو كيف يتعافى من الأخطاء، فغالبًا ما تكون الإجابة هي حلقة ReAct.
في هذه المقالة، سنشرح ما هي حلقة ReAct، ولماذا هي مهمة، وكيف يمكنك بناء وكيل خاص بك باستخدام هذا النمط. سنتضمن خطوات تثبيت ملموسة، وأمثلة على الكود، وسيناريوهات استخدام عملية مستمدة من الأبحاث الرائدة والممارسات الصناعية.
ما هي حلقة ReAct؟
مصطلح "ReAct" هو اختصار لـ **التفكير + التصرف (Reasoning + Acting)**. وقد تم نشر هذا المفهوم من قبل الباحثين الذين سعوا إلى الجمع بين نماذج اللغة الكبيرة (LLMs) والقدرة على اتخاذ إجراءات في بيئة معينة - مثل استدعاء واجهات برمجة التطبيقات (APIs)، أو البحث في قواعد البيانات، أو تنفيذ الأكواد البرمجية.
حلقة ReAct هي عملية دورية يقوم فيها وكيل الذكاء الاصطناعي بما يلي:
1. **يتلقى مطالبة أو ملاحظة** (مثل سؤال مستخدم أو بيانات استشعار). 2. **يفكر في ما يجب فعله بعد ذلك** باستخدام نموذج لغة كبير (LLM). 3. **يتصرف** عن طريق استدعاء أداة، أو اتخاذ قرار، أو توليد رد. 4. **يلاحظ نتيجة** ذلك الإجراء. 5. **يعود إلى التفكير**، مستخدمًا الملاحظة الجديدة كسياق.
تستمر هذه الدورة حتى يحدد الوكيل أنه قد أجاب على طلب المستخدم أو وصل إلى حالة نهائية. تمنح الحلقة الوكلاء طريقة منظمة للتعامل مع المهام متعددة الخطوات، والتعافي من الأخطاء، واستخدام الأدوات الخارجية.
لماذا تعتبر ReAct مهمة؟
نماذج اللغة الكبيرة التقليدية هي نماذج عديمة الحالة - فهي تولد ردًا واحدًا دون أي قدرة على التحقق من الحقائق أو تنفيذ الإجراءات. تعمل حلقات ReAct على تحويل نماذج اللغة الكبيرة إلى وكلاء مستقلين عن طريق:
- **تمكين استخدام الأدوات**: يمكن للوكيل استدعاء محركات البحث أو الآلات الحاسبة أو قواعد البيانات.
- **دعم التصحيح الذاتي**: إذا فشل إجراء ما، يمكن للوكيل تجربة نهج آخر.
- **تحسين الشفافية**: يتم تسجيل كل خطوة، مما يجعل عملية التفكير مرئية.
- **التعامل مع المهام الطويلة**: يمكن للحلقة تشغيل العديد من التكرارات، وربط الإجراءات معًا.
قام قادة الصناعة مثل OpenAI وMicrosoft وAnthropic جميعًا بدمج أنماط مشابهة لـ ReAct في أطر عمل وكلائهم. على سبيل المثال، تعتمد كل من ميزة استدعاء الدوال (function calling) من OpenAI وAutoGen من Microsoft على التفكير والتصرف التكراريين.
كيف تعمل حلقة ReAct عمليًا
دعنا نستعرض مثالًا ملموسًا. افترض أنك تسأل وكيل ذكاء اصطناعي: *"ما كانت درجة الحرارة في لندن في 15 يناير 2024؟"*
بدون حلقة ReAct، قد يخمن نموذج لغة كبير قياسي أو يقول "ليس لدي بيانات في الوقت الفعلي." مع حلقة ReAct، يتبع الوكيل هذه الخطوات:
1. **التفكير**: "أحتاج إلى معرفة درجة الحرارة في لندن في ذلك التاريخ. يمكنني استخدام واجهة برمجة تطبيقات الطقس." 2. **التصرف**: استدعاء واجهة برمجة تطبيقات الطقس مع المعاملات `المدينة: لندن، التاريخ: 2024-01-15`. 3. **الملاحظة**: ترجع واجهة برمجة التطبيقات `{ "درجة_الحرارة": 5, "الوحدة": "سيليزيوس" }`. 4. **التفكير**: "لقد حصلت على درجة الحرارة. الإجابة هي 5 درجات مئوية." 5. **التصرف**: الرد على المستخدم بالإجابة.
إذا فشل استدعاء واجهة برمجة التطبيقات (على سبيل المثال، حد المعدل)، يمكن للوكيل التفكير مرة أخرى: "فشلت واجهة برمجة التطبيقات. يجب إعادة المحاولة بعد تأخير أو استخدام مصدر بديل."
هذه الحلقة هي جوهر وكلاء الذكاء الاصطناعي الحديثين.
متطلبات بناء وكيل ReAct
قبل أن نتعمق في الكود، دعنا نحدد ما ستحتاجه.
المتطلبات التقنية (الأجهزة)
- جهاز كمبيوتر متصل بالإنترنت.
- ذاكرة وصول عشوائي (RAM) بسعة 8 جيجابايت على الأقل (يوصى بـ 16 جيجابايت لتشغيل النماذج المحلية).
المتطلبات البرمجية
- **Python 3.10 أو أحدث** (يوصى باستخدام Python 3.11).
- مدير الحزم **pip**.
- **مفتاح واجهة برمجة تطبيقات OpenAI** (أو مزود نموذج لغة كبير محلي مثل Ollama للنماذج مفتوحة المصدر).
المعرفة المسبقة المطلوبة
- أساسيات برمجة بايثون.
- الإلمام بواجهات سطر الأوامر.
- فهم واجهات برمجة تطبيقات REST مفيد ولكنه ليس ضروريًا.
التثبيت خطوة بخطوة
سنبني وكيل ReAct بسيطًا باستخدام بايثون وواجهة برمجة تطبيقات OpenAI. سيكون هذا الوكيل قادرًا على البحث في الويب وإجراء العمليات الحسابية.
الخطوة 1: إعداد بيئة بايثون افتراضية
أولاً، قم بإنشاء بيئة معزولة لمشروعنا. هذا يمنع تعارض التبعيات.
python3 -m venv react-agent-env
source react-agent-env/bin/activate # على ويندوز: react-agent-env\Scripts\activateالخطوة 2: تثبيت المكتبات المطلوبة
نحتاج إلى عميل بايثون الخاص بـ OpenAI ومكتبة لإجراء طلبات HTTP.
pip install openai requests python-dotenv- `openai` – تسمح لنا باستدعاء نماذج GPT.
- `requests` – لإجراء استدعاءات لواجهات برمجة التطبيقات للخدمات الخارجية.
- `python-dotenv` – لتخزين مفتاح واجهة برمجة التطبيقات بشكل آمن.
الخطوة 3: إعداد مفتاح واجهة برمجة التطبيقات الخاص بك
قم بإنشاء ملف باسم `.env` في مجلد مشروعك. أضف مفتاح OpenAI الخاص بك بهذا الشكل:
OPENAI_API_KEY=sk-your-key-hereاستبدل `sk-your-key-here` بمفتاحك الفعلي. للحصول على واحد، سجل في [OpenAI](https://openai.com) وقم بإنشاء مفتاح من لوحة تحكم واجهة برمجة التطبيقات.
الخطوة 4: إنشاء سكريبت الوكيل
الآن، قم بإنشاء ملف باسم `react_agent.py` والصق الكود التالي. هذا السكريبت ينفذ حلقة ReAct أساسية.
import os
import json
import requests
from openai import OpenAI
from dotenv import load_dotenv
# تحميل متغيرات البيئة
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# تعريف الأدوات المتاحة
tools = [
{
"name": "web_search",
"description": "البحث في الويب عن معلومات حالية",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "استعلام البحث"}
},
"required": ["query"]
}
},
{
"name": "calculator",
"description": "إجراء العمليات الحسابية الرياضية",
"parameters": {
"type": "object",
"properties": {
"expression": {"type": "string", "description": "التعبير الرياضي المراد تقييمه"}
},
"required": ["expression"]
}
}
]
def web_search(query):
"""محاكاة بحث ويب (استبدلها بواجهة برمجة تطبيقات حقيقية لاحقًا)"""
return f"نتائج البحث عن '{query}': نتيجة عينة 1، نتيجة عينة 2"
def calculator(expression):
"""تقييم تعبير رياضي بأمان"""
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"خطأ: {str(e)}"
def run_agent(user_input, max_iterations=5):
"""حلقة ReAct الرئيسية"""
messages = [{"role": "user", "content": user_input}]
for _ in range(max_iterations):
# الخطوة 1: التفكير - اسأل نموذج اللغة الكبير عما يجب فعله
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
tool_choice="auto"
)
assistant_message = response.choices[0].message
# إذا قال النموذج أنه انتهى، توقف
if assistant_message.content and not assistant_message.tool_calls:
print(f"المساعد: {assistant_message.content}")
break
# الخطوة 2: التصرف - معالجة استدعاءات الأدوات
if assistant_message.tool_calls:
messages.append(assistant_message)
for tool_call in assistant_message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
# تنفيذ الأداة المناسبة
if function_name == "web_search":
result = web_search(arguments["query"])
elif function_name == "calculator":
result = calculator(arguments["expression"])
else:
result = "أداة غير معروفة"
# الخطوة 3: الملاحظة - أضف النتيجة مرة أخرى إلى السياق
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
print(f"الإجراء: {function_name}({arguments}) -> {result}")
# استمرار الحلقة مع الملاحظة الجديدة
return messages
if __name__ == "__main__":
user_query = input("أدخل سؤالك: ")
run_agent(user_query)يحدد هذا السكريبت أداتين - `web_search` و`calculator` - ويقوم بتشغيل حلقة تطلب مرارًا من نموذج اللغة الكبير أن يقرر أي أداة يجب استدعاؤها، وتنفذها، وتغذي النتيجة مرة أخرى.
أمثلة على الاستخدام
الآن بعد أن أصبح لدينا وكيلنا، دعنا نختبره باستعلامات حقيقية.
المثال 1: عملية حسابية بسيطة
قم بتشغيل السكريبت واسأل:
أدخل سؤالك: ما هو ناتج 24 * 7؟سوف يقوم الوكيل بما يلي: 1. التفكير في أن هناك حاجة إلى عملية حسابية. 2. استدعاء أداة `calculator` مع `expression: "24 * 7"`. 3. ملاحظة النتيجة `168`. 4. الرد بالإجابة.
يجب أن ترى مخرجات مثل:
الإجراء: calculator({'expression': '24 * 7'}) -> 168
المساعد: 24 مضروبًا في 7 يساوي 168.المثال 2: مهمة متعددة الخطوات
اسأل سؤالاً يتطلب كلتا الأداتين:
أدخل سؤالك: ما هو عدد سكان اليابان مقسومًا على 10 ملايين؟قد يبحث الوكيل أولاً عن عدد سكان اليابان، ثم يقوم بعملية القسمة. تتعامل الحلقة مع كلتا الخطوتين بالتسلسل.
المثال 3: التعافي من الأخطاء
اختبر ما يحدث عندما تفشل أداة ما. قم بتعديل دالة `calculator` لإثارة استثناء عن قصد، ثم اسأل:
أدخل سؤالك: ما هو الجذر التربيعي لـ -1؟مع الأعداد المركبة، قد يحاول الوكيل نهجًا مختلفًا أو يشرح القيد.
توسيع الوكيل بأدوات حقيقية
يستخدم المثال أعلاه بحثًا محاكيًا. لجعله مفيدًا حقًا، استبدل `web_search` بواجهة برمجة تطبيقات حقيقية مثل SerpAPI أو Bing Search. إليك كيفية دمج بحث حقيقي:
1. قم بتثبيت مكتبة `serpapi`:
pip install google-search-results2. قم بتحديث دالة `web_search`:
from serpapi import GoogleSearch
def web_search(query):
params = {
"q": query,
"api_key": os.getenv("SERPAPI_KEY"),
"num": 3
}
search = GoogleSearch(params)
results = search.get_dict()
snippets = [r.get("snippet", "") for r in results.get("organic_results", [])]
return "\n".join(snippets)3. أضف `SERPAPI_KEY` إلى ملف `.env` الخاص بك.
الآن يمكن لوكيلك جلب معلومات في الوقت الفعلي من الويب.
أفضل الممارسات لبناء وكلاء ReAct
بناءً على أنماط من OpenAI وMicrosoft وAnthropic، إليك التوصيات الرئيسية:
- **تحديد عدد التكرارات**: قم دائمًا بتعيين حد أقصى لعدد الحلقات (على سبيل المثال، 5-10) لمنع الحلقات اللانهائية.
- **التحقق من صحة مدخلات الأداة**: قم بتنظيف المعاملات قبل تنفيذ الاستدعاءات الخارجية.
- **تسجيل كل خطوة**: قم بطباعة أو تخزين كل إجراء وملاحظة لأغراض التصحيح.
- **استخدام أوصاف أدوات منظمة**: صف بوضوح ما تفعله كل أداة ومعاملاتها. يعتمد نموذج اللغة الكبير على هذا للاختيار بشكل صحيح.
- **معالجة الحالات الحدودية**: كن مستعدًا لفشل واجهات برمجة التطبيقات، أو النتائج الفارغة، أو استعلامات المستخدم الغامضة.
الخاتمة
حلقة ReAct هي نمط أساسي لبناء وكلاء ذكاء اصطناعي أذكياء. من خلال الجمع بين التفكير والتصرف في دورة مستمرة، يمكن للوكلاء حل المهام المعقدة، واستخدام الأدوات الخارجية، والتعافي من الأخطاء - كل ذلك بشفافية.
في هذه المقالة، تعلمت:
- ما هي حلقة ReAct ولماذا هي مهمة.
- كيف تعمل دورة التفكير-التصرف-الملاحظة.
- كيفية بناء وكيل ReAct الخاص بك باستخدام بايثون وOpenAI.
- كيفية توسيعه بأدوات حقيقية مثل البحث على الويب.
مع استمرار تطور الذكاء الاصطناعي، ستبقى حلقة ReAct مبدأ تصميم أساسيًا. سواء كنت تبني روبوت دعم عملاء، أو مساعد بحث، أو أداة أتمتة، فإن فهم هذا النمط يمنحك القدرة على إنشاء وكلاء لا يتحدثون فقط - بل يتصرفون.
الآن حان دورك. قم بتثبيت الكود، وجرب أدوات مختلفة، وانظر ما يمكن لوكيلك فعله. الحلقة هي مجرد البداية.
المصادر
أسئلة شائعة
عن ماذا يتحدث هذا المقال؟
يتناول هذا المقال موضوع "شرح وكلاء الذكاء الاصطناعي: ما هي حلقة إعادة الفعل (ReAct Loop) وكيف تعمل؟" ضمن تصنيف وكلاء الذكاء الاصطناعي. حلقة ReAct تجمع بين التفكير والفعل لتمكين وكلاء الذكاء الاصطناعي من حل المهام المعقدة بشكل متكرر. من خلال التناوب بين الفكر والفعل والملاحظة، يتكيف الوكلاء ديناميكيًا مع المعلومات الجديدة، مما يحسن عملية اتخاذ القرار وإنجاز المهام.
لمن يفيد هذا المقال؟
يفيد القراء المهتمين بفهم أدوات وتقنيات الذكاء الاصطناعي بطريقة عملية وواضحة.
ما الخطوة التالية؟
اقرأ المقال كاملاً، راجع المصادر المرفقة، ثم جرّب الأفكار المناسبة لاحتياجك بحذر.



