पाठ 22 / 29

सफलता दरें, pass@k और विचरण

इस तथ्य का ध्यान रखें कि agent runs हर प्रयास में बदलते हैं।

एक run क़िस्सा है

Agent runs अनिश्चित हैं: वही कार्य एक प्रयास में सफल और दूसरे में विफल हो सकता है। इसलिए एक प्रयास कम बताता है। प्रति कार्य कई प्रयासों पर सफलता दर मापें। pass@k इसका उत्तर देता है "यदि मैं agent को k बार कोशिश करने दूँ तो कम से कम एक प्रयास सफल होने की संभावना क्या है?" यह k के साथ तेज़ी से बढ़ता है (30% एकल-प्रयास दर पाँच कोशिशों में लगभग 87% तक पहुँच सकती है) पर तभी मदद करता है जब अच्छा प्रयास चुनने का भरोसेमंद तरीक़ा हो, जैसे tests या समीक्षा; सत्यापक के बिना ज़्यादा प्रयास का अर्थ बस जाँचने को ज़्यादा उम्मीदवार। विचरण भी रिपोर्ट करें (tool कितना सुसंगत है), क्योंकि जो tool 60% बार अप्रत्याशित रूप से सफल होता है वह उस tool से कम उपयोगी हो सकता है जो 50% बार ऐसे सफल हो जिसका आप पूर्वानुमान और जाँच कर सकें।

pass@k अनुमानक, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया, अस्थायी folder में बनाए throwaway project के साथ। 20 प्रयासों में से 6 पास (30%) के साथ कम-से-कम-एक-सफलता का निष्पक्ष अनुमान k=1 के लिए 0.300, k=3 के लिए 0.681, k=5 के लिए 0.871 और k=10 के लिए 0.995 है। सूत्र 1 - C(n-c, k) / C(n, k) है।

from math import comb

def pass_at_k(n, c, k):
    """Unbiased estimate of P(at least one of k samples passes), from n attempts with c passes."""
    if n - c < k: return 1.0
    return 1.0 - comb(n - c, k) / comb(n, k)

n, c = 20, 6          # 20 attempts at a task, 6 produced a passing patch
for k in (1, 3, 5, 10):
    print(f"pass@{k} = {pass_at_k(n, c, k):.3f}")
print("single-attempt success rate c/n =", c / n)

Output:

pass@1 = 0.300
pass@3 = 0.681
pass@5 = 0.871
pass@10 = 0.995
single-attempt success rate c/n = 0.3

त्वरित जाँच: व्यवहार में ऊँचा pass@k वास्तव में कब मदद करता है?

  • सिर्फ़ छोटे कार्यों के लिए
  • हमेशा, सत्यापन चाहे जो हो
  • कभी नहीं
  • जब पास होने वाला प्रयास चुनने के लिए tests जैसा भरोसेमंद सत्यापक हो
Answer

जब पास होने वाला प्रयास चुनने के लिए tests जैसा भरोसेमंद सत्यापक हो — कई प्रयासों को अच्छा वाला पहचानने का तरीक़ा चाहिए।