Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章,主要介绍了生成文本内容,以及读取图片中内容两个能力。

之所以介绍这两个能力,是因为 大模型目前最适合做的事情有两个:

1) 非结构化数据的结构化(图片转文字,转excel)

2) 基于结构化数据做文字和图片的输出

这两个能力可以有效的提高应用与用户的交互效率。

目录

Java接入大模型

[Spring AI:统一接口的Java大模型应用框架](#Spring AI:统一接口的Java大模型应用框架)

[Spring AI Alibaba概览](#Spring AI Alibaba概览)

[通义千问Qwen简介:阿里巴巴云开发的先进语言模型,在MMLU、TheoremQA和GPQA等多项权威评测中超越Llama 3 70B,位居Hugging Face开源大模型排行榜榜首,展现出色性能与广泛应用前景。](#通义千问Qwen简介:阿里巴巴云开发的先进语言模型,在MMLU、TheoremQA和GPQA等多项权威评测中超越Llama 3 70B,位居Hugging Face开源大模型排行榜榜首,展现出色性能与广泛应用前景。)

[SpringBoot集成Spring AI Alibaba实现对话模型](#SpringBoot集成Spring AI Alibaba实现对话模型)

环境要求

[申请API Key](#申请API Key)

配置环境变量与项目属性

添加仓库和依赖

创建Controller类

[使用Spring AI Alibaba实现图像识别的详尽示例](#使用Spring AI Alibaba实现图像识别的详尽示例)

[1. 前置准备](#1. 前置准备)

[2. 申请开通资源](#2. 申请开通资源)

[3. 配置百炼 API KEY](#3. 配置百炼 API KEY)

[4. 开通通义万象图像生成模型](#4. 开通通义万象图像生成模型)

[5. 添加Spring仓库和依赖](#5. 添加Spring仓库和依赖)

[6. 构建读图代码](#6. 构建读图代码)

[7. 运行项目](#7. 运行项目)

Spring AI 介绍:

当前在Java中调用大模型时,往往缺乏一个成熟且易于使用的AI应用框架。为了解决这个问题,Spring作为老牌的Java应用框架厂商,推出了Spring AI。它借鉴了langchain的一些核心设计理念,并结合了Java面向对象编程的优势,旨在提供一种更高效、灵活的方式来与各种大模型进行交互。Spring AI的核心优势在于其统一了不同AI服务提供商(如OpenAI、阿里云等)的接口实现,使得开发者只需编写一次代码,通过简单的配置更改即可轻松切换至不同的AI实现,极大地提升了开发效率和可维护性。此外,该框架还有专门的团队负责维护和更新。本次示例将以Spring AI Alibaba接入通义大模型为例,展示如何利用这一强大工具来快速构建基于Java的大模型应用;当然,在熟悉整个过程后,开发者也可以根据自身需求,方便地替换为自己所需的其他大模型支持。

Spring AI Alibaba简介:

Spring AI Alibaba是Spring AI针对阿里云生态的实现,它继承了Spring生态系统的设计原则如可移植性和模块化设计,并专注于将这些原则应用于AI领域。作为国内最好的Spring AI实现之一,Spring AI Alibaba整合了阿里巴巴的最佳实践,提供了与Spring Cloud Alibaba相似的集成度和易用性。通过Spring AI Alibaba,开发者能够轻松地在应用程序中接入各种AI能力,包括但不限于模型调用、Prompt模板、RAG(检索增强生成)、文生图以及文字识别等。本文将以Prompt模板和模型调用为例,展示如何利用Spring AI Alibaba来丰富您的项目功能。

通义千问Qwen简介:

通义千问Qwen是阿里巴巴云推出的一种先进的语言模型,在多个权威基准测评中表现出色。它在MMLU、TheoremQA和GPQA等评测指标上超越了Llama 3 70B,并在Hugging Face的开源大模型排行榜Open LLM Leaderboard上位居第一,展示了其卓越的性能和广泛的应用潜力。

另外,在真人参与评测的arena里面,它不仅在思南平台 上仅次于国际知名的GPT和Claude系列,还在 Hugging Face的视觉模型竞技场 中稳居中国首位。

SpringBoot集成Spring AI Alibaba实现对话模型

为了基于Spring Boot集成Spring AI Alibaba,并完成一个简单的对话模型,构建支持prompt的流返回接口的项目,你需要按照以下步骤进行操作。根据提供的我了解的信息,以下是详细的执行步骤:

环境要求

  • JDK版本需要在17(含)以上。
  • Spring Boot版本需在3.3.x以上。

申请API Key

首先,前往阿里云百炼页面开通"百炼大模型推理"服务,并创建一个新的API Key。请记录下这个Key,之后将它配置到你的项目中。

配置环境变量与项目属性

设置环境变量以存储您的API Key:

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

并在application.properties文件中加入API Key配置:

spring.ai.dashscope.api-key: ${AI_DASHSCOPE_API_KEY}

添加仓库和依赖

由于Spring AI Alibaba相关的库还未提交到Maven中央仓库,您需要添加Spring自有的仓库及快照仓库到您的pom.xml文件里:

<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部分添加对spring-ai-alibaba-starter的依赖:

<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>

    <artifactId>spring-ai-alibaba-starter</artifactId>

    <version>1.0.0-M2</version>

</dependency>

创建Controller类

定义一个Controller类来处理GET请求,该请求将接收用户输入并通过ChatClient调用通义千问模型,最后返回Flux形式的结果。记得启用跨域资源共享(CORS)以允许来自不同源的请求。

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*") // 允许所有来源的CORS
public class ChatController {

    private final ChatClient chatClient;
    
    @Value("classpath:correct-and-expand.st")
    Resource resource;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping("/steamChat")
    public Flux<String> steamChat(@RequestParam String input) {
        PromptTemplate promptTemplate = new PromptTemplate(resource);
        Prompt prompt = promptTemplate.create(Map.of("input", input));
        
        return chatClient.prompt(prompt)
                .stream()
                .content();
    }
}

这段代码首先注入了ChatClient实例,然后通过构造函数接受一个Prompt模板路径用于动态生成提示内容。当访问/ai/steamChat?input=...时,会根据传入参数调用AI模型并以流的形式返回结果。

确保已经正确设置了项目的入口点以及相关配置后,启动应用程序。现在,你应该能够通过指定的URL向聊天机器人发送消息,并获得相应的回复了。

此解决方案充分利用了Spring AI Alibaba提供的功能,包括但不限于使用ChatClient进行文本生成、应用Prompt模板定制化输入以及利用Stream API实现异步响应。

使用Spring AI Alibaba实现图像识别的详尽示例

1. 前置准备

在开始之前,请确保满足以下条件:

  • JDK版本为JDK 17或更高。
  • Spring Boot版本为3.3.x或更高。

2. 申请开通资源

  1. 访问阿里云百炼页面并登录您的阿里云账号。
  1. 选择开通"百炼大模型推理"服务,并等待开通成功的短信通知。
  1. 开通成功后,再次登录阿里云百炼页面,点击右上角的小人图标,选择API-KEY选项,然后点击【创建新的API-KEY】生成一个API-KEY。请记录这个key,后续需要配置使用。

3. 配置百炼 API KEY

在终端中运行以下命令来配置百炼 API KEY:

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

${REPLACE-WITH-VALID-API-KEY}替换为您实际的API-KEY值。

4. 开通通义万象图像生成模型

  1. 打开百炼控制台
  1. 在左侧列表栏中选择模型广场,找到图像生成模块下的通义万象模型。
  1. 点击通义万象模型对应的"API调用"按钮。
  1. 在打开的页面左上角,找到模型英文名(qwen-vl-max-latest),这是后面配置时需要指定的模型名称。

5. 添加Spring仓库和依赖

首先,在项目的pom.xml文件中添加Spring自己的仓库以及snapshot仓库,如下所示:

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

接着,在pom.xml文件中添加spring-ai-alibaba-starter依赖项以及Spring Boot的父依赖项:

<parent>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>3.3.4</version>

    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
      <groupId>com.alibaba.cloud.ai</groupId>

      <artifactId>spring-ai-alibaba-starter</artifactId>

      <version>1.0.0-M3.1</version>

    </dependency>

    ...other dependencies...
</dependencies>

6. 构建读图代码

创建一个新的Controller类ChatModelController,并在其中注入ChatClient实例。同时设置默认Prompt为"识别图中的文字",默认模型为"qwen-vl-max-latest"。

@RestController
@RequestMapping("/ai")
public class ChatModelController {

    private static final Logger logger = LoggerFactory.getLogger(ChatModelController.class);

    @Value("classpath:qrcode.png")
    private Resource imageResource;

    private final ChatModel chatModel;

    public ChatModelController(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    private static final String DEFAULT_PROMPT = "识别图中的文字";

    private static final String DEFAULT_MODEL = "qwen-vl-max-latest";

    @GetMapping("/imageRecognition")
    public Flux<String> imageRecognition(
            @RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,
            HttpServletResponse response)
            throws Exception {
        response.setCharacterEncoding("UTF-8");

        List<Media> mediaList = List.of(
                new Media(
                        MimeTypeUtils.IMAGE_PNG,
                        imageResource));
        UserMessage message = new UserMessage(prompt, mediaList);
        message.getMetadata().put(DashScopeChatModel.MESSAGE_FORMAT, MessageFormat.IMAGE);

        Flux<ChatResponse> fluxResponse = chatModel.stream(
                new Prompt(
                        message,
                        DashScopeChatOptions.builder()
                                .withModel(DEFAULT_MODEL)
                                .withMultiModel(true)
                                .build()));
        Flux<String> fluxString = fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
        return fluxString;
    }
}

确保将二维码图片命名为qrcode.png,并将其放置在src/main/resources/目录下。

7. 运行项目

完成上述步骤后,您可以启动项目并访问http://localhost:8080/ai/imageRecognition来让模型识别本地二维码图片,并以流式返回结果。

通过以上详细步骤,您就可以基于Spring AI Alibaba实现二维码图像识别功能了。

相关推荐
极客代码5 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
zhangfeng11335 分钟前
pytorch 的交叉熵函数,多分类,二分类
人工智能·pytorch·分类
Seeklike6 分钟前
11.22 深度学习-pytorch自动微分
人工智能·pytorch·深度学习
庞传奇7 分钟前
TensorFlow 的基本概念和使用场景
人工智能·python·tensorflow
苏-言11 分钟前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
华清远见IT开放实验室14 分钟前
【每天学点AI】实战图像增强技术在人工智能图像处理中的应用
图像处理·人工智能·python·opencv·计算机视觉
OpenVINO 中文社区23 分钟前
实战精选|如何使用 OpenVINO™ 在 ElectronJS 中创建桌面应用程序
人工智能·openvino
只怕自己不够好28 分钟前
《OpenCV 图像缩放、翻转与变换全攻略:从基础操作到高级应用实战》
人工智能·opencv·计算机视觉
草莓base31 分钟前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring
网络研究院34 分钟前
国土安全部发布关键基础设施安全人工智能框架
人工智能·安全·框架·关键基础设施