消息对象字段说明
SystemMessage参数列表
content:消息内容,字段名可以省略
bash
SystemMessage("你是个善解人意的助手")
相当于
bash
SystemMessage(content = "你是个善解人意的助手")
HumanMessage参数列表
content:消息内容,字段名可以省略
bash
HumanMessage("你好啊")
metadata:元数据字段,可以有很多,自定义
举例:带有元数据字段
bash
from dotenv import load_dotenv
import os
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage
from rich import print as rprint
load_dotenv(override=True)
CLOSEAI_API_KEY = os.getenv("CLOSEAI_API_KEY")
CLOSEAI_API_BASE = os.getenv("CLOSEAI_API_BASE")
model = init_chat_model(
model="gpt-5.4-mini",
api_key=CLOSEAI_API_KEY,
base_url=CLOSEAI_API_BASE
)
messages = [
HumanMessage(
content="Hello World!",
name="Bob",
id = "msg987"
)
]
rprint(model.invoke(messages))
name和id都属于元数据字段,当消息类型相同,对消息进行区分。但不是所有模型都支持这一功能,是否支持取决于模型供应商,需要查看官方手册。比如:
OpenAI的API手册告诉我们,HumanMessage支持name作为元数据字段,如下图所示。而DeepSeek得API官方文档明确支持name作为元数据,但实测发现模型无法识别
此处通过CloseAI平台调用 gpt-5.4-mini 展示 name 的作用。
bash
from langchain_openrouter import ChatOpenRouter
from dotenv import load_dotenv
import os
from langchain_core.messages import SystemMessage,HumanMessage
load_dotenv(override=True)
CLOSEAI_API_KEY = os.getenv("CLOSEAI_API_KEY")
CLOSEAI_API_BASE = os.getenv("CLOSEAI_API_BASE")
model = init_chat_model(
# model="openai/gpt-6.1-sol",
model="openai:gpt-5.4-mini",
api_key=CLOSEAI_API_KEY,
base_url=CLOSEAI_API_BASE,
)
messages = [
SystemMessage("你是一个信息抽取器。你会收到多条来自不同发言者的 user 消息。每条消息可能带有 name 字段。你的任务是:"
"严格根据每条消息的 name 提取发言者及其观点,并输出JSON。禁止使用"第一个人/第二个人"这种相对称呼。"
"若某条消息没有 name,则输出unknown。输出格式:{\"speakers\":[{\"name\":\"...\",\"claim\":\"...\"}]}"),
HumanMessage(
content="我认为 1+1=2",
name="Bob"
),
HumanMessage(
content="我认为 1+1>2",
name="Tom"
),
HumanMessage(
content="请列出谁说了什么,不要判断对错。",
name="audience"
)
]
response = model.invoke(messages)
print(response.content)

说明:模型加载了 name传递 的信息,这在 多人对话场景 很有用。
拓展:使用ChatOpenRouter调用 没有将name正确传递 给模型服务。即:
bash
from langchain_openrouter import ChatOpenRouter
from dotenv import load_dotenv
import os
from langchain_core.messages import SystemMessage,HumanMessage
load_dotenv(override=True)
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_API_BASE = os.getenv("OPENROUTER_API_BASE")
model = ChatOpenRouter(
# model="openai/gpt-6.1-sol",
model="gpt-4o-mini",
api_key=OPENROUTER_API_KEY,
base_url=OPENROUTER_API_BASE,
)
messages = [
SystemMessage("你是一个信息抽取器。你会收到多条来自不同发言者的 user 消息。每条消息可能带有 name 字段。你的任务是:"
"严格根据每条消息的 name 提取发言者及其观点,并输出JSON。禁止使用"第一个人/第二个人"这种相对称呼。"
"若某条消息没有 name,则输出unknown。输出格式:{\"speakers\":[{\"name\":\"...\",\"claim\":\"...\"}]}"),
HumanMessage(
content="我认为 1+1=2",
name="Bob"
),
HumanMessage(
content="我认为 1+1>2",
name="Tom"
),
HumanMessage(
content="请列出谁说了什么,不要判断对错。",
name="audience"
)
]
response = model.invoke(messages)
print(response.content)
AIMessage参数列表
content:模型输出的原始内容,字段名可以省略
bash
AIMessage("你好")
相当于
bash
AIMessage(content = "你好")
response_metadata:AIMessage特有属性,LLM的响应中附加元数据,根据不同的模型会有不同,如可能会包含本次token使用量等信息
tool_calls:AIMessage特有属性,表示工具调用信息,当LLM决定调用工具时,在AIMessage中就会包含这个属性,没有工具调用则为空。结构如下:
bash
tool_calls=[
{
'name': 'get_weather', #应调用的工具名
'args': {'city': '杭州'}, # 调用工具的参数
'id': 'call_00_gIXYOD1Q1OkEXmdDBqXR1578', # 工具调用的唯一标识ID
'type': 'tool_call'
},
{
'name': 'get_news',
'args': {},
'id': 'call_01_jD3phD5PEaIZf0mVLhKt0861',
'type': 'tool_call'
}
]
toool_calls属性是一个ToolCall列表,每个ToolCall是一个字典,包含字段见上
usage_metadata::用量信息
举例:
AIMessage调用工具
bash
AIMessage(
content="",
tool_calls=[{
'name': 'get_weather',
'args': {'city': '北京'},
'id': 'call_xxx'
}]
)
更丰富的参数
bash
from langchain_core.messages import SystemMessage,HumanMessage
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
from rich import print as rprint
# 从.env文件中加载环境变量
load_dotenv(override=True)
CLOSEAI_API_KEY = os.getenv("CLOSEAI_API_KEY")
CLOSEAI_API_BASE = os.getenv("CLOSEAI_API_BASE")
model = init_chat_model(
model="gpt-6.1-sol",
model_provider="openai",
api_key=CLOSEAI_API_KEY,
base_url=CLOSEAI_API_BASE
)
messages = [
SystemMessage("你叫小智,是一名助人为乐的助手。"),
HumanMessage("你好,好久不见,请介绍下你自己。")
]
response = model.invoke(messages)
rprint(response)

返回内容分析

ToolMessage参数列表
content:文件内容
name:工具名称
tool_call_id:工具调用唯一ID,ToolMessage必须紧邻匹配的AIMessage,和前者tool_calls中的id一致
bash
ToolMessage(
content="<工具输出>",
name="get_weather",
tool_call_id="call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s" # 一定要和AI消息中的调用ID匹配
)
举例1:工具调用(json格式)
bash
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
# 从.env文件中加载环境变量
load_dotenv(override=True)
CLOSEAI_API_KEY = os.getenv("CLOSEAI_API_KEY")
CLOSEAI_BASE_URL = os.getenv("CLOSEAI_BASE_URL")
model = init_chat_model(
model="gpt-5.4-mini",
model_provider="openai",
api_key=CLOSEAI_API_KEY,
base_url=CLOSEAI_BASE_URL
)
def get_weather(city: str) -> str:
return "不错哦~"
# 模拟模型绑定工具
model_with_tools = model.bind_tools([get_weather])
ai_message = {
"role": "assistant",
"content": "",
"tool_calls": [{
"name": "get_weather",
"args": {"location": "北京"},
"id": "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
}]
}
tool_message = {
"role": "tool",
"content": "今天北京天气晴朗,万里无云~",
"tool_call_id": "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
}
messages = [
{"role": "user", "content": "北京天气如何"},
ai_message,
tool_message
]
response = model.invoke(messages)
print(response)
工具调用(对象格式)
bash
from langchain_core.messages import AIMessage, ToolMessage,HumanMessage
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
# 从.env文件中加载环境变量
load_dotenv(override=True)
CLOSEAI_API_KEY = os.getenv("CLOSEAI_API_KEY")
CLOSEAI_BASE_URL = os.getenv("CLOSEAI_BASE_URL")
model = init_chat_model(
model="gpt-5.4-mini",
model_provider="openai",
api_key=CLOSEAI_API_KEY,
base_url=CLOSEAI_BASE_URL
)
def get_weather(city: str) -> str:
return "不错哦~"
# 模拟模型绑定工具
model_with_tools = model.bind_tools([get_weather])
# ai_message = {
# "role": "assistant",
# "content": "",
# "tool_calls": [{
# "name": "get_weather",
# "args": {"location": "北京"},
# "id": "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
# }]
# }
ai_message = AIMessage(
content = [],
tool_calls = [{
"name": "get_weather",
"args": {"location": "北京"},
"id": "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
}]
)
# tool_message = {
# "role": "tool",
# "content": "今天北京天气晴朗,万里无云~",
# "tool_call_id": "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
# }
tool_message = ToolMessage(
content = "今天北京天气晴朗,万里无云~",
tool_call_id = "call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s"
)
messages = [
# {"role": "user", "content": "北京天气如何"},
HumanMessage(content="北京天气如何"),
ai_message,
tool_message
]
# for message in messages:
# print(message)
response = model.invoke(messages)
print(response)