跳到主要内容

消息列表 (Messages)

LangChain 使用消息列表与 LLM 进行多轮对话,消息格式与 OpenAI、Anthropic、Google Gemini 等厂商 API 完全一致。

消息类型

类型说明场景
HumanMessage用户消息用户输入
AIMessageAI 回复模型输出
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:] 截断