التعليق التوضيحي للوكلاء
تقييم وكلاء الذكاء الاصطناعي مع عروض تتبع متخصصة و12 محوّل صيغ ومخططات تعليق توضيحي مصممة خصيصاً.
التعليق التوضيحي للوكلاء
جديد في الإصدار v2.3.0
يتم نشر وكلاء الذكاء الاصطناعي بشكل متزايد للمهام المعقدة متعددة الخطوات: تصفح الويب، وكتابة الأكواد، واستدعاء واجهات API، وتنسيق الوكلاء الفرعيين. لكن تقييم ما إذا كان الوكيل قد قام فعلاً بالشيء الصحيح يتطلب حكماً بشرياً بدقة لا تستطيع أدوات التعليق التوضيحي التقليدية دعمها. قد يحتوي تتبع وكيل واحد على عشرات الخطوات واستدعاءات الأدوات والتفكير الوسيط ولقطات الشاشة والقرارات المتفرعة. يحتاج المعلّقون إلى رؤية كل هذا السياق والتنقل فيه بكفاءة وتقديم تقييمات منظمة على مستوى التتبع وعلى مستوى الخطوة الفردية.
يعالج نظام التعليق التوضيحي للوكلاء في Potato هذا من خلال ثلاث قدرات:
- 12 محوّل صيغ تتبع يقوم بتوحيد سجلات الوكلاء من أي إطار عمل رئيسي إلى صيغة موحدة
- 3 أنواع عرض متخصصة محسّنة لأنماط وكلاء مختلفة (استخدام الأدوات، تصفح الويب، المحادثة)
- 9 مخططات تعليق توضيحي جاهزة تغطي أبعاد تقييم الوكلاء الأكثر شيوعاً
محوّلات صيغ التتبع
تأتي تتبعات الوكلاء بصيغ مختلفة تماماً حسب إطار العمل. يوفر Potato 12 محوّلاً يقوم بتوحيدها إلى تمثيل داخلي موحد. تحدد المحوّل في تهيئتك، أو تدع Potato يكتشف الصيغة تلقائياً.
مرجع المحوّلات
| المحوّل | صيغة المصدر | الحقول الرئيسية المستخرجة |
|---|---|---|
openai | OpenAI Assistants API / سجلات استدعاء الدوال | messages، tool_calls، نتائج الدوال |
anthropic | Anthropic Claude tool_use / Messages API | كتل المحتوى، tool_use، tool_result |
swebench | تتبعات مهام SWE-bench | patch، نتائج الاختبار، المسار |
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/Observation | thought، action، action_input، observation |
webarena | JSON تتبع WebArena / VisualWebArena | الإجراءات، لقطات الشاشة، لقطات DOM، عناوين URL |
atif | Agent Trace Interchange Format (ATIF) | الخطوات، الملاحظات، البيانات الوصفية |
raw_web | تسجيلات المتصفح الخام (HAR + لقطات شاشة) | الطلبات، الاستجابات، لقطات الشاشة، التوقيتات |
التهيئة
حدد المحوّل في تهيئة مشروعك:
agentic:
enabled: true
trace_converter: react
trace_file: "data/agent_traces.jsonl"يجب أن يكون كل سطر في ملف التتبع كائن JSON يحتوي على تتبع الوكيل الخام. يتولى المحوّل الباقي.
لتتبعات الوكلاء المتعددة حيث يستخدم وكلاء مختلفون أُطر عمل مختلفة، يمكنك تحديد محوّلات لكل وكيل:
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:
agentic:
enabled: true
trace_converter: auto
trace_file: "data/traces.jsonl"يفحص 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}سجّله في التهيئة:
agentic:
trace_converter: custom
custom_converter: "converters/my_converter.py:MyConverter"أنواع العرض
بمجرد تحويل التتبعات، يعرضها Potato باستخدام أحد ثلاثة أنواع عرض متخصصة. كل نوع محسّن لنمط وكيل مختلف.
1. عرض تتبع الوكيل
العرض الافتراضي للوكلاء التي تستخدم الأدوات (OpenAI function calling، Anthropic tool_use، ReAct، LangChain، إلخ). يعرض كل خطوة كبطاقة مع ترميز لوني حسب نوع الخطوة.
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 تُظهر أين نقر الوكيل أو كتب أو مرّر.
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. عرض المحادثة التفاعلية
لتقييم وكلاء المحادثة وروبوتات الدردشة. يدعم وضعين فرعيين: المحادثة المباشرة حيث يتفاعل المعلّقون مع الوكيل في الوقت الفعلي، ومراجعة التتبع حيث يقيّم المعلّقون محادثة مسجلة.
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 التعليق التوضيحي لكل دور لأي نوع عرض.
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 عرض أسئلة المتابعة فقط عند تحديد تقييمات معينة، مما يحافظ على نظافة الواجهة.
صيغة مخرجات التقييم لكل دور
يتم حفظ تعليقات كل دور مع فهارس الخطوات:
{
"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 طبقة وكيل وسيط. يقع الوسيط بين واجهة التعليق التوضيحي والواجهة الخلفية للوكيل، ويسجل المحادثة الكاملة للمراجعة لاحقاً.
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:
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 (خادم الوكيل الخاص بك):
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وسيط الصدى يعكس رسالة المستخدم (مفيد للاختبار وتطوير واجهة المستخدم):
agent_proxy:
type: echo
echo:
prefix: "[Echo] "
delay_ms: 500مخططات التعليق التوضيحي الجاهزة
يوفر 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 | جودة محادثة متعددة الأبعاد (المساعدة، الدقة، النبرة، الأمان) |
قم بتحميل مخطط جاهز بالاسم:
annotation_schemes:
- preset: agent_task_success
- preset: agent_step_correctness
- preset: agent_error_taxonomyأو ادمج المخططات الجاهزة مع مخططات مخصصة:
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 مع تقييمات لكل خطوة:
# 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):
{
"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قراءات إضافية
- تقييم وكلاء الذكاء الاصطناعي: دليل شامل -- شرح تفصيلي لمشروع تقييم وكيل كامل
- التعليق التوضيحي لوكلاء تصفح الويب -- دليل لتقييم وكلاء الويب مع لقطات الشاشة والتراكبات
- الوضع الفردي -- دمج التعليق التوضيحي للوكلاء مع التصنيف التعاوني بين الإنسان ونماذج اللغة الكبيرة
- تقييمات كل دور للحوار -- خيارات تقييم إضافية لكل دور
- صيغ التصدير -- تصدير بيانات تقييم الوكلاء
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.