当前位置: 首页 > news >正文

Spring AI 从入门到精通-结构化输出

6. 结构化输出:让 AI 交作业,不是写散文

6.1 问题:AI 输出的是文本,但你要的是对象

AI 默认返回的是自然语言文本。但你的程序需要的是结构化的 Java 对象。怎么办?

// 你想要的是这个recordPerson(Stringname,intage,Stringcity){}// 但 AI 给你的是这个"张三,今年 25 岁,住在北京。他的朋友李四..."

6.2 BeanOutputConverter:文本 → Java Bean

// 1. 定义目标类型recordPerson(Stringname,intage,Stringcity){}// 2. 用 ChatClient 的 entity() 方法Personperson=chatClient.prompt().user("生成一个随机的人物信息").call().entity(Person.class);System.out.println(person.name());// 张三System.out.println(person.age());// 28System.out.println(person.city());// 上海

发生了什么?Spring AI 在后台做了两件事:

  1. 根据Person类生成 JSON Schema,追加到 Prompt 后面作为格式指令
  2. 拿到 AI 返回的 JSON 后,用 Jackson 反序列化成Person对象

6.3 泛型类型:返回 List

// 返回 List<Person>List<Person>people=chatClient.prompt().user("生成 5 个随机的人物信息").call().entity(newParameterizedTypeReference<List<Person>>(){});people.forEach(p->System.out.println(p.name()+", "+p.age()));

💡ParameterizedTypeReference是什么?因为 Java 在运行时会擦除泛型类型(List<Person>在运行时只是List),Spring AI 需要通过这个匿名内部类的方式拿到实际的泛型参数类型。记住这个写法模板就行,每次需要返回泛型集合时照抄。

6.4 MapOutputConverter:返回 Map

Map<String,Object>result=chatClient.prompt().user(u->u.text("列出 {subject} 的 {count} 个属性,用 JSON 格式").param("subject","一个 Java 开发者的简历").param("count",5)).call().entity(newParameterizedTypeReference<Map<String,Object>>(){});System.out.println(result);// {name=张三, experience=5年, skills=[Java, Spring, MySQL, Redis], ...}

6.5 ListOutputConverter:返回列表

List<String>flavors=chatClient.prompt().user(u->u.text("列出 {count} 种 {subject}").param("count",10).param("subject","冰淇淋口味")).call().entity(newListOutputConverter(newDefaultConversionService()));flavors.forEach(System.out::println);// 巧克力// 香草// 草莓// ...

6.6 Native Structured Output:更可靠的结构化

一些模型(GPT-4o、Claude 3.5 等)原生支持结构化输出。Spring AI 用 Advisor 参数来启用:

Personperson=chatClient.prompt().advisors(AdvisorParams.ENABLE_NATIVE_STRUCTURED_OUTPUT).user("生成一个随机的人物信息").call().entity(Person.class);

区别:普通模式是在 Prompt 里加"请输出 JSON",AI 可能不听话。Native 模式是把 JSON Schema 传给模型的原生 API,模型保证输出符合 Schema。

全局启用:

@BeanChatClientchatClient(ChatClient.Builderbuilder){returnbuilder.defaultAdvisors(AdvisorParams.ENABLE_NATIVE_STRUCTURED_OUTPUT).build();}

6.7 底层用法:手动使用 BeanOutputConverter

有时候你需要手动控制转换过程:

BeanOutputConverter<Person>converter=newBeanOutputConverter<>(Person.class);Stringformat=converter.getFormat();// 拿到格式指令StringuserTemplate=""" 生成一个随机人物信息。 {format} """;Promptprompt=newPrompt(PromptTemplate.builder().template(userTemplate).variables(Map.of("format",format)).build().createMessage());Generationgeneration=chatModel.call(prompt).getResult();Personperson=converter.convert(generation.getOutput().getText());

💡什么时候用底层?当你需要自定义 Prompt 模板结构,不想用 ChatClient 的自动拼接时。


http://www.gsyq.cn/news/1483125.html

相关文章:

  • 2026年网架厂家推荐榜单:体育馆网架、煤棚网架、大跨度网架与螺栓球网架标杆品牌深度解析 - 品牌发掘
  • CAP定理(又称布鲁尔定理)指出:在分布式系统中,**一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)**
  • 手把手教你用Overleaf搞定IEEE会议论文(附CAC投稿避坑指南)
  • 水泵隔音降噪技术全解析:新能源噪音治理、新能源隔音降噪、机房噪音治理、水泵房噪音治理、车间噪音治理、车间隔音降噪选择指南 - 优质品牌商家
  • 德国酷贝漆靠谱吗? - myqiye
  • 工业用吸尘器厂家佛山排行榜2026:史沃斯稳居第一 - 工业清洁测评社
  • 关于下载pip install faiss-cpu失败的问题
  • 企业品牌声誉管理靠谱之选(2026年6月):AI舆情监测/危机处置/声誉修复三大技术流派全攻略 - 玖叁鹿
  • 5个突破性功能:重新定义英雄联盟游戏体验的一站式解决方案
  • 动平衡机靠谱品牌,中联试验机的口碑怎样 - mypinpai
  • 手绘字画和印刷字画怎么分?一招不再买错 - 深鉴新闻
  • 2026年薄型气凝胶价格,哪家更实惠 - mypinpai
  • 为什么Flameshot成为开发者最爱的开源截图工具?探索其技术架构与高效工作流
  • 语音钓鱼引发的数据泄露事件溯源与全域防御研究
  • 基于 Harmony 6.0 应用的孕期管理助手实现
  • 采光板推荐哪家,质量控制严格且口碑好? - mypinpai
  • 2026年Q2成都高新区代理记账公司选型技术指南:成都武侯区营业执照代办公司推荐、成都营业执照代办公司推荐、成都金牛区工商代办公司注册推荐选择指南 - 优质品牌商家
  • 2026年Q2成都靠谱卫浴玻璃厂家综合实力排行:成都防火玻璃厂家、成都中空玻璃厂家、成都亮彩玻璃厂家、成都单向玻璃选择指南 - 优质品牌商家
  • JoyCon-Driver:Windows平台上的Switch控制器终极驱动解决方案
  • 今日开源[第9期]graphify - zhang
  • 工程师视角下的《海奥华预言》:从系统思维看文明迭代与精神进化
  • 饲料粉碎机设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 江阴高端腕表回收技术拆解与正规渠道指南:江阴高端礼品回收/江阴黄金回收/江阴黄金等贵金属回收/江阴K金回收/江阴名表回收/选择指南 - 优质品牌商家
  • 3步掌握OBS多平台推流:免费插件让直播效率提升300%
  • 如何将B站缓存视频变成你的永久数字收藏
  • 牛客周赛Round147总结
  • 2026年6月市面上企业变更公司排行推荐榜,企业变更代理、工商变更代办、公司变更全套服务公司选择指南 - 海棠依旧大
  • 2026年6月市面上进口发电机回收厂家哪家好推荐榜,柴油型、静音型、移动应急型公司选择指南 - 海棠依旧大
  • WorkshopDL:非Steam玩家的创意工坊下载解决方案
  • 2026 机器人咖啡选型指南:按需求匹配,找到最适合你的品牌 - 中媒介