news 2026/7/11 4:22:05

05.AI应用搭建--langchain输出解析器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
05.AI应用搭建--langchain输出解析器

文章目录

  • 前言
  • 一、什么是输出解析器
  • 二、为什么要用输出解析器
  • 三、常见的输出解析器有哪些?有什么作用?
  • 四、输出解析器的具体使用(代码)
  • 总结

前言

提示:承上启下,系列文章,通过前言会议一下上篇章内容,引入本文内容:

在04.AI应用搭建–langchain框架提示词模版中,我们说到应用的搭建分为3步:用户输入——应用处理数据——输出内容,展示给用户。

在04文内,介绍了如何处理用户输入,且在02文中介绍如果调用大模型,故本文介绍输出解析器,处理大模型返回结果


需要补充知识点:

本期代码用了“链(chain)”的概念,是python使用langchain的重要概念,感兴趣的可以看这个文章(转载):
5分钟让你了解LangChain的路由链

当然也可以先简单理解,后面实际用到的时候再去学习:
简单来说:链就是将输入—构造提示词—调用大模型—解析输出这个流程串联起来,核心原理就是将上一步的输出,作为输入传递给下一步,最终走完全流程。举个例:

不用链写的代码:每一步的结果需要用中间变脸存储下来,再作为入参交给下一步,代码不够简洁

使用后:代码可以省去中间传参步骤,将代码简单写成:

chain=prompt|client|OutputParser res=chain.invoke(入参列表,就是原本需要传给prompt 的值)

看着好像链并没有什么用,
(强调!!!强调!!!强调!!!)但是,链的核心其实是并行链,这个内容是增强用户输入内容的重点一定要通过上面的链接文章深入学习一下(本文为了降低大家的学习难度,省略了这部分内容,消化完这篇文章后一定要去补充)


一、什么是输出解析器

输出解析器(Output Parser) 是大模型(如 GPT、文心一言)生态中的「翻译 + 规整工具」,核心作用是将大模型输出的自然语言杂乱内容,转换成「机器可直接读取、程序可直接调用」的结构化格式(如 JSON、表格、指定字符串),同时校验输出是否符合要求,避免格式混乱导致后续无法使用


二、为什么要用输出解析器

输出解析器的意义:

  1. 格式标准化,适配业务系统
  2. 过滤无效信息,提取核心内容
  3. 校验输出合规性,规避错误风险
  4. 实现多模态输出的统一处理(暂不需要了解)

一句话:对AI生成内容提取业务需要的内容,并对其进行合理性校验,最终以指定格式输出成可直接使用的数据,简化程序员自己去处理返回数据的过程,提升效率


三、常见的输出解析器有哪些?有什么作用?

  1. StrOutputParser:基础解析器。将AI返回内容,输出成字符串格式的数据
  2. CommaSeparatedListOutputParser:将输出内容转换成用逗号( , )隔开的数据格式
  3. JsonOutputParser:将内容转换为JSON格式。python里是字典

四、输出解析器的具体使用(代码)

重点:输出解析器只能解析对应格式的输出内容,所以要用对应输出解析器时,必须告知ai按对应格式输出内容,否则会导致解析失败

关于模块的引入,后续文章都不再复述了,若导入报错都可以用pip3安装对应的包解决

