LangChain实战训练营-02核心组件与实战

文章目录

    • 第6章 Message消息体系详解
      • 6.1 为什么需要Message
      • 6.2 LangChain中的Message类型
      • 6.3 HumanMessage用户消息
        • 6.3.1 基本使用
        • 6.3.2 发送HumanMessage给模型
        • 6.3.3 HumanMessage的其他属性
      • 6.4 AIMessage AI回复消息
        • 6.4.1 AIMessage的结构
        • 6.4.2 手动创建AIMessage
        • 6.4.3 包含工具调用的AIMessage
      • 6.5 SystemMessage系统消息
        • 6.5.1 SystemMessage的基本使用
        • 6.5.2 SystemMessage放在哪里
        • 6.5.3 SystemMessage的最佳实践
        • 6.5.4 SystemMessage vs 放在用户消息里的指令
      • 6.6 其他特殊Message类型
        • 6.6.1 ToolMessage工具消息
        • 6.6.2 FunctionMessage(已过时)
        • 6.6.3 ChatMessage通用消息
      • 6.7 Message列表与多轮对话
        • 6.7.1 手动构建多轮对话
        • 6.7.2 消息历史的裁剪问题
        • 6.7.3 查看消息内容
      • 6.8 Message内容的多模态支持
        • 6.8.1 发送图片消息
    • 第7章 提示词模板PromptTemplate
      • 7.1 为什么需要提示词模板
      • 7.2 ChatPromptTemplate聊天提示词模板
        • 7.2.1 从模板字符串创建
        • 7.2.2 支持的role类型
        • 7.2.3 和模型链式调用
        • 7.2.4 from_template:单条消息模板
      • 7.3 MessagesPlaceholder消息占位符
        • 7.3.1 为什么需要MessagesPlaceholder
        • 7.3.2 MessagesPlaceholder的参数
      • 7.4 模板的部分格式化
        • 7.4.1 partial的使用
        • 7.4.2 用函数做partial(动态值)
      • 7.5 提示词模板的组合与管道
        • 7.5.1 最简单的链:Prompt + Model
        • 7.5.2 加上输出解析器
        • 7.5.3 管道的原理
      • 7.6 提示词工程最佳实践
        • 7.6.1 写好System Prompt
        • 7.6.2 思维链(Chain of Thought, CoT)
        • 7.6.3 提供示例(Few-shot Learning)
        • 7.6.4 指定输出格式
        • 7.6.5 提示词要迭代优化
      • 7.7 Few-shot少样本学习模板
        • 7.7.1 FewShotChatMessagePromptTemplate
        • 7.7.2 动态选择示例
    • 第8章 Tools工具系统
      • 8.1 为什么需要工具
      • 8.2 使用@tool装饰器定义工具
        • 8.2.1 第一个工具:计算器
        • 8.2.2 @tool装饰器的参数
        • 8.2.3 带多个参数的工具
      • 8.3 使用Tool类手动定义工具
        • 8.3.1 Tool类基本使用
        • 8.3.2 什么时候用Tool类而不是@tool
        • 8.3.3 StructuredTool:多参数工具
      • 8.4 工具的参数Schema定义
        • 8.4.1 使用Pydantic定义Schema(推荐)
        • 8.4.2 为什么参数描述很重要
      • 8.5 工具的绑定与调用
        • 8.5.1 bind_tools绑定工具
        • 8.5.2 调用带工具的模型
        • 8.5.3 执行工具并返回结果
        • 8.5.4 多个工具同时绑定
      • 8.6 内置工具介绍与使用
        • 8.6.1 查看可用的内置工具
      • 8.7 Tavily联网搜索工具集成
        • 8.7.1 注册Tavily获取API Key
        • 8.7.2 安装依赖并配置
        • 8.7.3 使用TavilySearchResults工具
        • 8.7.4 把搜索工具绑定给模型
      • 8.8 自定义工具的高级技巧
        • 8.8.1 工具错误处理
        • 8.8.2 工具返回结果要简洁
        • 8.8.3 工具的同步和异步
    • 第9章 结构化输出
      • 9.1 为什么需要结构化输出
        • 9.2.2 Pydantic模型的基本使用
      • 9.3 with_structured_output方法
        • 9.3.1 基本使用
        • 9.3.2 返回字典而不是Pydantic对象
        • 9.3.3 include_raw=True查看原始响应
      • 9.4 嵌套结构与复杂类型处理
        • 9.4.1 嵌套结构示例
        • 9.4.2 支持的类型
      • 9.5 枚举类型与字段验证
        • 9.5.1 使用Enum限制字段值范围
        • 9.5.2 字段验证规则
      • 9.6 结构化输出的常见问题与解决方案
        • 9.6.1 模型返回的结果不符合Schema怎么办
        • 9.6.2 模型总是漏掉可选字段
      • 9.7 实战:结构化信息提取
    • 第10章 Runnable接口与LCEL表达式
      • 10.1 Runnable接口概述
      • 10.2 LCEL链式表达式基础
        • 10.2.1 最简单的链
        • 10.2.2 为什么用LCEL
      • 10.3 管道操作符的使用
        • 10.3.1 管道的本质
        • 10.3.2 输入输出类型要匹配
      • 10.4 并行执行与分支
        • 10.4.1 RunnableParallel:并行执行多个组件
        • 10.4.2 RunnablePassthrough:数据透传
      • 10.5 自定义Runnable组件
    • 第11章 核心组件综合实战项目
      • 11.1 智能客服机器人
      • 11.2 简历信息提取系统
      • 11.3 数学计算助手
    • 附录C:核心组件API速查表
      • Message类型
      • Prompt Template
      • Tool定义
      • 结构化输出
      • LCEL管道

第6章 Message消息体系详解

在第一篇中,我们学会了如何初始化模型并发送消息。但是我们之前只是简单地传入一个字符串,LangChain内部是如何表示对话消息的呢?这一章我们将深入学习LangChain的Message消息体系,这是整个框架最基础也是最重要的概念之一。

6.1 为什么需要Message

我们先想一个问题:为什么不能简单地用字符串列表来表示对话历史?比如:

# 这是我们可能想到的简单方式,但这是不够的history=["你好,我叫小明","你好小明!有什么可以帮你的吗?","我今天心情不太好",]