पाठ 19 / 29

Retry Policies और Error Handling

Node स्तर पर अस्थायी विफलताएँ सोखें।

पूरे run की नहीं, node की retry

बाहरी calls (model APIs, databases, web services) अस्थायी रूप से विफल होती हैं। आप node पर अधिकतम प्रयास, प्रारंभिक अंतराल, backoff गुणक और कौन-से exceptions retry करने हैं, के साथ RetryPolicy जोड़ सकते हैं, ताकि graph दोबारा शुरू किए बिना गड़बड़ call दोहराई जाए। सिर्फ़ वही errors retry करें जिन्हें दोहराना सुरक्षित है, और दुष्प्रभाव वाले nodes में सावधान रहें (idempotency keys उपयोग करें)। स्थायी विफलताओं के लिए node में error पकड़ें और state में error field लिखें ताकि conditional edge fallback, मनुष्य या साफ़ विफलता संदेश पर route कर सके। हर बाहरी call पर timeouts के साथ मिलाएँ।

तब तक retry होता node जब तक चले, चलाकर

मैंने यह Python virtual environment में langgraph 1.2.12 और langchain-core 1.6.6 के साथ ऑफ़लाइन चलाया। किसी API key या मॉडल की ज़रूरत नहीं क्योंकि मॉडल की जगह सादे Python functions हैं, इसलिए आउटपुट दोहराने योग्य है। Node पहली दो calls पर ConnectionError उठाता है। RetryPolicy उसे दोहराती है, और तीसरी call सफल होती है: "ok after 3 calls"।

from typing import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.types import RetryPolicy

calls = {"n": 0}
class State(TypedDict):
    out: str

def flaky(state):
    calls["n"] += 1
    if calls["n"] < 3:
        raise ConnectionError("temporary")
    return {"out": f"ok after {calls['n']} calls"}

g = StateGraph(State)
g.add_node("flaky", flaky, retry_policy=RetryPolicy(max_attempts=4, initial_interval=0.01, jitter=False))
g.add_edge(START, "flaky"); g.add_edge("flaky", END)
print(g.compile().invoke({"out": ""}))

Output:

{'out': 'ok after 3 calls'}

त्वरित जाँच: स्थायी विफलता के लिए अच्छा पैटर्न क्या है?

  • Temperature बढ़ाएँ
  • हमेशा retry करें
  • चुपचाप अनदेखा करें
  • State में error दर्ज करें और fallback या मनुष्य को route करें
Answer

State में error दर्ज करें और fallback या मनुष्य को route करें — स्पष्ट error state विफलताओं को graph द्वारा सँभालने योग्य बनाती है।