التعليق التوضيحي للوكلاء
قيّم وكلاء الذكاء الاصطناعي في Potato باستخدام 15 محوّل صيغ تتبع و5 أنواع عرض ومخططات جاهزة لوكلاء استخدام الأدوات وتصفح الويب والبرمجة والمحادثة. يشمل تقييم PRM وتقييم الرُبريك.
جديد في الإصدار v2.3.0
How agentic annotation works
يتم نشر وكلاء الذكاء الاصطناعي بشكل متزايد للمهام المعقدة متعددة الخطوات: تصفح الويب، وكتابة الأكواد، واستدعاء واجهات API، وتنسيق الوكلاء الفرعيين. لكن تقييم ما إذا كان الوكيل قد قام فعلاً بالشيء الصحيح يتطلب حكماً بشرياً بدقة لا تستطيع أدوات التعليق التوضيحي التقليدية دعمها. قد يحتوي تتبع وكيل واحد على عشرات الخطوات واستدعاءات الأدوات والتفكير الوسيط ولقطات الشاشة والقرارات المتفرعة. يحتاج المعلّقون إلى رؤية كل هذا السياق والتنقل فيه بكفاءة وتقديم تقييمات منظمة على مستوى التتبع وعلى مستوى الخطوة الفردية.
يعالج نظام التعليق التوضيحي للوكلاء في Potato هذا من خلال أربع قدرات:
- 15 محوّل صيغ تتبع يقوم بتوحيد سجلات الوكلاء من أي إطار عمل رئيسي إلى صيغة موحدة
- 5 أنواع عرض متخصصة محسّنة لأنماط وكلاء مختلفة (استخدام الأدوات، تصفح الويب، البرمجة، المحادثة، المراقبة المباشرة)
- 9 مخططات تعليق توضيحي جاهزة تغطي أبعاد تقييم الوكلاء الأكثر شيوعاً
- 4 أنواع تعليق توضيحي مصممة لغرض محدد للتقييم المتقدم: تقييم المسار، وتقييم الرُبريك، والمقارنة الزوجية، وتعليق مكافأة العملية
محوّلات صيغ التتبع
تأتي تتبعات الوكلاء بصيغ مختلفة تماماً حسب إطار العمل. يوفر Potato 15 محوّلاً يقوم بتوحيدها إلى تمثيل داخلي موحد. تحدد المحوّل في تهيئتك، أو تدع Potato يكتشف الصيغة تلقائياً.
مرجع المحوّلات
| المحوّل | صيغة المصدر | الحقول الرئيسية المستخرجة |
|---|---|---|
openai | OpenAI Assistants API / سجلات استدعاء الدوال | messages، tool_calls، نتائج الدوال |
anthropic | Anthropic Claude tool_use / Messages API | كتل المحتوى، tool_use، tool_result |
swebench | تتبعات مهام SWE-bench | patch، نتائج الاختبار، المسار |
swe_agent_trajectory | ملفات مسارات SWE-Agent | thought، action، observation، exit_status |
aider | سجل محادثة Aider للبرمجة الثنائية | الأدوار، كتل التعديل، مسارات الملفات المعدَّلة |
otel | تصدير 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/Observation | thought، action، action_input، observation |
webarena | JSON تتبع WebArena / VisualWebArena | الإجراءات، لقطات الشاشة، لقطات DOM، عناوين URL |
atif | Agent Trace Interchange Format (ATIF) | الخطوات، الملاحظات، البيانات الوصفية |
web_agent | تتبعات تصفح وكلاء الويب (Mind2Web وComputer Use والتسجيلات الخام) | الإجراءات، الإحداثيات، منطقة العرض، لقطات الشاشة |
claude_code | سجلات جلسات Claude Code ووكلاء البرمجة الأخرى | كتل tool_use، الفروقات، مخرجات الطرفية |
التهيئة
حدد المحوّل في تهيئة مشروعك:
instance_display:
fields:
- key: task_description
type: text
label: "Task"
- key: conversation
type: agent_trace
label: "Agent trace"
span_target: true
display_options:
show_step_numbers: true
show_summary: true
collapse_observations: false
step_type_colors:
thought: "#e8f4fd"
action: "#fff3e0"
observation: "#e8f5e9"يجب أن يكون كل سطر في ملف التتبع كائن JSON يحتوي على تتبع الوكيل الخام. يتولى المحوّل الباقي.
لتتبعات الوكلاء المتعددة حيث يستخدم وكلاء مختلفون أُطر عمل مختلفة، يمكنك تحديد محوّلات لكل وكيل:
instance_display:
fields:
- key: conversation
type: dialogue
label: "Agent trace"
span_target: true
display_options:
show_turn_numbers: true
alternating_shading: true
max_height: 600الاكتشاف التلقائي
إذا لم تكن متأكداً من المحوّل الذي ستستخدمه، اضبط trace_converter: auto:
instance_display:
fields:
- key: trace
type: web_agent_trace
label: "Browsing session"
display_options:
show_overlays: true
show_filmstrip: true
filmstrip_size: 150
screenshot_max_width: 900
show_thought: true
show_element_info: trueيفحص Potato أول 10 تتبعات ويختار المحوّل الأفضل تطابقاً بناءً على توقيعات الحقول. يتم تسجيل تحذير إذا كانت الثقة أقل من 80%، وفي هذه الحالة يجب تحديد المحوّل صراحةً.
المحوّلات المخصصة
إذا لم يكن إطار عمل الوكيل الخاص بك مدرجاً، يمكنك كتابة محوّل 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}سجّله في التهيئة:
instance_display:
fields:
- key: steps
type: coding_trace
label: "Coding session"
span_target: true
display_options:
diff_view: unified
show_file_tree: true
show_reasoning: true
terminal_theme: dark
collapse_long_outputs: true
max_output_lines: 50أنواع العرض
بمجرد تحويل التتبعات، يعرضها Potato باستخدام أحد أنواع العرض المتخصصة الخمسة. كل نوع محسّن لنمط وكيل مختلف.
1. عرض تتبع الوكيل
العرض الافتراضي للوكلاء التي تستخدم الأدوات (OpenAI function calling، Anthropic tool_use، ReAct، LangChain، إلخ). يعرض كل خطوة كبطاقة مع ترميز لوني حسب نوع الخطوة.
instance_display:
fields:
- key: messages
type: interactive_chat
label: "Conversation"
display_options:
show_turn_numbers: true
alternating_shading: trueالميزات:
- بطاقات الخطوات مع حدود يسرى ملونة تشير إلى النوع (تفكير، إجراء، ملاحظة، خطأ)
- أقسام قابلة للطي للملاحظات الطويلة أو مخرجات الأدوات (عتبة قابلة للتهيئة)
- تنسيق JSON لمعاملات استدعاء الأدوات والاستجابات المنظمة
- تمييز بناء الجملة لكتل الأكواد في الملاحظات
- شريط زمني للخطوات جانبي يعرض التتبع الكامل بنظرة سريعة
- التنقل إلى خطوة للتتبعات الطويلة
2. عرض تتبع وكيل الويب
مصمم خصيصاً لوكلاء تصفح الويب (WebArena، VisualWebArena، تسجيلات المتصفح الخام). يعرض لقطات الشاشة مع تراكبات SVG تُظهر أين نقر الوكيل أو كتب أو مرّر.
instance_display:
fields:
- key: screenshots
type: gallery
label: "Screenshots"
display_options:
layout: horizontal
thumbnail_size: 300
zoomable: trueالميزات:
- معرض لقطات الشاشة مع عرض بالحجم الكامل وتكبير
- تراكبات SVG تُظهر أهداف النقر (دوائر حمراء)، ومناطق إدخال النص (تمييز أزرق)، واتجاهات التمرير
- عرض الشريط السينمائي في الأسفل يعرض جميع لقطات الشاشة كصور مصغرة للتنقل السريع
- وصف الإجراء نص أسفل كل لقطة شاشة (مثل "النقر على زر 'Add to Cart'")
- شريط URL يعرض عنوان URL للصفحة الحالية في كل خطوة
- مقارنة قبل/بعد للخطوات التي تعدّل محتوى الصفحة
3. عرض المحادثة التفاعلية
لتقييم وكلاء المحادثة وروبوتات الدردشة. يدعم وضعين فرعيين: المحادثة المباشرة حيث يتفاعل المعلّقون مع الوكيل في الوقت الفعلي، ومراجعة التتبع حيث يقيّم المعلّقون محادثة مسجلة.
annotation_schemes:
- annotation_type: radio
name: task_success
description: "Did the agent complete the task?"
labels:
- name: success
tooltip: "Fully completed correctly"
- name: partial
tooltip: "Partially completed, or completed with errors"
- name: failure
tooltip: "Not completed"
sequential_key_binding: true
- annotation_type: likert
name: efficiency
description: "How efficient was the agent's path?"
size: 5
min_label: "Very inefficient"
max_label: "Optimal"
- annotation_type: radio
name: safety
description: "Did the agent take any unsafe action?"
labels:
- name: safe
- name: minor_concern
- name: major_violationوضع مراجعة التتبع يعرض محادثة مسجلة مع عدد الرموز وزمن الاستجابة اختيارياً لكل رسالة. يمكن للمعلّقين تقييم الأدوار الفردية أو المحادثة بأكملها.
وضع المحادثة المباشرة يربط المعلّقين بوكيل يعمل عبر نظام وكيل الوسيط (انظر أدناه). يتحدث المعلّقون مع الوكيل، ثم يعلّقون على المحادثة الناتجة.
4. عرض تتبع البرمجة
مصمم خصيصاً لجلسات وكلاء البرمجة (Claude Code، Aider، SWE-Agent). يعرض diffs الأكواد مع تمييز بناء الجملة، ومخرجات الطرفية في كتل داكنة، وقراءات الملفات مع أرقام الأسطر.
- annotation_type: multiselect
name: mast_errors
description: "Select every failure mode observed in this trace"
labels:
- name: disobey_task_spec
tooltip: "Does not follow the task specification"
- name: step_repetition
tooltip: "Repeats the same action unnecessarily"
- name: loss_of_history
tooltip: "Forgets prior context"
- name: unaware_of_termination
tooltip: "Does not recognize when to stop"
- name: fail_to_clarify
tooltip: "Fails to ask for needed clarification"
- name: task_derailment
tooltip: "Goes off track from the main task"
- name: reasoning_action_mismatch
tooltip: "Reasoning contradicts the action taken"
- name: premature_termination
tooltip: "Stops before the task is complete"
- name: incomplete_verification
tooltip: "Does not verify the result"
- name: no_errors
tooltip: "No errors observed"الميزات:
- عرض diff موحّد مع تمييز أحمر/أخضر لعمليات التحرير
- كتل طرفية داكنة لمخرجات أوامر bash/shell
- كتل أكواد مرقّمة الأسطر لعمليات قراءة الملفات
- شريط جانبي بشجرة الملفات يعرض جميع الملفات التي تم تعديلها أثناء الجلسة
- مخرجات طويلة قابلة للطي للمحتوى المطوّل للطرفية أو الملفات
انظر التعليق التوضيحي لوكيل البرمجة للمرجع الكامل.
5. عرض الوكيل المباشر
مراقبة في الوقت الفعلي لوكلاء الذكاء الاصطناعي مع عناصر تحكم للتدخل البشري. يدعم وكلاء تصفح الويب ووكلاء البرمجة.
- annotation_type: span
name: hallucination_spans
description: "Mark claims the trace does not support"
labels:
- name: hallucination
tooltip: "Claim not grounded in the observations"
- name: incorrect_fact
tooltip: "Factually incorrect statement"الميزات:
- بث في الوقت الفعلي لإجراءات الوكيل عبر Server-Sent Events
- إيقاف مؤقت/استئناف الوكيل بين الخطوات
- إرسال تعليمات لإعادة توجيه الوكيل في منتصف المهمة
- تولّي التحكم اليدوي
- التراجع إلى أي نقطة تحقق سابقة (تستخدم وكلاء البرمجة نقاط تحقق قائمة على git)
- التفريع وإعادة التشغيل من أي نقطة تحقق بتعليمات مختلفة
انظر تقييم الوكيل المباشر ووكيل البرمجة المباشر لتفاصيل التهيئة.
أنواع التعليق التوضيحي المتقدمة
بالإضافة إلى التقييمات لكل دور والمخططات الجاهزة، يتضمن Potato أربعة أنواع تعليق توضيحي مصممة لغرض محدد للتقييم المنظم للوكلاء.
تقييم المسار (trajectory_eval)
توطين الأخطاء لكل خطوة مع تصنيفات أخطاء هرمية وتسجيل الخطورة. تحصل كل خطوة على تقييم صحة، ونوع خطأ، ومستوى خطورة، وتبرير اختياري. يُنقص متعقّب درجات جارٍ بناءً على الخطورة.
display_options:
show_turn_numbers: true
per_turn_ratings:
speakers: ["Agent (Action)"]
schema_name: "action_correctness"
scheme:
type: likert
size: 3
labels: ["Wrong", "Right"]انظر منشور المدونة حول تقييم المسار للحصول على دليل كامل.
تقييم الرُبريك (rubric_eval)
تقييم شبكي متعدد المعايير بنمط MT-Bench. عرّف معايير مخصصة ومقياس تقييم. يقيّم المعلّقون كل معيار بشكل مستقل.
display_options:
per_turn_ratings:
speakers: ["Agent (Action)"]
schemes:
- schema_name: action_correctness
scheme:
type: likert
size: 3
labels: ["Wrong", "Right"]
- schema_name: reasoning_quality
scheme:
type: likert
size: 5
labels: ["Poor", "Excellent"]انظر دليل تقييم الرُبريك لتعليمات الإعداد.
المقارنة الزوجية
قارن تتبعَي وكيلين جنباً إلى جنب بثلاثة أوضاع:
- ثنائي: انقر لتحديد A أو B (مع تعادل اختياري)
- مقياس: شريط تمرير من "A أفضل بكثير" إلى "B أفضل بكثير"
- متعدد الأبعاد: A/B/تعادل مستقل لكل بُعد مع تبرير مطلوب
- annotation_type: multirate
name: step_ratings
description: "Rate each step"
options_from_data: step_summaries
labels: ["Incorrect", "Questionable", "Correct"]انظر دليل المقارنة الزوجية لجميع الأوضاع الثلاثة.
تعليق مكافأة العملية
تعليق ثنائي لصحة كل خطوة محسّن لتدريب نماذج مكافأة العملية. وضعان: الخطأ الأول (انقر على أول خطوة خاطئة، ويُعلَّم الباقي تلقائياً) ولكل خطوة (قيّم كل واحدة بشكل مستقل).
- annotation_type: trajectory_eval
name: step_eval
description: "Mark each step and classify any error"
steps_key: steps
step_text_key: content
error_types:
- name: reasoning
subtypes:
- logical_error
- incorrect_assumption
- name: action
subtypes:
- wrong_tool
- wrong_arguments
- premature_termination
severities:
- name: minor
weight: -1
- name: major
weight: -5
show_score: trueانظر تعليق مكافأة العملية للمرجع الكامل.
التقييمات لكل دور
للحوار والتقييمات متعددة الخطوات، غالباً ما تحتاج إلى تقييمات على الأدوار الفردية بدلاً من (أو بالإضافة إلى) التتبع الكلي. يدعم Potato التعليق التوضيحي لكل دور لأي نوع عرض.
- annotation_type: rubric_eval
name: agent_rubric
description: "Rate this run on each criterion"
scale_points: 5
scale_labels: ["Very poor", "Poor", "Acceptable", "Good", "Excellent"]
criteria:
- name: correctness
description: "Did the agent produce the correct result?"
- name: efficiency
description: "Did the agent take an efficient path?"
- name: safety
description: "Did the agent avoid unsafe actions?"
show_overall: trueتظهر تقييمات كل دور مضمّنة بجانب كل بطاقة خطوة. يتيح لك كتلة conditional عرض أسئلة المتابعة فقط عند تحديد تقييمات معينة، مما يحافظ على نظافة الواجهة.
صيغة مخرجات التقييم لكل دور
يتم حفظ تعليقات كل دور مع فهارس الخطوات:
{
"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 طبقة وكيل وسيط. يقع الوسيط بين واجهة التعليق التوضيحي والواجهة الخلفية للوكيل، ويسجل المحادثة الكاملة للمراجعة لاحقاً.
- annotation_type: pairwise
name: agent_comparison
description: "Which run was better?"
mode: multi_dimension
items_key: runs
labels: ["Agent A", "Agent B"]
dimensions:
- name: correctness
description: "Which result is correct?"
allow_tie: true
- name: efficiency
description: "Which took the shorter path?"
allow_tie: trueأنواع الوسيط
وسيط OpenAI يوجّه الرسائل إلى API متوافق مع OpenAI:
- annotation_type: process_reward
name: step_rewards
description: "Click the first step where the agent went wrong"
mode: first_error
steps_key: steps
step_text_key: contentوسيط HTTP يوجّه الرسائل إلى أي نقطة نهاية HTTP (خادم الوكيل الخاص بك):
live_agent:
endpoint_type: anthropic_vision # or openai_vision, ollama_vision
max_steps: 30
step_delay: 1.0
history_window: 5
timeout: 60
viewport:
width: 1280
height: 720
system_prompt: "Complete the task using the browser."
ai_config:
model: claude-sonnet-4-20250514
api_key: ${ANTHROPIC_API_KEY}
max_tokens: 4096
temperature: 0.3
instance_display:
fields:
- key: task
type: live_agent
label: "Live session"
display_options:
show_controls: true
allow_instructions: true
allow_takeover: true
show_overlays: trueوسيط الصدى يعكس رسالة المستخدم (مفيد للاختبار وتطوير واجهة المستخدم):
agent_proxy:
type: openai
model: "gpt-4o"
api_key: ${OPENAI_API_KEY}
system_prompt: "You are a helpful customer service agent."
temperature: 0.7
max_tokens: 1024
sandbox:
max_steps: 20
max_session_seconds: 600
rate_limit_per_minute: 10
request_timeout_seconds: 60مخططات التعليق التوضيحي الجاهزة
يوفر Potato 9 مخططات تعليق توضيحي مصممة خصيصاً لتقييم الوكلاء. استخدمها مباشرةً أو كنقاط انطلاق لمخططاتك الخاصة.
| المخطط | النوع | الوصف |
|---|---|---|
agent_task_success | radio | نجاح/فشل ثنائي مع خيار نجاح جزئي |
agent_step_correctness | per_turn_rating (radio) | تقييمات صحيح/خاطئ/غير ضروري لكل خطوة |
agent_error_taxonomy | per_turn_rating (multiselect) | تصنيف أخطاء من 12 فئة (أداة خاطئة، هلوسة، حلقة، إلخ) |
agent_safety | radio + text | كشف انتهاكات الأمان مع مقياس الخطورة |
agent_efficiency | likert | تقييم ما إذا كان الوكيل استخدم مساراً فعالاً |
agent_instruction_following | likert | تقييم الالتزام بتعليمات المستخدم الأصلية |
agent_explanation_quality | likert | تقييم جودة تفكير/شروحات الوكيل |
agent_web_action_correctness | per_turn_rating (radio) | تقييم إجراءات الويب لكل خطوة (الهدف الصحيح، نوع الإجراء الصحيح) |
agent_conversation_quality | multirate | جودة محادثة متعددة الأبعاد (المساعدة، الدقة، النبرة، الأمان) |
قم بتحميل مخطط جاهز بالاسم:
agent_proxy:
type: http
url: "https://my-agent.example.com/chat"
headers:
Authorization: "Bearer ${AGENT_API_KEY}"
message_key: message
response_key: response
session_id_key: session_id
send_history: true
history_key: messagesأو ادمج المخططات الجاهزة مع مخططات مخصصة:
agent_proxy:
type: echo
responses:
- "Thanks, let me look into that."
- "I have found your order."مثال كامل: تقييم وكيل ReAct
إليك تهيئة كاملة لتقييم تتبعات وكلاء بنمط ReAct مع تقييمات لكل خطوة:
annotation_task_name: "ReAct Agent Evaluation"
task_dir: "."
data_files:
- "data/traces.jsonl"
item_properties:
id_key: trace_id
text_key: task_description
instance_display:
fields:
- key: task_description
type: text
label: "Task"
- key: conversation
type: agent_trace
label: "Agent trace"
span_target: true
display_options:
show_step_numbers: true
show_summary: true
collapse_observations: true
step_type_colors:
thought: "#e8f4fd"
action: "#fff3e0"
observation: "#e8f5e9"
annotation_schemes:
- annotation_type: radio
name: task_success
description: "Did the agent complete the task?"
labels:
- name: success
- name: partial
- name: failure
sequential_key_binding: true
- annotation_type: likert
name: efficiency
description: "How efficient was the agent's path?"
size: 5
min_label: "Very inefficient"
max_label: "Optimal"
- annotation_type: multiselect
name: mast_errors
description: "Select every failure mode observed"
labels:
- name: step_repetition
- name: task_derailment
- name: reasoning_action_mismatch
- name: premature_termination
- name: no_errors
- annotation_type: text
name: failure_reason
description: "If the agent failed, describe what went wrong"
rows: 3
label_requirement:
required: false
output_annotation_dir: "annotation_output/"
export_annotation_format: jsonl
user_config:
allow_all_users: trueبيانات الإدخال النموذجية (data/react_traces.jsonl):
{
"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."}
]
}ابدأ الخادم:
potato start config.yaml -p 8000قراءات إضافية
- التعليق التوضيحي لوكيل البرمجة — عرض diffs، مخرجات الطرفية، شجرة الملفات لوكلاء البرمجة
- تعليق مكافأة العملية — بيانات تدريب PRM مع وضعَي الخطأ الأول ولكل خطوة
- التعليق التوضيحي لمراجعة الأكواد — تعليقات مضمّنة وأحكام بنمط PR على GitHub
- وكيل البرمجة المباشر — مراقبة في الوقت الفعلي لوكلاء البرمجة مع التراجع والتفريع
- تقييم الوكيل المباشر — مراقبة في الوقت الفعلي لوكلاء الويب
- التعليق التوضيحي لوكيل الويب — مراجعة تتبعات وكلاء الويب المسجلة مسبقاً
- تقييم وكلاء الذكاء الاصطناعي: دليل شامل — شرح تفصيلي لمشروع تقييم وكيل كامل
- صيغ التصدير — تصدير بيانات تقييم الوكلاء
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.