LangChain 学习第 3 课 - 输出解析器(Output Parser)

【LangChain指南】输出解析器(Output parsers) 摘要: LangChain框架中的**Output Parsers(输出解析器)**用于将LLM生成的自由文本转换为结构化数据(如Python对象、字典等),便于程序处理。核心接口包括get_format_instructions()(提供格式化指令)、parse()(解析文本)和可选的parse_with_prompt()(结合提示词修正错误)。常用解析器有: StrOutputParser:提取纯文本,适用于工具调用后的结果简化。 PydanticOutputParser:结合Pydantic模型,生成 阅读详情

大模型天生只会"吐字符串",但程序需要的是字符串、列表、JSON 对象……
输出解析器负责把模型输出转换成 Python 数据,这是让 LLM 接入业务代码的关键一步。

本节课学到:

  1. StrOutputParser:只要文本内容(最常用);
  2. PydanticOutputParser:用 Pydantic 模型约束输出结构(LCEL 经典写法);
  3. with_structured_output:基于模型原生"函数调用"的结构化输出(更稳更现代)。

"""
运行方式:
    .venv\\Scripts\\python examples\\03_output_parser.py
"""

import sys
from pathlib import Path
from typing import Literal

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from pydantic import BaseModel, Field  # Pydantic:用类型注解定义数据结构
from langchain_core.output_parsers import PydanticOutputParser, StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

from config import get_chat_model, print_sub, print_title


def demo_str_parser() -> None:
    """StrOutputParser:把 AIMessage 转成它的 .content 字符串。"""
    print_sub("1. StrOutputParser:只要纯文本")
    llm = get_chat_model(temperature=0.3)
    raw = llm.invoke("说一个成语")
    print(f"不加解析器,返回类型是:{type(raw).__name__}(一个消息对象)")

    chain = llm | StrOutputParser()  # | 管道:模型输出 → 解析器
    text = chain.invoke("说一个成语")
    print(f"加了解析器,返回类型是:{type(text).__name__}")
    print(f"内容:{text.strip()}")


# ---------------------------------------------------------------------
# 用 Pydantic 定义"我希望模型输出长什么样"
# 继承 BaseModel,每个字段就是一个要抽取的信息,Field 的 description 会告诉模型含义
# ---------------------------------------------------------------------
class DishInfo(BaseModel):
    """从用户对菜品的描述中抽取结构化信息。"""

    name: str = Field(description="菜品名称")
    flavor: Literal["清淡", "咸鲜", "麻辣", "香甜", "酸甜"] = Field(
        description="主要口味,只能从给定选项中选择"
    )
    is_spicy: bool = Field(description="这道菜是否辣")
    ingredients: list[str] = Field(description="主要食材列表")
    price_range: str = Field(description="预估价格区间,例如 '20-40 元'")


def demo_pydantic_parser() -> None:
    """PydanticOutputParser:提示词里注入格式约束,链末端自动解析成对象。"""
    print_sub("2. PydanticOutputParser:提示词约束 + 自动 JSON 解析")
    parser = PydanticOutputParser(pydantic_object=DishInfo)

    # 关键:提示词里必须有 {format_instructions} 占位符,
    # 解析器会自动生成一段 JSON Schema 说明塞进去(务必保证变量名一致!)
    prompt = ChatPromptTemplate.from_messages(
        [
            ("system", "你负责抽取菜品信息。\n{format_instructions}"),
            ("human", "{description}"),
        ]
    ).partial(format_instructions=parser.get_format_instructions())  # partial:提前写死一部分变量

    chain = prompt | get_chat_model(temperature=0.0) | parser  # 末端是 parser,直接拿到对象
    result: DishInfo = chain.invoke({
        "description": "昨天吃了一道水煮鱼,又麻又辣,主要有草鱼、豆芽和干辣椒,餐厅卖 68 元。",
    })

    print(f"解析后的 Python 类型:{type(result).__name__}")
    print(f"菜名:{result.name}")
    print(f"口味:{result.flavor}")
    print(f"是否辣:{result.is_spicy}")
    print(f"食材:{result.ingredients}")  # 已经是真正的 list,可以直接用于业务逻辑
    print(f"价格:{result.price_range}")


def demo_structured_output() -> None:
    """with_structured_output:利用模型原生 function calling,直接返回 Pydantic 对象。"""
    print_sub("3. with_structured_output:模型原生结构化输出(推荐)")
    llm = get_chat_model(temperature=0.0)

    # 一行绑定 schema,模型会通过函数调用机制保证输出结构,比"提示词要求输出 JSON"更可靠
    structured_llm = llm.with_structured_output(DishInfo)

    result: DishInfo = structured_llm.invoke(
        "帮我分析:芒果糯米饭,甜甜的,有糯米、芒果和椰浆,大概 15 到 25 块钱一份。"
    )
    # 返回的就是 DishInfo 对象,还能调用 .model_dump_json() 序列化成 JSON 存库
    print(f"拿到对象:{result}")
    print(f"序列化为 JSON:{result.model_dump_json()}")


def main() -> None:
    print_title("03 输出解析器:从字符串到结构化 Python 对象")
    demo_str_parser()
    demo_pydantic_parser()
    demo_structured_output()
    print_sub("本课小结")
    print("只要文本 → StrOutputParser;要 JSON 对象 → with_structured_output(首选)或 PydanticOutputParser。")
    print("用 PydanticOutputParser 时:提示词必须包含 {format_instructions},链的最后一步必须是 parser。")
    print("字段描述 description 写得越清楚,模型抽取越准确。")


if __name__ == "__main__":
    main()

LangChain之各个输出解析器的使用 在LangChain中,Model I/O模型的输入与输出,其有等三部分组成。 阅读详情

相关推荐

【LangChain】深入解析LangChain:如何使用输出解析器优化结果处理

😁 作者简介:一名前端爱好者,致力学习前端开发技术👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气​🔥​前言:在使用langchain的过程中,输出解析器时非常关键的,可以帮助我们将复杂的模型响应转换为结构化、易于使用的数据格式,这是我自己的学习笔记,希望可以帮助到大家,欢迎大家的补充和纠正。

m0_56132701的博客 1975

【LangChain Output Parser 输出解析器】输出篇

Output Parser 是 LangChain 中用于将大模型自由文本输出转换为结构化数据的工具。最简单、最基础的输出解析器。从结果中提取 content 字段转换为字符串输出。​# result 现在是字符串类型将大模型的自由文本输出转换为结构化 JSON 数据(dict 类型)。

2201_75633021的博客 517

【可能是全网最丝滑的LangChain教程】十一、LangChain进阶之Output Parsers

输出解析器是LangChain的一个关键组件,它们的作用是将模型生成的文本输出转换成结构化的数据,以便更容易地使用和分析。模型输出------>结构化数据。如果你正在从事或者你正打算从事大模型应用相关研发,我想你都能明白结构化数据输出的重要性

Jeffray1991的博客 809

零基础学AI大模型之LangChain Output Parser

文章首先通过实际场景对比,解释了为什么需要Output Parser:将大模型的非结构化文本输出转换为结构化数据(如列表、JSON),便于工程化开发。教程详细介绍了Output Parser的工作原理(格式引导+结构化转换)和核心接口(parse、parse_with_prompt、get_format_instructions)。最后提供了基础代码框架,包括环境准备、解析器导入和Prompt构建,

chandfy的博客 1571

LangChain从入门到进阶(3):学会处理输出(Output Parser)「喂饭教程」

前两篇我们学会了调用模型和设计提示词,但你可能遇到过这样的困扰:AI的回答是自然语言文本,如果你想提取其中的结构化信息(比如姓名、年龄、价格),就得写一堆正则表达式或字符串处理代码,既麻烦又容易出错。这就是Output Parser要解决的问题——让AI直接输出结构化数据,省去手动解析的麻烦。

blues_C的博客 987

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 419

【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”

