spring ai 入门 之 结构化输出 - 把大模型llm返回的内容转换成java bean

目录

​编辑

将AI非结构化文本转换为特定格式数据的应用场景说明

Spring AI 介绍 :为Java开发者打造的AI应用开发框架

Qwen 介绍 : 一个国内领先的开源大模型

Spring AI Alibaba框架介绍 : 一个国内最好的spring ai实现

使用spring ai alibaba实现非结构化数据到Java Bean的转换

1. 环境准备

2. 获取API Key

3. 配置API Key

4. 添加仓库与依赖

5. 创建实体类

6. 控制器逻辑实现


将AI非结构化文本转换为特定格式数据的应用场景说明

结构化输出主要应用于需要将AI生成的非结构化文本转换为特定格式数据的场景,比如将自然语言描述的信息转化为Java对象。这解决了从大模型获取信息后难以直接与现有系统或数据库对接的问题,通过预定义的数据结构(如Java Bean)来接收和处理AI输出的内容,极大简化了数据处理流程,提升了应用开发效率。


本文采用spring ai alibaba 调用通义qwen来实现。 qwen有100万免费Token额度,可以快速实现,同时,因为qwen 也是个开源的模型,我们可以自己搭建模型来实现免费使用

Spring AI 介绍 :为Java开发者打造的AI应用开发框架

在过去,Java 缺乏一个统一且高效的 AI 应用框架,这导致开发者在集成和使用各种 AI 组件时面临诸多挑战。为了解决这个问题,Spring 团队推出了 Spring AI,这是一个专为 Java 开发者设计的、用于构建 AI 应用程序的强大框架。Spring AI 的核心优势在于它提供了一套统一的接口来调用不同的 AI 服务(如车牌号识别等),极大地简化了开发流程。此外,Spring AI 与现有的 Spring 生态系统无缝兼容,并且完全支持 Java 的面向对象编程模式,使得开发者能够更加自然地将 AI 功能融入到他们的应用中。通过这些特点,Spring AI 不仅提升了开发效率,还确保了代码的可维护性和扩展性。

Qwen 介绍 : 一个国内领先的开源大模型

通义千问Qwen是阿里巴巴云推出的一种先进的语言模型,在多个权威基准测评中表现出色。它在MMLU、TheoremQA和GPQA等评测指标上超越了Llama 3 70B,并在Hugging Face的开源大模型排行榜Open LLM Leaderboard上位居第一,展示了其卓越的性能和广泛的应用潜力。这一成就不仅体现了阿里云在人工智能领域的深厚积累和技术实力,也标志着中国在AI技术研发方面达到了新的高度。Qwen能够支持多种自然语言处理任务,包括但不限于文本生成、问答系统、对话交互等,为用户提供高质量的服务体验。


大家也可以参与和支持这些竞技活动,亲自体验并投票支持你心目中的最佳模型。它在思南评测平台 CompassArena 上表现优异,仅次于国际知名的GPT和Claude模型;
同时,在国外大模型竞技场 https://huggingface.co/spaces/lmarena-ai/chatbot-arena-leaderboard 中在中文处理中属于第一梯队。

Spring AI Alibaba框架介绍 : 一个国内最好的spring ai实现

Spring AI Alibaba是一个专为Spring生态系统设计的AI应用框架,特别针对阿里云的通义大模型系列进行了优化。它支持多种生成式AI任务,包括对话、文生图、文生语音等。Spring AI Alibaba通过提供一套标准化API和实用工具(如Prompt Template、OutputParser),极大地简化了开发者集成国产大模型的过程。其核心优势在于能够无缝对接阿里云的各种AI服务,只需简单的配置更改即可切换不同的AI实现,同时保持代码的一致性和可维护性。这使得基于Spring Boot的应用可以快速获得强大的AI能力,而无需深入理解复杂的底层技术细节。

使用spring ai alibaba实现非结构化数据到Java Bean的转换

基于 spring ai alibaba 实现结构化输出为一个 Java Bean,主要是利用大模型的标准化能力来将非结构化的数据转换成结构化的格式,并进一步映射到Java对象上。这一过程有助于提高信息处理效率和准确性。下面是具体的操作步骤:

1. 环境准备

首先,确保你的开发环境满足以下要求:

  • JDK版本:至少为JDK 17。
  • Spring Boot版本:使用3.3.x系列中的最新稳定版或更高版本。

2. 获取API Key

访问阿里云百炼页面,登录您的阿里云账号并开通“百炼大模型推理”服务。按照指引完成服务开通后,进入个人中心创建一个新的API KEY,并妥善保存此密钥以供后续配置使用。

3. 配置API Key

在终端或命令行工具中设置环境变量,将您刚才记录下来的API Key值赋给AI_DASHSCOPE_API_KEY

export AI_DASHSCOPE_API_KEY=这里替换为您实际的API密钥

4. 添加仓库与依赖

为了支持最新的Spring AI Alibaba特性,在项目的pom.xml文件中添加必要的Maven仓库及依赖项:

<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M3.1</version></dependency><!-- 其他依赖 -->
</dependencies>

同时,请确认项目已经指定了Spring Boot的父级POM:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository -->
</parent>

5. 创建实体类

定义一个简单的Java Bean用来存储解析后的数据。例如,用于表示演员及其出演电影列表的实体类如下所示:

package com.example.demo.entity;import java.util.List;public class ActorsFilms {private String actor;private List<String> movies;// Getters and Setters
}

6. 控制器逻辑实现

接下来,在控制器中注入ChatClient,并通过它向大模型发起请求。根据返回的数据流构建对应的ActorsFilms对象列表:

import com.example.demo.entity.ActorsFilms;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.converter.BeanOutputConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.Objects;@RestController
@RequestMapping("/api")
public class OutputParserController {private final ChatClient chatClient;@Autowiredpublic OutputParserController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/output")public List<ActorsFilms> generateStructuredOutput(@RequestParam(value = "actor", defaultValue = "Tom Hanks") String actor) {var converter = new BeanOutputConverter<>(new ParameterizedTypeReference<List<ActorsFilms>>() {});Flux<String> flux = chatClient.prompt().user(u -> u.text("""Generate the filmography for a given actor.{format}""").param("format", converter.getFormat())).stream().content();return converter.convert(String.join("", Objects.requireNonNull(flux.collectList().block())));}
}

通过上述步骤,我们完成了基于spring ai alibaba技术栈对指定演员的电影作品进行查询,并将其结果封装为一个ActorsFilms类型的Java Bean实例集合的过程。这里的关键在于正确地设置好所有必需的库依赖、环境变量以及合理地运用ChatClient提供的功能来调用外部API并将响应数据转化为我们所需要的格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2027.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析:物联网技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 深入解析&#xff1a;物联网技术及其应用 深入解析&#xff1a;物联网技术及其应用 深入解析&#xff1a;物联网技术及其应用 物…

.net core 接口,动态接收各类型请求的参数

[HttpPost] public async Task<IActionResult> testpost([FromForm] object info) { //Postman工具测试结果&#xff1a; //FromBody,Postman的body只有rawjson时才进的来 //参数为空时&#xff0c;Body(form-data、x-www-form-urlencoded)解析到的数据也有所…

Python装饰器执行的顺序你知道吗

1. 引言 前面的文章中&#xff0c;讲到了 Python 装饰器的基础使用方式&#xff0c;在实际使用中&#xff0c;可能会遇到一个函数使用多个装饰器的情况&#xff0c;这个时候装饰器的顺序同样至关重要。本文将讨论装饰器的顺序如何影响函数的行为&#xff0c;并通过几个例子来说…

嵌入式操作系统FreeRTOS文件详解

系列文章目录 嵌入式操作系统FreeRTOS文件详解 嵌入式操作系统FreeRTOS文件详解 系列文章目录FreeRTOS下载 FreeRTOS下载 官网下载解压后得到的文件&#xff0c;如下图所示&#xff1a; 打开图 1.3.1.2 中的 FreeRTOS 子文件夹&#xff0c;就能够看到 FreeRTOS 内核的文件&…

使用Jupyter Notebook进行数据科学项目

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Jupyter Notebook进行数据科学项目 Jupyter Notebook 简介 安装 Jupyter Notebook 创建和管理 Notebook 编写和运行代码 示例…

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

01 平台介绍 数据服务平台可以在保证服务高可靠性和高安全性的同时&#xff0c;为各业务线搭建数据服务统一出口&#xff0c;促进数据共享&#xff0c;为数据和应用之间建立了一座“沟通桥梁”。 同时&#xff0c;解决数据理解困难、异构、重复建设、审计运维困难等问题&#x…

C#进阶1

C#进阶1 本文章主要介绍C#的进阶知识&#xff0c;如反射&#xff0c;特性.... 参考视频链接 原码 文章目录 C#进阶1反射步骤泛型反射调用方法 获取属性 特性特性的定义步骤扩展枚举练习 反射 在 C# 中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&a…

【深度学习】合合信息:生成式AI时代的内容安全与系统构建

生成式AI时代的内容安全与系统构建 一、生成式 AI 的发展现状二、图像内容安全问题2.1、举几个伪造数字内容的例子2.1.1、谣言检测2.1.2、欺诈图像识别2.1.3、伪造信息 2.2、伪造文档/证照检测应用场景2.2.1、目前图像篡改主要涉及以下几个场景 2.3、合合信息伪造文档/证照检测…

软件系统安全保证措施,质量保证措施方案(Word原件套用)

系统安全保证措施是构建稳固防御体系的核心&#xff0c;旨在全方位保障信息系统的安全性。以下是对这七项措施的简要概述&#xff1a; 一、身份鉴别&#xff1a;采用多种认证方式&#xff0c;如密码、生物识别等&#xff0c;确保用户身份的准确无误&#xff0c;防止非法入侵。 …

gozero--环境安装和api语法

文章目录 前言环境安装安装go ctl安装protoc安装go-zero安装etcd配置环境变量安装插件 二、api语法说明syntaxtypeserverservicedoc命令转换 前言 go-zero是go语言的微服务框架&#xff0c;微服务内容很多&#xff0c;我希望我这一篇可以绘制出完整的地图&#xff0c;帮助需要…

vue中el-table显示文本过长提示

1.el-table设置轻提示:show-overflow-tooltip“true“&#xff0c;改变轻提示宽度

在VS中安装chatGPT

2、在VSCode中打开插件窗口 3、输入ChatGPT 4、这里有个ChatGPT中文版&#xff0c;就它了 5、安装 6、这时候侧边栏多了一个chatGPT分页图标&#xff0c;点击它 7、打个招呼 8、好像不行 9、看一下细节描述 10、根据要求按下按下快捷键 Ctrl Shift P 11、切换成国内模式 12、…

sublime可以写python吗

首先你需要安装一个Sublime Text&#xff08;http://www.sublimetext.com/&#xff09;和一个Python&#xff08;https://www.python.org/downloads/&#xff09;&#xff0c; 接下来打开Sublime Text&#xff1a; 1、如下图所示&#xff0c;点击菜单栏中的Tools —> Buil…

初始Docker

概述&#xff1a; 容器&#xff0c;作为云原生技术的重要组成部分&#xff0c;与虚拟机一样&#xff0c;均属于虚拟化技术的范畴。然而&#xff0c;容器技术以其独特的优势&#xff0c;在虚拟化领域中脱颖而出。与虚拟机不同&#xff0c;容器能够摆脱操作系统的束缚&#xff0…

MATLAB函数,用于计算平均误差、误差最大值、标准差、均方误差、均方根误差

文章目录 源代码使用示例:计算公式1. 平均误差 (Mean Error, ME)2. 误差最大值 (Maximum Error, ME)3. 标准差 (Standard Deviation, SD)4. 均方误差 (Mean Squared Error, MSE)5. 均方根误差 (Root Mean Squared Error, RMSE) 总结 以下是一个MATLAB函数&#xff0c;用于计算常…

Axure设计之左右滚动组件教程(动态面板)

很多项目产品设计经常会遇到左右滚动的导航、图片展示、内容区域等&#xff0c;接下来我们用Axure来实现一下左右滚动的菜单导航。通过案例我们可以举一反三进行其他方式的滚动组件设计&#xff0c;如常见的上下滚动、翻页滚动等等。 一、效果展示&#xff1a; 1、点击“向左箭…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享19

7.1 系统集成基础&#xff08;掌握&#xff09; 系统集成一般可以分为软件集成、硬件集成、网络集成、数据集成和业务应用集成等。 1、系统集成概念理解 软硬件系统集成是一种系统的思想和方法&#xff0c;它虽然涉及软件和硬件等技术问题&#xff0c;但绝不仅仅是技术问题 软硬…

数据库Redis篇

系列文章目录 第一章 C/C语言篇第二章 计算机网络篇第三章 操作系统篇第四章 数据库MySQL篇第五章 数据库Redis篇第六章 场景题/算法题第七篇 常见HR问题篇 本系列专栏&#xff1a;点击进入 后端开发面经 关注走一波 秋招阶段&#xff0c;面过很多大中小厂&#xff0c;积攒了…

SpringAOP技术

目录 一、概念引入 1.引入依赖 2.工具类 3.实体类 4.持久层实现类 5.业务层实现类 6.配置文件 7.测试类 8.运行 查看数据库&#xff1a; 9.现在如果转账过程中出现异常 AccountServiceImpl(模拟异常) 再运行&#xff1a; 查看数据库&#xff1a; 10.现在做事务…

从富文本窥探苹果的代码秘密

从富文本窥探苹果的代码秘密 背景 在我们的业务场景下&#xff0c;为突出诸如 “利益点”和“利率” 等特性以推动订单成交&#xff0c;引入了 “富文本” 这一概念。富文本具备丰富格式的文本展示与编辑功能。然而&#xff0c;恰是由于富文本具有 “多样式”“复杂排版” 等特…