message
https://docs.langchain.com/oss/python/langchain/messages
Messages 模块划分
| 模块 | 核心知识点 | 为什么独立 |
|---|---|---|
| 1. 消息类型 | SystemMessage / HumanMessage / AIMessage / ToolMessage 四种消息的职责和构造 方式 | 消息是对话的基本单元,四类消息各有独立的构造参数和行为约束 |
| 2. 消息内容与 Content Blocks | content vs content_blocks 的区别;标准内容块类型(text、reasoning、image、audio、video、file 等)的结构 | Content Blocks 是 LangChain v1 的核心抽象,是跨 provider 统一的媒介,与旧 content 属性有明确的使用边界 |
| 3. 多模态输入 | 图像/音频/视频/文件/PDF 在消息中的三种传入方式(URL、base64、file_id)及 provider 兼容性 | 代码结构完全不同于纯文本消息,需要独立约束 |
| 4. 多模态输出 | 从 AIMessage.content_blocks 中提取多模态数据 | 与输入对称但提取逻辑不同,需要独立约束 |
| 5. 工具调用消息 | AIMessage.tool_calls 的结构;ToolMessage 的 tool_call_id 匹配约束;artifact 字段的用途 | 工具调用消息有严格的结构契约(ID 匹配、执行顺序),是独立的知识点 |
| 6. 流式消息 | AIMessageChunk 的累积逻辑(full = chunk if full is None else full + chunk) | 流式与非流式的代码模式完全不同,需要独立约束 |
| 7. Token 用量追踪 | usage_metadata 的读取;UsageMetadataCallbackHandler 和上下文管理器两种聚合方式 | 跨模型追踪 token 用量是一个独立功能,与消息本身的创建/发送无关 |
| 8. 标准内容块参考 | TextContentBlock、ReasoningContentBlock、ToolCall、ToolCallChunk、ServerToolCall 等各块类型的字段结构 | 这是“字典的 schema 约束”——每种块类型有独立的必填字段和可选字段,适合作为独立的类型参考 |
约束:LangChain 消息类型(Message Types)的代码规范
技术边界
- LangChain 消息分四种类型:
SystemMessage、HumanMessage、AIMessage、ToolMessage - 每条消息是独立对象,消息列表按时间顺序排列,模型依次处理
- 消息对象同时包含
content(原始内容)和content_blocks(标准化内容块,LangChain v1 新增) content向后兼容所有 provider,content_blocks提供跨 provider 统一的类型安全接口- 消息初始化时可用字符串简化方式(
SystemMessage("...) 或 content blocks 列表方式 - 消息还包含
name、id等可选元数据字段,name在不同 provider 中行为不一致
生成要求
1. 消息构造方式
- 纯文本用简化方式:
SystemMessage("You are a helpful assistant.") - 含多模态或其他 content blocks 时用列表方式:
HumanMessage(content=[...])或HumanMessage(content_blocks=[...])