做一个真正的“两轮聊天”第一轮告诉助手名字第二轮问它还记不记得。这里把刚学的add_messages、上一课的状态合并以及之前的InMemorySaver连起来。在已激活的.venv中新建unit4_lesson10_chat_memory.pyimport os from typing import Annotated, TypedDict from langchain_core.messages import AnyMessage, HumanMessage, SystemMessage from langchain_openai import ChatOpenAI from langgraph.checkpoint.memory import InMemorySaver from langgraph.graph import START, END, StateGraph from langgraph.graph.message import add_messages class ChatState(TypedDict): messages: Annotated[list[AnyMessage], add_messages] model ChatOpenAI( modeldeepseek-flash, base_urlhttps://api.deepseek.com, api_keyos.environ[DEEPSEEK_API_KEY], ) def chat(state: ChatState) - dict: response model.invoke([ SystemMessage(content你是书店助手请简短回答。), *state[messages], ]) return {messages: [response]} builder StateGraph(ChatState) builder.add_node(chat, chat) builder.add_edge(START, chat) builder.add_edge(chat, END) graph builder.compile(checkpointerInMemorySaver()) config {configurable: {thread_id: customer-a}} questions [ 我叫小明请记住我的名字。, 我叫什么名字, ] for round_number, question in enumerate(questions, start1): result graph.invoke( {messages: [HumanMessage(contentquestion)]}, config, ) print(f\n第 {round_number} 轮问题{question}) print(f第 {round_number} 轮回答{result[messages][-1].content}) print(f\n已保存的消息数{len(result[messages])})运行python unit4_lesson10_chat_memory.py。第二轮通常会答出“小明”消息数应为4两条用户消息、两条助手消息。输出截图这节最重要的区分add_messages负责合并消息列表InMemorySaver负责让下一次调用找回状态相同的thread_id表示同一段对话。LangGraph 消息状态文档 · DeepSeek 当前模型名称