0Pricing
AI Agents · درس

تقنيات تصحيح الأخطاء خطوة بخطوة

إضافة نقاط توقف وطباعات وسيطة واستخدام مصحح الأخطاء في شيفرة الوكيل

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

يختلف تصحيح أخطاء الوكلاء عن تصحيح أخطاء الدوال

للدالة مدخلات ومخرجات واضحة. أما الوكيل فلديه حلقة تتضمن استدعاءات LLM وتنفيذ الأدوات وتعديلات السجل، ويمكن أن يحدث خطأ في أي منها بطرق دقيقة.

يتيح تصحيح الأخطاء خطوةً بخطوة إيقاف التنفيذ عند كل خطوة، وفحص حالة الوكيل، وفهم ما حدث من خطأ بدقة.

مصحح الأخطاء المضمن في Python: pdb

يتيح مصحح أخطاء Python، pdb، إيقاف التنفيذ وفحص المتغيرات والتنقل بين أسطر التعليمات البرمجية واحدًا تلو الآخر. أدرجوا import pdb; pdb.set_trace() في أي موضع داخل حلقة الوكيل للدخول إلى جلسة تصحيح أخطاء تفاعلية.

import pdb

def run_agent_loop(query: str):
    history = []
    for step in range(1, 21):
        action = decide_action(query, history)

        # Drop into debugger at step 3 to inspect state
        if step == 3:
            import pdb; pdb.set_trace()
            # At this point you can:
            # (Pdb) print(action)       -- inspect current action
            # (Pdb) print(history)      -- inspect full history
            # (Pdb) n                   -- next line
            # (Pdb) c                   -- continue execution
            # (Pdb) q                   -- quit

        result = execute_tool(action['tool'], action['args'])
        history.append({'tool': action['tool'], 'result': result})

Python 3.7+: الدالة breakpoint()

يتضمن Python 3.7+ الدالة المضمنة breakpoint()، وهي أنظف من import pdb; pdb.set_trace(). كما أنها تحترم متغير البيئة PYTHONBREAKPOINT، الذي يتيح لكم استبدال مصحح الأخطاء بآخر مختلف.

def run_agent_loop(query: str):
    history = []
    for step in range(1, 21):
        action = decide_action(query, history)

        breakpoint()  # cleaner than pdb.set_trace()

        result = execute_tool(action['tool'], action['args'])
        history.append({'tool': action['tool'], 'result': result})

# Disable all breakpoints without changing code:
# PYTHONBREAKPOINT=0 python agent.py

# Use ipdb (better UI) instead:
# PYTHONBREAKPOINT=ipdb.set_trace python agent.py
# pip install ipdb

مرجع أوامر pdb

أهم أوامر pdb لتصحيح أخطاء حلقات الوكلاء:

  • n — السطر التالي (تجاوز الخطوة)
  • s — الدخول إلى استدعاء الدالة
  • c — المتابعة حتى نقطة التوقف التالية
  • p expr — طباعة قيمة التعبير
  • pp expr — طباعة منسقة (للقواميس والقوائم)
  • l — عرض الشفرة المصدرية المحيطة بالسطر الحالي
  • q — إنهاء مصحح الأخطاء
# Typical pdb debugging session for an agent loop:
# (Pdb) p step           -- print current step number: 3
# (Pdb) pp action        -- pretty-print the action dict
# {'type': 'tool', 'tool': 'search_web', 'args': {'query': 'Python docs'}}
# (Pdb) pp history       -- see full conversation so far
# (Pdb) p len(history)   -- count messages: 6
# (Pdb) n                -- execute next line
# (Pdb) p result         -- see tool result
# (Pdb) c                -- continue to next breakpoint
print('pdb lets you inspect agent state at any point in the loop')

نقاط التوقف الشرطية

توقّف فقط عندما يكون شرط محدد صحيحًا — مثلًا، عندما تكون أداة معينة هي المحددة أو عندما يكون عدد الخطوات مرتفعًا. يجنّبك ذلك التوقف عند كل تكرار لحلقة طويلة.