importos# 引入chatopenai,用于使用外部大模型(如deepseek、通义千问模型)fromlangchain_openaiimportChatOpenAI# 引用PromptTemplate进行提示词模版化(本质上就是:将用户输入的值填入模版中对应的占位符,形成完成的提示词)fromlangchain_core.promptsimportPromptTemplate,ChatPromptTemplate# 引入输出解析器fromlangchain_core.output_parsersimportStrOutputParser,CommaSeparatedListOutputParser,JsonOutputParser#大模型的api key、模型、base_urlMODULE_API_KEY=os.getenv("DASHSCOPE_API_KEY")MODULE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"MODULE_NAME="qwen-plus"#1、初始化各输出解析器。方便后续调用string_parser=StrOutputParser()comma_separated_list_parser=CommaSeparatedListOutputParser()json_parser=JsonOutputParser()# 2、获取各输出解析器可解析的数据格式(每个输出解析器都自带get_format_instructions()获取可解析的数据格式),用于告知ai如何生成# 其中string_format_instructions为基础输出解析器,所以不提供get_format_instructions()的实现,只要不做格式要求,输出内容就是能解析的内容# string_format_instructions = string_parser.get_format_instructions()comma_separated_list_format_instructions=comma_separated_list_parser.get_format_instructions()json_format_instructions=json_parser.get_format_instructions()# 3、构造提示词模版#3.1 字符串输出解析器string_prompt=ChatPromptTemplate.from_messages([("system",f"请按要求输出"),("human","生成一句20字内的圣诞祝福语")])#3.2 逗号分隔列表输出解析器comma_separated_list_prompt=ChatPromptTemplate.from_messages([("system",f"请按要求输出,格式要求:{comma_separated_list_format_instructions}"),("human","请列举3个Python常用的数据结构")])#3.3 json输出解析器json_prompt=ChatPromptTemplate.from_messages([("system",f"请严格按照以下格式输出JSON数据,仅输出JSON字符串,无其他内容:{json_format_instructions}"),("human","生成一个包含name(姓名)、age(年龄)、sex(性别)的JSON数据,示例:{{'name':'张三','age':25,'sex':'男'}}")])try:# 引入ChatOpenAI,链接外部大模型。我这里用的qwen-plusclient=ChatOpenAI(api_key=MODULE_API_KEY,model=MODULE_NAME,base_url=MODULE_BASE_URL)# 1、测试字符串输出解析器string_chain=string_prompt|client|string_parser string_res=string_chain.invoke({})print(string_res)# 2、测试逗号分隔列表输出解析器comma_separated_list_chain=comma_separated_list_prompt|client|comma_separated_list_parser comma_separated_list_res=comma_separated_list_chain.invoke({})print(comma_separated_list_res)# 3、测试json输出解析器json_chain=json_prompt|client|json_parser json_res=json_chain.invoke({})print(json_res)exceptExceptionase:print(f"错误信息:{e}")print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

运行结果:


总结

重要内容:一定要自行去补充 链(chain)的知识!!!!

1、输出解析器,就是就是对ai生成内容获取核心内容后,对数据进行结构化让数据可以直接使用
2、使用输出解析器时,一定要告知AI解析器能够解析的数据格式,并按这个格式生成结果
3、StrOutputParser为基础解析器,就是简单的获取AI输出的内容,去掉其他描述内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 20:05:58

Github 9.6k Star!一款开源的超强大数据可视化神器!

Perspective Perspective是一个交互式分析和数据可视化组件,特别适用于大型或流式数据集。使用它来创建用户可配置的报告、仪表板、笔记本和应用。 在Github上斩获9.6k Star! 核心特性 极致性能体验 Perspective使用C编写,并编译为WebAss…

作者头像 李华
网站建设 2026/7/10 7:24:58

空间转录组+R语言=发刊利器?5个高分论文常用富集策略首次系统披露

第一章:空间转录组功能富集分析的R语言时代随着空间转录组技术的快速发展,研究者不仅能够获取基因表达数据,还能保留其在组织中的原始空间位置。这一突破性进展对数据分析工具提出了更高要求,而R语言凭借其强大的统计计算与可视化…

作者头像 李华
网站建设 2026/7/10 1:45:15

逆变器DC-AC拓扑全解析:从基础到专用,实战选型指南

在新能源发电、工业驱动、储能系统等领域,逆变器作为“直流转交流”的核心设备,其性能直接决定整个系统的效率、可靠性与成本。而DC-AC拓扑作为逆变器的电路核心,更是技术选型的重中之重。本文将系统梳理逆变器中常用的DC-AC拓扑,…

作者头像 李华
网站建设 2026/7/8 1:30:51

一文讲清楚Spring Bean的生命周期(附详细流程图)

01-什么是Bean的生命周期Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程02-为什么要知道Bean的生命周期生命周期的本质:在哪个时间节点上调用了哪个类的哪个…

作者头像 李华
网站建设 2026/7/9 6:48:46

【Dify与Spring AI兼容性深度解析】:掌握版本匹配的5大核心原则

第一章:Dify 与 Spring AI 的版本兼容性概述在构建现代化 AI 驱动的应用程序时,Dify 与 Spring AI 的集成成为关键环节。确保两者版本之间的兼容性,是系统稳定运行的基础前提。不同版本的 Dify 和 Spring AI 可能在 API 接口、数据格式以及认…

作者头像 李华
网站建设 2026/7/6 2:24:45

LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读

LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读 在人类探索宇宙的征途中,2015年LIGO首次直接探测到引力波的消息震惊世界——我们终于“听”到了时空本身的震颤。自那以后,双黑洞并合、中子星碰撞等极端天体事件不再是理论推演中的符号&…

作者头像 李华