
LangChain Messages 篇章学习笔记 — 模型交互的输入输出单元本文基于 LangChain 官方文档 Messages 章节学习整理梳理消息对象的结构、四种消息类型、多种传参格式与多轮对话机制适合 AI Agent 开发入门者理解模型交互的数据载体。一、Message 是什么Message 是 LangChain 中从模型获取上下文的基础工具fundamental utility。Model 是基础单元而 Message 反映了模型的输入和输出。它携带 content内容和 metadata元数据用于与 AI 交流。Message 是一个对象object包含以下核心字段字段说明示例role消息类型角色system / user / assistant / toolcontent消息内容文本、图片、音频、文档等metadata可选元数据message id、token usage 等LangChain 提供了标准的 Message 模型类别可以在所有模型提供商中工作确保一致性行为不管你用的是哪个模型。二、基础使用2.1 创建 Message 对象最简单的方式是直接创建 Message 实体然后把它们放到 invoke / stream / batch 里调用。fromlangchain.messagesimportSystemMessage,HumanMessage# SystemMessage给模型定义角色、背景、风格SystemMessage(content你是一个专业的 Python 翻译助手)# HumanMessage用户的问题HumanMessage(contentTranslate: I love programming.)2.2 三种传参方式方式一Text Prompts字符串简写调用时直接传入字符串LangChain 自动包装为 HumanMessage。responsellm.invoke(什么是递归)# 等价于 llm.invoke(HumanMessage(content什么是递归))方式二Message Prompts消息对象列表创建一个 list放入各种 Message 对象。适用于多轮对话和 system instruction。fromlangchain.messagesimportSystemMessage,HumanMessage,AIMessage messages[SystemMessage(content你是英文到法文翻译助手),HumanMessage(contentTranslate: I love programming.),AIMessage(contentJadore la programmation.),# 上一轮 AI 的回答HumanMessage(contentTranslate: I love building applications.),]responsellm.invoke(messages)多轮对话的关键把 AI 之前说的内容AIMessage放回消息列表让 AI 有了短暂的记忆能力。你说一句、AI 说一句再把 AI 说的内容传回去形成多轮对话。方式三Dictionary Format字典格式用字典构建消息OpenAI 兼容最简洁的写法。messages[{role:system,content:你是翻译助手},{role:user,content:Translate: I love programming.},{role:assistant,content:Jadore la programmation.},{role:user,content:Translate: I love building applications.},]responsellm.invoke(messages)Q字典格式里的 role 和 content 是规定好的吗能随便传吗A不能随便传。role 只能是system/user/assistant/tool这 4 个固定值这是 OpenAI API 规范所有兼容端点包括百炼都遵循。content 是你自己传的内容字符串。字典格式只是对象格式的简写底层 LangChain 自动转成对应对象。字典 roleLangChain 对象作用systemSystemMessage定义模型角色userHumanMessage用户输入assistantAIMessage模型输出toolToolMessage工具返回结果三、四种 Message 类型详解3.1 SystemMessage — 角色定义告诉模型行为并提供交互上下文给模型定角色、提供背景。SystemMessage(content你是一个专业的 Python 翻译助手只回答翻译结果)用途设置语调正式/幽默/简洁定义模型角色翻译助手/代码专家/数据分析师为 response 建立指导规则给模型一个性格和回答风格3.2 HumanMessage — 用户输入代表用户 input 和 interaction是用户与模型交互的开始。HumanMessage(content什么是装饰器)多模态内容HumanMessage 的 content 不仅可以是文本还可以包含 audio、图片、files 等多模态内容。HumanMessage 的字段字段是否必填类型用途content必填str 或 list消息内容文本/图片/音频name选填str多用户场景区分发言者id选填str消息唯一标识用于追踪/删除Qcontent、name、id 是规定好的还是自己创建的A字段名是 LangChain 预定义的不能改值是你自己传的。类比 Java就像一个 HumanMessage 类有三个属性字段名是类定义好的但属性值是你 new 的时候传的。3.3 AIMessage — 模型输出代表大语言模型返回的生成内容包括信息、工具调用tool_calls和元数据等。# 普通回答AIMessage(content递归是一种函数调用自身的编程思想...)# 带工具调用的回答AIMessage(content,tool_calls[{id:call_001,name:get_weather,args:{city:杭州},}])QAIMessage 是动态的下轮问答时需要先提取 content 再传进去吗A不需要手动提取直接把整个 AIMessage 对象追加到消息列表就行。# ✅ 正确直接追加 AIMessage 对象messages[SystemMessage(你是助手),HumanMessage(你好)]respllm.invoke(messages)messages.append(resp)# AIMessage 直接追加messages.append(HumanMessage(那明天呢))resp2llm.invoke(messages)# 模型能看到完整多轮对话底层原理模型 API 本身就接受assistant角色的消息。在 Agent 中这个追加消息→调用模型→再追加的循环是 Agent 框架自动做的你不需要手写循环。3.4 ToolMessage — 工具返回结果Agent 可以使用工具调用ToolMessage 用于把工具执行结果回传给模型。ToolMessage(content晴25度,tool_call_idcall_001,# 必须与 AIMessage.tool_calls[i][id] 严格对应nameget_weather,)QToolMessage 里的工具返回信息是放在 AIMessage 里面吗A不是ToolMessage 是独立的消息类型和 AIMessage 是并列关系。完整流程1. 模型返回 AIMessage带 tool_calls → 我想调用 get_weather(杭州) 2. 你执行工具得到结果 → 晴25度 3. 你把结果包成 ToolMessage 放回消息列表 → ToolMessage(晴25度) 4. 再次调用模型模型看到 ToolMessage → 生成最终回答为什么 tool_call_id 必须对应因为一次对话中模型可能同时调多个工具模型靠 id 知道哪个 ToolMessage 对应哪个 tool_callAIMessage 的 tool_calls: ├── {id: call_001, name: get_weather, args: {city: 杭州}} └── {id: call_002, name: get_time, args: {}} ToolMessage(tool_call_idcall_001, content晴25度) ← 对应 weather ToolMessage(tool_call_idcall_002, content14:30) ← 对应 time四、多轮对话的消息流转用户提问 模型回答 │ │ ▼ ▼ HumanMessage(你好) → AIMessage(你好有什么帮你的) │ │ └──── 都追加到 messages 列表 ────┘ │ ▼ HumanMessage(那明天呢) → AIMessage(明天有什么需要帮忙的) │ │ └──── 继续追加 ─────────────┘手动多轮对话理解原理用实际用 Agent 自动处理messages[SystemMessage(content你是助手)]forroundinrange(3):user_inputinput(你)messages.append(HumanMessage(user_input))respllm.invoke(messages)messages.append(resp)# AIMessage 直接追加print(fAI{resp.content})五、三种传参格式对比格式代码适合场景字符串简写llm.invoke(你好)单次快速问答消息对象列表[SystemMessage(...), HumanMessage(...)]多轮对话、需要附加 id/name、类型安全字典格式[{role: user, content: ...}]OpenAI 兼容最简洁、从 API 文档快速移植选择建议学习/调试消息对象列表类型明确IDE 补全好快速验证字符串简写生产环境字典格式简洁易序列化六、总结概念一句话理解Message模型交互的输入输出单元携带 role content metadataSystemMessage角色定义给模型设定背景和风格HumanMessage用户输入可含多模态内容AIMessage模型输出可带 tool_calls工具调用意图ToolMessage工具返回结果tool_call_id 必须与 AIMessage 对应字符串简写最简调用自动包装为 HumanMessage消息对象列表多轮对话标配类型安全字典格式OpenAI 兼容最简写role 固定 4 值多轮对话把 AIMessage 直接追加回列表模型即有记忆核心认知Message 是模型交互的信封role 标识谁说的content 是说的内容。四种 Message 类型对应对话中的四个角色ToolMessage 是工具调用闭环的关键一环。