You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Langgraph会话全程如何存储与检索聊天历史?

Langgraph中存储并实时打印聊天历史的解决方案

错误原因分析

  1. 消息包装错误:llm.invoke(user_message)返回的本身就是AIMessage对象,你却把它作为content参数传入新的AIMessage,导致content类型不符合字符串要求,触发ValidationError。
  2. 拼写错误:代码中raph_builder.add_node应为graph_builder.add_node,否则会抛出未定义变量的错误。
  3. 聊天历史维护逻辑:虽然用了Annotated[list, add_messages]注解,但返回消息时需要正确传递消息对象,让Langgraph自动完成历史累加。

修正后的完整代码

from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END
from langchain_core.messages import AIMessage, HumanMessage
from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages

llm = ChatOpenAI(temperature=1.0)

class State(TypedDict):
    # add_messages注解自动维护消息列表的累加逻辑
    messages: Annotated[list, add_messages]
  
graph_builder = StateGraph(State) 

def chatbot(state: State):
    # 获取最新的用户消息内容
    user_message = state["messages"][-1].content
    # llm.invoke直接返回AIMessage对象,无需二次包装
    ai_response = llm.invoke(user_message) 
    # 返回消息列表,add_messages会自动将其追加到全局messages中
    return {"messages": [ai_response]}

def past_message_node(state: State):
    print("\nConversation History:")
    # 提取所有消息的内容并拼接成字符串
    message_contents = [msg.content for msg in state['messages']]
    print(", ".join(message_contents))
    return state

# 修正拼写错误,使用正确的graph_builder变量
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_node("past_message_node", past_message_node)
graph_builder.add_edge("chatbot", "past_message_node")
graph_builder.add_edge("past_message_node", END)
graph = graph_builder.compile()

while True:
    user_input = input("\nUser: ")
    if user_input.lower() in ['quit', 'q']:
        print("Chat Ended")
        break
    # 用HumanMessage包装用户输入,或使用元组("user", user_input)均可
    for event in graph.stream({"messages": [HumanMessage(content=user_input)]}):
        for value in event.values():
            # 获取AI的最新回复并打印
            last_message = value["messages"][-1]
            print("Assistant:", last_message.content)

关键逻辑说明

  • add_messages注解:这个注解是Langgraph维护聊天历史的核心,它会自动将每个节点返回的messages列表追加到全局State的messages中,无需手动编写历史累加代码。
  • 消息对象正确传递:llm.invoke返回的是标准AIMessage对象,直接放入返回的列表即可,不需要再用AIMessage(content=...)包装。
  • 输入消息格式:用户输入可以用HumanMessage包装,也可以用元组("user", user_input),Langgraph都会正确识别为用户消息并加入历史。

预期运行效果

User: Hi
Assistant: How can I help you?

Conversation History:
Hi, How can I help you?

User: What is the capital of UK?
Assistant: London

Conversation History:
Hi, How can I help you?, What is the capital of UK?, London

User: q
Chat Ended

内容的提问来源于stack exchange,提问作者Tech_fusion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:38:10