def run_agent_loop(query: str):
    history = []
    for step in range(1, 21):
        action = decide_action(query, history)

        # Break only if the agent picks the wrong tool
        if action.get('tool') == 'calculate' and 'weather' in query.lower():
            breakpoint()  # This is suspicious — weather shouldn't use calculator

        # Break only if we're near the step limit
        if step >= 18:
            breakpoint()  # Why hasn't the agent concluded yet?

        result = execute_tool(action['tool'], action['args'])
        history.append({'tool': action['tool'], 'result': result})

مصحح أخطاء VS Code لشفرة الوكيل

يوفّر مصحح أخطاء Python في VS Code تجربة مرئية للتنفيذ خطوة بخطوة، مع لوحات لفحص المتغيرات ومكدسات الاستدعاء وتعبيرات المراقبة. اضبط ملف launch.json لتشغيل وكيلك في وضع تصحيح الأخطاء.

# .vscode/launch.json
# {
#   'version': '0.2.0',
#   'configurations': [
#     {
#       'name': 'Debug Agent',
#       'type': 'python',
#       'request': 'launch',
#       'program': 'agent_cli.py',
#       'args': ['--query', 'What is the weather in Paris?'],
#       'env': {
#         'OPENAI_API_KEY': 'your-key',
#         'LOG_LEVEL': 'DEBUG'
#       },
#       'console': 'integratedTerminal'
#     }
#   ]
# }

# Set breakpoints by clicking the left margin in VS Code
# Press F5 to start debugging, F10 to step over, F11 to step into
print('VS Code debugger provides visual debugging with no code changes needed')

إضافة الخيار --debug إلى CLI الخاص بك

أضف الخيار --debug إلى CLI الخاص بالوكيل. عند تفعيله، فإنه يمكّن التسجيل التفصيلي، ويطبع كل خطوة، ويمكنه اختياريًا فتح pdb عند حدوث الأخطاء. يتيح لك ذلك تصحيح الأخطاء من دون تعديل الشفرة المصدرية.

import argparse
import logging

parser = argparse.ArgumentParser()
parser.add_argument('--query', required=True)
parser.add_argument('--debug', action='store_true', help='Enable step-by-step debugging output')
parser.add_argument('--pdb-on-error', action='store_true', help='Drop into pdb on any exception')
args = parser.parse_args()

if args.debug:
    logging.basicConfig(level=logging.DEBUG)
    print('[DEBUG MODE] Step-by-step output enabled')

try:
    result = run_agent(args.query, verbose=args.debug)
    print(result['answer'])
except Exception as e:
    if args.pdb_on_error:
        import pdb; pdb.post_mortem()  # debug the crash
    else:
        raise

التنفيذ خطوة بخطوة باستخدام الوضع التفصيلي

يطبع الوضع التفصيلي معلومات مفصلة حول كل خطوة إلى stdout، ما يتيح لك تتبّع تنفيذ الوكيل من دون استخدام مصحح أخطاء. أضف الخيار verbose=True إلى حلقة الوكيل.

import json

def run_agent(query: str, verbose: bool = False) -> dict:
    history = []

    for step in range(1, 21):
        action = decide_action(query, history)

        if verbose:
            print(f'\n--- Step {step} ---')
            print(f'Action type: {action["type"]}')
            if action['type'] == 'tool':
                print(f'Tool: {action["tool"]}')
                print(f'Args: {json.dumps(action["args"], indent=2)}')

        if action['type'] == 'final_answer':
            if verbose:
                print(f'\nFinal answer: {action["answer"]}')
            return {'status': 'ok', 'answer': action['answer']}

        result = execute_tool(action['tool'], action['args'])
        if verbose:
            print(f'Result: {str(result)[:200]}')
        history.append({'tool': action['tool'], 'result': result})

    return {'status': 'max_steps', 'answer': None}

تصحيح الأخطاء بعد الانهيار باستخدام pdb.post_mortem()

عندما يتعطل وكيل بسبب استثناء، يفتح pdb.post_mortem() مصحح الأخطاء عند نقطة الفشل بالضبط، مع الاحتفاظ بمكدس الاستدعاء. وهذا بالغ الأهمية لفهم حالات الانهيار من دون الحاجة إلى إعادة إنتاجها.

import pdb
import sys
import traceback

