AI Agent白手起家37: LangChain 输出解析器实战:文本、JSON、XML 与 Pydantic
内容纲要输出解析器核心作用将大模型自然语言输出转换为结构化数据常用解析器类型StrOutputParser提取纯文本无需格式指令PydanticOutputParser基于 Pydantic 数据模型精确控制字段和验证JsonOutputParser自由 JSON 或结合 Pydantic 生成严格 JSONXMLOutputParser输出字典可指定标签约束关键技术点格式指令注入get_format_instructions()必须嵌入提示词Pydantic v2 版本变化及验证器用法流式输出中的 JSON 完整性保护完整可运行代码使用模拟模型演示四种解析器无需外部 API Key引言大模型输出的本质是自然语言文本但实际应用需要结构化数据如 JSON 对象、表格、特定字段传递给下游服务。早期做法是用正则表达式从文本中抽取信息但模型输出的随机性常导致匹配失败。LangChain 的输出解析器Output Parsers提供了一个标准化方案通过将格式要求预先注入提示词并结合解析器自动转换可稳定获得结构化的 Python 对象。本文通过可运行代码演示文本、JSON、Pydantic 和 XML 四种常见解析器的用法。输出解析器在 IO 管道中的定位LangChain 的核心数据流由三部分组成提示词模板、大模型、输出解析器它们通过 LCEL 管道串联用户输入提示词模板大模型输出解析器结构化数据下游应用解析器的作用是将模型输出的自由文本转换为机器易处理的格式同时保证与 LangChain 生态的其他组件无缝对接。四种解析器一览解析器输出类型是否需格式指令典型场景StrOutputParser字符串否简单问答、文本摘要PydanticOutputParserPydantic BaseModel 实例是精准字段控制、数据验证JsonOutputParser字典 (dict)是通用 JSON 数据交互XMLOutputParser字典 (dict)是兼容 XML 的老系统使用结构化解析器时务必通过get_format_instructions()获取格式指令并嵌入提示词否则模型可能不遵守格式约定。环境准备安装依赖pipinstalllangchain langchain-core langchain-community pydantic以下代码使用FakeListChatModel模拟模型输出因此无需任何 API Key 即可运行。如果希望接入真实模型如 OpenAI、DeepSeek只需替换模型初始化部分。完整可运行代码fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimport(StrOutputParser,JsonOutputParser,PydanticOutputParser,XMLOutputParser,)fromlangchain_community.chat_models.fakeimportFakeListChatModelfrompydanticimportBaseModel,Field,model_validator# 1. 文本解析器 # 模型预设回复str_modelFakeListChatModel(responses[ LangChain 是一个用于构建大语言模型应用的开源框架。])str_promptChatPromptTemplate.from_template(用一句话介绍{subject})str_chainstr_prompt|str_model|StrOutputParser()result_strstr_chain.invoke({subject:LangChain})print(StrOutputParser 结果:,result_str)print()# 2. Pydantic 解析器 classJoke(BaseModel):setup:strField(description笑话的铺垫必须以问号结尾)punchline:strField(description笑话的包袱回答铺垫问题)model_validator(modebefore)classmethoddefcheck_setup_ends_with_question(cls,values:dict)-dict:setupvalues.get(setup,)ifnotsetup.endswith(?):raiseValueError(fsetup 必须以问号结尾当前为:{setup})returnvalues# 模拟模型返回严格符合 Pydantic 的 JSON 字符串pyd_model_response{setup: 为什么鸡不能过马路, punchline: 因为它会被机动车撞到。}pyd_modelFakeListChatModel(responses[pyd_model_response])pyd_parserPydanticOutputParser(pydantic_objectJoke)format_instructionspyd_parser.get_format_instructions()pyd_promptChatPromptTemplate.from_template(回答用户的查询\n{format_instructions}\n用户输入{query})pyd_promptpyd_prompt.partial(format_instructionsformat_instructions)pyd_chainpyd_prompt|pyd_model|pyd_parser joke_objpyd_chain.invoke({query:给我讲一个笑话})print(PydanticOutputParser 结果:,joke_obj)print(字段 setup:,joke_obj.setup)print(字段 punchline:,joke_obj.punchline)print()# 3. JSON 解析器自由格式 json_model_response{joke: 为什么鸡不能过马路因为它会被机动车撞到。}json_modelFakeListChatModel(responses[json_model_response])json_parserJsonOutputParser()json_formatjson_parser.get_format_instructions()json_promptChatPromptTemplate.from_template(请以 JSON 格式返回一个笑话\n{format_instructions}\n用户输入{input})json_promptjson_prompt.partial(format_instructionsjson_format)json_chainjson_prompt|json_model|json_parser json_resultjson_chain.invoke({input:讲个笑话})print(JsonOutputParser 结果:,json_result)print(类型:,type(json_result))print()# 4. XML 解析器指定标签 xml_model_responsemovies movie title阿甘正传/title year1994/year actor汤姆·汉克斯/actor /movie movie title荒岛余生/title year2000/year actor汤姆·汉克斯/actor /movie /moviesxml_modelFakeListChatModel(responses[xml_model_response])# 指定顶层标签和内部字段xml_parserXMLOutputParser(tags[movies,movie,title,year,actor])xml_formatxml_parser.get_format_instructions()xml_promptChatPromptTemplate.from_template(根据用户查询生成 XML 列表\n{format_instructions}\n{query})xml_promptxml_prompt.partial(format_instructionsxml_format)xml_chainxml_prompt|xml_model|xml_parser xml_resultxml_chain.invoke({query:列出汤姆·汉克斯的电影})print(XMLOutputParser 结果 (字典):,xml_result)print(第一标题:,xml_result[movies][0][movie][0][title][0])print()# 5. 流式 JSON 演示模拟 # 为演示流式解析使用一个分段返回的模拟模型# 由于 FakeListChatModel 不支持 streaming此处仅给出概念说明。# 在实际应用中可使用支持流式的模型替换解析器会自动处理部分 JSON。print(流式 JSON 解析概念解析器在接收到不完整的 JSON 片段时会等待字段完整再输出。)结果解读StrOutputParser直接返回去除多余空白的纯文本。PydanticOutputParser将模型返回的 JSON 反序列化为Joke对象并执行验证器检查setup是否以问号结尾失败则抛出异常。JsonOutputParser返回普通字典适合无需强类型校验的场景若结合 Pydantic可生成更严格的 JSON。XMLOutputParser默认将 XML 转为多层嵌套字典通过tags参数可约束输出结构避免无关字段。Pydantic 版本注意事项LangChain 在不同版本中使用的 Pydantic 版本不同v0.1 之前同时兼容 Pydantic v1/v2v0.2 起默认 v2v0.3 完全弃用 v1。代码示例基于 Pydantic v2语法与 v1 差异较大如model_validator替代root_validator若使用旧版 LangChain 需调整导入和验证器写法。最佳实践始终将get_format_instructions()注入提示词否则模型可能自由发挥。需要严格字段验证时首选PydanticOutputParser其错误处理机制能与 LangChain 的OutputFixingParser结合自动修复。处理 XML 时注意解析结果是嵌套字典访问路径较深可编写辅助函数提取。流式场景下JsonOutputParser能保证任意截断时刻的 JSON 仍为合法片段便于前端实时渲染。总结输出解析器是 LangChain 从模型“模糊输出”到“精确数据”的关键桥梁。文本解析器简单直接Pydantic 提供强类型保障JSON 和 XML 覆盖了主流数据交换格式。使用框架封装好的解析器不仅能减少重复造轮子还能充分利用其与模型、提示词模板的深度集成大幅提升 LLM 应用的工程化水平。

