Skip to content
Announcements8 min read

إطلاق التعليق التوضيحي لوكلاء البرمجة: قيّم تتبعات Claude Code وAider وSWE-Agent

صار Potato يدعم التعليق التوضيحي لوكلاء البرمجة مع تصيير الـ diff وعرض مخرجات الطرفية ومخططات مكافأة العملية. استورد التتبعات من Claude Code وAider وSWE-Agent.

Potato Team

لماذا يهم التعليق التوضيحي لوكلاء البرمجة

تحسّن وكلاء البرمجة مثل Claude Code وAider وSWE-Agent بسرعة، وصار الناس بحاجة فعلية إلى تقييم عملهم. التشغيلة الواحدة مسار فوضوي: تحريرات كود، وأوامر طرفية، وقراءات ملفات، وخطوات تفكير، كلها متسلسلة. ولتدريب وكيل أفضل تحتاج إلى تغذية راجعة بشرية على هذه التشغيلات، وأدوات التعليق التي كانت بيد معظم الفرق لم تُبنَ يوماً لهذا النوع من البيانات.

فواجهة التعليق النصية العادية لا تستطيع تصيير diff موحّد، ولا تنسيق مخرجات الطرفية، ولا التعامل مع البنية المتداخلة لتتبع الوكيل. فينتهي الأمر بالمختبرات إلى كتابة واجهات تقييم خاصة بها، فتعيد العمل نفسه وتنتهي بمجموعات بيانات لا يفهم بعضها بعضاً.

صار Potato يتولى التعليق التوضيحي لوكلاء البرمجة مباشرةً، بمكوّنات تصيير مبنية للتتبعات، ومخططات تعليق لهذا النوع من التقييم، وصيغ تصدير تُغذّي التدريب مباشرةً. للاطلاع على مرجع الميزة الكامل، انظر وثائق التعليق التوضيحي لوكلاء البرمجة ودليل تقييم الوكلاء الأوسع.

CodingTraceDisplay: عارض تتبعات

يمر معظم تجربة التعليق عبر مكوّن CodingTraceDisplay. وهو يصيّر كل خطوة من مسار الوكيل بالتصوّر البصري المناسب لنوع تلك الخطوة.

هكذا تبدو واجهة التعليق التوضيحي لوكلاء البرمجة في Potato:

عرض تتبع وكيل البرمجة مع تصيير الـ diff وشجرة الملفاتيصيّر CodingTraceDisplay فروق الكود ومخرجات الطرفية وقراءات الملفات بتنسيق سليم

عرض الـ diff الموحّد

تُصيَّر تحريرات الكود بوصفها diffs موحّدة بإبراز أحمر/أخضر للأسطر المحذوفة والمضافة. ويتضمن عرض الـ diff أرقام الأسطر، وترويسات مسارات الملفات، وأسطر السياق حول التغييرات. وهذا يحاكي تجربة pull request المألوفة على GitHub التي يعرفها معظم المطورين.

yaml
# The diff rendering is automatic when your trace data includes tool_use
# steps with file edit operations. No special config is needed.
coding_agent:
  display:
    diff_style: "unified"         # "unified" or "split" side-by-side
    context_lines: 3              # Lines of context around changes
    syntax_highlighting: true     # Language-aware highlighting
    collapse_large_diffs: true    # Auto-collapse diffs > 100 lines
    large_diff_threshold: 100

كتل الطرفية الداكنة

تُصيَّر أوامر bash ومخرجاتها في كتل طرفية داكنة بخط أحادي المسافة، مع دعم سليم لألوان ANSI ومخرجات قابلة للتمرير للنتائج الطويلة. وتعرض كتل الطرفية الأمر المنفَّذ، ودليل العمل، ورمز الخروج.

yaml
coding_agent:
  display:
    terminal_theme: "dark"        # "dark" or "light"
    max_terminal_height: 400      # pixels, scrollable beyond this
    show_exit_codes: true
    show_working_directory: true
    ansi_colors: true             # Render ANSI escape sequences

كتل كود مرقّمة الأسطر

تُعرض عمليات قراءة الملفات ككتل كود مبرَزة البنية اللغوية مع أرقام الأسطر. وحين يقرأ الوكيل نطاقاً محدداً من الأسطر، تُعرض تلك الأسطر وحدها بأرقامها الأصلية محفوظة، فيسهل مقابلتها بالملف الفعلي.

شريط شجرة الملفات الجانبي

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

yaml
coding_agent:
  display:
    file_tree:
      enabled: true
      position: "left"            # "left" or "right"
      show_change_icons: true     # Icons for created/modified/deleted
      group_by: "directory"       # "directory" or "chronological"

المخرجات القابلة للطي

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

yaml
coding_agent:
  display:
    collapsible:
      auto_collapse_thinking: true
      auto_collapse_long_output: true
      long_output_threshold: 50   # lines
      default_expanded_types:     # These step types start expanded
        - "file_edit"
        - "bash_command"

