पाठ 6 / 29
Loops: Retry, Refine और Reflect
शर्त पूरी होने तक पहले के node पर लौटें, सीमा के साथ।
Cycles ही agents का सार हैं
Chain के विपरीत graph में cycles हो सकते हैं: ऐसी edge जो नियंत्रण पहले के node पर लौटाती है। इससे वैध होने तक retry, लिखो → आलोचना करो → संशोधन करो और agent ↔ tools जैसे पैटर्न संभव होते हैं। हर loop को router में समाप्ति नियम (गुणवत्ता पर्याप्त, लक्ष्य पूरा) और state में रखी प्रयासों की कठोर सीमा चाहिए, क्योंकि मॉडल कभी संतुष्ट न भी हो। Debugging के लिए प्रयासों का इतिहास reducer-समर्थित सूची में रखें, और तय करें कि सीमा आने पर क्या करें (सर्वश्रेष्ठ प्रयास लौटाएँ, मनुष्य को सौंपें, या error उठाएँ)।
लिखो-और-जाँचो loop, चलाकर
मैंने यह Python virtual environment में langgraph 1.2.12 और langchain-core 1.6.6 के साथ ऑफ़लाइन चलाया। किसी API key या मॉडल की ज़रूरत नहीं क्योंकि मॉडल की जगह सादे Python functions हैं, इसलिए आउटपुट दोहराने योग्य है। पहला मसौदा बहुत छोटा है, इसलिए router नियंत्रण write पर लौटाता है; दूसरा पास होता है और graph 2 प्रयासों के बाद समाप्त होता है। attempts >= 3 खंड सुरक्षा सीमा है।
import operator
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
class State(TypedDict):
draft: str
attempts: int
history: Annotated[list, operator.add]
def write(state):
n = state["attempts"] + 1
draft = "short" if n == 1 else "a good, complete answer"
return {"draft": draft, "attempts": n, "history": [f"attempt {n}: {draft}"]}
def route(state):
ok = len(state["draft"]) >= 10
return "done" if ok or state["attempts"] >= 3 else "retry" # always cap the loop
g = StateGraph(State)
g.add_node("write", write)
g.add_edge(START, "write")
g.add_conditional_edges("write", route, {"done": END, "retry": "write"})
out = g.compile().invoke({"draft": "", "attempts": 0, "history": []})
print(out["history"])
print("attempts:", out["attempts"])
Output:
['attempt 1: short', 'attempt 2: a good, complete answer'] attempts: 2
त्वरित जाँच: Graph के हर loop में क्या होना चाहिए?
- बड़ा मॉडल
- असीमित retry संख्या
- कोई state नहीं
- समाप्ति नियम और iterations की कठोर सीमा
Answer
समाप्ति नियम और iterations की कठोर सीमा — सीमाएँ अंतहीन loops और अनियंत्रित लागत रोकती हैं।