Skip to content

SFT/DPO के लिए ट्रैजेक्टरी संपादन

एनोटेटर किसी एजेंट ट्रेस के चरणों को फिर से लिखकर किसी गलत तर्क चरण को ठीक करते हैं, किसी टूल कॉल को सुधारते हैं, या अंतिम उत्तर को मज़बूत करते हैं, और Potato प्रत्येक मूल/सुधारित जोड़ी को पर्यवेक्षित फाइन-ट्यूनिंग लक्ष्यों और DPO प्राथमिकता जोड़ियों के रूप में निर्यात करता है।

trajectory_edit स्कीमा एनोटेटरों को किसी एजेंट ट्रेस के चरणों को फिर से लिखने देता है, और प्रत्येक सुधार को प्रशिक्षण डेटा के रूप में निर्यात करता है। किसी गलत तर्क चरण को ठीक करें, किसी टाइपो वाली टूल कॉल को सुधारें, या अंतिम उत्तर को मज़बूत करें, और Potato सुधारित ट्रैजेक्टरी को मूल के बगल में सहेज लेता है। फिर trajectory_correction निर्यातक प्रत्येक (original, corrected) जोड़ी को पर्यवेक्षित फाइन-ट्यूनिंग (SFT) लक्ष्यों और प्रत्यक्ष प्राथमिकता अनुकूलन (DPO) प्राथमिकता जोड़ियों में बदल देता है।

इससे Potato केवल एक मूल्यांकन उपकरण नहीं, बल्कि एक प्रशिक्षण-डेटा उत्पादन उपकरण बन जाता है। यह चरण-स्तरीय स्कोरिंग का संपादन समकक्ष है: किसी ट्रैजेक्टरी को आँकने के बजाय, एनोटेटर उसे ठीक करते हैं, और वह सुधार एक सीखने का संकेत बन जाता है।

लाइव डिफ़ के साथ ट्रैजेक्टरी सुधार संपादकएक एजेंट चरण जो एक केवल-पठनीय मूल और एक संपादन-योग्य सुधारित बॉक्स के साथ शब्द-स्तरीय डिफ़ सहित दिखाया गया है

त्वरित शुरुआत

रिपॉज़िटरी की रूट से शामिल उदाहरण चलाएँ:

bash
python potato/flask_server.py start examples/agent-traces/trajectory-correction/config.yaml -p 8000

यह कैसे काम करता है

प्रत्येक एजेंट चरण एक कार्ड के रूप में रेंडर होता है जो मूल पाठ (केवल-पठनीय) और मूल से पहले से भरा एक संपादन-योग्य सुधारित बॉक्स दिखाता है। जैसे-जैसे एनोटेटर टाइप करता है:

  • एक लाइव शब्द-स्तरीय डिफ़ प्रविष्टियों (हरा) और हटाए गए हिस्सों (लाल काट लगा हुआ) को उजागर करता है,
  • बदले गए शब्द और वर्ण गिने जाते हैं, और
  • बदले गए फ़ील्ड पर एक "संपादित" चिह्न दिखाई देता है।

एक "रीसेट" बटन प्रत्येक फ़ील्ड के लिए मूल को बहाल कर देता है। edit_final_answer: true के साथ अंतिम उत्तर को उसका अपना संपादक मिलता है। कुछ भी अनिवार्य नहीं है: एक असंपादित ट्रेस बस कोई प्रशिक्षण जोड़ी उत्पन्न नहीं करता।

कॉन्फ़िगरेशन

yaml
annotation_schemes:
  - annotation_type: trajectory_edit
    name: corrected_trajectory
    description: "Fix any wrong steps, then correct the final answer"
    steps_key: steps          # instance field holding the step list
    step_text_key: action     # the default per-step editable field
    editable_fields:          # which fields get an editor
      - action
      # - thought             # add to also edit reasoning
    show_diff: true
    show_edit_distance: true
    allow_reset: true
    require_reason_on_edit: false   # add a per-field "reason" input
    edit_final_answer: true
    final_answer_key: final_answer
विकल्पडिफ़ॉल्टविवरण
steps_keystepsचरण सूची धारण करने वाला इंस्टेंस फ़ील्ड।
step_text_keyactionप्रति चरण डिफ़ॉल्ट संपादन-योग्य फ़ील्ड।
editable_fields[step_text_key]किन चरण फ़ील्ड को संपादक मिलता है, जैसे [action, thought]
show_difftrueलाइव शब्द-स्तरीय डिफ़ दिखाएँ।
show_edit_distancetrueबदले गए शब्द और वर्ण दिखाएँ।
allow_resettrueप्रति फ़ील्ड "मूल पर रीसेट करें" बटन।
require_reason_on_editfalseप्रति फ़ील्ड "संपादन का कारण" इनपुट।
edit_final_answerfalseअंतिम उत्तर के लिए एक संपादक जोड़ें।
final_answer_keyfinal_answerअंतिम उत्तर धारण करने वाला इंस्टेंस फ़ील्ड।

डेटा प्रारूप

स्कीमा इंस्टेंस से steps_key के अंतर्गत चरण पढ़ता है। प्रत्येक चरण एक ऑब्जेक्ट है जिसके फ़ील्ड (action, thought, इत्यादि) संपादित किए जा सकते हैं; मात्र-स्ट्रिंग वाले चरण step_text_key फ़ील्ड के रूप में संपादित होते हैं।

json
{
  "id": "traj_001",
  "task_description": "Find the weather in San Francisco.",
  "steps": [
    {"thought": "Look it up.", "action": "web_search(queyr='SF weather')"},
    {"thought": "Open it.",    "action": "open_url(results[0])"}
  ],
  "final_answer": "It is sunny."
}

निर्यात

trajectory_correction निर्यातक चलाएँ। यह तीन फ़ाइलें लिखता है:

  • trajectory_corrections.json — प्रत्येक रिकॉर्ड: original_trace, पुनर्निर्मित corrected_trace, और संपादन दूरियों एवं कारणों सहित प्रति-फ़ील्ड edits
  • trajectory_sft.jsonl — प्रति संपादित ट्रेस एक पंक्ति: {"prompt": <task>, "completion": <corrected_trace>}
  • trajectory_dpo.jsonl — प्रति संपादित ट्रेस एक पंक्ति: {"prompt": <task>, "chosen": <corrected_trace>, "rejected": <original_trace>}

असंपादित ट्रेस गिने तो जाते हैं पर SFT/DPO से बाहर रखे जाते हैं, क्योंकि किसी अपरिवर्तित ट्रैजेक्टरी पर प्रशिक्षण कुछ नहीं जोड़ता; छोड़े गए ट्रेस की गिनती निर्यात आँकड़ों में दिखती है। कई एनोटेटरों के साथ, किसी ट्रेस को संपादित करने वाला प्रत्येक एनोटेटर एक SFT/DPO रिकॉर्ड देता है।

टिप्पणियाँ और सीमाएँ

  • डिफ़ शब्द-स्तरीय है। बिना स्पेस वाली कोड जैसी टूल कॉल के लिए, एक ही वर्ण के सुधार पर भी एक टोकन पूरी तरह बदला हुआ दिख सकता है; वर्ण-दूरी काउंटर ही सटीक संकेत है।
  • यदि आप उसी ट्रेस पर प्रति-चरण शुद्धता या एक त्रुटि वर्गीकरण भी चाहते हैं, तो इसे चरण-स्तरीय स्कोरिंग के साथ जोड़ें।

संबंधित

कार्यान्वयन विवरण के लिए, स्रोत दस्तावेज़ देखें।