AI एजेंट · पाठ

एजेंट लूप की सामान्य विफलताएँ

अनंत लूप, एक ही टूल कॉल को दोहराना और अंतिम उत्तर तक कभी न पहुँचना।

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

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

एजेंट लूप और उसकी विफलता की स्थितियाँ

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

इन विफलताओं को समझना, उनसे बचाव करने का पहला चरण है।

विफलता 1: अनंत लूप

अनंत लूप तब होता है जब एजेंट बिना कोई प्रगति किए, समान तर्कों के साथ उसी उपकरण को बार-बार कॉल करता है। ऐसा तब हो सकता है जब उपकरण कोई अनुपयोगी परिणाम लौटाए और एजेंट तर्क-विचार करके इस स्थिति से बाहर न निकल पाए।

# Example of an agent in an infinite loop:
# Step 1: reasoning='Need to search for Python docs'
#         tool='search_web', args={'query': 'Python documentation'}
# Step 2: reasoning='Search result was unhelpful, try again'
#         tool='search_web', args={'query': 'Python documentation'}
# Step 3: reasoning='Search result was unhelpful, try again'
#         tool='search_web', args={'query': 'Python documentation'}
# ... repeats until max_iterations or token budget is exhausted

print('Symptom: same tool + same arguments appearing repeatedly in steps')
print('Fix: detect repeated (tool, args) pairs and break the loop')

विफलता 2: अटकी हुई स्थिति

अटकी हुई स्थिति, अनंत लूप का अधिक सूक्ष्म रूप है। एजेंट तर्क-विचार करता रहता है और अलग-अलग उपकरणों को कॉल करता है, लेकिन अंतिम उत्तर तक नहीं पहुँच पाता। वह बिना प्रगति किए अलग-अलग तरीकों के बीच झूलता रहता है।

# Example of a stuck agent:
# Step 1: tool='search_web', args={'query': 'topic A'}
# Step 2: tool='search_web', args={'query': 'topic B'}  # different args
# Step 3: tool='search_web', args={'query': 'topic A'}  # back to first
# Step 4: tool='read_document', args={'url': '...'}
# Step 5: tool='search_web', args={'query': 'topic A'}
# ... no FINAL_ANSWER ever produced

print('Symptom: agent takes many steps but never calls FINAL_ANSWER')
print('Fix: max_iterations guard + force final answer if limit is near')

विफलता 3: अंतिम उत्तर का न मिलना

कुछ एजेंट यह तय किए बिना लूप में चलते रहते हैं कि कार्य पूरा हो चुका है। वे जानकारी एकत्र करते हैं, लेकिन उसे संश्लेषित करके लौटाने के लिए कभी रुकते नहीं हैं। इससे टोकन और समय व्यर्थ होते हैं।

# An agent that never concludes:
def run_agent_bad(query: str, max_steps: int = 20) -> str:
    for step in range(max_steps):
        action = llm_decide_action(query, history)

        if action['type'] == 'tool':
            result = execute_tool(action)
            history.append(result)
        # BUG: No check for 'final_answer' type!
        # The agent loops until max_steps, returning None

    return None  # never actually returns an answer

# Fix: explicitly check for final_answer signal
def run_agent_good(query: str, max_steps: int = 20) -> str:
    for step in range(max_steps):
        action = llm_decide_action(query, history)
        if action['type'] == 'final_answer':
            return action['answer']  # exit cleanly
        execute_tool(action)
    return 'Reached step limit without a conclusion.'

विफलता 4: उपकरण कॉल को पार्स करने में त्रुटियाँ

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

import json

def safe_parse_tool_call(arguments_str: str) -> dict:
    try:
        return json.loads(arguments_str)
    except json.JSONDecodeError as e:
        print(f'Failed to parse tool arguments: {e}')
        print(f'Raw: {arguments_str}')
        return None

def execute_step(tool_call) -> str:
    args = safe_parse_tool_call(tool_call.function.arguments)
    if args is None:
        # Feed the error back to the LLM in the next step
        return f'ERROR: Could not parse tool arguments. Raw: {tool_call.function.arguments}'
    return run_tool(tool_call.function.name, args)

विफलता 5: उपकरण से कोई उपयोगी डेटा नहीं मिलता

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

def run_agent_with_empty_result_handling(query: str) -> str:
    for step in range(20):
        action = decide_next_action(query, history)

        if action['type'] == 'final_answer':
            return action['answer']

        result = execute_tool(action['tool'], action['args'])

        # Detect empty results and provide context
        if not result or result.strip() == '':
            observation = f'Tool {action["tool"]} returned no data. Try a different approach or different arguments.'
        elif 'error' in result.lower():
            observation = f'Tool error: {result}. Consider a different tool or query.'
        else:
            observation = result

        history.append({'tool': action['tool'], 'result': observation})

    return 'Could not complete task within step limit.'

विफलता 6: मनगढ़ंत उपकरण नाम

LLM कभी-कभी ऐसे उपकरण नाम बना देता है जो मौजूद ही नहीं होते। कॉल करने से पहले हमेशा उपकरण के नाम का अपने पंजीकृत उपकरणों से मिलान करके सत्यापन करें। ऐसा होने पर एजेंट को जानकारीपूर्ण त्रुटि लौटाएँ।

REGISTERED_TOOLS = {
    'search_web': search_web_function,
    'get_weather': get_weather_function,
    'calculate': calculate_function
}

def dispatch_tool(tool_name: str, args: dict) -> str:
    if tool_name not in REGISTERED_TOOLS:
        available = ', '.join(REGISTERED_TOOLS.keys())
        return (
            f'ERROR: Unknown tool "{tool_name}". '
            f'Available tools: {available}. '
            f'Please use one of the available tools.'
        )

    tool_fn = REGISTERED_TOOLS[tool_name]
    return tool_fn(**args)

विफलता 7: टोकन बजट समाप्त होना

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

def truncate_tool_result(result: str, max_chars: int = 2000) -> str:
    if len(result) <= max_chars:
        return result
    truncated = result[:max_chars]
    return f'{truncated}\n... [result truncated to {max_chars} chars]'

def add_observation_to_history(history: list, tool_name: str, result: str):
    safe_result = truncate_tool_result(result, max_chars=2000)
    history.append({
        'role': 'tool',
        'content': safe_result,
        'tool_name': tool_name
    })
    print(f'[Step] Tool={tool_name}, Result length={len(result)} (stored {len(safe_result)})')

if __name__ == '__main__':
    demo_history = []
    add_observation_to_history(demo_history, 'search_web', 'x' * 3000)

प्रोग्राम के माध्यम से विफलता की स्थिति का पता लगाना

एक निदान फ़ंक्शन लिखें जो एजेंट के चरण इतिहास का विश्लेषण करके यह पहचान सके कि कौन-सी विफलता की स्थिति उत्पन्न हुई। समस्या-निवारण के दौरान यह अत्यंत उपयोगी होता है।

def diagnose_agent_failure(steps: list) -> str:
    if not steps:
        return 'No steps recorded'

    # Check for infinite loop: same (tool, args) repeated
    seen = {}
    for s in steps:
        key = (s.get('tool'), str(s.get('args')))
        seen[key] = seen.get(key, 0) + 1
    repeated = {k: v for k, v in seen.items() if v > 2}
    if repeated:
        return f'INFINITE_LOOP: repeated actions: {repeated}'

    # Check for missing final answer
    has_answer = any(s.get('type') == 'final_answer' for s in steps)
    if not has_answer and len(steps) >= 15:
        return 'STUCK_STATE: many steps taken but no final answer'

    # Check for parse errors
    errors = [s for s in steps if 'ERROR' in str(s.get('result', ''))]
    if len(errors) > 2:
        return f'TOOL_ERROR: {len(errors)} tool errors in pipeline'

    return 'OK'

