资讯动态

【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版

发布时间:2026/10/14 3:14:43 来源:尧图企业网站定制
【零基础入门 LLM 开发 · Day 13】LangChain 的对话记忆——Message 对象版和 Day 6 是什么关系原理一模一样还是那个历史列表 全量发送的套路。区别只是——Day 6原生 SDK历史是字典列表[{role: user, ...}, ...]今天LangChain历史是对象列表[HumanMessage(...), AIMessage(...), ...]框架没变魔术只是给了你更体面的写法。完整代码importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,AIMessage,SystemMessage load_dotenv()llmChatOpenAI(modelos.getenv(YUMC_MODEL_NAME),api_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),)# 历史列表用 SystemMessage 开场定人设history[SystemMessage(content你是一个友好的AI助手请记住用户告诉你的所有事情。)]defchat(user_input):# 1. 把用户的新问题加到历史中history.append(HumanMessage(contentuser_input))# 2. 把整个历史发给大模型responsellm.invoke(history)# 3. 把大模型的回复也加到历史中history.append(AIMessage(contentresponse.content))returnresponse.contentprint(-----多轮对话测试-----)print(你,我叫小明我最喜欢吃火锅。)print(AI:,chat(我叫小明我最喜欢吃火锅。))print(你,你还记得我叫什么名字嘛我最爱吃什么)print(AI:,chat(你还记得我叫什么名字嘛我最爱吃什么))三种消息对象对照表LangChain 对象等价的原生字典谁在说话SystemMessage{role: system, ...}导演人设/规矩HumanMessage{role: user, ...}用户AIMessage{role: assistant, ...}AIllm.invoke()既接受字符串单轮快速调用也接受消息列表多轮记忆今天用的是后者。这次代码比 Day 6 好在哪封装成chat()函数记忆逻辑收进一个函数调用方不用关心实现细节类型化的消息对象HumanMessage(content...)比{role: user, content: ...}少打字、有补全、拼错角色名会立刻报错字典写错 role 只会静默失败为后续铺路Day 14 的链式调用、Day 17 的 Agent 消息管理都基于这套对象体系。运行效果-----多轮对话测试----- 你 我叫小明我最喜欢吃火锅。 AI: 你好小明火锅爱好者你好呀你最喜欢哪种锅底呢 你 你还记得我叫什么名字嘛我最爱吃什么 AI: 当然记得你叫小明你最喜欢吃火锅。今日踩坑点漏了第 3 步 append AIMessageDay 6 的老坑换了框架照样栽。症状AI 只记得你说的不记得自己答过的。history是全局变量练习阶段无所谓真实项目里每个用户/每个会话要独立一份历史或交给 LangGraph 的 checkpointer 这类组件管理。把字符串直接 append 进历史history.append(你好)会报错历史里只能放消息对象。今日小练习必做把chat()改造成while True交互循环参考 Day 6 的 quit 逻辑并结合 Day 12 的.stream()做流式回复。进阶写一个trim_history(max_rounds5)函数保留 SystemMessage 最近 5 轮控制历史长度。明日预告Day 14让 AI 的输出从人话变成机器能用的 JSON——结构化输出提测数据提取、API 联动的第一步。这里埋着本系列最大的一个语法坑。附录完整练习代码memoryTest.pyimportosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,AIMessage,SystemMessage load_dotenv()llmChatOpenAI(modelos.getenv(YUMC_MODEL_NAME),api_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),)history[SystemMessage(content你是一个友好的AI助手请记住用户告诉你的所有事情。)]defchat(user_input):# 1.把用户的新问题加到历史中history.append(HumanMessage(contentuser_input))# 2.把整个历史发给大模型responsellm.invoke(history)# 3. 把大模型的回复也加到历史中history.append(AIMessage(contentresponse.content))returnresponse.contentprint(-----多轮对话测试-----)print(你,我叫小明我最喜欢吃火锅。)print(AI:,chat(我叫小明我最喜欢吃火锅。))print(你,你还记得我叫什么名字嘛我最爱吃什么)print(AI:,chat(你还记得我叫什么名字嘛我最爱吃什么))

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