相关新闻

如何选择优质的网站建设招标方案以打造高转化率数字化营销入口并避开隐形陷阱

如何选择优质的网站建设招标方案以打造高转化率数字化营销入口并避开隐形陷阱

说实话,写这篇文章之前,我反复掂量了很久。因为在互联网行业摸爬滚打这么多年,我见过的因为一个错误的“网站建设招标方案”而让整个项目烂尾的案例,简直比过春节返乡堵车时加塞的车还多。很多老板或者是负责项目的同事,拿到招标文件的那一刻,心里想的往往是“赶紧发出去…

2026/8/7 0:46:40 阅读更多 →
炉石传说HsMod插件:5大核心功能彻底改变你的游戏体验

炉石传说HsMod插件:5大核心功能彻底改变你的游戏体验

炉石传说HsMod插件:5大核心功能彻底改变你的游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否曾经为炉石传说中冗长的开包动画而烦恼?是否羡慕别人的炫…

2026/8/7 0:46:40 阅读更多 →
如何快速清理C盘空间?Windows Cleaner终极免费优化指南

如何快速清理C盘空间?Windows Cleaner终极免费优化指南

如何快速清理C盘空间?Windows Cleaner终极免费优化指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到电脑C盘爆红、系统卡顿的烦恼&a…

2026/8/7 0:45:40 阅读更多 →

最新新闻

Onekey Steam清单下载器:终极免费工具完整使用指南

Onekey Steam清单下载器:终极免费工具完整使用指南

Onekey Steam清单下载器:终极免费工具完整使用指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 你是否曾经想要备份Steam游戏文件却苦于找不到合适的工具?或者需要在不…

2026/8/7 1:27:59 阅读更多 →
从零构建15自由度灵巧手:机械设计、驱动控制与智能抓取全解析

从零构建15自由度灵巧手:机械设计、驱动控制与智能抓取全解析

1. 项目概述:从“笨拙”到“灵巧”的跨越在机器人领域,手,或者说末端执行器,一直是决定其能力上限的关键部件。我们见过太多工业机器人那“力大无穷”但动作单一的夹爪,它们能精准地重复一个抓取动作,却无法…

2026/8/7 1:27:59 阅读更多 →
MyBatis一级缓存源码解析:从诡异数据丢失到高效Debug实践

MyBatis一级缓存源码解析:从诡异数据丢失到高效Debug实践

1. 从一次“诡异”的查询说起:为什么一级缓存会“吃掉”我的数据?那天下午,我正在调试一个财务对账的定时任务。逻辑很简单:在一个声明式事务方法里,先根据订单号查询出一笔待处理的交易记录(我们叫它Trans…

2026/8/7 1:27:59 阅读更多 →
G-Helper终极指南:5步告别Armoury Crate臃肿,轻松掌控华硕笔记本性能

G-Helper终极指南:5步告别Armoury Crate臃肿,轻松掌控华硕笔记本性能

G-Helper终极指南:5步告别Armoury Crate臃肿,轻松掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProA…

2026/8/7 1:27:59 阅读更多 →
30个AI变现实战案例:从内容创作到产品开发,打造你的AI商业闭环

30个AI变现实战案例:从内容创作到产品开发,打造你的AI商业闭环

1. 从“看热闹”到“干实事”:AI变现的认知跃迁最近和几个做自由职业和创业的朋友聊天,发现一个挺有意思的现象:大家谈起AI,都能说上几句,ChatGPT、Midjourney、Sora这些名字如数家珍。但一聊到“你用AI赚到钱了吗&…

2026/8/7 1:27:59 阅读更多 →
北京营销型网站建设到底该怎么选才不踩坑?揭秘高转化率背后的核心逻辑

北京营销型网站建设到底该怎么选才不踩坑?揭秘高转化率背后的核心逻辑

在北京这片竞争极度激烈的商业沃土上,做企业的人没有不想赚钱的。但现实往往很骨感,很多老板花了几万甚至十几万做的网站,最后除了放在服务器里吃灰,连个像样的询盘都没有。这时候你一定会问:为什么别人的网站能自动获客,而我的网站却像个死水潭?问题的核心,其实不在设…

2026/8/7 1:26:59 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →