Skip to content

التعليق التوضيحي للوكلاء

تقييم وكلاء الذكاء الاصطناعي مع عروض تتبع متخصصة و12 محوّل صيغ ومخططات تعليق توضيحي مصممة خصيصاً.

التعليق التوضيحي للوكلاء

جديد في الإصدار v2.3.0

يتم نشر وكلاء الذكاء الاصطناعي بشكل متزايد للمهام المعقدة متعددة الخطوات: تصفح الويب، وكتابة الأكواد، واستدعاء واجهات API، وتنسيق الوكلاء الفرعيين. لكن تقييم ما إذا كان الوكيل قد قام فعلاً بالشيء الصحيح يتطلب حكماً بشرياً بدقة لا تستطيع أدوات التعليق التوضيحي التقليدية دعمها. قد يحتوي تتبع وكيل واحد على عشرات الخطوات واستدعاءات الأدوات والتفكير الوسيط ولقطات الشاشة والقرارات المتفرعة. يحتاج المعلّقون إلى رؤية كل هذا السياق والتنقل فيه بكفاءة وتقديم تقييمات منظمة على مستوى التتبع وعلى مستوى الخطوة الفردية.

يعالج نظام التعليق التوضيحي للوكلاء في Potato هذا من خلال ثلاث قدرات:

  1. 12 محوّل صيغ تتبع يقوم بتوحيد سجلات الوكلاء من أي إطار عمل رئيسي إلى صيغة موحدة
  2. 3 أنواع عرض متخصصة محسّنة لأنماط وكلاء مختلفة (استخدام الأدوات، تصفح الويب، المحادثة)
  3. 9 مخططات تعليق توضيحي جاهزة تغطي أبعاد تقييم الوكلاء الأكثر شيوعاً

محوّلات صيغ التتبع

تأتي تتبعات الوكلاء بصيغ مختلفة تماماً حسب إطار العمل. يوفر Potato 12 محوّلاً يقوم بتوحيدها إلى تمثيل داخلي موحد. تحدد المحوّل في تهيئتك، أو تدع Potato يكتشف الصيغة تلقائياً.

مرجع المحوّلات

المحوّلصيغة المصدرالحقول الرئيسية المستخرجة
openaiOpenAI Assistants API / سجلات استدعاء الدوالmessages، tool_calls، نتائج الدوال
anthropicAnthropic Claude tool_use / Messages APIكتل المحتوى، tool_use، tool_result
swebenchتتبعات مهام SWE-benchpatch، نتائج الاختبار، المسار
opentelemetryتصدير spans من OpenTelemetry (JSON)spans، attributes، events، علاقة الأب-الابن
mcpجلسات Model Context Protocolتعريفات الأدوات، أزواج الاستدعاء/الاستجابة
multi_agentسجلات وكلاء متعددة من CrewAI / AutoGen / LangGraphأدوار الوكلاء، التفويض، تمرير الرسائل
langchainتتبعات استدعاءات LangChainتشغيل السلاسل، استدعاءات LLM، استدعاءات الأدوات
langfuseتصدير ملاحظات LangFuseالتوليدات، spans، الدرجات
reactسجلات ReAct بنمط Thought/Action/Observationthought، action، action_input، observation
webarenaJSON تتبع WebArena / VisualWebArenaالإجراءات، لقطات الشاشة، لقطات DOM، عناوين URL
atifAgent Trace Interchange Format (ATIF)الخطوات، الملاحظات، البيانات الوصفية
raw_webتسجيلات المتصفح الخام (HAR + لقطات شاشة)الطلبات، الاستجابات، لقطات الشاشة، التوقيتات

التهيئة

حدد المحوّل في تهيئة مشروعك:

yaml
agentic:
  enabled: true
  trace_converter: react
  trace_file: "data/agent_traces.jsonl"

يجب أن يكون كل سطر في ملف التتبع كائن JSON يحتوي على تتبع الوكيل الخام. يتولى المحوّل الباقي.

لتتبعات الوكلاء المتعددة حيث يستخدم وكلاء مختلفون أُطر عمل مختلفة، يمكنك تحديد محوّلات لكل وكيل:

yaml
agentic:
  enabled: true
  trace_converter: multi_agent
  trace_file: "data/multi_agent_traces.jsonl"
  multi_agent:
    agent_converters:
      planner: react
      coder: anthropic
      reviewer: openai

الاكتشاف التلقائي

إذا لم تكن متأكداً من المحوّل الذي ستستخدمه، اضبط trace_converter: auto:

yaml
agentic:
  enabled: true
  trace_converter: auto
  trace_file: "data/traces.jsonl"

يفحص Potato أول 10 تتبعات ويختار المحوّل الأفضل تطابقاً بناءً على توقيعات الحقول. يتم تسجيل تحذير إذا كانت الثقة أقل من 80%، وفي هذه الحالة يجب تحديد المحوّل صراحةً.

المحوّلات المخصصة

إذا لم يكن إطار عمل الوكيل الخاص بك مدرجاً، يمكنك كتابة محوّل Python:

python
# converters/my_converter.py
from potato.agentic.base_converter import BaseTraceConverter
 
class MyConverter(BaseTraceConverter):
    name = "my_framework"
 
    def convert(self, raw_trace: dict) -> dict:
        steps = []
        for entry in raw_trace["log"]:
            steps.append({
                "type": entry.get("kind", "action"),
                "content": entry["text"],
                "timestamp": entry.get("ts"),
                "metadata": entry.get("extra", {}),
            })
        return {"steps": steps}

سجّله في التهيئة:

yaml
agentic:
  trace_converter: custom
  custom_converter: "converters/my_converter.py:MyConverter"

أنواع العرض

بمجرد تحويل التتبعات، يعرضها Potato باستخدام أحد ثلاثة أنواع عرض متخصصة. كل نوع محسّن لنمط وكيل مختلف.

1. عرض تتبع الوكيل

العرض الافتراضي للوكلاء التي تستخدم الأدوات (OpenAI function calling، Anthropic tool_use، ReAct، LangChain، إلخ). يعرض كل خطوة كبطاقة مع ترميز لوني حسب نوع الخطوة.

yaml
agentic:
  enabled: true
  trace_converter: openai
  display_type: agent_trace
 
  agent_trace_display:
    # Color coding for step types
    colors:
      thought: "#6E56CF"
      action: "#3b82f6"
      observation: "#22c55e"
      error: "#ef4444"
      system: "#6b7280"
 
    # Collapsible sections
    collapse_observations: true
    collapse_threshold: 500    # characters before auto-collapsing
 
    # Step numbering
    show_step_numbers: true
    show_timestamps: true
 
    # Tool call rendering
    render_json: true          # pretty-print JSON arguments
    syntax_highlight: true     # highlight code in observations

الميزات:

  • بطاقات الخطوات مع حدود يسرى ملونة تشير إلى النوع (تفكير، إجراء، ملاحظة، خطأ)
  • أقسام قابلة للطي للملاحظات الطويلة أو مخرجات الأدوات (عتبة قابلة للتهيئة)
  • تنسيق JSON لمعاملات استدعاء الأدوات والاستجابات المنظمة
  • تمييز بناء الجملة لكتل الأكواد في الملاحظات
  • شريط زمني للخطوات جانبي يعرض التتبع الكامل بنظرة سريعة
  • التنقل إلى خطوة للتتبعات الطويلة

2. عرض تتبع وكيل الويب

مصمم خصيصاً لوكلاء تصفح الويب (WebArena، VisualWebArena، تسجيلات المتصفح الخام). يعرض لقطات الشاشة مع تراكبات SVG تُظهر أين نقر الوكيل أو كتب أو مرّر.

yaml
agentic:
  enabled: true
  trace_converter: webarena
  display_type: web_agent
 
  web_agent_display:
    # Screenshot rendering
    screenshot_max_width: 900
    screenshot_quality: 85
 
    # SVG overlay for agent actions
    overlay:
      enabled: true
      click_marker: "circle"       # circle, crosshair, or arrow
      click_color: "#ef4444"
      click_radius: 20
      type_highlight: "#3b82f6"    # highlight for text input fields
      scroll_indicator: true
 
    # Filmstrip view
    filmstrip:
      enabled: true
      thumbnail_width: 150
      show_action_labels: true
 
    # DOM snapshot display
    show_dom_snapshot: false        # optional raw DOM view
    show_url_bar: true
    show_action_description: true

الميزات:

  • معرض لقطات الشاشة مع عرض بالحجم الكامل وتكبير
  • تراكبات SVG تُظهر أهداف النقر (دوائر حمراء)، ومناطق إدخال النص (تمييز أزرق)، واتجاهات التمرير
  • عرض الشريط السينمائي في الأسفل يعرض جميع لقطات الشاشة كصور مصغرة للتنقل السريع
  • وصف الإجراء نص أسفل كل لقطة شاشة (مثل "النقر على زر 'أضف إلى السلة'")
  • شريط URL يعرض عنوان URL للصفحة الحالية في كل خطوة
  • مقارنة قبل/بعد للخطوات التي تعدّل محتوى الصفحة

3. عرض المحادثة التفاعلية

لتقييم وكلاء المحادثة وروبوتات الدردشة. يدعم وضعين فرعيين: المحادثة المباشرة حيث يتفاعل المعلّقون مع الوكيل في الوقت الفعلي، ومراجعة التتبع حيث يقيّم المعلّقون محادثة مسجلة.

yaml
agentic:
  enabled: true
  display_type: interactive_chat
 
  interactive_chat_display:
    mode: trace_review         # or "live_chat"
 
    # Trace review settings
    trace_review:
      show_system_prompt: false
      show_token_counts: true
      show_latency: true
      message_grouping: turn    # "turn" or "message"
 
    # Live chat settings (when mode: live_chat)
    live_chat:
      proxy: openai             # agent proxy to use
      max_turns: 20
      timeout_seconds: 60
      show_typing_indicator: true
      allow_regenerate: true
 
    # Common settings
    show_role_labels: true
    role_colors:
      user: "#3b82f6"
      assistant: "#6E56CF"
      system: "#6b7280"
      tool: "#22c55e"

وضع مراجعة التتبع يعرض محادثة مسجلة مع عدد الرموز واختيارياً زمن الاستجابة لكل رسالة. يمكن للمعلّقين تقييم الأدوار الفردية أو المحادثة بأكملها.

وضع المحادثة المباشرة يربط المعلّقين بوكيل يعمل عبر نظام وكيل الوسيط (انظر أدناه). يتحدث المعلّقون مع الوكيل، ثم يعلّقون على المحادثة الناتجة.


التقييمات لكل دور

للحوار والتقييمات متعددة الخطوات، غالباً ما تحتاج إلى تقييمات على الأدوار الفردية بدلاً من (أو بالإضافة إلى) التتبع الكلي. يدعم Potato التعليق التوضيحي لكل دور لأي نوع عرض.

yaml
annotation_schemes:
  # Overall trace rating
  - annotation_type: likert
    name: overall_quality
    description: "Rate the overall quality of this agent trace"
    min: 1
    max: 5
    labels:
      1: "Very Poor"
      5: "Excellent"
 
  # Per-turn ratings
  - annotation_type: per_turn_rating
    name: step_correctness
    description: "Was this step correct?"
    target: agentic_steps        # binds to trace steps
    rating_type: radio
    labels:
      - "Correct"
      - "Partially Correct"
      - "Incorrect"
      - "Unnecessary"
 
  - annotation_type: per_turn_rating
    name: step_explanation
    description: "Explain any issues with this step"
    target: agentic_steps
    rating_type: text
    conditional:
      show_when:
        step_correctness: ["Partially Correct", "Incorrect", "Unnecessary"]

تظهر تقييمات كل دور مضمّنة بجانب كل بطاقة خطوة. يتيح لك كتلة conditional عرض أسئلة المتابعة فقط عند تحديد تقييمات معينة، مما يحافظ على نظافة الواجهة.

صيغة مخرجات التقييم لكل دور

يتم حفظ تعليقات كل دور مع فهارس الخطوات:

json
{
  "id": "trace_042",
  "annotations": {
    "overall_quality": 3,
    "step_correctness": {
      "0": "Correct",
      "1": "Correct",
      "2": "Incorrect",
      "3": "Correct"
    },
    "step_explanation": {
      "2": "The agent searched for the wrong product name"
    }
  }
}

نظام وكيل الوسيط

لمهام التقييم المباشر حيث يتفاعل المعلّقون مع وكيل في الوقت الفعلي، يوفر Potato طبقة وكيل وسيط. يقع الوسيط بين واجهة التعليق التوضيحي والواجهة الخلفية للوكيل، ويسجل المحادثة الكاملة للمراجعة لاحقاً.

yaml
agentic:
  enabled: true
  display_type: interactive_chat
 
  agent_proxy:
    type: openai                 # openai, http, or echo
 
    # OpenAI proxy
    openai:
      model: "gpt-4o"
      api_key: ${OPENAI_API_KEY}
      system_prompt: "You are a helpful customer service agent."
      temperature: 0.7
      max_tokens: 1024

أنواع الوسيط

وسيط OpenAI يوجّه الرسائل إلى API متوافق مع OpenAI:

yaml
agent_proxy:
  type: openai
  openai:
    model: "gpt-4o"
    api_key: ${OPENAI_API_KEY}
    system_prompt: "You are a helpful assistant."
    temperature: 0.7

