AI एजेंट · पाठ

ट्रैजेक्टरी-आधारित आत्म-सुधार

भविष्य के व्यवहार को बेहतर बनाने के लिए सफल और विफल कार्रवाई क्रमों से सीखना।

पाठ 3, कुल 4 में से13 चरण

ट्रैजेक्टरी-आधारित आत्म-सुधार, CoddyKit पर AI एजेंट का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI एजेंट सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

ट्रैजेक्टरी क्या है

एक ट्रैजेक्टरी किसी दिए गए कार्य के लिए एजेंट द्वारा आरंभ से अंत तक अपनाई गई स्थितियों और क्रियाओं का पूरा क्रम होती है। इसमें केवल अंतिम उत्तर ही दर्ज नहीं होता, बल्कि एजेंट वहाँ तक कैसे पहुँचा यह भी दर्ज होता है: किन उपकरणों का किस क्रम में, किन प्राचलों के साथ उपयोग किया गया और कौन-से मध्यवर्ती परिणाम देखे गए।

ट्रैजेक्टरी दर्ज करना

हर एजेंट क्रिया को ऐसे रिकॉर्डर में लपेटें जो उससे पहले और उसके बाद की स्थिति को दर्ज करे। किसी स्थिति में वर्तमान लक्ष्य, स्मृति की सामग्री और हाल की टिप्पणियाँ शामिल होती हैं। किसी क्रिया में उपकरण का नाम, प्राचल और परिणाम शामिल होते हैं।

from dataclasses import dataclass, field
from datetime import datetime
from typing import Any

@dataclass
class TrajectoryStep:
    step_index: int
    state_summary: str    # short description of world state
    action_name: str      # tool or reasoning step name
    action_params: dict
    result: Any
    timestamp: str = ''

    def __post_init__(self):
        if not self.timestamp:
            self.timestamp = datetime.utcnow().isoformat()

@dataclass
class Trajectory:
    trajectory_id: str
    task: str
    steps: list = field(default_factory=list)
    outcome: str = 'unknown'   # 'success', 'failure', 'partial'
    final_score: float = 0.0

    def add_step(self, step: TrajectoryStep):
        self.steps.append(step)

    def mark_success(self, score: float = 1.0):
        self.outcome = 'success'
        self.final_score = score

    def mark_failure(self, reason: str = ''):
        self.outcome = 'failure'
        self.final_score = 0.0

if __name__ == '__main__':
    traj = Trajectory(trajectory_id='t-1', task='Book a flight to Tokyo')
    traj.add_step(TrajectoryStep(
        step_index=0, state_summary='searching flights',
        action_name='search_flights', action_params={'dest': 'NRT'}, result='5 options found'
    ))
    traj.mark_success(score=0.95)
    print(f'Trajectory {traj.trajectory_id}: outcome={traj.outcome}, score={traj.final_score}')
    print('Steps recorded:', len(traj.steps))

ट्रैजेक्टरी संग्रहित करना

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

import json
import os
from dataclasses import asdict

TRAJECTORY_DIR = 'trajectories'

def save_trajectory(traj: Trajectory):
    os.makedirs(TRAJECTORY_DIR, exist_ok=True)
    filename = f'{TRAJECTORY_DIR}/{traj.trajectory_id}_{traj.outcome}.json'
    data = asdict(traj)
    with open(filename, 'w') as f:
        json.dump(data, f, indent=2)
    print(f'Saved trajectory: {filename}')

def load_successful_trajectories(task_type: str, n: int = 5) -> list:
    results = []
    for fname in os.listdir(TRAJECTORY_DIR):
        if '_success.json' not in fname:
            continue
        with open(os.path.join(TRAJECTORY_DIR, fname)) as f:
            traj = json.load(f)
        if task_type.lower() in traj['task'].lower():
            results.append(traj)
    results.sort(key=lambda t: t['final_score'], reverse=True)
    return results[:n]

सफल ट्रैजेक्टरी को सीमित-उदाहरणों के रूप में उपयोग करना

सफल ट्रैजेक्टरी एक हल किया हुआ उदाहरण होती है: किसी नए, समान कार्य का प्रयास करने से पहले उसे देखकर एजेंट चरणों का क्रम सीख सकता है। सबसे अधिक अंक वाली ट्रैजेक्टरी को सिस्टम प्रॉम्प्ट में कुछ-उदाहरणों वाले प्रारंभिक अंश के रूप में शामिल करें।

def trajectory_to_few_shot(traj: dict) -> str:
    lines = [f'Example task: {traj["task"]}', 'Steps taken:']
    for step in traj['steps']:
        lines.append(
            f'  [{step["step_index"]}] {step["action_name"]}'
            f'({json.dumps(step["action_params"])}) -> {str(step["result"])[:80]}'
        )
    lines.append(f'Outcome: {traj["outcome"]} (score={traj["final_score"]:.2f})')
    return '\n'.join(lines)

