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

news/2024/11/5 22:47:04 标签: easyui, 前端, javascript

目录

​编辑

将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;

    @Autowired
    public 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.niftyadmin.cn/n/5739917.html

相关文章

deepfm模型实现招聘职位推荐算法

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

git查看历史提交中文件的变化

在版本控制系统中&#xff0c;Git以其强大的日志和差异分析功能而闻名。这些功能帮助开发者追踪文件的变更历史和理解代码的演进。本文将深入探讨四个Git命令&#xff1a;git log --name-only、git log --name-status和git diff-tree --no-commit-id --name-status -r、git sho…

深度学习之数据增强

1 深度学习中常用的数据增强方法&#xff1f; Color Jittering&#xff1a;对颜色的数据增强&#xff1a;图像亮度、饱和度、对比度变化&#xff08;此处对色彩抖动的理解不知是否得当&#xff09;&#xff1b; PCA Jittering&#xff1a;首先按照RGB三个颜色通道计算均值和标…

【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

如何取消Outlook中的循环会议

如何取消Outlook中的循环会议 参考链接&#xff1a;https://iknow.lenovo.com.cn/detail/195430 1、打开Outlook&#xff0c;进入 日历 视图界面&#xff1b; 2、 选择并双击要取消的循环会议&#xff1b; 3、 在 打开定期项目 对话框中选择整个序列&#xff0c;然后单击 确…

电机轴设计的技术参数研究

电机轴作为电机的关键组件之一&#xff0c;其设计不仅关系到电机的性能和效率&#xff0c;还直接影响到整个机械系统的可靠性与使用寿命。电机轴的设计涉及众多技术参数&#xff0c;这些参数通常包括但不限于尺寸参数、材料选择、强度分析、转动平衡、轴承选择以及制造公差等。…

好用的办公套件--- ONLYOFFICE

目录 引言 UI界面 ONLYOFFICE 协作空间 使用协作空间三步走 一、注册与登录 二、创建房间 三、上传与编辑文档 ONLYOFFICE协作空间的安全性 ONLYOFFICE 文档 关于 ONLYOFFICE 引言 ONLYOFFICE 桌面编辑器 ONLYOFFICE是一款功能全面的办公套件&#xff0c;支持文档、表…

新闻稿件管理:SpringBoot框架创新实践

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了新闻稿件管理系统的开发全过程。通过分析新闻稿件管理系统管理的不足&#xff0c;创建了一个计算机管理新闻稿件管理系统的方案。文章介绍了新闻稿件管理系统的系…