当前位置: 首页 > news >正文

20250911-01: 概念:基础认知--消息

image

20250909-01: 概念:基础认知–消息

  • @🎯 关键结果(Key Results, KRs)

  • @KR

    • @任务 :
  • @理论知识整理

    • @1. 消息包含什么?

      • @角色
      • @内容
      • @其他消息数据
    • @对话结构

    • @LangChain 消息

      • @五种主要消息类型是

      • @SystemMessage

      • @HumanMessage

        • @文本内容
        • @多模态内容
      • @AIMessage

        • @内容
      • @AIMessageChunk

        • @聚合
      • @ToolMessage

      • @RemoveMessage

      • @(旧版)FunctionMessage

    • @OpenAI 格式

      • @输入
      • @输出
    • @实践练习

    • @习题

  • @📚 任务 2.2:掌握内容格式与多模态支持

    • @✅ 一、内容格式对比表(文本 vs 多模态块)

    • @✅ 二、“何时用字典列表”的判断标准

      • @🚦 必须使用字典列表的情况:
    • @术语

      • @五类消息一句话定义模板
    • @进度跟踪卡

    • @🚀 导师结语


LangChain 第二周成长计划:基础认知 —— 聊天模型

🎯 核心目标(Objective)

在 2 小时内系统掌握 LangChain 消息系统的角色语义、内容结构与工程实践,能独立设计符合规范的多轮对话消息序列,理解不同角色在工具调用、流式响应、多模态场景中的作用,为构建复杂对话系统打下原子级认知基础。

🎯 关键结果(Key Results, KRs)

KR

  • 2小时 内, 官方教程消息和AI辅助阅读 完成 掌握 LangChain 消息系统的角色语义、内容结构与工程实践交付 独立设计符合规范的多轮对话消息序列,理解不同角色在工具调用、流式响应、多模态场景中的作用若因 知识找不到 失败最多重试 查找其他资料最终必须 输出文章 整理知识点题目
KR 编号关键结果描述验收标准(可量化/可验证)
KR2.1能手绘五类核心消息(System/Human/AI/Tool/Chunk)的结构图,标注角色、内容、关键属性(如 tool_calls, tool_call_id)图纸含完整标注,导师评分 ≥ 4.5/5
KR2.2能编写并运行一个包含 System → Human → AI → Tool → AI 的完整对话流程代码,输出符合预期代码可运行,打印每步消息类型与内容,含注释说明角色作用
KR2.3能解释“SystemMessage 在不同提供商中的三种处理方式”,并说明 LangChain 如何自动适配完成填空题 + 60秒录音,包含“API参数/合并/异常”关键词
KR2.4能对比 AIMessage 与 AIMessageChunk 的结构差异,并演示流式聚合(chunk1 + chunk2)提交对比表 + 可运行流式代码,输出聚合后完整消息
KR2.5能将一段 OpenAI 格式对话转换为 LangChain 消息对象,并反向转换验证一致性提交转换前后对比代码 + 断言验证,无类型/内容丢失

任务 :
  • 具体内容

    理解五类核心消息语义

    • 学习 SystemMessage, HumanMessage, AIMessage, ToolMessage, AIMessageChunk 的角色定义与使用场景

    • 重点标注:

      • SystemMessage 的三种适配方式(系统角色/API参数/合并)
      • AIMessage 的 tool_calls 与 usage_metadata
      • ToolMessage 的 tool_call_id 与 artifact
      • Chunk 的聚合机制(+ 运算符)
  • 所需时间:45分钟

  • 预期成果

    • 完成“五类消息一句话定义”初稿
    • 整理“SystemMessage 适配方式”笔记
  • 难度控制:i+1 —— 从“知道有消息” → “理解每类消息的工程语义”

  • 资源准备

    • 📖 官方文档 - 消息
    • 🧩 消息定义模板

按“知识学习 → 基础练习 → 综合应用”递进

理论知识整理


1. 消息包含什么?

消息通常包含以下信息

  1. 角色 role : 消息的角色(例如,“用户”、“助手”)。
  2. 内容: 消息的内容(例如,文本、多模态数据)
  3. 额外元数据 :id,名称,token使用量和其他模型特定元数据

角色

角色用于区分对话中不同类型的消息,并帮助聊天模型理解如何对给定的消息序列做出响应。

角色描述
系统 system用于告诉聊天模型如何表现并提供额外上下文。并非所有聊天模型提供商都支持。
用户 user表示与模型交互的用户的输入,通常以文本或其他交互式输入的形式。
助手 assistant表示来自模型的响应,可以包括文本或调用工具的请求。
工具 tool一种消息,用于在检索外部数据或处理后将工具调用的结果传递回模型。与支持工具调用的聊天模型一起使用。
函数 function(旧版)这是一个旧版角色,对应于 OpenAI 的旧版函数调用 API。应使用工具角色代替。

内容

消息内容可以是文本或表示多模态数据(例如,图像、音频、视频)的字典列表。内容的具体格式可能因不同的聊天模型提供商而异。

其他消息数据

根据聊天模型提供商,消息可能包含其他数据,例如

  • ID:消息的可选唯一标识符。
  • name:一个可选的 `name` 属性,允许区分具有相同角色的不同实体/发言者。并非所有模型都支持此功能!
  • metadata:关于消息的额外信息,例如时间戳、token 使用量等。
  • tool calls:模型发出的调用一个或多个工具的请求。有关更多信息,请参阅工具调用。

对话结构

输入到聊天模型中的消息序列应遵循特定结构,以确保聊天模型可以生成有效响应

例如,典型的对话结构可能如下所示

  1. 用户消息:“你好,你怎么样?”
  2. 助手消息:“我很好,谢谢你的询问。”
  3. 用户消息:“你能给我讲个笑话吗?”
  4. 助手消息:“当然!稻草人为什么获奖?因为它在自己的领域表现出色!”

请阅读聊天历史指南,了解有关管理聊天历史和确保对话结构正确的更多信息。

LangChain 消息

LangChain 提供了一种统一消息格式,可用于所有聊天模型,允许用户使用不同的聊天模型,而无需担心每个模型提供商使用的消息格式的具体细节。

LangChain 消息是继承自==BaseMessage== 的 Python 对象。

五种主要消息类型是

  • SystemMessage:对应**系统**角色
  • HumanMessage:对应**用户**角色
  • AIMessage:对应**助手**角色
  • AIMessageChunk:对应**助手**角色,用于流式响应
  • ToolMessage:对应**工具**角色

其他重要消息包括

  • RemoveMessage – 不对应任何角色。这是一种抽象,主要用于 LangGraph 中管理聊天历史。
  • **旧版** FunctionMessage:对应 OpenAI **旧版**函数调用 API 中的**函数**角色。

SystemMessage

一个SystemMessage用于引导 AI 模型的行为并提供额外上下文,例如指示模型采用特定角色或设定对话的语气(例如,“这是一场关于烹饪的对话”)。

不同的聊天提供商可能通过以下方式之一支持系统消息

  • 通过“系统”消息角色 :在这种情况下,系统消息作为消息序列的一部分包含在内,其角色明确设置为“系统”。
  • 通过单独的 API 参数用于系统指令 :系统指令不是作为消息包含在内,而是通过专用的 API 参数传递。
  • 不支持系统消息 :有些模型根本不支持系统消息。LangChain 会尝试将系统消息的内容合并到 HumanMessage ====

大多数主要的聊天模型提供商通过聊天消息或单独的 API 参数支持系统指令。LangChain 将根据提供商的功能自动适应。如果提供商支持用于系统指令的单独 API 参数,LangChain 将提取系统消息的内容并通过该参数传递。

如果提供商不支持系统消息,在大多数情况下 ,LangChain 会尝试将系统消息的内容合并到 HumanMessage 中,或者如果无法做到,则抛出异常。

然而,此行为尚未在所有实现中一致执行,如果使用聊天模型的一个不太流行的实现(例如,来自 langchain-community 包的实现),建议查看该模型的具体文档。

HumanMessage

一个 HumanMessage对应 用户 角色。人类消息表示与模型交互的用户的输入。

文本内容

大多数聊天模型期望用户输入以文本形式存在。

多模态内容

一些聊天模型接受多模态输入,例如图像、音频、视频或 PDF 等文件。

AIMessage

AIMessage 用于表示角色为助手 的消息。这是模型的响应,可以包括文本调用工具的请求。它还可以包括图像、音频或视频等其他媒体类型——尽管目前这仍然不常见。

一个 AIMessage 具有以下属性。标准化的属性是 LangChain 尝试在不同聊天模型提供商之间进行标准化的属性

原始字段特定于模型提供商,并且可能有所不同。

属性标准化/原始描述
content原始通常是字符串,但可以是内容块列表。有关详细信息,请参阅内容。
tool_calls标准化与消息关联的工具调用。有关详细信息,请参阅工具调用。
invalid_tool_calls标准化与消息关联的带解析错误的工具调用。有关详细信息,请参阅工具调用。
usage_metadata标准化消息的使用元数据,例如token 计数。请参阅Usage Metadata API 参考。
id标准化消息的可选唯一标识符,理想情况下由创建消息的提供商/模型提供。
response_metadata原始响应元数据,例如响应头、logprobs、token 计数。
内容

AIMessage 的 内容 属性表示聊天模型生成的响应。

内容可以是

  • 文本 – 几乎所有聊天模型的规范。

  • 一个 字典列表 - 每个字典代表一个内容块,并与一个 `type` 关联。

    • 由 Anthropic 用于在进行工具调用时揭示代理思考过程。
    • 由 OpenAI 用于音频输出。请参阅多模态内容以获取更多信息。

内容属性在不同聊天模型提供商之间标准化,主要原因是从中概括的示例仍然很少。

AIMessageChunk

通常会将聊天模型的响应在生成时流式传输,这样用户可以实时看到响应,而不是等待整个响应生成后再显示。

它由聊天模型的 `stream`、`astream` 和 `astream_events` 方法返回。

AIMessageChunk 遵循与 AIMessage 几乎相同的结构,但使用不同的 ToolCallChunk 来以标准化方式流式传输工具调用。

聚合

`AIMessageChunks` 支持 `+` 运算符以将它们合并为一个 `AIMessage`。当您想要向用户显示最终响应时,这很有用。

ToolMessage

这表示一个角色为“工具”的消息,其中包含调用工具的结果。除了 `role` 和 `content` 之外,此消息还具有

  • 一个 `tool_call_id` 字段,它传达调用该工具以生成此结果的调用 ID
  • 一个 `artifact​` 字段,可用于传递工具执行的任意工件,这些工件有助于跟踪但不应发送到模型

RemoveMessage

这是一种不对应任何角色的特殊消息类型。它用于在LangGraph中管理聊天历史。

有关如何使用 `RemoveMessage` 的更多信息,请参阅以下内容

  • 内存概念指南
  • 如何删除消息

(旧版)FunctionMessage

这是一个旧版消息类型,对应 OpenAI 的旧版函数调用 API。应使用 `ToolMessage` 以对应更新的工具调用 API。

OpenAI 格式

输入

聊天模型也接受 OpenAI 格式作为聊天模型的 输入

chat_model.invoke([{"role": "user","content": "Hello, how are you?",},{"role": "assistant","content": "I'm doing well, thank you for asking.",},{"role": "user","content": "Can you tell me a joke?",}
])

输出

目前,模型的输出将是 LangChain 消息,因此如果您也需要 OpenAI 格式的输出,则需要将输出转换为 OpenAI 格式。

