LangChain 入门实战(二):深入理解消息系统,让 AI 真正拥有“上下文”

LangChain 入门实战(二):深入理解消息系统,让 AI 真正拥有“上下文” 1. 为什么模型调用不能只传一句话刚开始学习 LangChain 时很多人的代码都是这样response model.invoke( 介绍一下 LangChain ) print(response.content)看起来非常简单。但是思考一个问题如果你正在开发一个客服机器人你希望 AI 知道它是谁它负责什么什么问题不能回答用户之前问过什么当前问题和之前有什么关系例如用户我的订单什么时候到普通字符串调用用户我的订单什么时候到模型只能看到一句话。但是实际业务希望系统你是一名电商客服只负责订单相关问题。用户我的订单什么时候到助手请提供订单编号。这就是消息结构存在的意义。2. 大模型眼中的对话是什么很多人认为AI 会记住聊天记录。实际上大模型本身没有记忆。每一次请求本质都是你的程序 | |整理消息 | |发送给模型 | |模型生成回复例如第一次用户我叫张三AI 回复你好张三第二次用户我叫什么如果程序只发送我叫什么模型并不知道张三是谁。所以记忆不是模型提供的而是应用程序维护的。3. LangChain 的消息模型设计LangChain 把一次对话拆成三类消息from langchain_core.messages import ( SystemMessage, HumanMessage, AIMessage )分别对应消息类型角色作用SystemMessage系统定义 AI 身份和规则HumanMessage用户表达需求AIMessage助手保存模型回答4. SystemMessage给 AI 定义人格和规则例如from langchain_core.messages import SystemMessage system SystemMessage( content你是一名专业客服助手。 要求 回答保持礼貌 不确定的信息不要编造 回复控制在100字以内 )它相当于告诉模型在接下来的对话里你应该如何行动。对应 OpenAI 原生格式{ role: system, content: 你是一名客服助手 }SystemMessage 常见用途1角色设定例如你是一名 Python 专家2输出格式限制例如请使用 JSON 格式返回3业务规则约束例如不能回答订单之外的问题注意SystemMessage 不是代码规则。它不是if xxx: return xxx而是一种概率约束。所以重要业务必须增加参数校验输出检查后处理5. HumanMessage用户真正的问题例如from langchain_core.messages import HumanMessage human HumanMessage( content我的订单什么时候发货 )对应{role: user, content: 我的订单什么时候发货}实际项目中HumanMessage 通常来自Web 输入框手机 App微信机器人API 请求命令行输入6. AIMessage保存模型回答模型返回response model.invoke(messages) # response 本身就是AIMessage例如AIMessage(content请提供您的订单编号)为什么需要保存因为下一轮模型需要看到用户问了什么AI 回答了什么7. 一个完整客服机器人代码from langchain_openai import ChatOpenAI from langchain_core.messages import * model ChatOpenAI( modelgpt-5.5-mini, temperature0.2 ) history [ SystemMessage( content你是一名电商客服 ) ] while True: question input(用户) history.append( HumanMessage( contentquestion ) ) response model.invoke(history) print( AI, response.content ) history.append(response)运行效果用户我的订单多久到 AI请提供订单编号。 用户123456 AI您的订单正在运输中。8. 多轮聊天的本质整个流程第一次请求System | Human | LLM | AI第二次请求System | Human | AI | Human | LLM | AI所以AI 并没有记忆。是你的程序不断重新提交历史。9. 为什么聊天越久越慢因为历史消息越来越多。例如第一次100 tokens100 轮以后50000 tokens影响成本增加Token 越多费用越高。响应变慢模型需要处理更多输入。上下文溢出超过模型最大长度Context length exceeded10. 企业项目如何管理历史最简单保留最近几轮history history[-10:]例如保留用户 AI 用户 AI 用户 AI旧消息删除。更高级的方法方法 1摘要记忆旧聊天用户喜欢 Python正在学习 LangChain压缩成用户背景信息方法 2向量数据库记忆历史聊天 | |Embedding | |Vector DB | |需要时搜索这就是企业 AI 助手常用方案。11. temperature 参数控制 AI 的创造力例如model ChatOpenAI( temperature0.2 )temperature0特点稳定、准确。适合RAG 知识库、数据查询、SQL 生成、代码辅助。temperature0.5平衡适合普通聊天、总结内容、优化。temperature1创造性适合小说、广告文案、创意写作。但是容易产生不存在的信息。12. 实际项目参数推荐应用temperature客服机器人0.1~0.3企业知识库 RAG0~0.2代码助手0~0.3文章生成0.7~1创意写作1 以上13. LangChain 消息体系和 OpenAI 的关系如果使用 OpenAI SDKfrom openai import OpenAI你直接操作[ {role: system}, {role: user}, {role: assistant} ]LangChainSystemMessageHumanMessageAIMessage只是进行了更高级的封装。14. 本章总结学习 LangChain消息结构是基础中的基础。你需要记住第一模型没有记忆。记忆由你的应用维护。第二对话不是字符串。真实项目使用SystemMessageHumanMessageAIMessage。第三AI 应用开发核心流程用户输入 ↓ 消息管理 ↓ Prompt 组合 ↓ 模型调用 ↓ 保存回复 ↓ 下一轮对话掌握消息结构之后后面学习PromptTemplateChainRAGAgentLangGraph都会变得非常容易。