发布时间:2026/8/19 22:16:21
LangChain中的结构化输出 模型默认返回的是⾃由⽂本但程序需要结构化数据。以下是支持结构化输出的五种方式前三种需要搭配with_structured_output使用能让模型按你定义的Schema输出1.Pydantic# 定义你期望的输出结构Pydantic 模型 from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI class MovieInfo(BaseModel): 电影信息 title: str Field(description电影名称) year: int Field(description上映年份) director: str Field(description导演) rating: float Field(description评分10分制) structured_llm llm.with_structured_output(MovieInfo)#structured_llm经过 .with_structured_output() 包装后的模型实例包装后的 ChatOpenAI 对象 result structured_llm.invoke(介绍一下电影《星际穿越》) # 返回的是 MovieInfo 对象可以直接用属性访问 print(f片名{result.title}) print(f年份{result.year}) print(f导演{result.director}) print(f评分{result.rating})拆解llm.with_structured_output(MovieInfo)原始对象llmRunnable输入消息 → 返回 AIMessage.with_structured_output()内部逻辑对 ChatModel 做一层包装Runnable 封装创建一个全新的包装类Runnable即structured_llm然后用包装后的对象执行invoke()包装后的对象structured_llm.invoke()内部流程调用原来的llm.invoke()→ AIMessage提取内容 / 读取 tool_calls解析、实例化成 Pydantic 对象返回结构化实例因而我们说invoke返回的是 MovieInfo 对象可以直接用属性访问,无需.content2.TypedDictfrom typing_extensions import TypedDict # 方式二TypedDict更轻量无运行时校验 class MovieTypedDict(TypedDict): title: str year: int director: str rating: float structured_llm llm.with_structured_output(MovieTypedDict) result structured_llm.invoke(介绍一下电影《流浪地球》) # 返回的是普通 dict print(result[title])3.进阶版本的原⽣JSON Schemajson_schema { title: MovieInfo, description: 电影信息对象, type: object, properties: { title: {type: string, description: 电影名称}, year: {type: integer, description: 上映年份}, director: {type: string, description: 导演}, rating: {type: number, description: 评分10分制} }, required: [title, year, director, rating] } structured_llm llm.with_structured_output(json_schema) result structured_llm.invoke(介绍一下电影《哪吒之魔童降世》) print(result) # 返回的是 dict不止强制输出 JSON还可以直接定义 JSON 必须包含什么字段、什么类型。 相当于接口层面直接带上数据规范不用 Pydantic 二次校验。4.原生response_format接口层面强制定位最原始的不加任何 Prompt 哄骗、不用 LangChain 解析器直接命令大模型你输出必须是标准 JSON不准输出别的闲聊文字。response_format是模型底层原生支持的参数OpenAI、通义千问、文心、千问都兼容这个规范。参数放在client.chat.completions.create()顶层参数replay client.chat.completions.create( modelqwen-plus, messages[...], # 原生强制JSON response_format{type: json_object} )优势模型底层约束稳定性远高于单纯 prompt 局限只能保证是合法 JSON不能约束 JSON 里面有哪些字段模型有可能返回{name:xxx}但你想要{title:,year:}字段缺失管控不了。5.PydanticOutputParser纯上层代码方案只靠 Prompt 告诉模型输出格式没有启用接口原生强制稳定性最差。from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI # 1.定义Pydantic类 class MovieInfo(BaseModel):... # 2.创建 PydanticOutputParser 实例 parser #入参 pydantic_objectMovieInfo告诉解析器将来解析出来的数据要遵守 MovieInfo 的格式规范 parser PydanticOutputParser(pydantic_objectMovieInfo) #3.读取Pydantic 结构自动生成一段告诉大模型「该输出什么样 JSON」的提示文字 format_prompt parser.get_format_instructions() # 手动组合提示词利用prompt诱导模型输出JSON prompt f介绍一下电影《星际穿越》 {format_prompt} #4.调用解析器方法 .parse() #原始llm没有任何包装 # res_msg 类型AIMessage里面只有字符串content必须手动提取文本、交给parser解析 res_msg llm.invoke(prompt) #功能接收 JSON 字符串校验格式、字段类型生成 MovieInfo 的实例对象赋值给 movie movie parser.parse(res_msg.content) #5.用 .属性名 读取内容 print(movie.title) print(movie.year) print(movie.director) print(movie.rating)拓展什么时候依然会用到 PydanticOutputParser极少数场景你拿到外部已经获取好的 JSON 字符串只是单纯做校验转换老旧项目历史代码维护补充对比with_structured_output模型包装方案和PydanticOutputParser传统解析器方案特性PydanticOutputParserwith_structured_outputllm.invoke () 原生返回AIMessage必须手动拿.content封装后 invoke 直接返回 Pydantic 实例实现原理独立解析组件解析纯文本字符串包装 ChatModel内置完整调用 解析流水线模型能力仅依靠提示词要求输出 JSON优先调用模型原生结构化 / 工具调用 API容错性低模型多输出一句话、json 就容易炸更高原生结构化规避文本解析问题适用场景兼容老旧代码、自定义解析逻辑新项目、RAG、信息抽取官方推荐为什么两者原生返回一个必须手动.content一个直接返回返回的就是实例呢两者设计层级、工作链路完全不一样1.PydanticOutputParser 独立解析组件接收json字符串返回实例对象需要手动调用parser.get_format_instructions()读取Pydantic 结构自动生成一段告诉大模型「该输出什么样 JSON」的提示文字,然后手动将其拼接到提示词上——也是因为这一步所以我们说PydanticOutputParser纯依赖提示词诱导输出 JSON大模型给出的回答还是可能包含多余文字或者格式不一致从而报错稳定性一般调用LLM 返回 AIMessage.content拿到字符串手动执行parser.parse(AIMessage.content)返回实例对象用 .属性名 读取内容风险模型输出多余文字 → 直接解析报错底层单纯依靠提示词约束输出 JSON2..with_structured_output() 对 ChatModel 做一层包装Runnable 封装封装后的模型框架structured_llm有更多功能封装层自动判断模型若支持原生 json 模式就优先自动调用模型原生response_formatJSON 强制能力response_format强制JSON 就是在调用大模型的接口里加入response_format{type:json_object}这行命令顶层命令而非只靠提示词诱导输出的稳定性更高#接口层response_format强制JSON代码示例 resp client.chat.completions.create( modeldeepseek-v4-flash, messages[{role: user, content: prompt}], response_format{type: json_object} )自动填充格式提示词内部自动完成调用模型 → 提取 content → JSON 解析 → 实例化 Pydantic 对象最终直接返回模型实例对外只需要.invoke()直接返回实体极简代码6.日常开发总结response_formatjson_object强制返回 JSON 字符串杜绝多余文字但不控制内部字段可能你要的是title,但返回的是actor如果想要【规定必须有 title、year、rating 这些固定字段】 单纯 response_format 不够需要搭配 Pydantic也就是with_structured_output方案对比记忆只想要纯净 JSON 文本 → 使用原生 response_format想要纯净 JSON 自动校验字段、自动转为对象 → LangChain structured_output

