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

相关新闻

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

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

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

2026/8/19 22:16:37 阅读更多 →
戴姆勒大数据平台云端迁移:从业务敏捷到技术重构的工业数字化转型

戴姆勒大数据平台云端迁移:从业务敏捷到技术重构的工业数字化转型

1. 从“自建堡垒”到“云端舰队”:戴姆勒的转型抉择当一家拥有百年历史的汽车巨头,决定将承载其未来智能命脉的大数据平台,从自家精心构筑的数据中心,整体搬迁到云端时,这绝不仅仅是一次简单的技术升级或成本优化。这背…

2026/8/19 22:16:37 阅读更多 →
AI Agent 开发实战(八):输出 Schema 约束与结构化输出

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

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

2026/8/19 22:16:37 阅读更多 →

最新新闻

港口无人值守智能地磅系统:关键技术与应用实践

港口无人值守智能地磅系统:关键技术与应用实践

一 港口智能地磅系统 传统的散货地磅、散货闸口称重管理系统大部分的信息采集工作由人工完成,司磅员工作环境差、工作量大,很难保证工作效率及质量,而且地磅24小时运行,需要安排多班轮倒,给企业造成很大的人力成本压力。 传统的地磅称重管理系统和闸口管理系统数据没有互联…

2026/8/20 1:04:14 阅读更多 →
VHF船岸通信系统解析:通信机制与系统组成(含设备参数了解)

VHF船岸通信系统解析:通信机制与系统组成(含设备参数了解)

一 VHF船岸通信系统 1.1 系统组成 所建VHF基站覆盖本港区,本系统由VHF基站和手持对讲终端等设备组成,实现码头的船岸VHF作业对讲通讯。VHF基站建设为收发站,提供2个频道,港口码头基站提供两对水上频道(CH16 和 CHXX)供播发船舶交通信息。 1.2 设备相关及参数 固定式甚高…

2026/8/20 1:04:14 阅读更多 →
【干货】港口无线集群通信系统设计原则与实现功能讲解

【干货】港口无线集群通信系统设计原则与实现功能讲解

一 港口无线集群通信系统 1.1 设计原则 (1)健壮性原则 系统在实现所需功能的基础上,具备极高的可靠性和稳定性,能够7X24小时不间断地连续工作。 (2)互换操作性原则 系统符合开放式的设计标准,并可对外提供各种通讯协议,支持与第三方系统的对接。 (3)扩展性原则 系统…

2026/8/20 1:04:14 阅读更多 →
AP和无线用户属于不同VLAN的无线接入典型配置举例

AP和无线用户属于不同VLAN的无线接入典型配置举例

一 简介 本文档介绍了当AP和无线用户属于不同VLAN时的无线接入配置举例。 二 配置举例 2.1 组网需求 如图1所示,通过将AP和无线用户划分在不同的VLAN中,以保证AC和AP之间的通信不受其他局域网中数据报文的干扰,进而增强AP和AC通信的安全性和稳健性,更好的统一管理有线网…

2026/8/20 1:04:14 阅读更多 →
一学就会的 Source Sans 3 可变字体实战:3 步让界面文字拥有动态字重

一学就会的 Source Sans 3 可变字体实战:3 步让界面文字拥有动态字重

一学就会的 Source Sans 3 可变字体实战:3 步让界面文字拥有动态字重 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans Source Sans 3 可变字体(…

2026/8/20 1:01:07 阅读更多 →
AMAT 0190-A5841 双离子泵控制器

AMAT 0190-A5841 双离子泵控制器

AMAT 0190-A5841 双离子泵控制器产品简介:产品特点:双通道独立控制,可同时运行两台离子泵。输出电压可调,范围2000至7000 VDC。短路电流最高50mA,可设定限制。支持以太网、USB、RS-232/422/485通信。配备LCD显示屏&…

2026/8/20 0:59:05 阅读更多 →

日新闻

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新引“变砖”危机2026年7月7日,Framework向用户quantum5发送邮件,建议其安装BIOS 3.20更新。然而,更新后电脑出现严重问题,屏幕显示三角形和随机像素图案,风扇狂转,系统完全挂起。qua…

2026/8/20 0:00:46 阅读更多 →
2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!据艾瑞咨询发布的《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,同比增长18.7%。中国互联网络信息中心数据显示,截至2025年底…

2026/8/20 0:00:46 阅读更多 →
2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?据艾瑞咨询《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,其中高端定制网站服务占比突破42%。更值得关注的是,91%的规模以上企业…

2026/8/20 0:00:46 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

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

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

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/19 7:42:22 阅读更多 →
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/19 11:55:13 阅读更多 →