0Pricing
AI Agents · درس

تنفيذ ReAct من الصفر

اكتب تنفيذًا بلغة Python من 100 سطر دون LangChain: حلّل أسطر Action، وشغّل الأدوات، وكرّر حتى Final Answer.

تنفيذ ReAct من الصفر درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

ابنوا الحلقة بأنفسكم

يمكنكم كتابة ReAct في نحو 100 سطر من Python، من دون الحاجة إلى إطار عمل. ويساعدكم تنفيذ ذلك مرة واحدة على فهم ما تخفيه أطر العمل من تفاصيل.

Step 1: Define Tools

import json, math

def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {'__builtins__': {}}, vars(math)))
    except Exception as e:
        return f'Error: {e}'

def search_wikipedia(query: str) -> str:
    # placeholder — call a real search API
    return f'Wikipedia summary for: {query}'

TOOLS = {
    'calculator': calculator,
    'search_wikipedia': search_wikipedia,
}

print(calculator('2 + 2 * sqrt(16)'))
print(search_wikipedia('agents'))

Step 2: Tool Schemas

schemas = [
    {'type': 'function', 'function': {
        'name': 'calculator',
        'description': 'Evaluate a math expression like 2 + 2 * sqrt(16)',
        'parameters': {'type': 'object', 'properties': {'expression': {'type': 'string'}}, 'required': ['expression']}
    }},
    {'type': 'function', 'function': {
        'name': 'search_wikipedia',
        'description': 'Search Wikipedia and return a summary',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }}
]
import json
print(json.dumps(schemas, indent=2))

Step 3: System Prompt

system = '''
You are a research assistant. Use the available tools when needed.
Think step by step. If you have enough information, give a final answer.
'''
print(system.strip())

Step 4: The Loop

from openai import OpenAI
client = OpenAI()

def react(question, max_steps=10):
    messages = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': question}
    ]
    for step in range(max_steps):
        r = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            tools=schemas,
        )
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            try:
                result = TOOLS[tc.function.name](**args)
            except Exception as e:
                result = f'Tool error: {e}'
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': str(result)})
    return 'Step limit reached.'

Step 5: Run It

answer = react('What is the population of Tokyo times the square root of pi?')
print(answer)

الخطوة 6: إضافة التسجيل

سجّلوا كل خطوة لأغراض تصحيح الأخطاء:

def react_verbose(question, max_steps=10):
    messages = [...]
    for step in range(max_steps):
        r = client.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=schemas)
        msg = r.choices[0].message
        print(f'[step {step}] thought: {msg.content}')
        if msg.tool_calls:
            for tc in msg.tool_calls:
                print(f'[step {step}] action: {tc.function.name}({tc.function.arguments})')
        ...

الخطوة 7: عدّاد الخطوات كأداة

تضمّن بعض الوكلاء عدد الخطوات في مطالبة النظام حتى يعرف النموذج متى يصل إلى نتيجة مستقرة:

system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'

الخطوة 8: تنسيق الإجابة النهائية

إذا أردتم إخراجًا منظمًا، فأجبروا الوكيل على إجراء استدعاء أداة نهائي:

tools.append({'type': 'function', 'function': {
    'name': 'final_answer',
    'description': 'Submit the final answer to the user.',
    'parameters': {'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer']}
}})
# Loop terminates when final_answer is called.

الخطوة 9: أخطاء الأدوات

أعيدوا الأخطاء دائمًا على شكل نتائج للأداة حتى يتمكن الوكيل من التعافي منها:

try:
    result = TOOLS[name](**args)
except Exception as e:
    result = f'TOOL ERROR: {type(e).__name__}: {e}'
# Model sees the error and can try a different approach.

الخطوة 10: استدعاءات الأدوات المتوازية

إذا احتوى msg.tool_calls على عدة إدخالات، فنفّذوها بالتوازي:

import asyncio

async def run_tools(tool_calls):
    async def run_one(tc):
        args = json.loads(tc.function.arguments)
        return tc.id, TOOLS[tc.function.name](**args)
    return await asyncio.gather(*[run_one(tc) for tc in tool_calls])

الخطوة 11: ضبط حجم المحادثة

حتى مع وجود MAX_STEPS، يمكن أن تتضخم قوائم الرسائل. قلّصوها حسب عدد الرموز بين الأدوار:

if total_tokens(messages) > 6000:
    messages = trim_messages(messages)

الخطوة 12: تحصين بيئة الإنتاج

في بيئة الإنتاج، أضيفوا مهلات زمنية لاستدعاءات الأدوات، وحصصًا لكل أداة، وإعادة المحاولة مع التراجع التدريجي عند فشل واجهة برمجة التطبيقات، وتسجيلًا كاملًا للتتبع. لكن الحلقة السابقة هي الهيكل الأساسي لكم.

معالجة أخطاء الأدوات

ما الذي ينبغي فعله عندما تثير أداة استثناءً؟

مراجعة سريعة

يمكن تنفيذ ReAct في نحو 80 سطرًا: قائمة رسائل + حلقة while + جدول توجيه. تضيف أطر العمل تحسينات، لكن الجوهر هو هذا.

الأسئلة الشائعة

هل درس «تنفيذ ReAct من الصفر» مجاني؟

نعم — نص درس «تنفيذ ReAct من الصفر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «تنفيذ ReAct من الصفر»؟

اكتب تنفيذًا بلغة Python من 100 سطر دون LangChain: حلّل أسطر Action، وشغّل الأدوات، وكرّر حتى Final Answer. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تنفيذ ReAct من الصفر»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ReAct: نمط التفكير والفعل
  2. تنفيذ ReAct من الصفر
  3. مجموعات الأدوات الشائعة (الويب والآلة الحاسبة وRAG)
  4. اكتشاف أخطاء الأدوات والتعافي منها
← العودة إلى AI Agents