☰
认识消息与消息的两种格式
2026/10/2 8:28:45 网站建设 项目流程

模型调用的准备工作

一张老图看大模型的调用

在LangChain v0.3版本中,提到了 Model I/O,包括输入提示(Format)、调用模型(Predict),输出解析(Parse)。分别对应着Prompt Template,Model 和 Output Parser

认识消息

大模型没有记忆,它的输出只和输入模型的内容有关(上下文)。很多大模型API服务也没有在服务端维护会话历史,是”无状态“的。因此,如果应用需要记住对话历史,需要在程序中维护消息列表。

在LangChain中,Message是模型交互的最基本单元。它既代表模型接收到的输入(Input),也代表模型生成的输出(Output)

每一轮与大模型的对话,都由一条或多条Message构成。每个Message不仅包含文字内容,还携带描述上下文状态的元信息(metadata),用于保持对话的一致性和可追踪性。比如,模型在多轮交互中理解”谁在说话“,”说了什么“、”这条信息属于哪一轮对话“

LangChain在1.0中提供了跨模型统一的Message标准,无论你使用的是OpenAI、Anthropic、Gemini还是本地模型,这一标准都能保持一致的行为。

兼容性强 :不同模型的消息格式自动对齐。
可扩展性高 :方便添加多模态内容或自定义字段。
可追踪性好 :为 LangSmith 等调试工具提供一致的上下文数据结构。

消息的内部结构

LangChain的消息(Message)对象包含三种字段

Role:消息所属的角色或类型,如system、user、assistant

Content:消息内容

Metadata:(可选)元数据,存储额外信息。如:消息ID、响应时间、token消耗量、消息标签等

消息的类型

LangChain定义了很多消息类型,通过role区分。常用的有四种。

系统消息

也称为系统提示词,用于在对话开始时为模型设定角色、行为准则和上下文背景。它像是给AI助手的一份工作说明书,决定了其回答问题的风格、领域和专业范围。

用户消息

也称为用户提示词,在多轮对话中,他表示用户的一次输入。可以包含简单的文本问题,也可以是复杂的多模态内容(如图片、音频、文档等)

助手(AI)消息

代表模型的回复,包括生成的文本、工具调用、元数据等

{"role":"assistant","content":"我也很高兴认识你"}

工具调用消息

工具调用结果匹配的消息类型。将此消息返回给模型,让模型基于这个结果继续生成回复。

问题:为什么使用不同的消息类型?

  1. 明确角色:清晰区分系统提示、用户输入和AI回复
  2. 控制行为:通过SystemMessage精确控制AI的行为
  3. 对话历史:构建完整的多轮对话上下文
  4. 调试友好:更容易追踪和调试对话流程

消息格式

LangChain支持两种消息格式

格式1:JSON格式

系统消息

{"role":"system","content":"你是个善解人意的助手"}

用户消息

{"role":"user","content":"你好啊"}

助手消息

{"role":"assistant","content":"我也很高兴认识你"}

工具调用消息

{"role":"tool","content":"<工具输出>","tool_call_id":"call_00_nUD"}

格式2:对象格式

系统消息

SystemMessage(content="你是个善解人意的助手")

用户消息

HumanMessage(content="你好啊")

助手消息

AIMessage("我也很高兴认识你")

工具调用消息

ToolMessage(content="<工具输出>", tool_call_id=""# 一定要和AI消息中的调用ID匹配)

小结:

举例:

from langchain.chat_modelsimportinit_chat_model from dotenvimportload_dotenvimportos from langchain_core.messagesimportHumanMessage 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", api_key=CLOSEAI_API_KEY, base_url=CLOSEAI_API_BASE,)messages=[{"role":"system","content":"你是一个友好的AI助手"},{"role":"user","content":"1 + 8 = ?"},{"role":"assistant","content":"9"},{"role":"user","content":"我刚才问了什么问题"}]print(model.invoke(messages))

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询