资讯详情

资讯详情

认识消息与消息的两种格式

模型调用的准备工作一张老图看大模型的调用在LangChain v0.3版本中提到了 Model I/O包括输入提示Format、调用模型Predict输出解析Parse。分别对应着Prompt TemplateModel 和 Output Parser认识消息大模型没有记忆它的输出只和输入模型的内容有关上下文。很多大模型API服务也没有在服务端维护会话历史是”无状态“的。因此如果应用需要记住对话历史需要在程序中维护消息列表。在LangChain中Message是模型交互的最基本单元。它既代表模型接收到的输入Input也代表模型生成的输出Output每一轮与大模型的对话都由一条或多条Message构成。每个Message不仅包含文字内容还携带描述上下文状态的元信息metadata用于保持对话的一致性和可追踪性。比如模型在多轮交互中理解”谁在说话“”说了什么“、”这条信息属于哪一轮对话“LangChain在1.0中提供了跨模型统一的Message标准无论你使用的是OpenAI、Anthropic、Gemini还是本地模型这一标准都能保持一致的行为。兼容性强 不同模型的消息格式自动对齐。可扩展性高 方便添加多模态内容或自定义字段。可追踪性好 为 LangSmith 等调试工具提供一致的上下文数据结构。消息的内部结构LangChain的消息Message对象包含三种字段Role消息所属的角色或类型如system、user、assistantContent消息内容Metadata可选元数据存储额外信息。如消息ID、响应时间、token消耗量、消息标签等消息的类型LangChain定义了很多消息类型通过role区分。常用的有四种。系统消息也称为系统提示词用于在对话开始时为模型设定角色、行为准则和上下文背景。它像是给AI助手的一份工作说明书决定了其回答问题的风格、领域和专业范围。用户消息也称为用户提示词在多轮对话中他表示用户的一次输入。可以包含简单的文本问题也可以是复杂的多模态内容如图片、音频、文档等助手AI消息代表模型的回复包括生成的文本、工具调用、元数据等{role:assistant,content:我也很高兴认识你}工具调用消息工具调用结果匹配的消息类型。将此消息返回给模型让模型基于这个结果继续生成回复。问题为什么使用不同的消息类型明确角色清晰区分系统提示、用户输入和AI回复控制行为通过SystemMessage精确控制AI的行为对话历史构建完整的多轮对话上下文调试友好更容易追踪和调试对话流程消息格式LangChain支持两种消息格式格式1JSON格式系统消息{role:system,content:你是个善解人意的助手}用户消息{role:user,content:你好啊}助手消息{role:assistant,content:我也很高兴认识你}工具调用消息{role:tool,content:工具输出,tool_call_id:call_00_nUD}格式2对象格式系统消息SystemMessagecontent你是个善解人意的助手)用户消息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(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_API_BASEos.getenv(CLOSEAI_API_BASE)modelinit_chat_model(modelgpt-6.1-sol, api_keyCLOSEAI_API_KEY, base_urlCLOSEAI_API_BASE,)messages[{role:system,content:你是一个友好的AI助手},{role:user,content:1 8 ?},{role:assistant,content:9},{role:user,content:我刚才问了什么问题}]print(model.invoke(messages))
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →