news 2026/8/26 18:22:30

Java AI转型实战(七):Output Parser,让AI输出结构化数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java AI转型实战(七):Output Parser,让AI输出结构化数据

从“自然语言”到“结构化数据”,让程序真正读懂AI的回复

01 引子

经过前六篇的实战,我们的AI已经能聊天、能记住上下文、能流式输出、能调用Java方法。但有一个问题始终存在:

AI返回的是自然语言文本,程序无法直接使用。

比如让AI“提取会议信息”,它可能返回:

“明天下午3点有一个项目评审会,在会议室A举行,预计持续1小时。”

这段文字对人类来说很好理解,但对程序来说——怎么提取时间?怎么拿到地点?怎么知道时长?——只能写正则表达式硬解析,脆弱又麻烦。

这一篇的目标:让AI直接返回结构化的JSON数据,程序拿来即用。

02 什么是Output Parser?

一句话概括:Output Parser是Spring AI提供的工具,用于将AI的输出从“自然语言文本”转换为“结构化数据”(如Java对象、Map、List等)。

Parser输出格式适用场景
BeanOutputParser<T>Java对象最常用,直接映射到业务对象
MapOutputParserMap<String, Object>简单场景,不需要预定义类
ListOutputParserList<?>返回列表数据

本篇重点:BeanOutputParser,最常用、功能最强大。

03 原理:AI怎么知道该输出什么格式?

你可能好奇:AI怎么知道要输出JSON?怎么知道该有哪些字段?

关键在于Spring AI 会自动生成 JSON Schema,并附加到请求中

text

用户问题 + JSON Schema(说明输出格式) → 大模型 → 按格式返回JSON → Spring AI 反序列化为Java对象

这个Schema描述了目标类的所有字段、类型和描述,AI根据它来生成符合格式的JSON。

你只需要:

  1. 定义一个Java类

  2. 创建BeanOutputConverter<T>

  3. 调用.entity(converter)

剩下的全部由Spring AI自动完成。

04 代码实现

第一步:定义数据类

com.example.myai.model包下创建MeetingInfo.java

关键要求:必须有无参构造和Getter/Setter,否则JSON无法反序列化为Java对象。

第二步:在Service中使用OutputParser

修改AIService.java,新增extractMeetingInfo方法:

关键点:

  • new BeanOutputConverter<>(MeetingInfo.class):创建转换器,指定目标类型

  • .entity(converter):告诉Spring AI将输出转换为MeetingInfo对象

  • 不要将BeanOutputConverter声明为Spring Bean(踩坑记录会详细说明)

第三步:暴露接口

AIController.java中新增接口:

05 测试验证

启动项目,在浏览器中访问:

更复杂的输入测试:

换个说法再测:

三个不同场景全部成功,AI能准确提取信息并返回结构化JSON。

06 踩坑记录

坑:BeanOutputConverter不能声明为Spring Bean

一开始我这样写:

@Configuration public class OutputParserConfig { @Bean public BeanOutputConverter<MeetingInfo> meetingInfoConverter() { return new BeanOutputConverter<>(MeetingInfo.class); } }

然后在Service中注入:

public AIService(..., BeanOutputConverter<MeetingInfo> meetingInfoConverter) { // ... }

启动报错:

Unable to determine source type <S> and target type <T> for your Converter [org.springframework.ai.converter.BeanOutputConverter]; does the class parameterize those types?

原因:BeanOutputConverter虽然实现了Converter<S, T>接口,但它的泛型参数是在运行时通过构造函数传入的。Spring在启动时扫描所有Converter类型的Bean并注册到ConversionService,由于泛型信息不完整,导致类型推断失败。

解决方法:不在配置类中声明为Bean,而是在Service方法内直接创建:

// ✅ 正确做法 public MeetingInfo extractMeetingInfo(...) { BeanOutputConverter<MeetingInfo> converter = new BeanOutputConverter<>(MeetingInfo.class); return chatClient.prompt() ... .entity(converter); }

这样避免了Spring自动配置机制的干扰。

07 应用场景扩展

场景用户输入OutputParser输出后续用途
会议信息提取"明天下午3点开会"{topic, time, location, duration}自动创建日历事件
订餐系统"我要一份宫保鸡丁,微辣"{dish:"宫保鸡丁", spice:"微辣", quantity:1}生成订单
智能表单用户任意描述需求{title, description, priority, assignee}自动创建工单
数据查询"帮我看看上个月销售额"{total:1280000, month:7, growth:0.12}生成报表

08 下期预告

到此为止,我们已经完成了 Spring AI 的核心功能闭环:

功能状态
首次调用 API
多轮对话
流式输出
Function Calling
Output Parser

接下来,我们将进入企业级AI应用的核心领域——RAG(检索增强生成)。

RAG让AI能够基于你的私有文档(PDF、Word、TXT等)回答问题,解决大模型“知识陈旧”和“幻觉”问题。这也是目前企业AI应用落地最广泛的技术方案。

下一篇,我们开始搭建第一个RAG知识库。


📌 我是超超不吵吵,10年Java全栈,正在转型AI应用开发。
每周一篇实战笔记,不贩卖焦虑,只分享能落地的技术。
全网同名,欢迎关注。

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

c语言续4(比特)

memecpy(void*dest,const void* source,siez_t num);函数memcpy(arr2,arr1,10);从数组arr1拷贝10个字符到arr2空间内。一、为什么使用文件&#xff1f;使数据的持久化。二、什么是文件&#xff1f;磁盘上的文件是文件&#xff1b;程序文件、数据文件。三、程序文件&#xff0c;…

作者头像 李华
网站建设 2026/8/26 18:17:24

企业微信主体变更公证书办理全解析:适用场景、材料规范、踩坑点与Python信息校验脚本

摘要企业微信在企业重组、主体注销、业务划转、集团架构调整场景下&#xff0c;经常需要做跨主体变更认证。当新旧主体统一社会信用代码不一致时&#xff0c;平台要求提供《企业微信主体变更认证申请函》配套公证书&#xff0c;否则无法完成账号权属变更。很多运维人员实操中遇…

作者头像 李华
网站建设 2026/8/26 18:13:47

【GitHub 备份操作手册】备份不再出错

GitHub 备份操作手册&#xff08;从零到进阶&#xff09; 适用于 ROS / ROS2 / 各类工程项目的代码备份。 文中 <你的GitHub用户名>、<你的仓库名>、<你的项目目录> 均为占位符&#xff0c;使用时替换成自己的信息。 文章目录GitHub 备份操作手册&#xff08…

作者头像 李华
网站建设 2026/8/26 18:09:53

MoneyPrinterTurbo 视频生成效果实测与能力边界深度解析

随着AIGC技术的飞速发展&#xff0c;自动化视频生成工具逐渐成为内容创作者的“效率外挂”。本文将对近期备受关注的 MoneyPrinterTurbo​ 项目进行全方位的实测与评测。我们将从核心架构、多风格文案转视频、AI配音、素材匹配、画质输出、典型场景案例以及系统性能等多个维度展…

作者头像 李华
网站建设 2026/8/26 18:08:24

解读《人工智能生成合成内容标识办法》

大家好&#xff0c;首先做一个简单的自我介绍&#xff0c;本人目前从事数据安全行业&#xff0c;之前有过网络安全、等级保护的工作经历。现在个人的目标是成为一名数据安全合规方向的资深人士。我会不定期解读输出一些数据安全、个人信息保护、生成式AI类标准文件的解读文章。…

作者头像 李华
网站建设 2026/8/26 18:08:19

Kappa一致性结果解读:观察一致性与期望一致性的比较

Kappa一致性检验结果解读Kappa一致性检验是用于衡量两种评价方法或两位评价者对同一对象评价一致性程度的统计方法。Kappa系数考虑了随机因素造成的一致性&#xff0c;能够更客观地反映实际一致性水平。本研究使用SPSSAU软件&#xff0c;对医生A与医生B的诊断判定结果进行Kappa…

作者头像 李华