
当你在 ChatGPT 这类对话应用上试用过十万次后你会发现它能够记住过往的对话交流。举个例子我先问第一届板球世界杯谁夺冠了随后话锋一转聊完全不相干的内容5 加 5 等于几。接着我再提问这支获胜队伍的队长是谁。你注意看我此时并没有说明是哪一场赛事、哪项运动板球还是足球等等但模型记得我们聊的是板球所以给出了贴合语境的答案。人与人交谈也是同理我们开启一个话题接着不断交流但始终记得谈话的主题。再来看看 LLMChain。默认情况下这类链不具备记忆能力属于无状态组件。你去查看这条链自带的可用方法就会发现其中有一个名为 memory记忆的组件。单纯直接调用 LLMChatOpenAI/Ollama等基础模型对象不带任何记忆组件不能记住对话历史每一次调用都是独立请求模型不知道上一轮说了什么。核心本质大模型本身无服务端会话状态API 是无状态接口。 不管 OpenAI、Ollama、DeepSeek、通义千问本地 / 云端 API每次请求 独立的 HTTP 请求 模型服务端不会保存任何聊天记录。1. 这段代码印证结论from langchain_ollama import ChatOllama llm ChatOllama(modelqwen2.5) print(llm.invoke(我的名字是小明).content) print(llm.invoke(我叫什么名字).content)第二次调用模型大概率答不上来。 原因 两次invoke互相独立第二次请求体里只有当前用户提问没有上一轮对话消息。2. 想要记住历史唯一办法人工把完整消息序列一次性塞进本次请求from langchain_core.messages import HumanMessage, AIMessage from langchain_ollama import ChatOllama llm ChatOllama(modelqwen2.5) messages [] messages.append(HumanMessage(我的名字是小明)) resp llm.invoke(messages) messages.append(resp) messages.append(HumanMessage(我叫什么名字)) resp2 llm.invoke(messages) print(resp2.content)✅ 此时能记住不是 llm 对象自带记忆是你自己维护了 messages 列表。容易混淆的误区❌ 误区ChatOllama/ChatOpenAI对象内部自带缓存 对象只是一个封装请求参数的客户端内部不会缓存任何对话消息。实例复用也不会记住上下文。❌ 误区Ollama 命令行能记住对话API 也可以 ollama run qwen 能记忆是ollama CLI 客户端自己维护消息列表不是模型服务自动保存调用 Ollama HTTP API 默认同样无状态。✅ 真相 记忆只能存在你的程序侧 手动列表 / ConversationBufferMemory / RunnableWithMessageHistory / Redis 会话存储全都只是帮你管理messages。一句话精炼总结基础 LLM 实例只是一个发送请求的客户端本身不存储任何对话上下文上下文能否延续完全取决于你每次调用时有没有把历史消息一并传入本次请求。