def build_few_shot_system_prompt(task_type: str) -> str:
    successful = load_successful_trajectories(task_type, n=2)
    if not successful:
        return 'Complete the following task step by step.'
    examples = '\n\n---\n\n'.join(
        trajectory_to_few_shot(t) for t in successful
    )
    return (
        'Here are examples of successfully completed similar tasks:\n\n'
        + examples
        + '\n\n---\n\nNow complete the new task using the same approach.'
    )

विफल ट्रैजेक्टरी का विश्लेषण

विफल ट्रैजेक्टरी भी उतनी ही मूल्यवान होती हैं। उनका विश्लेषण करके विफलता का प्रकार खोजें: कौन-सा चरण गलत हुआ और क्यों। सामान्य विफलता-प्रकार हैं: गलत उपकरण चुना गया, सही उपकरण लेकिन गलत प्राचल, मनगढ़ंत मध्यवर्ती परिणाम, या चक्र समाप्त नहीं हुआ।

def analyze_failure(traj: dict, client) -> dict:
    steps_str = json.dumps(traj['steps'], indent=2)
    prompt = (
        f'Task: {traj["task"]}\n\n'
        f'Agent trajectory (failed):\n{steps_str}\n\n'
        'Identify the failure mode. Return JSON:\n'
        '{"failure_step": 0, "failure_mode": "", "root_cause": "", '
        '"prevention": ""}'
    )
    import anthropic
    client_obj = anthropic.Anthropic(api_key='YOUR_API_KEY')
    result = client_obj.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': prompt}]
    )
    import json
    return json.loads(result.content[0].text)

विफलता-प्रकारों का वर्गीकरण

विफल ट्रैजेक्टरी से विफलता-प्रकारों का वर्गीकरण बनाने पर आपको पैटर्न दिखाई देने लगते हैं। जब पर्याप्त विफलताओं का मूल कारण एक जैसा हो, तो यह केवल एक निष्पादन को नहीं, बल्कि एजेंट के उपकरण, प्रॉम्प्ट या तर्क को सुधारने का संकेत होता है।

from collections import Counter

def build_failure_taxonomy(failed_trajectories: list, client) -> dict:
    failure_modes = []
    for traj in failed_trajectories:
        analysis = analyze_failure(traj, client)
        failure_modes.append(analysis['failure_mode'])

    counts = Counter(failure_modes)
    total = len(failure_modes)

    taxonomy = [
        {
            'failure_mode': mode,
            'count': count,
            'percentage': round(count / total * 100, 1)
        }
        for mode, count in counts.most_common()
    ]

    print('Failure Mode Taxonomy:')
    for entry in taxonomy:
        print(f'  {entry["failure_mode"]}: {entry["count"]} ({entry["percentage"]}%)')

    return {'taxonomy': taxonomy, 'total_failures': total}

ट्रैजेक्टरी से प्रशिक्षण युग्म बनाना

पर्यवेक्षित सूक्ष्म-समायोजन के लिए आपको (आगत, आदर्श_निर्गत) युग्म चाहिए। विफल ट्रैजेक्टरी आपको गलत निर्गत देती है; विफलता का विश्लेषण बताता है कि इसके बजाय क्या होना चाहिए था। दोनों मिलकर एक प्रशिक्षण युग्म बनाते हैं।

def trajectory_to_training_pair(
    failed_traj: dict,
    failure_analysis: dict
) -> dict:
    """
    Creates an SFT-ready training pair:
    input = task + context at failure step
    output = what the agent should have done
    """
    fail_step_idx = failure_analysis['failure_step']
    steps = failed_traj['steps']

    # Context up to (but not including) the failure step
    context_steps = steps[:fail_step_idx]
    context_str = '\n'.join(
        f'Step {s["step_index"]}: {s["action_name"]}({s["action_params"]})'
        for s in context_steps
    )
    return {
        'input': f'Task: {failed_traj["task"]}\n\nPrevious steps:\n{context_str}\n\nNext action:',
        'output': failure_analysis['prevention'],  # correct action
        'source': 'failure_trajectory',
        'trajectory_id': failed_traj.get('trajectory_id', 'unknown')
    }

if __name__ == '__main__':
    failed_traj = {
        'task': 'Cancel subscription',
        'trajectory_id': 'traj-7',
        'steps': [
            {'step_index': 0, 'action_name': 'find_account', 'action_params': {'user': 'u1'}},
            {'step_index': 1, 'action_name': 'delete_account', 'action_params': {'user': 'u1'}},
        ]
    }
    failure_analysis = {'failure_step': 1, 'prevention': 'call cancel_subscription(user="u1") instead'}
    pair = trajectory_to_training_pair(failed_traj, failure_analysis)
    print('Training input:')
    print(pair['input'])
    print('Expected output:', pair['output'])

ट्रैजेक्टरी से सूक्ष्म-समायोजन

जब आपके पास पर्याप्त उच्च-गुणवत्ता वाले प्रशिक्षण युग्म हो जाएँ—किसी संकीर्ण कार्य के लिए आम तौर पर 50–500—तो आप सफल पैटर्न को आत्मसात करने के लिए किसी छोटे मॉडल का सूक्ष्म-समायोजन कर सकते हैं। OpenAI का सूक्ष्म-समायोजन एपीआई messages प्रारूप वाली JSONL फ़ाइलें स्वीकार करता है।

import json

def export_fine_tuning_jsonl(
    training_pairs: list,
    output_file: str,
    system_prompt: str = 'You are an efficient AI agent.'
):
    with open(output_file, 'w') as f:
        for pair in training_pairs:
            record = {
                'messages': [
                    {'role': 'system', 'content': system_prompt},
                    {'role': 'user', 'content': pair['input']},
                    {'role': 'assistant', 'content': pair['output']}
                ]
            }
            f.write(json.dumps(record) + '\n')
    print(f'Exported {len(training_pairs)} training pairs to {output_file}')

# Upload via OpenAI API (pseudocode):
# client.files.create(file=open('train.jsonl','rb'), purpose='fine-tune')
# client.fine_tuning.jobs.create(training_file='file-id', model='gpt-4o-mini')

if __name__ == '__main__':
    import tempfile, os
    pairs = [{'input': 'Task: Cancel subscription\n\nNext action:', 'output': 'cancel_subscription(user="u1")'}]
    out_path = os.path.join(tempfile.gettempdir(), 'demo_training.jsonl')
    export_fine_tuning_jsonl(pairs, out_path)

ट्रैजेक्टरी की गुणवत्ता छँटाई

सभी सफल ट्रैजेक्टरी समान रूप से अच्छी नहीं होतीं। 15 पुनःप्रयासों के बाद सफल हुई ट्रैजेक्टरी, पहली कोशिश में सफल हुई ट्रैजेक्टरी की तुलना में अधिक शोर वाली होती है। दक्षता के आधार पर छँटाई करें: न्यूनतम चरणों में सफलता, उच्च अंतिम अंक और कोई मनगढ़ंत मध्यवर्ती परिणाम नहीं।

def filter_high_quality_trajectories(
    trajectories: list,
    max_steps: int = 8,
    min_score: float = 0.85
) -> list:
    high_quality = []
    for traj in trajectories:
        if traj['outcome'] != 'success':
            continue
        if traj['final_score'] < min_score:
            continue
        if len(traj['steps']) > max_steps:
            continue
        high_quality.append(traj)

    # Sort by (score DESC, steps ASC)
    high_quality.sort(
        key=lambda t: (-t['final_score'], len(t['steps']))
    )
    print(f'High-quality trajectories: {len(high_quality)} / {len(trajectories)}')
    return high_quality

if __name__ == '__main__':
    trajectories = [
        {'outcome': 'success', 'final_score': 0.92, 'steps': [1, 2, 3]},
        {'outcome': 'failure', 'final_score': 0.10, 'steps': [1]},
        {'outcome': 'success', 'final_score': 0.60, 'steps': [1, 2]},
    ]
    filter_high_quality_trajectories(trajectories)

अंतर्दृष्टि के लिए ट्रैजेक्टरी की तुलना

एक ही कार्य-प्रकार के लिए सफल और विफल ट्रैजेक्टरी की तुलना करने पर ठीक-ठीक पता चलता है कि वे कहाँ अलग हुईं। अलगाव का बिंदु एजेंट के निर्णय लेने की क्षमता में सुधार करने के लिए सबसे प्रभावी स्थान होता है।

def compare_trajectories(success_traj: dict, failure_traj: dict) -> dict:
    s_steps = {s['step_index']: s for s in success_traj['steps']}
    f_steps = {s['step_index']: s for s in failure_traj['steps']}

    divergences = []
    for idx in sorted(set(s_steps) & set(f_steps)):
        s_action = s_steps[idx]['action_name']
        f_action = f_steps[idx]['action_name']
        if s_action != f_action:
            divergences.append({
                'step': idx,
                'success_action': s_action,
                'failure_action': f_action
            })
            break  # First divergence is most important

    return {
        'first_divergence': divergences[0] if divergences else None,
        'success_steps': len(s_steps),
        'failure_steps': len(f_steps)
    }

