0Pricing
AI Agents · درس

تسجيل استدعاءات الأدوات ومدخلاتها ومخرجاتها

تعرّف على ما ينبغي التقاطه في كل خطوة: اسم الأداة، ومعاملات الإدخال، والمخرج، وزمن الاستجابة، والخطأ، ومعرّف الامتداد الأب.

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

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

ما الذي ينبغي تسجيله لكل خطوة؟

لكل span، التقطوا ما يلي:

  • اسم الخطوة (llm_call, tool_call, retrieve)
  • المدخلات (الرسائل، ووسائط الأداة، والاستعلام)
  • المخرجات (الاستجابة، ونتيجة الأداة)
  • البيانات الوصفية (النموذج، وزمن الاستجابة، وعدد الرموز، والتكلفة)
  • معلومات الخطأ عند الفشل

مساعد Span مكتوب يدويًا

من دون إطار عمل، يمكنكم استخدام مساعد بسيط:

from contextlib import contextmanager
import time, uuid

@contextmanager
def span(name, trace_id, parent_id=None):
    span_id = str(uuid.uuid4())
    start = time.time()
    record = {'trace_id': trace_id, 'span_id': span_id, 'parent_id': parent_id, 'name': name, 'start': start}
    try:
        yield record
    except Exception as e:
        record['error'] = str(e)
        raise
    finally:
        record['duration_ms'] = (time.time() - start) * 1000
        save_span(record)

Using It

trace_id = str(uuid.uuid4())
with span('llm_call_planner', trace_id) as s:
    s['model'] = 'gpt-4o-mini'
    s['messages_in'] = messages
    response = client.chat.completions.create(model='gpt-4o-mini', messages=messages)
    s['response'] = response.choices[0].message.content
    s['tokens_in'] = response.usage.prompt_tokens
    s['tokens_out'] = response.usage.completion_tokens

تداخل Spans

مرّروا parent_id إلى الأسفل حتى تشكّل Spans شجرة:

with span('agent_step', trace_id) as parent:
    with span('llm_call', trace_id, parent_id=parent['span_id']):
        ...
    with span('tool_call:search', trace_id, parent_id=parent['span_id']):
        ...

تسجيل استدعاءات الأدوات

بالنسبة إلى استدعاءات الأدوات تحديدًا، سجّلوا ما يلي:

  • اسم الأداة
  • الوسائط (JSON)
  • النتيجة (JSON، مع اقتطاعها عند الحاجة)
  • زمن الاستجابة
  • الخطأ (إن وُجد)

اقتطاع الحمولات الكبيرة

تكون بعض نتائج الأدوات ضخمة (HTML بحجم 200KB). اقتطعوها قبل التخزين:

def safe_payload(obj, max_chars=8000):
    s = json.dumps(obj)
    return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'

إزالة معلومات التعريف الشخصية

أزيلوا المعلومات الشخصية قبل التخزين:

import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')

def redact(text):
    return EMAIL_RE.sub('[email]', text)

print(redact("Contact me at alice@example.com for details."))

مخرجات السجل المنظَّمة

أصدروا سجل JSON واحدًا لكل span — ومرّروه إلى ELK أو Loki أو Datadog أو BigQuery:

import json
import sys

def save_span(record):
    print(json.dumps(record), file=sys.stderr, flush=True)

demo_record = {'span': 'call_llm', 'duration_ms': 120, 'ok': True}
save_span(demo_record)
print("Logged span:", json.dumps(demo_record))

الربط بجلسات المستخدمين

أدرجوا session_id وuser_id في كل span حتى تتمكنوا لاحقًا من تصفية عمليات التتبّع حسب المستخدم.

أخذ العينات

بالنسبة إلى الوكلاء ذوي الحجم الكبير، خذوا عينات:

import random

def should_trace(user_id):
    return random.random() < 0.10  # 10% of traces
# Always trace errors and slow runs.

random.seed(42)
sampled = sum(should_trace(i) for i in range(1000))
print(f"Traced {sampled} out of 1000 calls (~10% target)")

إعادة التشغيل من عمليات التتبّع

احفظوا المدخلات الكاملة (الرسائل والأدوات والوسائط) حتى تتمكنوا من إعادة تشغيل trace باستخدام prompt جديد لاختبار التحسينات. وهذا هو الأساس للتطوير القائم على التقييم.

هل نقتطع الحمولات الكبيرة؟

لماذا نقتطع مخرجات الأدوات الكبيرة في السجلات؟

مراجعة

كل خطوة، وكل إدخال، وكل مخرج — منظَّمة ومتداخلة ومأخوذة منها عينات. هذه هي المادة الخام لكل ما يأتي بعد ذلك في قابلية المراقبة.

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

هل درس «تسجيل استدعاءات الأدوات ومدخلاتها ومخرجاتها» مجاني؟

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

ماذا ستتعلم في «تسجيل استدعاءات الأدوات ومدخلاتها ومخرجاتها»؟

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

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

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

كم من الوقت يستغرق درس «تسجيل استدعاءات الأدوات ومدخلاتها ومخرجاتها»؟

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

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

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

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

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