convert\_to\_openai\_messages 实用函数可用于将 LangChain 消息转换为 OpenAI 格式。


实践练习

https://gitcode.com/k316378085/langchain_study_by_xkong/blob/main/src/langchain_base/01_first_demo_app/0104_messages.ipynb

习题

image

📚 任务 2.2:掌握内容格式与多模态支持

✅ 一、内容格式对比表(文本 vs 多模态块)

对比维度纯文本格式(Text-only)多模态块格式(Dict List / Content Blocks)
数据结构str 字符串List[Dict] 字典列表,每个元素是一个“内容块”
示例"你好,今天过得怎么样?"[{"type": "text", "text": "看这张图"}, {"type": "image_url", "image_url": {"url": "https://..."}}]
适用模型所有基础语言模型支持多模态的模型(如 GPT-4V, Claude 3, Gemini等)
HumanMessage便捷写法HumanMessage("文本") 自动转换为字符串内容❌ 必须显式传入 content=[...]
可包含元素仅文本文本、图片URL、图片Base64、音频、视频(依模型支持)
Anthropic 特点不推荐直接用字符串,建议用 [{"type":"text", ...}]✅ 官方推荐格式,支持 text + image
OpenAI 特点✅ 支持字符串(自动转块)✅ 支持块列表,图像需 image_url 类型
调试友好度⭐⭐⭐⭐⭐ 简单直观⭐⭐⭐ 需注意结构嵌套和字段名
扩展性❌ 无法扩展✅ 可添加新类型(如 audio, video, document

✅ 二、“何时用字典列表”的判断标准

请在以下情况使用 List[Dict] 格式的内容块:

🚦 必须使用字典列表的情况:

  1. 需要传入非文本内容
    → 如图像、音频、视频等多模态输入。

    HumanMessage(content=[{"type": "text", "text": "描述这张图"},{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
    ])
    

术语

五类消息一句话定义模板

🔹 SystemMessage:用于 设定AI行为 对话上下文 系统指令消息 ,LangChain会根据提供商能力自动适配传递方式。

🔹 HumanMessage:代表 用户输入的消息 ,支持文本或自动转换字符串,是对话的触发起点。

🔹 AIMessage: 模型生成的响应消息 ,可包含文本、tool_calls或多媒体内容,是对话的 核心输出

🔹 ToolMessage: 携带工具执行结果的消息 ,必须包含tool_call_id以关联原始调用,是工具调用闭环的关键。

🔹 AIMessageChunk: 流式响应中的消息片段 ,支持 + 运算符 聚合完整 AIMessage,用于 实时输出 场景。


进度跟踪卡

字段说明示例
里程碑完成度关键节点的达成情况(与计划对比)1. 完成5大消息的作用和结构字段
2. 转换openai格式与langchain格式
能力变化曲线核心指标的趋势跟踪(如正确率、耗时、难度等级)耗时: 2h
难度:简单

瓶颈突破记录遇到的停滞期及解决方案(如平台期、动机下降、技术难点)
心理表征发展对领域规律的认知深化(如模式识别、问题拆解能力的提升)消息是对话的原子,是智能的载体
掌握 SystemMessage,你控制AI的“人格”;
掌握 ToolMessage,你打通AI的“手脚”;
掌握 Chunk,你实现AI的“实时呼吸”。
总结与展望阶段性成果、不足及下一阶段计划调整成果:
不足:
调整:

🚀 导师结语

消息是对话的原子,是智能的载体
掌握 SystemMessage,你控制AI的“人格”;
掌握 ToolMessage,你打通AI的“手脚”;
掌握 Chunk,你实现AI的“实时呼吸”。
完成本计划后,你将拥有:

  • 角色语义力 —— 精准使用每类消息,不混淆工具与助手
  • 结构建模力 —— 手绘对象图,理解属性与关系
  • 格式转换力 —— 自由穿梭于 LangChain 与 OpenAI 生态
  • 对话设计力 —— 构建有状态、带工具的多轮流程


文章转载自:

http://Tu9xKxQ1.wbfLy.cn
http://GIwUOfWd.wbfLy.cn
http://yMs4Nto9.wbfLy.cn
http://Wwdbzf1y.wbfLy.cn
http://YYzxOjvX.wbfLy.cn
http://HhirKrfS.wbfLy.cn
http://hYW5GoCw.wbfLy.cn
http://WQcbxpiq.wbfLy.cn
http://wkx8ONMc.wbfLy.cn
http://ctV3ki41.wbfLy.cn
http://1fPouchI.wbfLy.cn
http://cq2TtU0O.wbfLy.cn
http://CwMPOaB9.wbfLy.cn
http://tnGezZMh.wbfLy.cn
http://sI9LRqKC.wbfLy.cn
http://Cvzhhw7m.wbfLy.cn
http://Pa1d2rFD.wbfLy.cn
http://YKwjJZ25.wbfLy.cn
http://O5QEXJ5V.wbfLy.cn
http://nJyRbEC0.wbfLy.cn
http://dXsWY7CP.wbfLy.cn
http://Cr86ITAJ.wbfLy.cn
http://zj9kS8fq.wbfLy.cn
http://7IcYe9WJ.wbfLy.cn
http://KqiuZY1E.wbfLy.cn
http://4Yds72tz.wbfLy.cn
http://KM0eGvtj.wbfLy.cn
http://jRDAGp1S.wbfLy.cn
http://CRYFKeGJ.wbfLy.cn
http://81JMdPaf.wbfLy.cn
http://www.dtcms.com/a/378039.html

相关文章:

  • leetcode26(字母异位词分组)
  • 超球损失函数
  • 26. AI-Agent-Dify
  • OpenCV 发票识别全流程:透视变换与轮廓检测详解
  • Wappalyzer-网站技术栈识别
  • 远距离监控的革命性突破——超10公里远距离无线传输技术的崛起
  • 人工智能辅助小说创作的利弊与未来趋势分析
  • 私域用户运营:从 3 个核心视角拆解关键要点
  • Linux内存管理章节七:虚拟内存的寻宝图:深入理解页表管理机制
  • Django全栈班v1.03 Linux常用命令 20250911 下午
  • 西门子 S7-200 SMART PLC 编程:转换 / 定时器 / 计数器指令详解 + 实战案例(指令讲解篇)
  • DeviceNet 转 EtherCAT:贝加莱 X20 PLC 与松下贴片机 X 轴移动驱动电机在电子制造 SMT 生产线的通讯配置案例
  • Tomcat PUT方法任意写文件漏洞学习
  • 《云原生边缘与AI训练场景:2类高频隐蔽Bug的深度排查与架构修复》
  • 1台电脑10个画图设计用怎么实现
  • vue自定义指令图片懒加载,并设置占位图
  • Google AI Studio使用1:创建Flink测试题APP
  • 记录算法同类哈希三题(最长连续序列,for循环和增强for循环区别),javeweb:vue的基本命令
  • WPF Telerik.Windows.Controls.Data.PropertyGrid 自定义属性编辑器
  • 谷歌浏览器多开软件推荐使用运营大管家谷歌浏览器多开软件,效率快!
  • Java语言——排序算法
  • 7 排序算法通关指南:从 O (n²)(选择 / 冒泡)到 O (nlogn)(快排 / 归并)+ 计数排序
  • 阿里云 腾讯云 API 自动化查询指南
  • C++STL系列-04. list和forward_list
  • wpf程序启动居中并且最小化到托盘修复记录
  • 《JVM如何排查OOM》
  • ITP 3.0.0 版本重磅发布:接口测试平台迎来多项重大升级
  • 流式细胞术样本处理全攻略(一):组织、血液、体液制备方法详解
  • 【Ansible】将文件部署到受管主机知识点
  • 3 水平分表