消息系统与多模态支持
对话状态用 BaseMessage 子类 表示,内容可为 纯文本 或 ContentBlock 数组(图、音、文件等)。
1. 消息类型
| 类型 | 角色 |
|---|---|
HumanMessage | 用户 |
AIMessage | 模型(含 tool_calls) |
SystemMessage | 系统指令 |
ToolMessage | 工具执行结果,对应 tool_call_id |
顺序通常:System → 多轮 Human/AI/Tool。
2. 多模态 Content
| 块类型 | 用途 |
|---|---|
text | 文本 |
image_url / image | 视觉输入 |
file / audio | 依厂商与版本 |
各 ChatModel 声明支持的模态;不支持的需在链前过滤或转换。
3. AIMessage 扩展
tool_calls:模型请求调用的工具列表。usage_metadata:token 统计。response_metadata:厂商原始字段。
Agent 循环:AI 带 tool_calls → 执行 Tool → ToolMessage → 再调模型。
4. 序列化
Message 可 toJSON / fromJSON,用于持久化、LangGraph checkpoint。
注意:大文件应存引用而非 base64 塞进 checkpoint。
5. 工具函数(概念)
- 合并连续同角色消息(部分模型限制)。
filterMessages/trimMessages:控上下文长度。- 转换旧版 string prompt 为 Message 列表。
6. 合并策略
多段 Human 合并、Tool 结果拼接等,需符合目标模型 API 规则,否则 400。
7. 总结
Message = LLM 应用的「值对象」;多模态 = content 数组 + 厂商能力矩阵,见各 provider 文档。