消息列表 (Messages)
LangChain 使用消息列表与 LLM 进行多轮对话,消息格式与 OpenAI、Anthropic、Google Gemini 等厂商 API 完全一致。
消息类型
| 类型 | 说明 | 场景 |
|---|---|---|
HumanMessage | 用户消息 | 用户输入 |
AIMessage | AI 回复 | 模型输出 |
SystemMessage | 系统提示 | 设置 AI 行为 |
ToolMessage | 工具返回 | Agent 工具调用结果 |
基础用法
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
# 1. 系统消息:设置 AI 角色
system_msg = SystemMessage(content="你是一个编程专家。")
# 2. 用户消息
human_msg = HumanMessage(content="给我写一段 3 行的 Python 示例。")
# 3. 组合消息列表
messages = [system_msg, human_msg]
# 4. 调用模型
response = model.invoke(messages)
# 5. 获取回复 (AIMessage)
print(response.content)
多轮对话
# 初始化消息列表(包含系统提示)
messages = [
SystemMessage(content="你叫小智,是一名乐于助人的智能助手。")
]
while True:
user_input = input("你:")
if user_input.lower() in {"exit", "quit"}:
break
# 添加用户消息
messages.append(HumanMessage(content=user_input))
# 流式获取回复
full_reply = ""
for chunk in model.stream(messages):
if chunk.content:
print(chunk.content, end="", flush=True)
full_reply += chunk.content
print()
# 添加 AI 回复到历史
messages.append(AIMessage(content=full_reply))
# 限制历史长度(保留最近 50 轮)
messages = messages[-50:]
消息属性
response = model.invoke("你好")
# 内容
print(response.content)
# 内容块(多模态)
print(response.content_blocks)
# 额外信息
print(response.additional_kwargs)
print(response.response_metadata)
总结
| 要点 | 说明 |
|---|---|
| 消息格式 | 与各厂商 API 一致 |
| 多轮对话 | 维护消息历史列表 |
| 流式输出 | 使用 model.stream() |
| 长度控制 | messages[-50:] 截断 |