ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

消息对象中字段的说明

2026/10/3 19:15:58 拓冰建站 浏览量
消息对象中字段的说明 消息对象字段说明SystemMessage参数列表content消息内容字段名可以省略SystemMessage(你是个善解人意的助手)相当于SystemMessage(content你是个善解人意的助手)HumanMessage参数列表content消息内容字段名可以省略HumanMessage你好啊)metadata元数据字段可以有很多自定义举例带有元数据字段from dotenvimportload_dotenvimportos from langchain.chat_modelsimportinit_chat_model from langchain_core.messagesimportHumanMessage from richimportprint as rprint load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_API_BASEos.getenv(CLOSEAI_API_BASE)modelinit_chat_model(modelgpt-5.4-mini,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_API_BASE)messages[HumanMessage(contentHello World!,nameBob,idmsg987)]rprint(model.invoke(messages))name和id都属于元数据字段当消息类型相同对消息进行区分。但不是所有模型都支持这一功能是否支持取决于模型供应商需要查看官方手册。比如OpenAI的API手册告诉我们HumanMessage支持name作为元数据字段如下图所示。而DeepSeek得API官方文档明确支持name作为元数据但实测发现模型无法识别此处通过CloseAI平台调用 gpt-5.4-mini 展示 name 的作用。from langchain_openrouterimportChatOpenRouter from dotenvimportload_dotenvimportos from langchain_core.messagesimportSystemMessage,HumanMessage load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_API_BASEos.getenv(CLOSEAI_API_BASE)modelinit_chat_model(# modelopenai/gpt-6.1-sol,modelopenai:gpt-5.4-mini,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_API_BASE,)messages[SystemMessage(你是一个信息抽取器。你会收到多条来自不同发言者的 user 消息。每条消息可能带有 name 字段。你的任务是严格根据每条消息的 name 提取发言者及其观点并输出JSON。禁止使用“第一个人/第二个人”这种相对称呼。若某条消息没有 name则输出unknown。输出格式{\speakers\:[{\name\:\...\,\claim\:\...\}]}), HumanMessage(content我认为 112,nameBob), HumanMessage(content我认为 112,nameTom), HumanMessage(content请列出谁说了什么不要判断对错。,nameaudience)]responsemodel.invoke(messages)print(response.content)说明模型加载了 name传递 的信息这在 多人对话场景 很有用。拓展使用ChatOpenRouter调用 没有将name正确传递 给模型服务。即from langchain_openrouterimportChatOpenRouter from dotenvimportload_dotenvimportos from langchain_core.messagesimportSystemMessage,HumanMessage load_dotenv(overrideTrue)OPENROUTER_API_KEYos.getenv(OPENROUTER_API_KEY)OPENROUTER_API_BASEos.getenv(OPENROUTER_API_BASE)modelChatOpenRouter(# modelopenai/gpt-6.1-sol,modelgpt-4o-mini,api_keyOPENROUTER_API_KEY,base_urlOPENROUTER_API_BASE,)messages[SystemMessage(你是一个信息抽取器。你会收到多条来自不同发言者的 user 消息。每条消息可能带有 name 字段。你的任务是严格根据每条消息的 name 提取发言者及其观点并输出JSON。禁止使用“第一个人/第二个人”这种相对称呼。若某条消息没有 name则输出unknown。输出格式{\speakers\:[{\name\:\...\,\claim\:\...\}]}), HumanMessage(content我认为 112,nameBob), HumanMessage(content我认为 112,nameTom), HumanMessage(content请列出谁说了什么不要判断对错。,nameaudience)]responsemodel.invoke(messages)print(response.content)AIMessage参数列表content模型输出的原始内容字段名可以省略AIMessage(你好)相当于AIMessage(content你好)response_metadataAIMessage特有属性LLM的响应中附加元数据根据不同的模型会有不同如可能会包含本次token使用量等信息tool_callsAIMessage特有属性表示工具调用信息当LLM决定调用工具时在AIMessage中就会包含这个属性没有工具调用则为空。结构如下tool_calls[{name:get_weather,#应调用的工具名args:{city:杭州},# 调用工具的参数id:call_00_gIXYOD1Q1OkEXmdDBqXR1578,# 工具调用的唯一标识IDtype:tool_call},{name:get_news,args:{},id:call_01_jD3phD5PEaIZf0mVLhKt0861,type:tool_call}]toool_calls属性是一个ToolCall列表每个ToolCall是一个字典包含字段见上usage_metadata用量信息举例AIMessage调用工具AIMessage(content,tool_calls[{name:get_weather,args:{city:北京},id:call_xxx}])更丰富的参数from langchain_core.messagesimportSystemMessage,HumanMessage from langchain.chat_modelsimportinit_chat_model from dotenvimportload_dotenvimportos from richimportprint as rprint# 从.env文件中加载环境变量load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_API_BASEos.getenv(CLOSEAI_API_BASE)modelinit_chat_model(modelgpt-6.1-sol,model_provideropenai,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_API_BASE)messages[SystemMessage(你叫小智是一名助人为乐的助手。), HumanMessage(你好好久不见请介绍下你自己。)]responsemodel.invoke(messages)rprint(response)返回内容分析ToolMessage参数列表content文件内容name工具名称tool_call_id工具调用唯一IDToolMessage必须紧邻匹配的AIMessage和前者tool_calls中的id一致ToolMessage(content工具输出,nameget_weather,tool_call_idcall_00_nUD2NC9QRN5Cg1GaoIkBJQ4s# 一定要和AI消息中的调用ID匹配)举例1工具调用json格式from langchain.chat_modelsimportinit_chat_model from dotenvimportload_dotenvimportos# 从.env文件中加载环境变量load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_BASE_URLos.getenv(CLOSEAI_BASE_URL)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_BASE_URL)def get_weather(city: str)-str:return不错哦~# 模拟模型绑定工具model_with_toolsmodel.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]responsemodel.invoke(messages)print(response)工具调用对象格式from langchain_core.messagesimportAIMessage, ToolMessage,HumanMessage from langchain.chat_modelsimportinit_chat_model from dotenvimportload_dotenvimportos# 从.env文件中加载环境变量load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_BASE_URLos.getenv(CLOSEAI_BASE_URL)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_BASE_URL)def get_weather(city: str)-str:return不错哦~# 模拟模型绑定工具model_with_toolsmodel.bind_tools([get_weather])# ai_message {# role: assistant,# content: ,# tool_calls: [{# name: get_weather,# args: {location: 北京},# id: call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s# }]# }ai_messageAIMessage(content[], tool_calls[{name:get_weather,args:{location:北京},id:call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s}])# tool_message {# role: tool,# content: 今天北京天气晴朗万里无云~,# tool_call_id: call_00_nUD2NC9QRN5Cg1GaoIkBJQ4s# }tool_messageToolMessage(content今天北京天气晴朗万里无云~, tool_call_idcall_00_nUD2NC9QRN5Cg1GaoIkBJQ4s)messages[# {role: user, content: 北京天气如何},HumanMessage(content北京天气如何), ai_message, tool_message]# for message in messages:# print(message)responsemodel.invoke(messages)print(response)