#8653·langgraph

update_state 可以永久删除线程的消息

作者: doniyor2109创建于 2026年8月19日更新于 2026年9月17日
标签external
python
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