وسيط HTTP يوجّه الرسائل إلى أي نقطة نهاية HTTP (خادم الوكيل الخاص بك):

yaml
agent_proxy:
  type: http
  http:
    url: "https://my-agent.example.com/chat"
    method: POST
    headers:
      Authorization: "Bearer ${AGENT_API_KEY}"
    request_template:
      messages: "{{messages}}"
      session_id: "{{session_id}}"
    response_path: "response.content"
    timeout_seconds: 30

وسيط الصدى يعكس رسالة المستخدم (مفيد للاختبار وتطوير واجهة المستخدم):

yaml
agent_proxy:
  type: echo
  echo:
    prefix: "[Echo] "
    delay_ms: 500

مخططات التعليق التوضيحي الجاهزة

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

المخططالنوعالوصف
agent_task_successradioنجاح/فشل ثنائي مع خيار نجاح جزئي
agent_step_correctnessper_turn_rating (radio)تقييمات صحيح/خاطئ/غير ضروري لكل خطوة
agent_error_taxonomyper_turn_rating (multiselect)تصنيف أخطاء من 12 فئة (أداة خاطئة، هلوسة، حلقة، إلخ)
agent_safetyradio + textكشف انتهاكات الأمان مع مقياس الخطورة
agent_efficiencylikertتقييم ما إذا كان الوكيل استخدم مساراً فعالاً
agent_instruction_followinglikertتقييم الالتزام بتعليمات المستخدم الأصلية
agent_explanation_qualitylikertتقييم جودة تفكير/شروحات الوكيل
agent_web_action_correctnessper_turn_rating (radio)تقييم إجراءات الويب لكل خطوة (الهدف الصحيح، نوع الإجراء الصحيح)
agent_conversation_qualitymultirateجودة محادثة متعددة الأبعاد (المساعدة، الدقة، النبرة، الأمان)

قم بتحميل مخطط جاهز بالاسم:

yaml
annotation_schemes:
  - preset: agent_task_success
  - preset: agent_step_correctness
  - preset: agent_error_taxonomy

أو ادمج المخططات الجاهزة مع مخططات مخصصة:

yaml
annotation_schemes:
  - preset: agent_task_success
  - preset: agent_step_correctness
 
  # Custom schema alongside presets
  - annotation_type: text
    name: evaluator_notes
    description: "Any additional observations about this agent trace"
    label_requirement:
      required: false

مثال كامل: تقييم وكيل ReAct

إليك تهيئة كاملة لتقييم تتبعات وكلاء بنمط ReAct مع تقييمات لكل خطوة:

yaml
# project config
task_name: "ReAct Agent Evaluation"
task_dir: "."
 
data_files:
  - "data/react_traces.jsonl"
 
item_properties:
  id_key: trace_id
  text_key: task_description
 
agentic:
  enabled: true
  trace_converter: react
  display_type: agent_trace
 
  agent_trace_display:
    colors:
      thought: "#6E56CF"
      action: "#3b82f6"
      observation: "#22c55e"
      error: "#ef4444"
    collapse_observations: true
    collapse_threshold: 300
    show_step_numbers: true
    render_json: true
 
annotation_schemes:
  - preset: agent_task_success
  - preset: agent_step_correctness
  - preset: agent_efficiency
 
  - annotation_type: text
    name: failure_reason
    description: "If the agent failed, describe what went wrong"
    label_requirement:
      required: false
 
output_annotation_dir: "output/"
output_annotation_format: "jsonl"

بيانات الإدخال النموذجية (data/react_traces.jsonl):

json
{
  "trace_id": "react_001",
  "task_description": "Find the population of Tokyo and compare it to New York City",
  "trace": [
    {"type": "thought", "content": "I need to find the population of both cities. Let me search for Tokyo first."},
    {"type": "action", "content": "search", "action_input": "Tokyo population 2024"},
    {"type": "observation", "content": "Tokyo has a population of approximately 13.96 million in the city proper..."},
    {"type": "thought", "content": "Now I need to find New York City's population."},
    {"type": "action", "content": "search", "action_input": "New York City population 2024"},
    {"type": "observation", "content": "New York City has a population of approximately 8.34 million..."},
    {"type": "thought", "content": "Tokyo (13.96M) has about 67% more people than NYC (8.34M)."},
    {"type": "action", "content": "finish", "action_input": "Tokyo has ~13.96 million people vs NYC's ~8.34 million, making Tokyo about 67% larger by population."}
  ]
}

ابدأ الخادم:

bash
potato start config.yaml -p 8000

قراءات إضافية

للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.