update_state 可以永久删除线程的消息
作者: doniyor2109创建于 2026年8月19日更新于 2026年9月17日
标签external
import asyncio
from typing import Annotated, TypedDict
from LangGraph.channels.delta import DeltaChannel
from LangGraph.checkpoint.memory import InMemorySaver
from LangGraph.constants import CONFIG_KEY_CHECKPOINTER
from LangGraph.graph import START, StateGraph
from LangGraph.graph.message import _messages_delta_reducer
class State(TypedDict):
messages: Annotated[list, DeltaChannel(_messages_delta_reducer)]
async def main() -> None:
builder = StateGraph(State)
builder.add_node("model", lambda state: {})
builder.add_edge(START, "model")
builder.set_finish_point("model")
graph = builder.compile() # no checkpointer attached, as on the platform
saver = InMemorySaver()
config = {"configurable": {"thread_id": "t1", CONFIG_KEY_CHECKPOINTER: saver})
await graph.ainvoke({"messages": [("user", "hello"), ("ai", "hi!")]}, config)
snapshot = await graph.aget_state(config)
print("get_state sees:", len(snapshot.values.get("messages", [])), "- expected 2")
await graph.aupdate_state(config, {"messages": [("user", "third")]}, as_node="model")
snapshot = await graph.aget_state(config)
print("after update_state:", len(snapshot.values.get("messages", [])), "- expected 3")
asyncio.run(main())Output on LangGraph==1.2.11 and current main:
get_state sees: 0 - expected 2
after update_state: 0 - expected 3(InMemorySaver replays from the full write log, so in this repro only the reads are wrong; on the platform the emptiness of the update head persists, as described above.)
内容来源: langchain-ai/langgraph