相关新闻

2026/8/19 22:16:21

基于改进YOLOX的4-fold缺陷检测算法研究

概述 本项目旨在研究一种基于改进YOLOX的4-fold缺陷检测算法,专门针对工业金属表面4-fold缺陷识别任务。项目采用目标检测技术路线,以YOLOX\yolox_x_8xb8-300e_coco为后端算法框架,结合QT技术栈构建前端界面。数据集包含单一类别’4-fold de…

2026/8/19 22:16:21

AI Agent 开发实战(八):输出 Schema 约束与结构化输出

上一篇我们用 Harness Engineering 把 LLM 的行为范围框住,但还有一类问题没解决:输出格式。LLM 默认吐的是自由文本,而下游系统要的是 JSON、枚举、数组——格式不对,整条链路就断了。今天聊输出 Schema 约束,让 LLM …

2026/8/19 23:26:39

基于SpringBoot的智能停车场管理系统(毕业设计项目源码+文档)

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

2026/8/19 23:26:39

基于ESP32与SQLite的离线维基百科访问器设计与实现

1. 项目概述:打造一个离线的“知识口袋”几年前,我在一次长途火车旅行中,手机信号断断续续,想查点资料却束手无策。那一刻我就在想,如果能有一个设备,不依赖网络,随时随地就能查阅像维基百科这样…

2026/8/19 23:26:39

基于RP2350芯片的复古掌机改造:从硬件设计到模拟器移植全解析

1. 项目概述:当复古掌机遇上现代芯片最近在复古硬件改造的圈子里,RP2350这颗芯片的热度是越来越高了。作为一个常年折腾各种开源硬件的玩家,我自然也按捺不住,想用它来搞点有意思的东西。手头正好有一台老旧的Gameboy,…

2026/8/19 4:14:28

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 15:09:57

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/19 0:00:35

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:35

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:36

Agentic Web:构建智能体原生网络的基础设施挑战与四大支柱

1. 从“被动网络”到“能动网络”:一个正在发生的范式转移 如果你最近关注AI和Web技术的前沿动态,可能会频繁听到“Agentic Web”这个词。它不像“Web3”那样带着浓厚的金融色彩,也不像“元宇宙”那样充满科幻感,但它所描绘的未来…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…