Skip to main content
版权归属于 LangChat Team
官网:https://langchat.cn

19 - 结构化输出

版本说明

本文档基于 LangChain4j 1.10.0 版本编写。

学习目标

通过本章节学习,你将能够:
  • 理解 LangChain4j 中结构化输出的概念和用途
  • 掌握 @StructuredPrompt@EnumPrompt 注解的使用
  • 学会将 LLM 的响应自动转换为强类型对象
  • 理解 JSON Schema 和响应格式验证
  • 掌握复杂对象和枚举类型的输出
  • 实现一个完整的结构化输出应用

前置知识

  • 完成《01 - LangChain4j 简介》章节
  • 完成《02 - 你的第一个 Chat 应用》章节
  • 完成《14 - JSON 处理》章节(推荐)

核心概念

什么是结构化输出?

结构化输出是指将 LLM 的响应自动转换为强类型的 Java 对象,而不是简单的文本字符串。 类比理解:
  • 普通输出 = 手动解析文本字符串,容易出错
  • 结构化输出 = 自动映射到预定义的类结构,类型安全
为什么需要结构化输出?
  1. 类型安全 - 编译时检查,减少运行时错误
  2. 代码可读性 - 清晰的数据模型,易于理解和维护
  3. 自动验证 - 根据类的定义验证响应格式
  4. 简化代码 - 无需手动解析 JSON 字符串
  5. 集成友好 - 直接使用 Java 对象,无需额外转换

结构化输出类型

基本结构化输出

基础 POJO 输出

@StructuredPrompt 注解

复杂对象输出

枚举类型输出

@EnumPrompt 注解

复杂嵌套结构

嵌套对象输出

列表和集合输出

集合类型输出

测试代码示例

实践练习

练习 1:实现天气查询服务

练习 2:实现产品目录服务

总结

本章要点

  1. 结构化输出概念
    • 将 LLM 响应转换为强类型对象
    • 提高类型安全和代码可读性
    • 简化数据处理流程
  2. 注解使用
    • @AiService - 创建 AI 服务
    • @SystemMessage - 系统提示词
    • @UserMessage - 用户输入
    • 自动类型推断和映射
  3. 输出类型
    • 基本类型(String, Integer, Boolean)
    • 复杂对象(POJO)
    • 枚举类型(@EnumPrompt)
    • 集合类型(List, Map)
    • Optional 类型
  4. 最佳实践
    • 保持 POJO 简单和可序列化
    • 使用构造器或 Builder 模式
    • 为复杂结构提供 toString() 方法
    • 使用合理的默认值
  5. 应用场景
    • 信息提取(用户资料、产品信息等)
    • 文本分类和情感分析
    • 结构化问答
    • 数据验证和清洗

下一步

在下一章节中,我们将学习:
  • 测试和评估策略
  • 自动化测试框架
  • 性能基准测试
  • A/B 测试
  • 错误注入测试

常见问题

Q1:@AiService 和普通的 ChatModel 有什么区别? A:
  • @AiService - 提供类型安全、结构化输出
  • ChatModel - 返回简单的字符串响应
  • 建议:使用 @AiService 获得更好的开发体验
Q2:如何处理嵌套的复杂对象? A:方法:
  1. 创建嵌套的 POJO 类
  2. 在父类中包含子类引用
  3. LangChain4j 自动映射复杂结构
  4. 使用 Jackson 处理 JSON 序列化
Q3:枚举类型如何工作? A:工作原理:
  1. 定义包含所有可能值的枚举
  2. LangChain4j 在提示词中列出所有枚举值
  3. LLM 选择合适的枚举值
  4. 自动映射回 Java 枚举
Q4:如何处理可选字段? A:方法:
  1. 使用 Optional<String> 类型
  2. 如果 LLM 返回 null 或空字符串,自动包装为 Optional
  3. 使用 orElse() 提供默认值
  4. 使用 orElseThrow() 处理必需字段
Q5:结构化输出会限制 Token 使用量吗? A:影响分析:
  • 结构化输出可能需要更多 Token(因为有类型定义)
  • 但能提高响应质量和准确性
  • 权衡:少量额外 Token 换取更好的开发体验
  • 建议:优化类型定义,使用简洁的类名

参考资料


版权归属于 LangChat Team
官网:https://langchat.cn