在构建大语言模型(LLM)应用时,我们经常会遇到一个核心矛盾:大模型最擅长生成自然流畅的文本,但程序只能处理结构化的数据。想象一下这个场景:你正在开发一个天气查询应用,用户问 “北京今天天气怎么样?”,大模型返回了一段非常友好的回答:“北京今天晴转多云,最高气温 28℃,最低气温 18℃,风力 3 级,适合外出活动。” 如果没有输出解析器,你只能用正则表达式或者字符串匹配来提取这些字段,不仅代码复杂易出错,而且大模型输出格式稍有变化就会导致程序崩溃。LangChain 的 输出解析器(Output Pars

会当凌绝顶,一览众山小 4465

virtualbox虚拟机里面最顶部没有控制、设置和帮助等选项

无意中操作,导致virtualbox虚拟机里面最顶部没有控制,设置和帮助选项  virtualbox虚拟机窗口显示如下如: 如何设置,窗口显示如下图所示呢: virtualbox虚拟机窗口模式显示设置,切换可以通过如下图所示操作进行切换: PS:一定要是右边的Ctrl+C

WEL测试 8780

LangChain 核心模块学习 输出解析器 Output Parser,大模型入门到精通,收藏这篇就足够了!

语言模型的输出是文本 希望获得比纯文本 更结构化的信息 。这就是输出解析器的价值所在。

Y525698136的博客 812

《软件工程——实践者的研究方法》重难点复习笔记(第八章——理解需求)

8项需求工程任务 inception 开始 8.1.1 identify stakeholders 定义:从软件开发中收益 例如:市场人员、销售经理、顾客、顾问、维护团队等(P139) 8.1.2 这个阶段的问题是context-free的。有三套(P140) 8.1.3 提到NFR(nonfunctional requirement)和QFD(quality

whooiif的博客 1815

OpenHarmony AI系列:神经网络处理单元(NPU)驱动架构与实现详解

NPU(Neural Processing Unit,神经网络处理单元)是专门为神经网络计算设计的硬件加速器。在OpenHarmony系统中,NPU驱动是通过NNRT(Neural Network Runtime,神经网络运行时)框架实现的,它作为中间桥梁连接上层AI推理框架和底层NPU硬件,实现AI模型的跨芯片推理计算。

m0_67505153的博客 665

LangChain 提示词模板—输出解析器(Output Parser)

输出解析器是一个类或函数,用于处理生成模型的输出。它接受生成的文本并将其转换为所需的结构化格式,例如JSON、字典、列表或特定的对象。这使得生成的文本可以更方便地进行后续处理和分析。因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

datian1234的博客 1513

Feature ‘alsa‘ was enabled, but the pre-condition ‘config.unix && !config.qnx && libs.alsa‘ failed解决

这个问题主要是Qt多媒体插件中缺少了ALSA音频库,所以我们需要自行先编译ALSA 在执行./configure的时候,配置项中ALSA为no Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux .............

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2588

LangChain 核心模块学习 输出解析器 Output Parser

LangChain 核心模块学习 输出解析器 Output Parser

2401_82469710的博客 900

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

【天工Godwork精品教程】天工3.1.7安装教程(附Godwork完整版下载地址)

本文讲解天工3.1.7安装过程(附Godwork完整版网盘下载地址)。 一、天工3.1.7安装教程 1. 安装GodWork-AT 3.1.7 2. 安装GodWork-AT 3.1.7补丁 3. 安装GodWork-EOS-Setup-2017B-1231 4. 安装GodWork-EOS补丁 5. 运行godwokr软件 6. 生成ZC码 7. 输入ZC码 8. eos插

智慧空间实验室 5285

利用 Guardrails Output Parser 增强 LangChain 应用的安全性

利用 Guardrails Output Parser 可以有效地提升应用程序的内容安全性。LangChain 官方文档Guardrails 官方指南。

ppoojjj的博客 898

一、OpenSM 架构部署及原理详解

OpenSM 是 InfiniBand 网络的核心组件,通过自动化的拓扑发现、路由计算和状态维护,确保网络的高效运行。部署时需关注配置文件参数、路由算法选择和高可用性设计,调试时可借助日志和诊断工具快速定位问题。

jundao1997的专栏 1130

langchain 输出解析器 Output Parser

自定义输出解析器# 链式调用chat,返回的结果作为下一个链的参数,也就是ai_message,调用parse方法response = chain.invoke("用英语回答,你是谁")response。

YUELEI118的博客 578

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

拒绝“胡言乱语”!LangChain 输出解析器全指南:让 LLM 乖乖吐出 JSON/Pydantic 对象

输出解析器(Output Parser)的作用是将 LLM 的非结构化文本输出转换为结构化的格式。

羑悻的博客. 8375

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LangChain 1.3 完全教程:从入门到精通-Part 4: Output Parsers(输出解析器)做好软件测试你要学习这些

测试工具 软件测试领域

lw的博客 609

LangChain 学习记录 04:Output Parser 输出解析器详解,告别模型乱返回

本文介绍了LangChain中Output Parser的核心作用和使用方法。Output Parser是连接大模型自然语言输出与程序处理结构化数据的关键桥梁,主要解决模型返回内容不一致导致的工程稳定性问题。

Y_yc0206的博客 361

【LangChain】P14 LangChain 输出解析器深度解析:Json解析器、XML解析器、字符串及列表、日期解析器

JSON 格式的数据用于 API 调用列表格式的数据用于批量处理日期时间格式用于日程管理XML 格式用于系统集成通过输出解析器,我们可以将 LLM 的文本输出转换为程序可以直接使用的结构化格式。输出解析器是 LangChain 中连接模型输出和应用逻辑的关键桥梁。将自由文本转换为结构化数据减少后续数据处理的复杂度提高应用的可靠性和可维护性掌握这些解析器的使用方法,将使 AI 应用开发效率大大提升。

weixin_43098506的博客 1185

LangChain输出解析器的作用与类型解析(17)

在LangChain框架中,输出解析器(Output Parser)扮演着至关重要的角色,其核心作用是将大型语言模型(LLM)生成的非结构化文本输出转换为结构化的数据格式,以便后续程序能够更方便地处理和利用这些信息。 LLM生成的文本通常是自然语言形式的,这种非结构化的文本在很多场景下难以直接使用。例如,在一个需要根据LLM回答执行特定操作的应用中,非结构化文本无法直接被程序理解和执行。输出解析器通过定义明确的解析规则,能够从LLM的输出中提取关键信息,并将其转换为结构化的数据,如字典、列表、对象等,从而

Android开发领域创作者 9778

LangChain 37 深入理解LangChain 表达式语言二 实现prompt+model+output parser LangChain Expression Language (LCEL)

LangChain Expression Language (LCEL)使得从基本组件构建复杂链变得简单,并支持流式处理、并行处理和日志记录等开箱即用的功能。

AI架构师易筋 3023
上一篇: LangChain 学习第 2 课 - 提示词模板(Prompt Template)
hackchen
博客等级 码龄19年 193粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值