# Usage:
# comparison = compare_trajectories(good_traj, bad_traj)
# print('First divergence:', comparison['first_divergence'])

if __name__ == '__main__':
    good_traj = {'steps': [{'step_index': 0, 'action_name': 'search'}, {'step_index': 1, 'action_name': 'summarize'}]}
    bad_traj = {'steps': [{'step_index': 0, 'action_name': 'search'}, {'step_index': 1, 'action_name': 'delete'}]}
    comparison = compare_trajectories(good_traj, bad_traj)
    print('First divergence:', comparison['first_divergence'])

ट्रैजेक्टरी-आधारित सुधार-चक्र

पूरा सुधार-चक्र इस प्रकार है: एजेंट चलाएँ → ट्रैजेक्टरी दर्ज करें → परिणाम का मूल्यांकन करें → ट्रैजेक्टरी पुस्तकालय में संग्रहित करें → विफलताओं का विश्लेषण करें → प्रशिक्षण युग्म बनाएँ → सूक्ष्म-समायोजन करें या प्रॉम्प्ट अपडेट करें → बेहतर एजेंट चलाएँ → नई ट्रैजेक्टरी दर्ज करें। हर चक्र एजेंट को बेहतर बनाता है।

class TrajectorySelfImprovement:
    def __init__(self, agent_id: str):
        self.agent_id = agent_id
        self.trajectory_lib = []

    def run_and_record(self, task: str, agent_fn) -> Trajectory:
        traj = Trajectory(
            trajectory_id=f'{self.agent_id}_{len(self.trajectory_lib)}',
            task=task
        )
        result = agent_fn(task, traj)  # agent_fn appends steps to traj
        # Evaluate result (e.g., via reflection or user rating)
        score = evaluate_result(result)
        if score >= 0.7:
            traj.mark_success(score)
        else:
            traj.mark_failure('Low quality score')
        save_trajectory(traj)
        self.trajectory_lib.append(traj)
        return traj

    def improvement_cycle(self, client):
        failed = [t for t in self.trajectory_lib if t.outcome == 'failure']
        if len(failed) >= 10:
            taxonomy = build_failure_taxonomy([vars(t) for t in failed], client)
            print('Improvement cycle complete:', taxonomy)

def evaluate_result(result: str) -> float:
    return 0.8  # placeholder

ज्ञान-जाँच

विफल ट्रैजेक्टरी का विश्लेषण करने का मुख्य उद्देश्य क्या है?

पुनरावलोकन: ट्रैजेक्टरी-आधारित स्व-सुधार

बहुत अच्छा किया! इस पाठ के मुख्य निष्कर्ष:

  • ट्रैजेक्टरी: आरंभ से अंत तक (स्थिति, क्रिया, परिणाम) चरणों का क्रम
  • सफल ट्रैजेक्टरी: समान कार्यों से पहले शामिल किए जाने वाले सीमित-उदाहरण
  • विफल ट्रैजेक्टरी: विफलता-प्रकारों के लिए विश्लेषण → प्रशिक्षण युग्म → सूक्ष्म-समायोजन
  • गुणवत्ता छँटाई: छोटी और अधिक अंक वाली सफल ट्रैजेक्टरी को प्राथमिकता दें
  • सुधार-चक्र: चलाएँ → दर्ज करें → विश्लेषण करें → सूक्ष्म-समायोजन करें → बेहतर संस्करण चलाएँ

अगला विषय: स्व-सुधार में क्या गलत हो सकता है—पुरस्कार-हेरफेर, वितरणात्मक बदलाव और सुरक्षा-विहीन स्व-संशोधन।

शुरुआत निःशुल्क

एआई शिक्षक के साथ AI एजेंट सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
60
पाठ
239

अक्सर पूछे जाने वाले प्रश्न

क्या “ट्रैजेक्टरी-आधारित आत्म-सुधार” पाठ निःशुल्क है?

हाँ—“ट्रैजेक्टरी-आधारित आत्म-सुधार” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI एजेंट पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“ट्रैजेक्टरी-आधारित आत्म-सुधार” में मैं क्या सीखूँगा?

भविष्य के व्यवहार को बेहतर बनाने के लिए सफल और विफल कार्रवाई क्रमों से सीखना। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI एजेंट का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या AI एजेंट शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI एजेंट शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“ट्रैजेक्टरी-आधारित आत्म-सुधार” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस AI एजेंट पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर AI एजेंट पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. प्रतिक्रिया संग्रह और भंडारण
  2. आत्म-चिंतन और स्व-मूल्यांकन चक्र
  3. ट्रैजेक्टरी-आधारित आत्म-सुधार
  4. जब आत्म-सुधार गलत दिशा में चला जाए
← AI एजेंट पर वापस जाएँ