if __name__ == '__main__':
    demo_steps = [{'tool': 'search_web', 'args': {'q': 'weather'}} for _ in range(3)]
    print('Diagnosis:', diagnose_agent_failure(demo_steps))

चरणों की एक सरल सीमा लागू करना

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

def run_agent_with_budget(query: str, max_steps: int = 15) -> dict:
    history = []
    for step in range(1, max_steps + 1):
        print(f'[Step {step}/{max_steps}]')

        action = decide_next_action(query, history)

        if action['type'] == 'final_answer':
            return {
                'status': 'success',
                'answer': action['answer'],
                'steps_taken': step
            }

        result = execute_tool(action['tool'], action['args'])
        history.append({'step': step, 'tool': action['tool'], 'result': result})

        if step == max_steps - 1:
            # Warn the agent it must conclude
            history.append({'role': 'system',
                            'content': 'You must provide a FINAL_ANSWER on the next step.'})

    return {'status': 'timeout', 'answer': None, 'steps_taken': max_steps}

त्वरित संदर्भ: विफलता की स्थितियाँ और समाधान

एजेंट लूप की छह विफलता की स्थितियों और उनके समाधानों का सारांश:

  • अनंत लूप: दोहराए गए (उपकरण, तर्क) युग्मों का पता लगाएँ; त्रुटि संबंधी प्रतिक्रिया देकर लूप तोड़ें
  • अटकी हुई स्थिति: अधिकतम पुनरावृत्तियों की सुरक्षा-जाँच रखें; सीमा के पास अंतिम उत्तर के लिए बाध्य करें
  • अंतिम उत्तर का न मिलना: क्रिया में अंतिम उत्तर के संकेत की स्पष्ट रूप से जाँच करें
  • पार्स करने की त्रुटियाँ: JSON पार्सिंग को प्रयास/अपवाद प्रबंधन के भीतर रखें; त्रुटि वापस LLM को भेजें
  • खाली उपकरण परिणाम: खाली स्ट्रिंग का पता लगाएँ; कोई डेटा नहीं मिलने की प्रतिक्रिया दें
  • मनगढ़ंत उपकरण नाम: पंजीकृत उपकरणों से सत्यापन करें; त्रुटि संदेश लौटाएँ

ज्ञान-जाँच: एजेंट लूप की विफलताएँ

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

पुनरावलोकन: एजेंट लूप की सामान्य विफलताएँ

अब आप एजेंट लूप की मुख्य विफलता की स्थितियों की पहचान करके उनसे बचाव कर सकते हैं:

  • अनंत लूप, अटकी हुई स्थितियों और अंतिम उत्तर के न मिलने — इन सभी के लिए अधिकतम पुनरावृत्ति की सुरक्षा-जाँच आवश्यक है
  • उपकरण कॉल को पार्स करने की त्रुटियों के लिए JSON पार्सिंग के चारों ओर प्रयास/अपवाद प्रबंधन आवश्यक है
  • खाली उपकरण परिणामों का पता लगाकर LLM को जानकारीपूर्ण प्रतिक्रिया देनी चाहिए
  • मनगढ़ंत उपकरण नामों का पंजीकृत उपकरण सूची से सत्यापन करना चाहिए
  • टोकन बजट समाप्त होने की स्थिति में परिणामों को छोटा करना चाहिए

एक मजबूत एजेंट लूप इन सभी विफलता की स्थितियों का पहले से अनुमान लगाता है और उनका सहजता से सामना करता है।

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

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

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

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

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

क्या “एजेंट लूप की सामान्य विफलताएँ” पाठ निःशुल्क है?

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

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

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

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

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

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

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

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

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

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

  1. एजेंट लूप की सामान्य विफलताएँ
  2. एजेंट चरणों के लिए ट्रेस लॉगिंग
  3. अनंत लूप पहचानना और तोड़ना
  4. चरण-दर-चरण त्रुटि-निवारण तकनीकें
← AI एजेंट पर वापस जाएँ