def run_agent_with_postmortem(query: str, debug: bool = False) -> dict:
    try:
        return run_agent(query)
    except Exception as e:
        if debug:
            print(f'\nAgent crashed: {e}')
            traceback.print_exc()
            print('\nDropping into post-mortem debugger...')
            pdb.post_mortem()  # opens debugger at the crash site
            return {'status': 'crashed', 'error': str(e)}
        else:
            raise

# Usage:
# python agent.py --query 'test' --pdb-on-error

فحص سجل الرسائل في مصحح الأخطاء

أكثر ما يفيد فحصه أثناء تصحيح أخطاء الوكيل هو سجل المحادثة. استخدم أمر pp في pdb لطباعته بتنسيق واضح، أو كرّر عبر عناصره لفهم ما اطّلع عليه الوكيل حتى الآن.

# Inside a pdb session, common inspection commands:

# Print the full history:
# (Pdb) pp history

# Print only user and assistant messages:
# (Pdb) pp [m for m in history if m['role'] in ('user', 'assistant')]

# Count messages:
# (Pdb) p len(history)

# Find tool calls in history:
# (Pdb) pp [m for m in history if m.get('role') == 'tool']

# Print the last message:
# (Pdb) pp history[-1]

# Print total token estimate (rough):
# (Pdb) p sum(len(str(m)) for m in history)
print('History inspection is the key to understanding agent state')

محاكاة التنفيذ خطوة بخطوة من دون استدعاءات LLM

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

def run_agent_simulation(query: str, scripted_actions: list) -> dict:
    'Simulate agent steps without LLM calls, using pre-defined actions'
    history = []

    for step, action in enumerate(scripted_actions, 1):
        print(f'Step {step}: {action}')

        if action['type'] == 'final_answer':
            return {'status': 'ok', 'answer': action['answer'], 'steps': step}

        result = execute_tool(action['tool'], action['args'])
        print(f'  Result: {str(result)[:100]}')
        history.append({'tool': action['tool'], 'result': result})

    return {'status': 'script_exhausted', 'history': history}

# Test tool execution logic without any LLM:
# result = run_agent_simulation('test', [
#     {'type': 'tool', 'tool': 'search_web', 'args': {'query': 'Python'}},
#     {'type': 'final_answer', 'answer': 'Python is a programming language.'}
# ])

اختبار المعرفة: تصحيح الأخطاء خطوة بخطوة

اختبر مدى فهمك لتقنيات تصحيح أخطاء شفرات الوكلاء.

مراجعة: تقنيات تصحيح الأخطاء خطوة بخطوة

أصبح لديك الآن حزمة أدوات متكاملة لتصحيح أخطاء حلقات الوكلاء:

  • استخدم breakpoint() (في Python 3.7 فأحدث) أو import pdb; pdb.set_trace() لتصحيح الأخطاء تفاعليًا
  • استخدم نقاط التوقف الشرطية للتوقف فقط عند حدوث أمر مريب
  • اضبط launch.json في VS Code لتصحيح الأخطاء عبر واجهة رسومية
  • أضف خياري CLI، --debug و--pdb-on-error، لتصحيح الأخطاء عند الطلب
  • استخدم pdb.post_mortem() لفحص حالات الانهيار بعد وقوعها
  • أنشئ وضع محاكاة لاختبار منطق الأدوات من دون استدعاءات LLM
  • استخدم الوضع التفصيلي لتتبّع التنفيذ من دون إيقافه

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

هل درس «تقنيات تصحيح الأخطاء خطوة بخطوة» مجاني؟

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

ماذا ستتعلم في «تقنيات تصحيح الأخطاء خطوة بخطوة»؟

إضافة نقاط توقف وطباعات وسيطة واستخدام مصحح الأخطاء في شيفرة الوكيل تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «تقنيات تصحيح الأخطاء خطوة بخطوة»؟

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

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

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

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

  1. أخطاء حلقات الوكلاء الشائعة
  2. تسجيل التتبعات لخطوات الوكيل
  3. اكتشاف الحلقات اللانهائية وكسرها
  4. تقنيات تصحيح الأخطاء خطوة بخطوة
← العودة إلى AI Agents