प्रोसेस रिवॉर्ड एनोटेशन
प्रोसेस रिवॉर्ड मॉडल प्रशिक्षित करने के लिए first-error और प्रति-चरण एनोटेशन मोड से प्रति-चरण रिवॉर्ड संकेत जुटाएँ। सीधे PRM, DPO और SWE-bench प्रशिक्षण फ़ॉर्मैट में निर्यात करें।
v2.4.0 में नया
प्रोसेस रिवॉर्ड मॉडल (PRM) को एक कुल आउटकम-स्तरीय स्कोर की जगह प्रति-चरण शुद्धता लेबल चाहिए। कारगर PRM प्रशिक्षित करने का मतलब है ऐसे एनोटेशन जुटाना जो ठीक-ठीक बताएँ कि बहु-चरणीय ट्रेस में एजेंट कहाँ भटका, किस तरह का एरर हुआ, और उससे उबरना मुमकिन था या नहीं। यह आउटकम-आधारित एनोटेशन से अलग है, जहाँ आप सिर्फ़ अंतिम नतीजे को आँकते हैं।
प्रोसेस रिवॉर्ड डेटा जुटाते समय रफ़्तार और बारीकी के अलग-अलग संतुलन के लिए Potato दो एनोटेशन मोड देता है। First-error मोड तेज़ बाइनरी लेबलिंग के लिए बना है: एनोटेटर पहले ग़लत चरण पर क्लिक करता है, और उसके बाद के सारे चरण अपने आप दूषित चिह्नित हो जाते हैं। प्रति-चरण मोड में एनोटेटर हर चरण को स्वतंत्र रूप से आँकता है, जिससे ज़्यादा भरे-पूरे संकेत मिलते हैं पर एनोटेशन में समय ज़्यादा लगता है।
दोनों मोड कोडिंग ट्रेस डिस्प्ले, एजेंट ट्रेस डिस्प्ले और वेब एजेंट डिस्प्ले के साथ काम करते हैं, इसलिए आप किसी भी तरह के एजेंट ट्रेस के लिए प्रोसेस रिवॉर्ड जुटा सकते हैं।
First-Error मोड
first-error मोड में एनोटेटर ट्रेस को क्रम से पढ़ता है और उस पहले चरण पर क्लिक करता है जहाँ एजेंट ने एरर किया। क्लिक किए गए चरण से पहले के सारे चरण अपने आप सही लेबल हो जाते हैं। क्लिक किया गया चरण और उसके बाद के सारे चरण ग़लत लेबल होते हैं (क्लिक किया गया चरण "first error" के रूप में और बाक़ी "downstream of error" के रूप में)।
इससे ठीक वही लेबल फ़ॉर्मैट बनता है जो बाइनरी PRM प्रशिक्षित करने के लिए चाहिए: +1 लेबलों की एक कड़ी, उसके बाद एरर बिंदु पर -1, और बचे हुए सारे चरणों के लिए -1।
कॉन्फ़िगरेशन
annotation_schemes:
- name: process_reward
annotation_type: process_reward
mode: first_error
description: "Click the first step where the agent made a mistake"
first_error:
# Visual styling
correct_color: "#22c55e" # green for steps before the error
error_color: "#ef4444" # red for the first error step
downstream_color: "#f97316" # orange for steps after the error
unmarked_color: "#6b7280" # gray for steps not yet reviewed
# Behavior
require_confirmation: true # ask "Are you sure?" before marking
allow_no_error: true # allow annotator to mark all steps correct
show_step_content: true # show step content in the annotation panel
# Labels applied automatically
labels:
correct: "+1"
first_error: "-1 (first error)"
downstream: "-1 (downstream)"
all_correct: "+1 (all correct)"एनोटेशन कार्यप्रवाह
- एनोटेटर ट्रेस को ऊपर से नीचे पढ़ता है
- शुरू में चरण अचिह्नित (धूसर) रहते हैं
- एनोटेटर पहले ग़लत चरण पर क्लिक करता है
- चरण 0 से N-1 तक हरे (सही) हो जाते हैं
- चरण N लाल (पहला एरर) हो जाता है
- चरण N+1 से आख़िर तक नारंगी (downstream) हो जाते हैं
- अगर पूरा ट्रेस सही है, तो एनोटेटर "All Steps Correct" पर क्लिक करता है
आउटपुट फ़ॉर्मैट
{
"id": "trace_042",
"annotations": {
"process_reward": {
"mode": "first_error",
"first_error_step": 4,
"total_steps": 8,
"labels": [1, 1, 1, 1, -1, -1, -1, -1]
}
}
}जब एनोटेटर सारे चरण सही चिह्नित करता है, तो first_error_step null होता है और labels सरणी में सारे मान 1 होते हैं।
प्रति-चरण मोड
प्रति-चरण मोड में एनोटेटर ट्रेस के हर चरण को स्वतंत्र रूप से आँकता है। इससे ज़्यादा भरे-पूरे संकेत मिलते हैं -- कोई चरण सिर्फ़ सही/ग़लत होने के बजाय "आंशिक रूप से सही" या "ग़ैरज़रूरी" भी हो सकता है। यह उन मामलों को भी पकड़ता है जहाँ एजेंट एरर से उबर जाता है, जिन्हें first-error मोड दर्ज नहीं कर सकता।
कॉन्फ़िगरेशन
annotation_schemes:
- name: process_reward
annotation_type: process_reward
mode: per_step
description: "Rate each step independently"
per_step:
# Rating options
labels:
- value: "correct"
display: "Correct"
color: "#22c55e"
score: 1.0
- value: "partially_correct"
display: "Partially Correct"
color: "#eab308"
score: 0.5
- value: "incorrect"
display: "Incorrect"
color: "#ef4444"
score: -1.0
- value: "unnecessary"
display: "Unnecessary"
color: "#f97316"
score: -0.5
- value: "recovery"
display: "Recovery from Error"
color: "#3b82f6"
score: 0.25
# Optional error categorization for incorrect/partially correct steps
error_categories:
enabled: true
categories:
- "Wrong tool selected"
- "Correct tool, wrong arguments"
- "Hallucinated information"
- "Repeated previous step"
- "Logic error"
- "Syntax error"
- "Missed edge case"
- "Unnecessary step"
- "Other"
# Behavior
require_all_steps: true # all steps must be rated before submission
allow_notes: true # optional text field per step
show_running_score: true # show cumulative reward scoreएनोटेशन कार्यप्रवाह
- ट्रेस के हर चरण के बग़ल में एक रेटिंग विजेट होता है
- एनोटेटर हर चरण के लिए एक लेबल चुनता है
- अगर चरण "Incorrect" या "Partially Correct" आँका गया है और एरर श्रेणियाँ चालू हैं, तो एरर प्रकार चुनने के लिए एक ड्रॉपडाउन आता है
- एक वैकल्पिक नोट्स फ़ील्ड मुक्त-पाठ व्याख्या की सुविधा देता है
- ऊपर दिख रहा रनिंग स्कोर संचयी रिवॉर्ड दिखाता है
आउटपुट फ़ॉर्मैट
{
"id": "trace_042",
"annotations": {
"process_reward": {
"mode": "per_step",
"total_steps": 6,
"labels": [1.0, 1.0, -1.0, 0.25, 1.0, 1.0],
"step_details": {
"0": {"label": "correct"},
"1": {"label": "correct"},
"2": {
"label": "incorrect",
"error_category": "Wrong tool selected",
"notes": "Agent used grep when it should have read the file directly"
},
"3": {
"label": "recovery",
"notes": "Agent recognized the mistake and tried a different approach"
},
"4": {"label": "correct"},
"5": {"label": "correct"}
},
"cumulative_score": 2.75
}
}
}कॉन्फ़िगरेशन संदर्भ
प्रोसेस रिवॉर्ड एनोटेशन योजना के पूरे कॉन्फ़िगरेशन विकल्प:
annotation_schemes:
- name: process_reward
annotation_type: process_reward
mode: first_error # "first_error" or "per_step"
description: "Process reward annotation"
# Required for mode: first_error
first_error:
correct_color: "#22c55e"
error_color: "#ef4444"
downstream_color: "#f97316"
unmarked_color: "#6b7280"
require_confirmation: true
allow_no_error: true
show_step_content: true
# Required for mode: per_step
per_step:
labels:
- value: "correct"
display: "Correct"
color: "#22c55e"
score: 1.0
- value: "incorrect"
display: "Incorrect"
color: "#ef4444"
score: -1.0
error_categories:
enabled: false
categories: []
require_all_steps: true
allow_notes: false
show_running_score: false
# Common options
target: agentic_steps # bind to trace steps
keyboard_shortcuts:
enabled: true
correct: "1"
incorrect: "2"
partially_correct: "3"
unnecessary: "4"
next_step: "j"
prev_step: "k"प्रशिक्षण फ़ॉर्मैट में निर्यात
Potato प्रोसेस रिवॉर्ड एनोटेशन को सीधे उन फ़ॉर्मैट में निर्यात कर सकता है जो आम PRM प्रशिक्षण पाइपलाइन इस्तेमाल करती हैं।
PRM प्रशिक्षण फ़ॉर्मैट
PRM प्रशिक्षण के लिए बाइनरी चरण-स्तरीय लेबल निर्यात करें:
python -m potato.export \
-i output/ \
-f prm \
-o results/prm_training_data.jsonlआउटपुट फ़ॉर्मैट:
{
"trace_id": "trace_042",
"steps": [
{"content": "Search for Tokyo population", "label": 1},
{"content": "Parse search results", "label": 1},
{"content": "Search for NYC population", "label": -1},
{"content": "Compare populations", "label": -1}
]
}DPO / RLHF प्रेफ़रेंस जोड़े
जब आपके पास एक ही टास्क के लिए कई एनोटेट किए गए ट्रेस हों, तो DPO या RLHF प्रशिक्षण के लिए जोड़ीदार प्रेफ़रेंस निर्यात करें। निर्यातक उन ट्रेस के जोड़े बनाता है जिनमें एक का संचयी रिवॉर्ड दूसरे से ज़्यादा हो:
python -m potato.export \
-i output/ \
-f dpo \
-o results/dpo_pairs.jsonl \
--min-score-gap 0.5आउटपुट फ़ॉर्मैट:
{
"prompt": "Fix the failing test in test_parser.py",
"chosen": [
{"role": "assistant", "content": "Step 1: Read the test file..."},
{"role": "assistant", "content": "Step 2: Identify the bug..."}
],
"rejected": [
{"role": "assistant", "content": "Step 1: Run all tests..."},
{"role": "assistant", "content": "Step 2: Edit a random file..."}
]
}SWE-bench के अनुकूल नतीजे
मूल्यांकन के नतीजे SWE-bench लीडरबोर्ड सबमिशन के अनुकूल फ़ॉर्मैट में निर्यात करें:
python -m potato.export \
-i output/ \
-f swebench \
-o results/swebench_results.jsonइससे मानक SWE-bench मूल्यांकन JSON बनता है, जिसमें instance ID, मॉडल पैच, और एनोटेटरों के निर्णय से निकाली गई समाधान स्थिति होती है।
विश्लेषण
Potato प्रोसेस रिवॉर्ड एनोटेशन के विश्लेषण के लिए उपयोगिता फ़ंक्शन देता है:
from potato.analysis import load_annotations, process_reward_stats
# Load annotations
annotations = load_annotations("output/")
# Step-level accuracy statistics
stats = process_reward_stats(annotations)
print(f"Total traces annotated: {stats['total_traces']}")
print(f"Traces with no errors: {stats['all_correct_count']} ({stats['all_correct_pct']:.1f}%)")
print(f"Average first-error position: step {stats['avg_first_error_step']:.1f}")
print(f"Average steps before error: {stats['avg_correct_prefix_length']:.1f}")
# Error distribution by step position
for position, count in stats['error_by_position'].items():
print(f" Step {position}: {count} errors")
# Error category distribution (per-step mode only)
if 'error_categories' in stats:
for category, count in stats['error_categories'].items():
print(f" {category}: {count}")
# Inter-annotator agreement on first-error step
if stats['multi_annotator']:
print(f"First-error agreement (exact): {stats['first_error_exact_agreement']:.2f}")
print(f"First-error agreement (within 1): {stats['first_error_near_agreement']:.2f}")विज़ुअलाइज़ेशन
from potato.analysis import plot_error_distribution
# Plot error position distribution across all traces
plot_error_distribution(
annotations,
output_path="figures/error_distribution.png",
normalize_by_trace_length=True,
title="Where Do Agents First Go Wrong?"
)
# Plot per-step reward curves
from potato.analysis import plot_reward_curves
plot_reward_curves(
annotations,
output_path="figures/reward_curves.png",
group_by="agent_model",
title="Cumulative Reward by Model"
)शोध संदर्भ
Potato में प्रोसेस रिवॉर्ड एनोटेशन एजेंटिक सिस्टम के लिए रिवॉर्ड मॉडल के प्रशिक्षण और मूल्यांकन पर शोध को सहारा देने के लिए बना है। हाल के कई कामों ने इस फ़ीचर की प्रेरणा दी:
- AgentPRM दिखाता है कि चरण-स्तरीय लेबल पर प्रशिक्षित प्रोसेस रिवॉर्ड मॉडल सर्च के दौरान कोडिंग एजेंट को दिशा देने में आउटकम रिवॉर्ड मॉडल से काफ़ी बेहतर हैं।
- ToolRM और ToolRL दिखाते हैं कि टूल-इस्तेमाल के चरणों के लिए विशेषीकृत रिवॉर्ड मॉडल API कॉलिंग और कोड जनरेशन टास्क पर एजेंट का प्रदर्शन सुधार सकते हैं।
- DeepSWE प्रोसेस रिवॉर्ड मॉडल को SWE-bench पैमाने के सॉफ़्टवेयर इंजीनियरिंग टास्क पर लागू करता है और प्रति-चरण लेबल से ऐसे वेरिफ़ायर प्रशिक्षित करता है जो एजेंट के ट्री सर्च को दिशा देते हैं।
- Step-level RLHF पर शोध दिखाता है कि प्रति-चरण मानवीय फ़ीडबैक एपिसोड-स्तरीय फ़ीडबैक से ज़्यादा सैंपल-कुशल रिवॉर्ड मॉडल बनाता है।
Potato के first-error और प्रति-चरण मोड सीधे उन लेबल फ़ॉर्मैट से मेल खाते हैं जो ये तरीक़े इस्तेमाल करते हैं। निर्यात पाइपलाइन बिना किसी अतिरिक्त प्रीप्रोसेसिंग के प्रशिक्षण के लिए तैयार डेटा देती है।
यह भी देखें
- कोडिंग एजेंट एनोटेशन -- कोडिंग एजेंट ट्रेस दिखाएँ और एनोटेट करें
- एजेंटिक एनोटेशन -- प्रति-टर्न रेटिंग के साथ सामान्य एजेंट ट्रेस एनोटेशन
- निर्यात फ़ॉर्मैट -- सभी समर्थित निर्यात फ़ॉर्मैट
- गुणवत्ता नियंत्रण -- एनोटेटर-अंतर सहमति और निर्णयन
क्रियान्वयन के विवरण के लिए स्रोत दस्तावेज़ देखें।