🎯 课程主题
理解LangChain中结构化输出的概念、与传统方式的对比,以及四种输出模式的概览。
📝 核心知识点
1. 什么是结构化输出
- 概念说明:要求模型返回符合预定义结构的数据对象(如固定字段的JSON Schema、Pydantic模型、TypedDict),而不再是自由格式的自然语言文本。
- 关键细节:将模型的自然语言回答变成程序能够稳定解析的格式,方便后续代码处理。
2. 结构化输出的优势
- 更易被代码处理:JSON格式比纯文本友好得多
- 结果更稳定:减少因模型措辞变化导致的解析失败
- 更适合工程化:可以直接接入生产流程
3. 传统方式 vs 结构化输出方式
- 传统方式:
- 手写冗长的提示词要求模型按JSON格式输出
- 手动用
json.loads()解析 +try/except容错 - 手动创建对象、类型转换
- 工作繁琐,容易出错
- 结构化输出方式:
- 调用
model.with_structured_output(...)绑定格式 - 直接 invoke 即可获得符合格式的结果
- Prompt 变干净,字段 description 替代了提示词中的啰嗦描述
- 类型安全,IDE 可自动补全和运行前类型检查
- 依托大模型底层的 JSON Mode 能力,出错率极大降低
- 调用
4. LangChain v1.2 中的四种输出模式
- Pydantic:返回 Schema 类的实例,类型不匹配时会抛出异常(推荐首选)
- TypedDict:返回字典类型,无强制校验
- JSON Schema:返回字典类型
- DataClass:返回字典类型
只有 Pydantic 模式在运行时强制执行类型校验,因此生产环境推荐使用 Pydantic。
5. 模型兼容性说明
- 绝大多数现代模型都支持结构化输出,其底层通过 Function Calling 机制实现(与上一章的 Tools 原理相同)
- 对于不支持结构化输出的模型,只能退回到传统方式:提示词 + JSON 手动解析
🏗️ 架构与工作流
💻 代码实战
本节课以理论讲解为主,无代码实战。
⚠️ 常见问题与避坑指南
- 不是所有模型都支持:老旧或不支持 function calling 的模型无法使用结构化输出,需退回传统方式
- 四种模式返回值不同:只有 Pydantic 返回类实例,其余三种返回字典
- 类型校验行为不同:Pydantic 类型不匹配会抛异常,其他三种不会
💡 个人总结与延伸
本节课从"为什么要结构化输出"出发,对比了传统方式和现代化方式,清晰展示了结构化输出在工程化开发中的价值。四种模式本质上都是通过 Function Calling 将 JSON Schema 传递给大模型,不同之处在于返回值的类型约束。生产环境首选 Pydantic,因为它提供了运行时的类型安全保障。