Skip to content
This page has been auto-translated and may contain errors.View in English

फ़ाइन-ट्यूनिंग

docs.scrimba.com

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

प्रशिक्षण वास्तव में क्या करता है

फ़ाइन-ट्यूनिंग क्या बदलती है यह देखने के लिए, यह जानना मदद करता है कि एक मॉडल कहाँ से आता है। एक मॉडल दो व्यापक चरणों में बनाया जाता है।

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

दूसरा चरण पोस्ट-ट्रेनिंग है: आधार मॉडल को अच्छी प्रतिक्रियाओं के curated उदाहरणों पर, साथ ही मानव प्रतिक्रिया के साथ आगे प्रशिक्षित किया जाता है कि कौन से उत्तर बेहतर हैं। यह एक कच्चे पाठ प्रेडिक्टर को निर्देश-अनुगामी सहायक में बदल देता है जिससे आप वास्तव में बात करते हैं। API से जो मॉडल आप कॉल करते हैं वह दोनों से गुजर चुका है।

दोनों चरण एक ही तंत्र से काम करते हैं: मॉडल को उदाहरण दिखाएं और इसके आंतरिक संख्याओं को, इसके पैरामीटर या weights को nudge करें, ताकि इसकी भविष्यवाणियां उन उदाहरणों की ओर बढ़ें। प्रशिक्षण भविष्यवाणी का अभ्यास है जो मॉडल को स्थायी रूप से बदल देता है।

Junoप्रशिक्षण वास्तव में क्या करता है एक मॉडल दो चरणों में बनाया जाता है। प्रीट्रेनिंग में यह विशाल मात्रा में पाठ में अगले टोकन की भविष्यवाणी करता है, एक प्रवाहशील लेकिन unfocused आधार मॉडल तैयार करता है। पोस्ट-ट्रेनिंग फिर इसे curated अच्छी प्रतिक्रियाओं और मानव प्रतिक्रिया पर प्रशिक्षित करता है, इसे एक सहायक सहायक में बदल देता है। दोनों एक ही तरीके से काम करते हैं: मॉडल के आंतरिक weights को adjust करना ताकि इसकी भविष्यवाणियां इसे दिखाए गए उदाहरणों से मेल खाएं।

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

प्रीट्रेनिंग पहले आता है: मॉडल विशाल पाठ को पढ़ता है और एक ड्रिल करता है, अगले टोकन की भविष्यवाणी करता है, अरबों बार। व्याकरण, विश्व ज्ञान, और तर्क के पैटर्न एक दुष्प्रभाव के रूप में weights में settle हो जाते हैं। परिणाम एक आधार मॉडल है, पाठ को जारी रखने में प्रवाह से भरपूर लेकिन अभी तक सहायक नहीं है। यह नहीं जानता कि प्रश्न का उत्तर दें या इसे extend करें।

पोस्ट-ट्रेनिंग दूसरा चरण है, और यह वह चरण है जो फ़ाइन-ट्यूनिंग नकल करती है। आधार मॉडल को अच्छी प्रतिक्रियाओं के curated उदाहरणों और मानव वरीयता संकेतों पर आगे प्रशिक्षित किया जाता है कि कौन सा उत्तर बेहतर है। यह वह है जो निर्देश-अनुगामी व्यवहार का उत्पादन करता है जिसे आप API से कॉल करते हैं।

दोनों चरण एक ही loop चलाते हैं: मॉडल को एक उदाहरण दें, इसकी भविष्यवाणी को लक्ष्य की तुलना करें, और अंतर को बंद करने के लिए weights को adjust करें। फ़ाइन-ट्यूनिंग वह ही loop है, आपके उदाहरणों तक सीमित और प्रदाता के दोनों चरणों के बाद चलाया जाता है। प्रशिक्षण weights को edit करके व्यवहार को shift करता है, एक lookup table जोड़ने से नहीं, और यह अंतर वह पूरा कारण है कि फ़ाइन-ट्यूनिंग कुछ कार्यों में अच्छी है और अन्य में बुरी।

Junoप्रशिक्षण वास्तव में क्या करता है दो चरण एक मॉडल को आप तक लाते हैं: प्रीट्रेनिंग अगले-टोकन भविष्यवाणी को एक प्रवाहशील आधार मॉडल में ड्रिल करती है, फिर पोस्ट-ट्रेनिंग इसे curated उदाहरणों और वरीयता डेटा के साथ सहायक में आकार देती है। दोनों एक ही loop चलाते हैं, एक उदाहरण दें, weights को इसकी ओर adjust करें, और फ़ाइन-ट्यूनिंग वह loop है जो आपके डेटा तक सीमित है। यह weights को edit करता है, एक lookup table नहीं जोड़ता है, जो यह है कि यह व्यवहार को अच्छी तरह से बदलता है और तथ्यों को खराब तरीके से संग्रहीत करता है।

एक मॉडल दो प्रशिक्षण चरणों के बाद आता है, और उनके बीच की सीमा वह जगह है जहां फ़ाइन-ट्यूनिंग रहती है।

प्रीट्रेनिंग expensive, once-per-model चरण है: विशाल पाठ corpora, अगले-टोकन भविष्यवाणी का एकल उद्देश्य, और weights (मॉडल की tunable संख्या) व्याकरण, ज्ञान, और तर्क को एक byproduct के रूप में absorb करता है। आउटपुट एक आधार मॉडल है, प्रवाहशील लेकिन सहायक होने की ओर steered नहीं। पोस्ट-ट्रेनिंग फिर उस आधार मॉडल को curated demonstrations और मानव preference data का उपयोग करके सहायक में align करता है। जब तक आप API मॉडल कॉल करते हैं, दोनों run हो चुके हैं।

फ़ाइन-ट्यूनिंग पोस्ट-ट्रेनिंग का एक continuation है, आपके डेटा तक सीमित और पहले से aligned मॉडल के ऊपर run। तंत्र समान है: एक उदाहरण प्रस्तुत करें, लक्ष्य से भविष्यवाणी कितनी दूर है यह measure करें, अंतर को reduce करने के लिए weights को adjust करें। परिणाम जो operationally मायने रखता है वह यह है कि फ़ाइन-ट्यूनिंग एक ही global parameters को move करती है जो बाकी सब कुछ hold करता है। आप एक module append नहीं कर रहे हैं, आप एक shared surface को nudge कर रहे हैं, जो यह है कि एक fine-tune आपके target task में सुधार कर सकता है और एक ही समय में एक unrelated capability को quietly degrade कर सकता है।

वह shared-surface property बाद में इस अध्याय में हर failure mode को set up करता है: overfitting, forgetting, drift। फ़ाइन-ट्यूनिंग व्यवहार को reshape करती है, यह कभी एक fact store install नहीं करता। इसे hold करें और आप इसे सही कारणों के लिए reach करेंगे और गलत कारणों के लिए skip करेंगे।

Junoप्रशिक्षण वास्तव में क्या करता है प्रीट्रेनिंग वह once-per-model heavyweight है जो अगले-टोकन भविष्यवाणी को आधार मॉडल में ड्रिल करता है, पोस्ट-ट्रेनिंग इसे सहायक में align करता है, और फ़ाइन-ट्यूनिंग उस दूसरे चरण को आपके डेटा पर जारी रखता है। हर बार एक ही loop: एक उदाहरण प्रस्तुत करें, weights को इसकी ओर adjust करें। पकड़ यह है कि आप एक module में bolt नहीं कर रहे हैं, shared global parameters को nudge कर रहे हैं, इसलिए एक fine-tune आपके task को lift कर सकता है और एक ही run में एक unrelated को dent कर सकता है, जो overfitting और forgetting से है।

फ़ाइन-ट्यूनिंग क्या है

फ़ाइन-ट्यूनिंग वह दूसरा चरण का एक छोटा, targeted version है, आप द्वारा run। आप एक मॉडल लेते हैं जो पहले से trained है और अपने स्वयं के उदाहरणों के एक set पर इसे प्रशिक्षित करना जारी रखते हैं, प्रत्येक एक input है जो output के साथ paired है जिसे आप चाहते हैं कि यह produce करे। पर्याप्त उदाहरणों के बाद, मॉडल के weights shift हो जाते हैं ताकि इस तरह की प्रतिक्रिया इसका default बन जाए, बिना आपसे हर बार prompt में इसके लिए पूछे।

प्रॉम्पटिंग और RAG से असली अंतर यह है कि change कहां रहता है। प्रॉम्पटिंग और RAG मॉडल को frozen रखते हैं और इसे उस context के माध्यम से steer करते हैं जो आप call के समय supply करते हैं। फ़ाइन-ट्यूनिंग मॉडल को itself change करती है, इसलिए नया व्यवहार baked in है और short prompt के साथ भी दिखाई देता है। आप runtime में बेहतर instructions नहीं दे रहे हैं; आप एक ऐसा मॉडल ship कर रहे हैं जो पहले से ही उस तरीके से leans है जो आप चाहते हैं।

व्यवहार में आप provider को example conversations की एक file hand करते हैं, यह एक training job run करता है, और यह आपको एक नया model id देता है। आप उस id को किसी भी अन्य मॉडल की तरह exactly कॉल करते हैं, सिवाय इसके कि इसके उत्तर अब वह reflect करते हैं जिस पर आपने प्रशिक्षण दिया है। फ़ाइन-ट्यूनिंग मॉडल को व्यवहार ले जाती है, प्रॉम्पटिंग और RAG एक frozen को steer करते हैं।

Junoफ़ाइन-ट्यूनिंग क्या है फ़ाइन-ट्यूनिंग पोस्ट-ट्रेनिंग का एक छोटा version है जिसे आप run करते हैं: अपने स्वयं के input-output उदाहरणों पर एक मॉडल को प्रशिक्षित करना जारी रखें जब तक आप जो व्यवहार चाहते हैं वह इसका default बन जाए। प्रॉम्पटिंग और RAG के विपरीत, जो एक frozen मॉडल को context के माध्यम से steer करते हैं, फ़ाइन-ट्यूनिंग मॉडल के weights को change करती है, इसलिए व्यवहार baked in है और short prompt के साथ भी दिखाई देता है। आप examples की एक file hand over करते हैं और एक नया model id वापस पाते हैं जिसे आप किसी अन्य की तरह कॉल करते हैं।

फ़ाइन-ट्यूनिंग एक task तक scoped post-training है जिसे आप run करते हैं। आप एक already-trained मॉडल से शुरू करते हैं और examples पर इसे प्रशिक्षित करना जारी रखते हैं, प्रत्येक एक input है paired output के साथ जिसे आप चाहते हैं कि यह produce करे। इसे उनमें से पर्याप्त feed करें और weights settle हो जाते हैं ताकि वह response default बन जाए, कोई भी instruction prompt में इसके लिए पूछे बिना।

जो line मायने रखती है वह यह है कि steering कहां रहती है। प्रॉम्पटिंग और RAG weights को frozen रखते हैं और behavior को context के माध्यम से shape करते हैं जो call time पर supply किया जाता है, इसलिए हर call instructions carry करता है। फ़ाइन-ट्यूनिंग weights को एक बार, आगे edit करती है, इसलिए behavior model id के अंदर ship होता है और short prompt को survive करता है। Runtime steering बनाम baked-in behavior: यह वह trade है जिसे आप बना रहे हैं।

workflow concrete है। आप example conversations की एक file assemble करते हैं, एक training job start करते हैं, और provider एक नया model id return करता है। आप उस id को किसी अन्य मॉडल की तरह कॉल करते हैं।

python
# प्रत्येक उदाहरण एक बातचीत है सटीक shape में जो आप runtime पर भेजते हैं,
# output के साथ ending जिसे आप मॉडल को सीखना चाहते हैं।
training_examples = [
    {"messages": [
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "मुझे इस सप्ताह दो बार charge किया गया और मुझे इसे आज ठीक करना है।"},
        {"role": "assistant", "content": "high"},
    ]},
    {"messages": [
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "क्या कहीं एक dark mode setting है?"},
        {"role": "assistant", "content": "low"},
    ]},
    # ... सैकड़ों से हजारों और, जो आप expect करते हैं inputs की पूरी range को cover करते हुए
]
# message shape और training-job API provider द्वारा vary करते हैं; विचार same है।
Junoफ़ाइन-ट्यूनिंग क्या है फ़ाइन-ट्यूनिंग आपके task तक scoped post-training है: एक मॉडल को input-output उदाहरणों पर प्रशिक्षित करना जारी रखें जब तक आप जो व्यवहार चाहते हैं वह default न बन जाए। प्रॉम्पटिंग और RAG एक frozen मॉडल को हर call के माध्यम से context को steer करते हैं, फ़ाइन-ट्यूनिंग weights को एक बार edit करती है ताकि behavior model id के अंदर ride करे। आप example conversations की एक file बनाते हैं, एक training job run करते हैं, और returned id को किसी भी अन्य मॉडल की तरह कॉल करते हैं।

फ़ाइन-ट्यूनिंग continued post-training एक dataset पर जिसे आप control करते हैं, एक नए id के पीछे एक derived model produce करते हुए। प्रत्येक training उदाहरण एक input है paired target output के साथ, और job weights को nudge करता है जब तक आपकी target प्रतिक्रियाएं मॉडल का default न बन जाएं। Behavior weights में ship होता है, इसलिए short prompt इसे evoke करने के लिए पर्याप्त है।

इसे precisely alternatives के खिलाफ set करें, क्योंकि अंतर operational है, philosophical नहीं। प्रॉम्पटिंग और RAG weights को frozen रखते हैं और behavior को context के माध्यम से inject करते हैं (text जिसे मॉडल call time पर reads), जिसका अर्थ है कि आप एक string edit करके और seconds में redeploy करके behavior change कर सकते हैं। फ़ाइन-ट्यूनिंग behavior को weights में bake करती है, जिसका अर्थ है कि इसे change करने के लिए एक fresh training run, एक eval pass, और एक नया model id की redeploy की requirement है। Runtime steering एक string है जो seconds में editable है, एक fine-tune एक training cycle में editable है।

python
# एक fine-tuned मॉडल एक और id है; call shape unchanged है।
response = client.chat.completions.create(
    model="your-org/urgency-classifier-v1",  # इसे pin करें; इसे अपने contract का हिस्सा मानें
    messages=[
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "Export button कुछ नहीं करता जब मैं इसे click करता हूं।"},
    ],
)
# response.choices[0].message.content -> "low"  (label केवल, वह व्यवहार जिसे आपने trained किया)
# Call shape दिखाया गया है OpenAI-SDK style; यह provider द्वारा vary करता है।

वह cost asymmetry वह चीज है जिसे आप internalize करें commit करने से पहले। एक fine-tuned id एक versioned artifact है: आप इसके lifecycle को own करते हैं, इसके evals, और हर बार जब desired behavior move करता है re-training। Id को pin करें, इसे version करें, और इस तथ्य के लिए budget करें कि learned behavior का हर change एक और job है, एक और commit नहीं।

Junoफ़ाइन-ट्यूनिंग क्या है फ़ाइन-ट्यूनिंग आपके डेटा पर continued post-training है, एक नए id के पीछे एक derived मॉडल yield करते हुए जिसका behavior weights में रहता है। प्रॉम्पटिंग और RAG के साथ contrast operational है: runtime steering एक editable string है जिसे आप seconds में redeploy करते हैं, एक fine-tune एक versioned artifact है जिसे आप केवल एक training run, एक eval pass, और एक redeploy के माध्यम से change करते हैं। Id को pin करें, इसे एक contract मानें, और इस तथ्य के लिए budget करें कि हर behavior change एक और job है।

यह किस चीज में अच्छा है, और किस में नहीं

फ़ाइन-ट्यूनिंग अपनी जगह अर्जित करती है जब आपको एक consistent behavior की जरूरत है जिसे एक prompt narrow down करने के लिए संघर्ष करता है: हर बार precise output format, एक specific tone या house style, या classification जैसा narrow task reliably हजारों calls में। यह calls को भी सस्ता और तेजी से बना सकता है, क्योंकि behavior जिसे आप अन्यथा long prompt में spell out करेंगे वह मॉडल में baked है, इसलिए आपके prompts छोटे हो जाते हैं।

जहां यह गिरता है वह knowledge है। फ़ाइन-ट्यूनिंग एक मॉडल को नए तथ्य सिखाने में poor है, और तथ्यों में जो change करते हैं worse। प्रशिक्षण उदाहरण blur general patterns में rather than exact, lookup-able entries को store किए जाते हैं, इसलिए एक fine-tuned मॉडल अभी भी details invent करता है और अभी भी stale हो जाता है moment जब आपकी information update होती है। हर बार जब एक price या policy change होता है retraining slow और expensive है। जब समस्या है "मॉडल को X नहीं पता है", जवाब almost always RAG है, not fine-tuning।

Rule of thumb: form change करने के लिए fine-tune करें, facts add करने के लिए नहीं। मॉडल को कैसे answer करना है सिखाएं, और retrieval को यह handle करने दें कि क्या answer करना है।

Junoयह किस चीज में अच्छा है, और किस में नहीं फ़ाइन-ट्यूनिंग consistent behavior के लिए अच्छा है: एक fixed output format, एक specific tone, या एक narrow task reliably held steady, और यह prompts को shorten कर सकता है ताकि calls कम cost करें। यह knowledge में खराब है: यह तथ्यों को reliably store नहीं करता है, जब उनमें change होता है stale हो जाता है, और retraining expensive है। Rule है form change करने के लिए fine-tune करें, facts add करने के लिए नहीं, और RAG को facts handle करने दें।

फ़ाइन-ट्यूनिंग form के लिए pay off करती है: हर call पर एक precise output shape, एक fixed tone या house style, या classification जैसा narrow task held steady हजारों requests में। win compound होता है जब prompting अकेले drift करता रहता है, मॉडल format को ज्यादातर समय honour करता है लेकिन reliably enough नहीं downstream को parse करने के लिए। Behavior को bake करें और format कुछ हो जाती है जिसे आप हर call में hope नहीं करते।

यह prompts को भी shorten करता है, और scale पर यह एक real cost lever है। यदि आप currently format को spell out करते हैं और कुछ उदाहरण हर request में, वह instruction tokens हर single call पर billed होते हैं। Them को weights में fold करें और per-call prompt shrink हो जाता है। arithmetic worth है: एक fine-tune एक fixed training cost है paid once, जबकि एक long prompt एक per-call cost है paid forever, इसलिए prompt-shortening pay off करता है जब call volume काफी high है कि saved tokens training bill को outrun करें।

जहां यह fall down करता है वह knowledge है। प्रशिक्षण उदाहरण blur general patterns में, not exact retrievable entries, इसलिए एक fine-tuned मॉडल अभी भी details invent करता है और अभी भी stale हो जाता है moment जब एक price या policy change होता है। एक fact update करना एक और training run का अर्थ है। Form के लिए fine-tune करें, RAG को facts के लिए use करें, और उन्हें combine करें। Strong pattern दोनों एक साथ है: अपने format और tone के लिए मॉडल को fine-tune करें, फिर current facts को runtime पर retrieve करें और tuned मॉडल को उन्हें phrase करने दें।

before आप climbing करें fine-tuning को बिल्कुल, confirm करें prompting actually failed। "Failed" का अर्थ है एक clear instruction कुछ well-chosen examples के साथ, varied inputs में tested, अभी भी target rate को miss करता है, not कि आपका first one-line prompt looked off। यदि आपने वह test run नहीं किया, आप fine-tune करने के लिए ready नहीं हैं।

Junoयह किस चीज में अच्छा है, और किस में नहीं फ़ाइन-ट्यूनिंग form के लिए है: एक fixed output shape, एक set tone, एक narrow task held steady, plus shorter prompts जो हर call पर tokens बचाते हैं। Cost math fixed-once training है versus pay-forever prompt tokens, इसलिए prompt-shortening pay off करता है high volume पर। यह facts में poor है, जो blur patterns में होते हैं और stale हो जाते हैं, इसलिए एक tuned मॉडल को RAG के साथ pair करें: form weights से, facts retrieval से। और prompting को actually fail prove करें, एक real prompt उदाहरणों के साथ inputs में tested, climbing करने से पहले।

फ़ाइन-ट्यूनिंग reliable है form के लिए और unreliable facts के लिए, और कारण mechanical हैं। Form, output shape, tone, task conventions, एक behavioral regularity है जिसे weights कई उदाहरणों में absorb कर सकते हैं। Facts discrete और changeable हैं, और weights उन्हें lossily store करते हैं blended patterns के रूप में, not retrievable rows, इसलिए एक tuned मॉडल अभी भी confabulates और अभी भी stale हो जाता है instant जब underlying fact move होता है।

Push headline को past करें और real risks वह तरीके हैं जिनसे एक fine-tune degrade होता है। Overfitting है मॉडल आपके training set को memorise करना, including इसके quirks, instead of learning general behavior, इसलिए यह आपके उदाहरणों को nail करता है और inputs जो differ fumble होते हैं। Catastrophic forgetting flip side है: एक narrow task पर hard training कर सकता है erode unrelated general ability जो base मॉडल के पास था, क्योंकि आप shared weights को move कर रहे हैं, इसलिए आपका classifier sharper हो जाता है जबकि किसी और चीज पर इसकी reasoning duller हो जाती है। Distribution drift slow one है: एक मॉडल tuned last quarter के input distribution पर decay करता है जैसे real traffic shift होता है जो it saw से, और decay silent है जब तक आप measure नहीं करते।

दो consequences shape करते हैं कि आप वास्तव में यह कैसे run करते हैं। पहला, आप एक fine-tune को vibes पर ship नहीं कर सकते; आपको एक eval set की जरूरत है, एक held-out batch inputs का with known-good answers, scored before और after, prove करने के लिए कि target improve हुआ और, कम महत्वपूर्ण नहीं, general ability regress नहीं हुई। दूसरा, desired behavior के लिए हर change एक और full job है: re-curate data, retrain, re-eval, redeploy एक नया id। वह operational drag यह है कि parameter-efficient methods क्यों exist करते हैं, ways fine-tune करने के लिए एक small set added weights को train करके instead of whole model, cheaper run और store करने के लिए, हालांकि whether fine-tune करने का निर्णय them से unchanged है। Either तरीके से, prove करें fine-tune को ship करने से पहले regress नहीं हुआ।

Junoयह किस चीज में अच्छा है, और किस में नहीं Form absorb होता है weights में, facts नहीं: एक fine-tune अभी भी confabulates और stale हो जाता है, इसलिए facts को retrieval में रखें। Risks हैं overfitting (आपके set को memorise करना, नए inputs को fumble करना), catastrophic forgetting (narrow training eroding unrelated ability क्योंकि weights shared हैं), और distribution drift जब real traffic आपके training data से move होता है। तो हर fine-tune को एक held-out eval पर gate करें scored before और after prove करने के लिए regression नहीं हुआ, और इस तथ्य के लिए budget करें कि हर behavior change एक full retrain-eval-redeploy cycle है, जो यह है कि parameter-efficient methods क्यों exist करते हैं।

Prompt, RAG, या fine-tune?

Most of the समय आप यहां start नहीं करते। तीन techniques एक ladder form करते हैं, cheapest and fastest to change first:

  1. Prompting। हमेशा यह पहले try करें। यह instant iterate करने में, कोई extra cost नहीं, और एक clear prompt कुछ उदाहरणों के साथ अधिक solve करता है जो लोग expect करते हैं। यदि आपने prompt को काम नहीं किया है, आप fine-tune करने के लिए ready नहीं हैं।
  2. RAG। इसे reach करें जब gap knowledge है: मॉडल को तथ्यों की जरूरत है जो उसके पास नहीं हैं, या जो समय के साथ change होते हैं। RAG उन्हें question time पर supply करता है model को touch किए बिना।
  3. Fine-tuning। इसे reach करें जब gap behavior है rather than knowledge और prompting इसे consistent enough नहीं बना सकता, या जब आपके prompts इतने long हो गए हों कि instructions को मॉडल में bake करना scale पर सस्ता और तेजी से है।

वे exclusive नहीं हैं, और strongest systems उन्हें combine करते हैं: अपने format और tone के लिए एक मॉडल को fine-tune करें, फिर runtime पर इसे current facts feed करने के लिए RAG use करें। Training से behavior, retrieval से knowledge।

तो fine-tune करने से पहले एक quick test। क्या आप एक better prompt के साथ वहां पहुंच सकते हैं? फिर वह करें। क्या gap missing knowledge है? तब यह RAG है।

Ladder को climb करें; fine-tuning last rung है, not first। केवल जब prompt पहले से ही सही है, facts पहले से available हैं, और मॉडल अभी भी consistently enough behave नहीं करेगा तब fine-tuning tool है जो fits।

JunoPrompt, RAG, या fine-tune? तीन को एक ladder के रूप में treat करें: prompt पहले क्योंकि यह instant और सस्ता है, RAG add करें जब मॉडल knowledge miss कर रहा है, और fine-tune केवल जब gap behavior है कि prompting consistent नहीं बना सकता, या बड़े prompts को shorten करने के लिए scale पर। वे अच्छी तरह combine होते हैं: form के लिए fine-tune करें, facts के लिए RAG use करें। Fine-tuning last rung है जिसे आप reach करते हैं, not first।

तीन techniques एक ladder form करते हैं, ordered by कितना fast और सस्ता उन्हें change करना है, और आप इसे bottom से climb करते हैं।

  1. Prompting पहले, हमेशा। आप seconds में iterate करते हैं कोई extra training cost नहीं, और एक clear instruction कुछ उदाहरणों के साथ more ground cover करता है जो लोग expect करते हैं। जब तक एक real prompt tested नहीं हुआ है और short fall नहीं हुआ, higher rungs premature हैं।
  2. RAG जब gap knowledge है, facts जो मॉडल lacks करता है या जो time के साथ change होते हैं, retrieval उन्हें question time पर supply करता है और weights को अकेले छोड़ देता है। एक fact update करना आपके source को update करना है, not retraining।
  3. Fine-tuning। जब gap behavior है कि prompting pin down नहीं कर सकता, या जब prompts इतने लंबे हो गए हों कि instructions को weights में bake करना scale पर सस्ता है।

निदान जो आपको right rung पर रखता है वह gap naming है। गलत format या tone एक behavior gap है, तो prompt, फिर fine-tune। एक missing या outdated fact एक knowledge gap है, तो retrieve। Gap को misread करें और आप knowledge problem को fix करने के लिए fine-tune करेंगे और इसे stale हो जाते देखेंगे, या facts को एक prompt में stuff करेंगे जो retrieval step को fetch करना चाहिए।

वे exclusive नहीं हैं, और combined pattern production में reach करने का एक है: form के लिए fine-tune, facts के लिए RAG, together। एक मॉडल tuned आपके format और tone के लिए, fed current facts runtime पर, आपको consistent shape और fresh content एक बार दोनों देता है, जिनमें से न कि अन्य technique अकेले deliver करेगा।

Whether आप fine-tune कर सकते हैं सब मॉडल पर depends करता है। Closed providers offer managed fine-tuning अपने स्वयं के मॉडलों की; एक open-weight मॉडल आप अपने स्वयं की terms पर fine-tune कर सकते हैं, जो एक कारण है open weights को reach करने के लिए (Open and closed models)।

JunoPrompt, RAG, या fine-tune? Cheapest rung से ladder को climb करें: पहले prompt, add RAG जब gap knowledge है, fine-tune केवल जब यह behavior है कि prompting pin down नहीं कर सकता या prompts को shorten करने के लिए scale पर। निदान gap को naming करना है, format या tone means behavior, एक missing या stale fact means retrieval। Production move दोनों together है: form के लिए fine-tune, facts के लिए RAG, ताकि आप consistent shape और fresh content एक बार दोनों प्राप्त करें।

Ladder, prompt फिर RAG फिर fine-tune, ordered है iteration cost द्वारा: कितना fast और सस्ता यह है behavior को change करने के लिए एक बार shipped। एक prompt एक string है जिसे आप edit करते हैं और seconds में redeploy करते हैं। एक retrieval source data है जिसे आप model को touch किए बिना update करते हैं। एक fine-tune एक training run है, एक eval pass, और एक नया model id। उस order में climbing का अर्थ है कि आप higher iteration cost को तभी pay करते हैं जब cheaper rungs provably नहीं पहुंच सकते।

Real skill correctly diagnosing gap है, क्योंकि failure mode tool को choose करना है जो यह address नहीं करता। एक behavior gap (गलत shape, गलत tone, inconsistent task adherence) है जो prompting और फिर fine-tuning fix करते हैं। एक knowledge gap (एक fact जो मॉडल lacks करता है, या एक जो change करता है) है जो retrieval fix करता है, और knowledge gap को fine-tune करना classic expensive mistake है: आप facts को train करते हैं, वे next update द्वारा stale हैं, और आप उन्हें cite नहीं कर सकते।

Hold operational asymmetry को diagnosis के साथ। RAG की recurring cost है retrieval quality और latency हर call पर, forever paid लेकिन adjustable live। Fine-tuning की recurring cost एक re-run है हर change के लिए learned behavior को, plus regression risk जो हर run carry करता है।

तो combined architecture एक compromise नहीं है, यह design है: form को weights में tune करें, facts को retrieval में रखें, और प्रत्येक को independently version करें। Form rarely change करता है और एक slow update cycle को tolerate करता है; facts constantly change करते हैं और एक fast one demand करते हैं। उन्हें splitting आपको प्रत्येक को अपनी own speed पर move करने देता है, और आपको tuned मॉडल को re-eval करने देता है without अपने corpus को re-indexing, या corpus को refresh करने देता है without एक training job को re-running।

JunoPrompt, RAG, या fine-tune? Ladder को iteration cost द्वारा order किया जाता है: एक prompt seconds में edit करता है, एक source model को बिना update करता है, एक fine-tune एक full train-eval-redeploy है। gap को pick करने से पहले diagnose करें, behavior को prompting फिर fine-tuning के लिए जाता है, knowledge को retrieval के लिए जाता है, और knowledge gap को fine-tune करना costly mistake है जो stale, uncitable facts ship करता है। Production architecture उन्हें purpose पर split करता है: form को weights में tune करें, facts को retrieval में रखें, प्रत्येक को independently version करें ताकि form slow move कर सकता है और facts fast move कर सकते हैं।

व्यवहार में

Fine-tuning data कुछ exotic नहीं है। प्रत्येक उदाहरण एक short conversation है सटीक shape में जो आप runtime पर भेजते हैं, answer के साथ ending जिसे आप चाहते हैं कि मॉडल ने दिया होता:

python
# कुछ यहां shown हैं; एक real dataset सैकड़ों से हजारों उदाहरण हैं,
# runtime पर आप expect करते हैं inputs की पूरी range को covering करते हुए।
training_examples = [
    {"messages": [
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "मुझे इस सप्ताह दो बार charge किया गया और मुझे इसे आज ठीक करना है।"},
        {"role": "assistant", "content": "high"},
    ]},
    {"messages": [
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "क्या कहीं एक dark mode setting है?"},
        {"role": "assistant", "content": "low"},
    ]},
    # ...
]

आप इन्हें एक file में save करते हैं, provider के साथ एक training job start करते हैं, और इसे खत्म होने का wait करते हैं। जो वापस आता है वह एक नया model id है, जिसे आप फिर किसी अन्य मॉडल की तरह exactly कॉल करते हैं:

python
# Fine-tuned मॉडल एक और id है; बाकी सब कुछ unchanged है।
response = client.chat.completions.create(
    model="your-org/urgency-classifier-v1",
    messages=[
        {"role": "system", "content": "टिकट की तात्कालिकता को low, medium, या high के रूप में वर्गीकृत करें।"},
        {"role": "user", "content": "Export button कुछ नहीं करता जब मैं इसे click करता हूं।"},
    ],
)
# response.choices[0].message.content -> "low"  (label केवल, behavior जिसे आपने trained किया)

Win यह है कि behavior अब मॉडल में रहती है। Instructions छोटे हो सकते हैं, format हजारों calls में hold होता है, और आपको prompt को grow करना नहीं पड़ा वहां पहुंचने के लिए। Cost सब कुछ है जो इसके around है: आपको एक quality dataset की जरूरत है, एक training run, और एक fresh job हर बार जब आप change करना चाहते हैं जो उसने सीखा, जो exactly यह है कि क्यों यह ladder के bottom पर बैठता है। Upload उदाहरण, एक model id पाएं, इसे किसी अन्य की तरह कॉल करें।

Junoव्यवहार में Fine-tuning data example conversations हैं ending answer में जिसे आप चाहते हैं, कुछ सैकड़ों से कुछ हजारों। आप file upload करते हैं, एक training job run करते हैं, और एक नया model id वापस पाते हैं जिसे आप किसी अन्य की तरह कॉल करते हैं। Behavior तब baked in है, इसलिए prompts छोटे हो जाते हैं और format consistent रहता है, dataset को build करने की cost पर और job को हर बार rerun करने जब उसे change की जरूरत होती है।

Workflow upload, train, call है, लेकिन यह हिस्सा जो decide करता है यह काम करता है या नहीं है dataset, job नहीं। Quality और coverage raw count से अधिक मायने रखते हैं। सैकड़ों clean, consistent उदाहरण जो real range inputs को span करते हैं हजारों noisy या contradictory ones beat करते हैं, क्योंकि मॉडल whatever regularity actually data में learn करता है, including mistakes।

Train करने से पहले अपने data को split करें। एक slice hold out करें जिसे मॉडल training के दौरान कभी नहीं देखता, validation set, और इसके accuracy को check करें वहां rather than examples पर जिन्हें यह trained किया। एक मॉडल near-perfectly score कर सकता है data पर जिसे यह पहले से देख चुका है जबकि poorly कुछ भी नई पर करता है, इसलिए held-out number वह है जो आपको बताता है behavior generalise करता है या नहीं।

python
# एक portion reserve करें जिसे training job कभी नहीं देखता, real performance को measure करने के लिए।
split = int(len(training_examples) * 0.8)
train_set = training_examples[:split]        # job इन पर train करता है
validation_set = training_examples[split:]   # आप result को इन पर score करते हैं
# Provider एक नया model id return करता है; आप किसी अन्य मॉडल की तरह इसे कॉल करते हैं।
# Job API और split handling provider द्वारा vary करते हैं; कुछ directly validation file को take करते हैं।

दो judgment calls mechanics के ऊपर sit करती हैं। पहला, confirm करें prompting actually failed एक training run spend करने से पहले: एक real instruction कुछ उदाहरणों के साथ, varied inputs में tested, not आपका first rough draft। दूसरा, cost को carefully weigh करें। एक fine-tune एक fixed training cost है paid once एक long prompt के per-call cost के against paid forever, तो prompt-shortening pay off केवल तब करता है जब call volume saved tokens को job के worth बनाता है। और combined pattern को remember करें: एक tuned मॉडल form के लिए, RAG तथ्यों के लिए जिन्हें यह memorise करने की कोशिश नहीं करना चाहिए।

Junoव्यवहार में Job upload-train-call है, लेकिन dataset outcome decide करता है: कुछ सैकड़ों clean, varied उदाहरण हजारों noisy beat करते हैं, क्योंकि मॉडल whatever actually data में है learn करता है। एक validation slice hold out करें और वहां score करें, training उदाहरणों पर नहीं, या एक मॉडल जो memorised होगा बेहतर लगेगा यह है। Prompting को really fail करने से पहले confirm करें, fixed training cost को pay-forever prompt tokens के against weigh करें, और tuned मॉडल को RAG के साथ pair करें ताकि यह form को handle करे जबकि retrieval facts को handle करे।

Pipeline upload, train, evaluate, deploy है, और engineering dataset और eval set में रहता है, training call में नहीं। दो split discipline इसे carry करता है। एक validation set, training से held out, आपको बताता है behavior generalised या memorised हुआ। एक separate held-out eval set, before और after scored, है जो proves fine-tune आपके target को helped without regressing general ability, catastrophic-forgetting check पिछले section से concrete बनाया गया।

python
# तीन disjoint slices: एक पर train करें, दूसरे पर decisions को tune करें, तीसरे पर judge करें।
train_set      = examples[:8000]        # job इन पर train करता है
validation_set = examples[8000:9000]    # run के दौरान overfitting को watch करें
eval_set       = examples[9000:]        # before AND after scored है regression को prove करने के लिए

# base मॉडल को score करें और fine-tune को SAME eval_set पर, फिर compare करें।
base_score = run_eval(base_model_id, eval_set)
tuned_score = run_eval(fine_tuned_id, eval_set)
# केवल ship करें यदि tuned_score target पर base को beat करता है AND general-ability checks पर hold करता है।
# Eval scoring और training API provider द्वारा vary करते हैं; discipline नहीं।

Dataset quality यह है जहां overfitting और drift win या lose होते हैं। एक narrow या quirky dataset एक मॉडल को train करता है जो आपके set के idiosyncrasies को memorise करता है और inputs जो differ fumble करते हैं, इसलिए real input distribution की coverage count से अधिक मायने रखती है, और आप re-measure करते हैं जबकि production traffic जो आपने trained किया उससे shift होता है। Stale evals यह है कि कैसे एक quietly drifting मॉडल review pass करता है और users को fail करता है।

Operational reality जिसे design करना है वह यह है कि learned behavior के लिए हर change एक full re-run है, एक edit नहीं। Re-curate, retrain, re-eval, redeploy एक pinned नया id, हर बार। वह recurring cost, plus regression risk जो हर run carry करता है, यह है कि क्यों आप facts को RAG में रखते हैं जहां वे live update करते हैं, reserve fine-tuning behavior के लिए जो slowly change करता है, और प्रत्येक tuned id को एक versioned artifact मानते हैं जिसे आप roll back कर सकते हैं जब एक new run regress करता है।

Junoव्यवहार में Pipeline upload-train-eval-deploy है, और काम data splits में है, call में नहीं: एक validation set memorising को catch करता है, एक held-out eval set before और after scored regression को नहीं prove करता। Dataset coverage real input distribution का यह है कितना overfitting और drift को beat करते हैं, इसलिए re-measure करते हैं जबकि traffic आपके training data से move होता है। और recurring cost के लिए design करें, हर behavior change एक full retrain-eval-redeploy है, जो यह है कि facts RAG में belong करते हैं और प्रत्येक tuned id एक versioned artifact है जिसे आप roll back कर सकते हैं।

यह shape करने के तरीके के अंतिम भाग है कि एक मॉडल क्या जानता है और कैसे उत्तर देता है, सभी जिसे यह एक desk पर text predict करने देता है जिसे आपने arranged किया। अगले अध्याय इसे act करने की ability देते हैं: Tool use में मॉडल आपके स्वयं के functions को calls करता है, और फिर agent के रूप में एक loop में उन्हें run करता है।