langgraph中全量更新(values 模式)和增量更新(updates 模式)
·
1. 什么叫 增量更新(incremental update)
-
全量更新(values 模式):
每次发来的数据都包含完整状态(所有字段,不管有没有变)。
→ 不需要记忆历史,直接用这次的结果覆盖即可。 -
增量更新(updates 模式):
每次发来的数据 只包含发生变化的部分。
没变的字段不会再发过来。
→ 所以必须自己维护一个current_state,不断把这些变化“补丁”应用到现有状态上,才能得到最新完整状态。
2. 举个例子
假设系统里有个状态字典,长这样:
# 初始状态
current_state = {"step": 1, "progress": 0, "huge_data": "XXXXXXXX"}
全量更新(values)
每次收到的更新都是完整版本:
{"step": 2, "progress": 10, "huge_data": "XXXXXXXX"}
{"step": 3, "progress": 20, "huge_data": "XXXXXXXX"}
👉 不需要记住旧状态,直接用新的覆盖即可。
增量更新(updates)
你收到的更新是“补丁”:
{"step": 2, "progress": 10}
{"step": 3}
{"progress": 20}
👉 注意没有 huge_data,因为它没变。
👉 需要写逻辑,把这些更新应用到 current_state 上:
current_state = {"step": 1, "progress": 0, "huge_data": "XXXXXXXX"}
# 收到 {"step": 2, "progress": 10}
current_state.update({"step": 2, "progress": 10})
# -> {"step": 2, "progress": 10, "huge_data": "XXXXXXXX"}
# 收到 {"step": 3}
current_state.update({"step": 3})
# -> {"step": 3, "progress": 10, "huge_data": "XXXXXXXX"}
# 收到 {"progress": 20}
current_state.update({"progress": 20})
# -> {"step": 3, "progress": 20, "huge_data": "XXXXXXXX"}
这样才能保证 current_state 始终是完整最新的。
3. 为什么要增量更新?
- 节省带宽:像
huge_data这种几 MB 的大字段不必每次都发。 - 更高性能:传输的数据更小,处理更快。
- 适合流式场景:可以一边接收小更新,一边实时更新界面。
update模式适合生产用,value生成环境下大数据可能会有性能影响。
更多推荐

所有评论(0)