पाठ 7 / 29
Recursion Limit: सुरक्षा जाल
अनियंत्रित graphs को स्वतः रोकें।
अंतर्निहित चरण बजट
LangGraph एक run के super-steps गिनता है और run config में recursion_limit पार होने पर GraphRecursionError उठाता है (डिफ़ॉल्ट 25 जैसी मामूली संख्या है)। यह सुरक्षा जाल है, डिज़ाइन का औज़ार नहीं: सामान्य runs ख़त्म करने के लिए उस पर निर्भर न हों। अपने graph के अनुकूल सीमा रखें, error पकड़ें, state log करें और साफ़ विफलता लौटाएँ। इसे अपने प्रयास-काउंटर, समय सीमा और token बजट के साथ मिलाएँ, क्योंकि loop में फँसा agent हर चक्र पर पैसा ख़र्च करता है।
बग वाला अनंत loop, रोका गया, चलाकर
मैंने यह Python virtual environment में langgraph 1.2.12 और langchain-core 1.6.6 के साथ ऑफ़लाइन चलाया। किसी API key या मॉडल की ज़रूरत नहीं क्योंकि मॉडल की जगह सादे Python functions हैं, इसलिए आउटपुट दोहराने योग्य है। Node की ख़ुद पर लौटने वाली edge है और अंत नहीं। recursion_limit 5 के साथ LangGraph GraphRecursionError उठाता है, जिसे कोड पकड़कर रिपोर्ट करता है।
from typing import TypedDict
from langgraph.graph import StateGraph, START
from langgraph.errors import GraphRecursionError
class State(TypedDict):
n: int
def inc(state): return {"n": state["n"] + 1}
g = StateGraph(State)
g.add_node("inc", inc)
g.add_edge(START, "inc")
g.add_edge("inc", "inc") # a bug: never ends
app = g.compile()
try:
app.invoke({"n": 0}, {"recursion_limit": 5})
except GraphRecursionError:
print("stopped by the recursion limit instead of looping forever")
Output:
stopped by the recursion limit instead of looping forever
सीमा आने पर state log करें
GraphRecursionError के क्षण की state अक्सर दिखाती है कि कौन-सा loop क्यों अटका।
त्वरित जाँच: Recursion limit किसलिए है?
- सुरक्षा जाल के रूप में अनियंत्रित graphs रोकना
- मॉडल को होशियार बनाना
- State संपीड़ित करना
- भाषा चुनना
Answer
सुरक्षा जाल के रूप में अनियंत्रित graphs रोकना — यह एक run में चरणों की संख्या सीमित करता है।