إطلاق التعليق التوضيحي لوكلاء البرمجة: قيّم تتبعات Claude Code وAider وSWE-Agent
صار Potato يدعم التعليق التوضيحي لوكلاء البرمجة مع تصيير الـ diff وعرض مخرجات الطرفية ومخططات مكافأة العملية. استورد التتبعات من Claude Code وAider وSWE-Agent.
لماذا يهم التعليق التوضيحي لوكلاء البرمجة
تحسّن وكلاء البرمجة مثل Claude Code وAider وSWE-Agent بسرعة، وصار الناس بحاجة فعلية إلى تقييم عملهم. التشغيلة الواحدة مسار فوضوي: تحريرات كود، وأوامر طرفية، وقراءات ملفات، وخطوات تفكير، كلها متسلسلة. ولتدريب وكيل أفضل تحتاج إلى تغذية راجعة بشرية على هذه التشغيلات، وأدوات التعليق التي كانت بيد معظم الفرق لم تُبنَ يوماً لهذا النوع من البيانات.
فواجهة التعليق النصية العادية لا تستطيع تصيير diff موحّد، ولا تنسيق مخرجات الطرفية، ولا التعامل مع البنية المتداخلة لتتبع الوكيل. فينتهي الأمر بالمختبرات إلى كتابة واجهات تقييم خاصة بها، فتعيد العمل نفسه وتنتهي بمجموعات بيانات لا يفهم بعضها بعضاً.
صار Potato يتولى التعليق التوضيحي لوكلاء البرمجة مباشرةً، بمكوّنات تصيير مبنية للتتبعات، ومخططات تعليق لهذا النوع من التقييم، وصيغ تصدير تُغذّي التدريب مباشرةً. للاطلاع على مرجع الميزة الكامل، انظر وثائق التعليق التوضيحي لوكلاء البرمجة ودليل تقييم الوكلاء الأوسع.
CodingTraceDisplay: عارض تتبعات
يمر معظم تجربة التعليق عبر مكوّن CodingTraceDisplay. وهو يصيّر كل خطوة من مسار الوكيل بالتصوّر البصري المناسب لنوع تلك الخطوة.
هكذا تبدو واجهة التعليق التوضيحي لوكلاء البرمجة في Potato:
يصيّر CodingTraceDisplay فروق الكود ومخرجات الطرفية وقراءات الملفات بتنسيق سليم
عرض الـ diff الموحّد
تُصيَّر تحريرات الكود بوصفها diffs موحّدة بإبراز أحمر/أخضر للأسطر المحذوفة والمضافة. ويتضمن عرض الـ diff أرقام الأسطر، وترويسات مسارات الملفات، وأسطر السياق حول التغييرات. وهذا يحاكي تجربة pull request المألوفة على GitHub التي يعرفها معظم المطورين.
# 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 ومخرجات قابلة للتمرير للنتائج الطويلة. وتعرض كتل الطرفية الأمر المنفَّذ، ودليل العمل، ورمز الخروج.
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كتل كود مرقّمة الأسطر
تُعرض عمليات قراءة الملفات ككتل كود مبرَزة البنية اللغوية مع أرقام الأسطر. وحين يقرأ الوكيل نطاقاً محدداً من الأسطر، تُعرض تلك الأسطر وحدها بأرقامها الأصلية محفوظة، فيسهل مقابلتها بالملف الفعلي.
شريط شجرة الملفات الجانبي
يعرض شريط جانبي قابل للطي كل الملفات التي مُسّت أثناء المسار، منظمةً في بنية شجرية. ويحمل كل ملف أيقونة تدل على ما إذا كان أُنشئ أو عُدّل أو قُرئ أو حُذف. والنقر على ملف في الشجرة يمرّر العرض إلى أول ظهور له في التتبع.
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. وكتل التفكير والاستدلال الصادرة عن الوكلاء مطوية افتراضياً لكنها متاحة للمراجعة.
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 مصممين لمقايضات مختلفة بين السرعة والدقة.
وضع الخطأ الأول
في وضع الخطأ الأول، يمرّ المعلّق على المسار وينقر على أول خطوة أخطأ فيها الوكيل. وتُوسم كل الخطوات السابقة للخطوة المنقورة صحيحةً تلقائياً، وتُوسم كل الخطوات التالية لها (بما فيها هي) خاطئةً تلقائياً. وهذا يسرّع التعليق كثيراً لأن المعلّق لا يحتاج إلا إلى تحديد نقطة واحدة.
annotation_schemes:
- annotation_type: process_reward
name: prm_first_error
mode: "first_error"
description: "Click the first step where the agent makes an error"وضع كل خطوة
في وضع كل خطوة، تنال كل خطوة تقييماً مستقلاً. وهذا ينتج بيانات تدريب أكثر تفصيلاً لكنه يستغرق وقتاً أطول لكل تتبع. ويقيّم المعلّقون كل خطوة بأنها صحيحة أو خاطئة أو صحيحة جزئياً.
annotation_schemes:
- annotation_type: process_reward
name: prm_per_step
mode: "per_step"مخطط مراجعة الأكواد
توفر واجهة مراجعة الأكواد أدوات تعليق بنمط pull request على GitHub:
يمكن للمعلّقين النقر على أسطر الـ diff لإضافة تعليقات مضمّنة، وتقييم الملفات، وإصدار أحكام بالقبول أو الرفض
يأتي مخطط مراجعة الأكواد بالتعليق بنمط pull request من GitHub إلى تتبعات الوكلاء. ويمكن للمعلّقين ترك تعليقات مضمّنة على أسطر بعينها داخل الـ diffs، وتقييم كل ملف على حدة، وإصدار حكم عام.
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 وقراءات الملفات من استدعاءات الأدوات، ويحفظ نص استدلال المساعد.
# Convert Claude Code traces to Potato format
potato convert-traces \
--format claude_code \
--input ./claude_traces/ \
--output ./potato_data/traces.jsonlAider (محادثة Markdown بكتل تحرير)
ينتج Aider سجلات محادثة بصيغة markdown مع كتل تحرير من نوع SEARCH/REPLACE. ويحلل المحوّل هذه الكتل ليعيد بناء تحريرات الملفات، ويستخرج أوامر الصدفة من كتل الكود المسيّجة.
# Convert Aider chat logs
potato convert-traces \
--format aider \
--input ./aider_logs/ \
--output ./potato_data/traces.jsonlSWE-Agent (تفكير/إجراء/ملاحظة)
يستخدم SWE-Agent صيغة حلقة تفكير/إجراء/ملاحظة. ويربط المحوّل الإجراءات بأنواع الخطوات المناسبة (تحرير، bash، قراءة)، ويحفظ سلسلة استدلال الوكيل ككتل تفكير قابلة للطي.
# Convert SWE-Agent trajectories
potato convert-traces \
--format swe_agent \
--input ./swe_agent_trajectories/ \
--output ./potato_data/traces.jsonlالكشف التلقائي
إن كانت لديك تتبعات من وكلاء متعددين، يستطيع Potato كشف الصيغة تلقائياً بحسب بنية كل ملف:
# Auto-detect format for mixed trace directories
potato convert-traces \
--format auto \
--input ./mixed_traces/ \
--output ./potato_data/traces.jsonlصيغ التصدير لخط التدريب
يمكن تصدير التتبعات المعلَّقة بصيغ جاهزة لتدريب النماذج.
صيغة PRM
وسوم مكافأة على مستوى الخطوة لتدريب نماذج مكافأة العملية:
# 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:
# 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 للمقارنة المباشرة مع النتائج المنشورة:
# Export to SWE-bench format
potato export \
--format swe_bench \
--project ./my_project/ \
--output ./swe_bench_results.jsonبداية سريعة
الانتقال من الصفر إلى خادم تعليق عامل يستغرق نحو خمس دقائق.
التثبيت
pip install potato-annotation[coding-agents]حوّل تتبعاتك
# Convert traces from your coding agent
potato convert-traces \
--format auto \
--input ./my_agent_traces/ \
--output ./data/traces.jsonlأنشئ تهيئتك
هذه تهيئة كاملة لمشروع تقييم وكلاء برمجة يستخدم مخططَي PRM ومراجعة الأكواد معاً:
# 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"شغّل الخادم
potato start config.yaml -p 8000افتح http://localhost:8000 في متصفحك، وسجّل الدخول، وابدأ التعليق. تحصل على تصيير الـ diff كاملاً ومخرجات الطرفية وتعليق مكافأة العملية الموصوف أعلاه.
ما القادم
هذا إصدار أول، وأمامنا أشياء أخرى نريد إنجازها. على القائمة: دعم صيغ وكلاء أكثر، وتصوّر بصري أفضل لإعادة الهيكلة عبر ملفات متعددة، وتكامل أوثق مع أطر التدريب مثل OpenRLHF وTRL.
وإن كتبت محوّل تتبعات جديداً أو مخططاً أو صيغة تصدير، فيسعدنا أن تساهم بها. وإن كان فريقك يقيّم وكلاء برمجة وواجه ما لا يغطيه هذا الإعداد، فافتح issue في مستودعنا على GitHub.