# State Reducers: बदलें या जमा करें — LangGraph Agents और Multi-Agent Systems

Source: https://www.geekswithgeeks.com/hi/langgraph-agents/i-reducers

> नियंत्रित करें कि node अद्यतन state में कैसे मिलें।

## आख़िरी-लिखा-जीतता है बनाम जोड़ना

डिफ़ॉल्ट रूप से node का लौटाया मान उस state key को **अधिलेखित** करता है। जिन keys को **जमा** होना चाहिए (संदेश सूची, log, जुटाए परिणाम) उन पर `Annotated[list, operator.add]` से **reducer** लगाते हैं: अद्यतन बदलने की जगह reducer से जोड़े जाते हैं। LangGraph का अपना `add_messages` reducer chat messages के लिए यही करता है और message ID से भी मिलाता है। Reducers **समानांतर शाखाओं** के साथ सबसे ज़्यादा मायने रखते हैं: एक चरण में एक ही key लिखने वाले कई nodes को मिलाने की विधि चाहिए, वरना error आता है। हर key के लिए तय करें कि वह "नवीनतम मान" है या "जोड़ना"।

## Reducer बनाम अधिलेखन, चलाकर

मैंने यह Python virtual environment में langgraph 1.2.12 और langchain-core 1.6.6 के साथ ऑफ़लाइन चलाया। किसी API key या मॉडल की ज़रूरत नहीं क्योंकि मॉडल की जगह सादे Python functions हैं, इसलिए आउटपुट दोहराने योग्य है। दोनों nodes `log` प्रविष्टि और `score` लौटाते हैं। `log` key पर `operator.add` reducer है, इसलिए दोनों प्रविष्टियाँ जमा होती हैं; `score` पर कोई नहीं, इसलिए आख़िरी लिखा (2) जीतता है।

```python
import operator
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END

class State(TypedDict):
    log: Annotated[list, operator.add]     # reducer: updates are appended, not replaced
    score: int                              # no reducer: last write wins

def a(state): return {"log": ["a ran"], "score": 1}
def b(state): return {"log": ["b ran"], "score": 2}

g = StateGraph(State)
g.add_node("a", a); g.add_node("b", b)
g.add_edge(START, "a"); g.add_edge("a", "b"); g.add_edge("b", END)
print(g.compile().invoke({"log": [], "score": 0}))

```

Output:

```
{'log': ['a ran', 'b ran'], 'score': 2}
```

## Chat के लिए add_messages उपयोग करें

बातचीत इतिहास के लिए `Annotated[list, add_messages]` नए messages जोड़ता है और ID से मौजूदा अद्यतन करता है।

**Quiz:** State key पर reducer क्या करता है?

- [ ] Key हटाता है
- [x] तय करता है कि नए अद्यतन मौजूदा मान से कैसे मिलें
- [ ] Graph compile करता है
- [ ] GPU तेज़ करता है

*Answer:* तय करता है कि नए अद्यतन मौजूदा मान से कैसे मिलें. Reducer के बिना नवीनतम लिखा पुराने मान को बदल देता है।