مخطط نموذج مكافأة العملية (PRM)

تسند نماذج مكافأة العملية الفضل على مستوى الخطوة بدل الاكتفاء بتقييم النتيجة النهائية. ويدعم Potato وضعَي تعليق PRM مصممين لمقايضات مختلفة بين السرعة والدقة.

وضع الخطأ الأول

في وضع الخطأ الأول، يمرّ المعلّق على المسار وينقر على أول خطوة أخطأ فيها الوكيل. وتُوسم كل الخطوات السابقة للخطوة المنقورة صحيحةً تلقائياً، وتُوسم كل الخطوات التالية لها (بما فيها هي) خاطئةً تلقائياً. وهذا يسرّع التعليق كثيراً لأن المعلّق لا يحتاج إلا إلى تحديد نقطة واحدة.

yaml
annotation_schemes:
  - annotation_type: process_reward
    name: prm_first_error
    mode: "first_error"
    description: "Click the first step where the agent makes an error"

وضع كل خطوة

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

yaml
annotation_schemes:
  - annotation_type: process_reward
    name: prm_per_step
    mode: "per_step"

مخطط مراجعة الأكواد

توفر واجهة مراجعة الأكواد أدوات تعليق بنمط pull request على GitHub:

تعليق مراجعة الأكواد بتعليقات مضمّنة على الـ diffيمكن للمعلّقين النقر على أسطر الـ diff لإضافة تعليقات مضمّنة، وتقييم الملفات، وإصدار أحكام بالقبول أو الرفض

يأتي مخطط مراجعة الأكواد بالتعليق بنمط pull request من GitHub إلى تتبعات الوكلاء. ويمكن للمعلّقين ترك تعليقات مضمّنة على أسطر بعينها داخل الـ diffs، وتقييم كل ملف على حدة، وإصدار حكم عام.

yaml
annotation_schemes:
  - annotation_type: code_review
    name: agent_review
    comment_categories:
      enabled: true
      categories:                 # Optional categorization for comments
        - "Bug"
        - "Style"
        - "Logic Error"
        - "Unnecessary Change"
        - "Missing Error Handling"
    file_rating_dimensions:
      enabled: true
      scale: [1, 2, 3, 4, 5]
      labels: ["Poor", "Below Average", "Acceptable", "Good", "Excellent"]
    verdict_options:
      enabled: true
      options:
        - value: "approve"
          text: "Approve"
          description: "Changes are correct and complete"
        - value: "request_changes"
          text: "Request Changes"
          description: "Changes need fixes before merging"
        - value: "comment"
          text: "Comment"
          description: "General feedback, no strong opinion"

محوّلات التتبعات: استيراد من أي وكيل

يتضمن Potato محوّلات جاهزة لأشهر ثلاث صيغ لوكلاء البرمجة. وتوحّد المحوّلات كل صيغة إلى تمثيل التتبع المنظم الداخلي في Potato.

Claude Code (واجهة Anthropic Messages API)

تستخدم تتبعات Claude Code صيغة Anthropic Messages API مع كتلتَي المحتوى tool_use وtool_result. ويستخرج المحوّل تحريرات الملفات وأوامر bash وقراءات الملفات من استدعاءات الأدوات، ويحفظ نص استدلال المساعد.

bash
# Convert Claude Code traces to Potato format
potato convert-traces \
  --format claude_code \
  --input ./claude_traces/ \
  --output ./potato_data/traces.jsonl

Aider (محادثة Markdown بكتل تحرير)

ينتج Aider سجلات محادثة بصيغة markdown مع كتل تحرير من نوع SEARCH/REPLACE. ويحلل المحوّل هذه الكتل ليعيد بناء تحريرات الملفات، ويستخرج أوامر الصدفة من كتل الكود المسيّجة.

bash
# Convert Aider chat logs
potato convert-traces \
  --format aider \
  --input ./aider_logs/ \
  --output ./potato_data/traces.jsonl

SWE-Agent (تفكير/إجراء/ملاحظة)

يستخدم SWE-Agent صيغة حلقة تفكير/إجراء/ملاحظة. ويربط المحوّل الإجراءات بأنواع الخطوات المناسبة (تحرير، bash، قراءة)، ويحفظ سلسلة استدلال الوكيل ككتل تفكير قابلة للطي.

bash
# Convert SWE-Agent trajectories
potato convert-traces \
  --format swe_agent \
  --input ./swe_agent_trajectories/ \
  --output ./potato_data/traces.jsonl

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

إن كانت لديك تتبعات من وكلاء متعددين، يستطيع Potato كشف الصيغة تلقائياً بحسب بنية كل ملف:

bash
# Auto-detect format for mixed trace directories
potato convert-traces \
  --format auto \
  --input ./mixed_traces/ \
  --output ./potato_data/traces.jsonl

صيغ التصدير لخط التدريب

يمكن تصدير التتبعات المعلَّقة بصيغ جاهزة لتدريب النماذج.

صيغة PRM

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

python
# Exported PRM format (one line per trace)
{
  "trace_id": "trace_001",
  "steps": [
    {"step_idx": 0, "content": "Read file src/main.py", "label": "correct"},
    {"step_idx": 1, "content": "Edit src/main.py: fix import", "label": "correct"},
    {"step_idx": 2, "content": "Run tests", "label": "correct"},
    {"step_idx": 3, "content": "Edit src/utils.py: wrong fix", "label": "incorrect"},
    {"step_idx": 4, "content": "Run tests again", "label": "incorrect"}
  ],
  "first_error_step": 3
}

أزواج التفضيل لـ DPO/RLHF

بالاقتران مع تعليقات المقارنة الزوجية، يولّد Potato أزواج تفضيل صالحة لتدريب Direct Preference Optimization أو RLHF:

python
# Exported preference pair format
{
  "prompt": "Fix the failing test in src/test_utils.py",
  "chosen": {"trace_id": "trace_001", "steps": [...]},
  "rejected": {"trace_id": "trace_002", "steps": [...]},
  "preference_strength": 0.85
}

نتائج متوافقة مع SWE-bench

صدّر التعليقات بصيغة متوافقة مع أدوات تقييم SWE-bench للمقارنة المباشرة مع النتائج المنشورة:

bash
# Export to SWE-bench format
potato export \
  --format swe_bench \
  --project ./my_project/ \
  --output ./swe_bench_results.json

بداية سريعة

الانتقال من الصفر إلى خادم تعليق عامل يستغرق نحو خمس دقائق.

التثبيت

bash
pip install potato-annotation[coding-agents]

حوّل تتبعاتك

bash
# Convert traces from your coding agent
potato convert-traces \
  --format auto \
  --input ./my_agent_traces/ \
  --output ./data/traces.jsonl

أنشئ تهيئتك

هذه تهيئة كاملة لمشروع تقييم وكلاء برمجة يستخدم مخططَي PRM ومراجعة الأكواد معاً:

yaml
# config.yaml
project_name: "Coding Agent Evaluation"
port: 8000
 
data:
  source: "local"
  input_path: "./data/traces.jsonl"
  data_format: "coding_trace"
 
coding_agent:
  display:
    diff_style: "unified"
    context_lines: 3
    syntax_highlighting: true
    collapse_large_diffs: true
    terminal_theme: "dark"
    max_terminal_height: 400
    show_exit_codes: true
    file_tree:
      enabled: true
      position: "left"
      show_change_icons: true
    collapsible:
      auto_collapse_thinking: true
      auto_collapse_long_output: true
 
annotation_schemes:
  - annotation_type: process_reward
    name: prm_evaluation
    mode: "first_error"
    description: "Click the first step where the agent makes a mistake"
 
  - annotation_type: code_review
    name: code_quality
    comment_categories:
      enabled: true
      categories: ["Bug", "Logic Error", "Style", "Missing Error Handling"]
    file_rating_dimensions:
      enabled: true
      scale: [1, 2, 3, 4, 5]
    verdict_options:
      enabled: true
      options:
        - value: "approve"
          text: "Approve"
        - value: "request_changes"
          text: "Request Changes"
        - value: "comment"
          text: "Comment"
 
  - annotation_type: text
    name: overall_notes
    description: "Additional Notes"
    placeholder: "Any other observations about this trace..."
output:
  path: "./output/"
  format: "jsonl"
  export_formats:
    - "prm"
    - "swe_bench"
 
quality_control:
  inter_annotator_agreement: true
  overlap_percentage: 20
  minimum_time_per_instance: 30  # seconds
 
annotators:
  - username: "annotator1"
  - username: "annotator2"

شغّل الخادم

bash
potato start config.yaml -p 8000

افتح http://localhost:8000 في متصفحك، وسجّل الدخول، وابدأ التعليق. تحصل على تصيير الـ diff كاملاً ومخرجات الطرفية وتعليق مكافأة العملية الموصوف أعلاه.

ما القادم

هذا إصدار أول، وأمامنا أشياء أخرى نريد إنجازها. على القائمة: دعم صيغ وكلاء أكثر، وتصوّر بصري أفضل لإعادة الهيكلة عبر ملفات متعددة، وتكامل أوثق مع أطر التدريب مثل OpenRLHF وTRL.

وإن كتبت محوّل تتبعات جديداً أو مخططاً أو صيغة تصدير، فيسعدنا أن تساهم بها. وإن كان فريقك يقيّم وكلاء برمجة وواجه ما لا يغطيه هذا الإعداد، فافتح issue في مستودعنا على GitHub.