AI Engineering Academy · पाठ

एजेंट की विफलता के प्रकारों का वर्गीकरण

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

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

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

एजेंट अलग-अलग तरीकों से क्यों विफल होते हैं

एजेंट साधारण LLM कॉल से अलग तरीके से विफल होते हैं। एकल-चरणीय कॉल या तो उत्तर लौटाती है या त्रुटि उत्पन्न करती है। कई चरणों वाला कार्य कर रहा एजेंट किसी भी बिंदु पर विफल हो सकता है—और अंतिम आउटपुट से विफलता स्पष्ट न भी हो। एजेंट विफलता-प्रकारों का वर्गीकरण समझना ऐसे एजेंट बनाने की दिशा में पहला कदम है, जो अपनी विफलताओं का पता लगा सकें, उनका निदान कर सकें और उनसे उबर सकें।

विफलता प्रकार 1: उपकरण त्रुटियाँ

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

class ToolError(Exception):
    def __init__(self, tool_name: str, args: dict, error: Exception):
        self.tool_name = tool_name
        self.args = args
        self.original_error = error
        super().__init__(f'Tool {tool_name} failed: {error}')

def safe_tool_call(tool_func, args: dict) -> str:
    try:
        result = tool_func(**args)
        if not result:
            return 'Tool returned empty result. Try a different approach.'
        return str(result)
    except Exception as e:
        raise ToolError(tool_func.__name__, args, e)

विफलता प्रकार 2: गलत संरचना वाले आउटपुट

गलत संरचना वाले आउटपुट तब होते हैं जब एजेंट ऐसा पाठ बनाता है जो अपेक्षित प्रारूप से मेल नहीं खाता—उदाहरण के लिए, जब अगला चरण JSON की अपेक्षा कर रहा हो तब स्वाभाविक भाषा लौटाना, या गलत संरचना वाले तर्कों के साथ किसी उपकरण को कॉल करना। ऐसा अक्सर तब होता है जब एजेंट अपने वर्तमान चरण को पिछले चरण के साथ भ्रमित कर देता है। उपयोग करने से पहले हर एजेंट आउटपुट के प्रारूप को मान्य करें और प्रारूप गलत होने पर फिर से प्रॉम्प्ट दें।

import json

def validate_agent_output(raw_output: str, expected_format: str) -> dict:
    if expected_format == 'json':
        try:
            return json.loads(raw_output)
        except json.JSONDecodeError as e:
            return {
                'valid': False,
                'error': f'Expected JSON but got invalid JSON: {e}',
                'raw': raw_output[:200]
            }
    return {'valid': True, 'data': raw_output}

विफलता प्रकार 3: तर्क-चक्र

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

from collections import Counter

class LoopDetector:
    def __init__(self, window: int = 5, threshold: int = 3):
        self.recent_actions = []
        self.window = window
        self.threshold = threshold

    def record(self, action: str) -> bool:
        self.recent_actions.append(action)
        if len(self.recent_actions) > self.window:
            self.recent_actions.pop(0)
        counts = Counter(self.recent_actions)
        most_common_count = counts.most_common(1)[0][1] if counts else 0
        return most_common_count >= self.threshold  # True = loop detected

विफलता प्रकार 4: संदर्भ समाप्ति

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

import tiktoken

CONTEXT_LIMIT = 100_000  # tokens
COMPRESS_AT = 80_000     # trigger compression with headroom

enc = tiktoken.encoding_for_model('gpt-4o')

def total_tokens(messages: list) -> int:
    return sum(len(enc.encode(str(m))) for m in messages)

def check_context(messages: list) -> str:
    tokens = total_tokens(messages)
    if tokens > COMPRESS_AT:
        return 'compress'
    if tokens > CONTEXT_LIMIT:
        return 'critical'
    return 'ok'

विफलता प्रकार 5: बाहरी सेवा अनुपलब्धता

बाहरी सेवा विफलताएँ तब होती हैं जब किसी उपकरण की अंतर्निहित सेवा बंद हो, उसकी दर-सीमा लागू हो गई हो, या वह अप्रत्याशित त्रुटियाँ लौटाए। जिस डेटाबेस से पूछताछ करनी हो, उस तक पहुँच न पाने वाला एजेंट अटक जाता है। तर्क-चक्रों (एजेंट की गलती) के विपरीत, बाहरी विफलताएँ पर्यावरण की विफलताएँ हैं। इन्हें पुनःप्रयास और घातीय बैकऑफ़ से संभालें, तथा अलग डेटा स्रोतों का उपयोग करके परिणाम का अनुमान लगाने वाले वैकल्पिक उपकरण रखें।

import asyncio

async def resilient_tool_call(tool_func, args: dict, max_retries: int = 3) -> str:
    for attempt in range(max_retries):
        try:
            return await tool_func(**args)
        except (ConnectionError, TimeoutError) as e:
            if attempt == max_retries - 1:
                return f'Service unavailable after {max_retries} attempts. Error: {e}'
            wait = 2 ** attempt  # 1s, 2s, 4s
            await asyncio.sleep(wait)
    return 'Unexpected error in resilient_tool_call'

विफलता प्रकार 6: लक्ष्य की गलत समझ

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

async def confirm_goal_understanding(original_task: str) -> str:
    resp = await client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'Restate the task in your own words. Be specific about what the final deliverable should be.'},
            {'role': 'user', 'content': f'Task: {original_task}'}
        ]
    )
    return resp.choices[0].message.content

# Use the restatement as the first step of the agent
# to catch misunderstandings before any tools are called

विफलता वर्गीकरण प्रणाली बनाना

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

from enum import Enum
from dataclasses import dataclass

class FailureType(Enum):
    TOOL_ERROR = 'tool_error'
    MALFORMED_OUTPUT = 'malformed_output'
    REASONING_LOOP = 'reasoning_loop'
    CONTEXT_EXHAUSTION = 'context_exhaustion'
    EXTERNAL_SERVICE = 'external_service'
    GOAL_MISUNDERSTANDING = 'goal_misunderstanding'
    MAX_ITERATIONS = 'max_iterations'
    UNKNOWN = 'unknown'

@dataclass
class AgentFailure:
    failure_type: FailureType
    step: int
    tool_name: str | None
    error_message: str
    recoverable: bool

विफलताओं को पुनर्प्राप्ति क्रियाओं से जोड़ना

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

RECOVERY_ACTIONS = {
    FailureType.TOOL_ERROR:           'retry_with_corrected_args',
    FailureType.MALFORMED_OUTPUT:     'reformat_output',
    FailureType.REASONING_LOOP:       'inject_diversity_prompt',
    FailureType.CONTEXT_EXHAUSTION:   'compress_history',
    FailureType.EXTERNAL_SERVICE:     'use_fallback_tool',
    FailureType.GOAL_MISUNDERSTANDING:'request_clarification',
    FailureType.MAX_ITERATIONS:       'escalate_to_human',
    FailureType.UNKNOWN:              'escalate_to_human'
}

अधिकतम पुनरावृत्ति सीमाएँ निर्धारित करना

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

MAX_ITERATIONS = 15

async def run_agent(task: str) -> str:
    messages = [{'role': 'user', 'content': task}]
    loop_detector = LoopDetector()
    for iteration in range(MAX_ITERATIONS):
        response = await get_agent_action(messages)
        if response.is_final:
            return response.answer
        action_key = f'{response.tool}:{response.args}'
        if loop_detector.record(action_key):
            messages.append({'role': 'system', 'content': 'You are repeating yourself. Try a completely different approach.'})
            continue
        result = await execute_tool(response.tool, response.args)
        messages.append({'role': 'tool', 'content': result})
    return 'Task exceeded maximum iterations. Partial results: ' + get_partial_result(messages)

पश्च-विश्लेषण के लिए विफलताएँ दर्ज करना

हर एजेंट विफलता को इतनी जानकारी के साथ दर्ज करें कि बाद में उसका निदान किया जा सके: कार्य का पूरा विवरण, विफलता बिंदु तक का संपूर्ण क्रिया इतिहास, विफलता प्रकार और त्रुटि संदेश, पुनरावृत्ति संख्या तथा टोकन उपयोग। इसे failures तालिका में failure_type और task_id पर अनुक्रमणिका के साथ संग्रहीत करें। नियमित रूप से विफलता लॉग की समीक्षा करें, ताकि यह पता लगाया जा सके कि कौन-से कार्य प्रकार विशेष विफलता प्रकारों के लिए अधिक संवेदनशील हैं और उसी के अनुसार सुधारों को प्राथमिकता दी जा सके।

import json
from dataclasses import asdict

async def log_agent_failure(task_id: str, failure: AgentFailure, history: list, pool):
    async with pool.acquire() as conn:
        await conn.execute('''
            INSERT INTO agent_failures
            (task_id, failure_type, step, tool_name, error_message,
             recoverable, action_history, failed_at)
            VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())
        ''',
            task_id,
            failure.failure_type.value,
            failure.step,
            failure.tool_name,
            failure.error_message,
            failure.recoverable,
            json.dumps(history)
        )

त्वरित जाँच

एजेंट विफलता प्रकारों के वर्गीकरण की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

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

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

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

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

पाठ्यक्रम
30
पाठ
120

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

क्या “एजेंट की विफलता के प्रकारों का वर्गीकरण” पाठ निःशुल्क है?

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

“एजेंट की विफलता के प्रकारों का वर्गीकरण” में मैं क्या सीखूँगा?

एजेंट की विफलताओं का वर्गीकरण बनाएँ: टूल की त्रुटियाँ, गलत रूप से बनाए गए आउटपुट, तर्क-विचार के चक्र, संदर्भ का समाप्त हो जाना और बाहरी सेवा की अनुपलब्धता; फिर प्रत्येक के लिए पुनर्प्राप्ति रणनीतियाँ… आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI Engineering Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

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

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

“एजेंट की विफलता के प्रकारों का वर्गीकरण” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

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