Skip to content

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

قيّم وكلاء الذكاء الاصطناعي في Potato باستخدام 15 محوّل صيغ تتبع و5 أنواع عرض ومخططات جاهزة لوكلاء استخدام الأدوات وتصفح الويب والبرمجة والمحادثة. يشمل تقييم PRM وتقييم الرُبريك.

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

Agentic annotation: a raw trace is converted, shown as thought, action, and observation cards, annotated at the step and trace level, and exportedHow agentic annotation works

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

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

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

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

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

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

المحوّلصيغة المصدرالحقول الرئيسية المستخرجة
openaiOpenAI Assistants API / سجلات استدعاء الدوالmessages، tool_calls، نتائج الدوال
anthropicAnthropic Claude tool_use / Messages APIكتل المحتوى، tool_use، tool_result
swebenchتتبعات مهام SWE-benchpatch، نتائج الاختبار، المسار
swe_agent_trajectoryملفات مسارات SWE-Agentthought، 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/Observationthought، action، action_input، observation
webarenaJSON تتبع WebArena / VisualWebArenaالإجراءات، لقطات الشاشة، لقطات DOM، عناوين URL
atifAgent Trace Interchange Format (ATIF)الخطوات، الملاحظات، البيانات الوصفية
web_agentتتبعات تصفح وكلاء الويب (Mind2Web وComputer Use والتسجيلات الخام)الإجراءات، الإحداثيات، منطقة العرض، لقطات الشاشة
claude_codeسجلات جلسات Claude Code ووكلاء البرمجة الأخرىكتل tool_use، الفروقات، مخرجات الطرفية

التهيئة

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

yaml
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 يحتوي على تتبع الوكيل الخام. يتولى المحوّل الباقي.

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

yaml
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:

yaml
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:

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
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، إلخ). يعرض كل خطوة كبطاقة مع ترميز لوني حسب نوع الخطوة.

yaml
instance_display:
  fields:
    - key: messages
      type: interactive_chat
      label: "Conversation"
      display_options:
        show_turn_numbers: true
        alternating_shading: true

الميزات:

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

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

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

yaml
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. عرض المحادثة التفاعلية

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

yaml
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 الأكواد مع تمييز بناء الجملة، ومخرجات الطرفية في كتل داكنة، وقراءات الملفات مع أرقام الأسطر.

yaml
  - 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. عرض الوكيل المباشر

مراقبة في الوقت الفعلي لوكلاء الذكاء الاصطناعي مع عناصر تحكم للتدخل البشري. يدعم وكلاء تصفح الويب ووكلاء البرمجة.

yaml
  - 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)

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

yaml
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. عرّف معايير مخصصة ومقياس تقييم. يقيّم المعلّقون كل معيار بشكل مستقل.

yaml
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/تعادل مستقل لكل بُعد مع تبرير مطلوب
yaml
  - annotation_type: multirate
    name: step_ratings
    description: "Rate each step"
    options_from_data: step_summaries
    labels: ["Incorrect", "Questionable", "Correct"]

انظر دليل المقارنة الزوجية لجميع الأوضاع الثلاثة.

تعليق مكافأة العملية

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

yaml
  - 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 التعليق التوضيحي لكل دور لأي نوع عرض.

yaml
  - 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 عرض أسئلة المتابعة فقط عند تحديد تقييمات معينة، مما يحافظ على نظافة الواجهة.

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

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

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
  - 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:

yaml
  - 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 (خادم الوكيل الخاص بك):

yaml
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

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

yaml
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_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
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

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

yaml
agent_proxy:
  type: echo
  responses:
    - "Thanks, let me look into that."
    - "I have found your order."

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

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

yaml
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):

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

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

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