पाठ 20 / 29
Streaming: Updates, Values और Tokens
Graph चलते समय users को प्रगति दिखाएँ।
Users को spinner न ताकने दें
Agent runs कई सेकंड ले सकते हैं। app.stream(input, stream_mode=...) प्रगति होते ही देता है। "updates" सिर्फ़ वही देता है जो हर node ने बदला (चरण-दर-चरण प्रगति के लिए अच्छा), "values" हर चरण के बाद पूरी state देता है, "messages" मॉडल tokens बनते ही stream करता है, और "custom" nodes को अपने events (जैसे "दस्तावेज़ खोज रहा हूँ...") भेजने देता है। आप modes मिला सकते हैं। Streaming अनुभव की latency सुधारती है, users को जल्दी रद्द करने देती है और real-time logs देती है। याद रखें कि stream किया उत्तर बाद में validation में विफल हो सकता है, इसलिए तय करें कि अंतिम परिणाम अस्वीकृत होने पर UI क्या करे।
Updates बनाम values, चलाकर
मैंने यह Python virtual environment में langgraph 1.2.12 और langchain-core 1.6.6 के साथ ऑफ़लाइन चलाया। किसी API key या मॉडल की ज़रूरत नहीं क्योंकि मॉडल की जगह सादे Python functions हैं, इसलिए आउटपुट दोहराने योग्य है। stream_mode="updates" के साथ हर chunk एक node का किया बदलाव है। "values" के साथ हर chunk पूरी state है: पहले इनपुट (5), फिर double के बाद 10, फिर plus_one के बाद 11।
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
class State(TypedDict):
n: int
def double(state): return {"n": state["n"] * 2}
def plus_one(state): return {"n": state["n"] + 1}
g = StateGraph(State)
g.add_node("double", double); g.add_node("plus_one", plus_one)
g.add_edge(START, "double"); g.add_edge("double", "plus_one"); g.add_edge("plus_one", END)
app = g.compile()
print("updates:")
for chunk in app.stream({"n": 5}, stream_mode="updates"):
print(" ", chunk)
print("values:")
for chunk in app.stream({"n": 5}, stream_mode="values"):
print(" ", chunk)
Output:
updates:
{'double': {'n': 10}}
{'plus_one': {'n': 11}}
values:
{'n': 5}
{'n': 10}
{'n': 11}त्वरित जाँच: कौन-सा stream mode सिर्फ़ वही देता है जो हर node ने बदला?
- values
- updates
- none
- checkpoint
Answer
updates — "updates" प्रति-node अंतर देता है; "values" हर चरण पर पूरी state देता है।