AI时代,Java做人工智能应用正当时

经常有人问,人工智能都是python写的,那Java在人工智能的时代是不是就落伍了? 绝对不是!

人工智能主要分为两个部分:一个是进行底层大语言模型的训练,另一个是基于这些大模型构建业务应用。

Java在第二个方面表现得尤为出色,即基于大模型开发业务应用。

由于过去大量的企业级应用程序都是使用Java编写的,因此利用Java来集成人工智能能力变得非常自然且高效,可以在现有架构上轻松叠加新的智能特性。

具体来说,Java在人工智能领域的应用广泛而多样。

例如,在聊天机器人场景中,通过Spring AI 框架,开发者能够迅速接入阿里云的通义千问等大模型,并提供强大的对话交互功能;

在图片生成领域,同样借助Spring AI 提供的接口,可以实现基于文本描述自动生成图像的能力;

此外,对于图片识别、语音识别以及文档分析等任务,也都有相应的解决方案和技术支持。这些都使得传统的业务流程或用户体验得到极大提升。


Spring AI介绍

Spring AI是专为AI工程打造的应用框架,它秉承了Spring生态系统的可移植性和模块化设计理念,特别适合使用POJOs构建应用程序。其核心优势在于提供了一套统一的接口标准,能够兼容不同的AI服务提供商(如OpenAI、Azure和阿里云等),使得开发者只需编写一次代码,通过简单的配置调整就能切换到不同的AI实现上,极大地简化了开发流程并减少了迁移成本。此外,Spring AI与现有的Java面向对象编程模式无缝对接,确保了在引入先进AI功能的同时,保持了传统Spring项目一贯的易用性和高效性。通过这种方式,Spring AI不仅促进了技术栈的一致性,还显著提升了开发效率。


Spring AI alibaba介绍

Spring AI Alibaba是基于Spring AI的实现,专注于接入阿里云的百炼系列大模型服务。它提供了对话、文生图、文生语音等功能,让开发者能够便捷地利用通义等AI能力构建应用。其核心优势在于标准化不同AI提供商的接口,通过简单的配置变更即可切换AI服务提供者。此外,Spring AI Alibaba支持POJO映射和Prompt Template等实用功能,简化了开发流程,降低了跨平台迁移的成本。使用Spring AI Alibaba,您可以快速集成先进的AI特性,而无需深入研究每个AI服务的具体细节。

例子:基于spring ai alibaba 生成做聊天的详细例子

首先需要确保开发环境满足一定的要求,包括JDK版本、Spring Boot版本等。此外,还需要配置与阿里云服务通信所需的API key,并在项目中正确引入相关依赖。最后,通过编写具体的Controller代码以实现在用户输入消息后能够调用AI模型处理请求,并将结果以流的形式返回给客户端。

具体步骤

依据我了解的信息提供的信息,以下是创建一个基于Spring AI Alibaba的聊天API的具体步骤:

  1. 确保开发环境符合要求:
  • JDK版本至少为17。
  • 使用Spring Boot 3.3.x或更高版本。
  1. 获取API Key:
  • 登录阿里云百炼页面
  • 开通“百炼大模型推理”服务。
  • 创建一个新的API Key并妥善保存。
  1. 设置环境变量:
export AI_DASHSCOPE_API_KEY=您的API_KEY
  1. 添加仓库配置到pom.xml:
    由于某些Spring AI Alibaba组件尚未发布到官方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>
  1. 添加必要的依赖到pom.xml:
<dependencies>
    <dependency>
      <groupId>com.alibaba.cloud.ai</groupId>

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

      <version>1.0.0-M2</version>

    </dependency>

    <!-- Spring Boot parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>

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

        <version>3.3.4</version>

        <relativePath/>
    </parent>

</dependencies>
  1. 配置application.properties文件:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
  1. 创建控制器类:
    下面是一个简单的示例控制器,它接受用户的输入并通过ChatClient发送给AI模型,然后将响应以流的形式返回。
@RestController
@RequestMapping("/ai")
public class ChatController {

    private final ChatClient chatClient;

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

    @GetMapping(value = "/chatStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chatSteam(@RequestParam String input) {
        return chatClient.prompt()
            .user(input)
            .stream()
            .content();
    }
}

上述步骤涵盖了从准备环境到最终实现一个可以接收用户输入并通过流式接口返回AI模型响应的完整流程。其中,通过@GetMapping注解定义了一个接受GET请求的方法chatSteam,该方法使用了Spring WebFlux框架提供的Flux类型作为返回值,从而实现了异步非阻塞的数据流传输。这使得应用程序可以在数据准备好时立即开始向客户端发送数据片段,非常适合用于长时间运行的任务如文本生成。

例子:基于spring ai alibaba 生成一个图片的详细例子

分析

根据提供的我了解的信息,我们知道使用Spring AI Alibaba可以调用阿里云通义万象来实现图像生成。具体来说,我们需要完成几个关键步骤:确保环境符合要求、申请并配置API Key、添加必要的依赖库、配置Spring Boot项目以支持AI功能,并编写相应的控制器代码来触发图像生成请求。

详细的可执行步骤

1. 确保开发环境满足要求

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

2. 在阿里云申请通义千问的API Key

  • 访问阿里云百炼页面并登录您的账号。
  • 开通“百炼大模型推理”服务。
  • 创建一个新的API Key,并将其保存好。例如,设置环境变量AI_DASHSCOPE_API_KEY:
export AI_DASHSCOPE_API_KEY=你的实际API Key

3. 配置项目以支持Spring AI Alibaba

  • 添加Spring AI仓库到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>
  • 添加spring-ai-alibaba-starter和Spring Boot parent依赖至pom.xml
<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-M2.1</version>

    </dependency>

    ...其他依赖...
</dependencies>

4. 设置API Key

  • application.properties文件中加入如下行:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

5. 创建控制器类以调用图像生成API

  • 新建一个名为ImageModelController的类,该类将负责接收用户输入并通过调用阿里云接口生成图片。
@RestController
@RequestMapping("/ai")
public class ImageModelController {

    private final ImageModel imageModel;

    public ImageModelController(ImageModel imageModel) {
        this.imageModel = imageModel;
    }

    @GetMapping("/image")
    public String generateImage(@RequestParam("input") String input) {
        ImageOptions options = new ImageOptionsBuilder()
                .withWidth(1024)
                .withHeight(1024)
                .withModel("wanx-v1") // 模型英文名
                .withN(1)
                .build();

        ImagePrompt prompt = new ImagePrompt(input, options);
        ImageResponse response = imageModel.call(prompt);

        List<ImageGeneration> results = response.getResults();
        if (!results.isEmpty()) {
            return results.get(0).getOutput().getUrl();
        } else {
            throw new RuntimeException("No images were generated.");
        }
    }
}

6. 测试应用

  • 启动Spring Boot应用程序。
  • 使用浏览器或Postman等工具访问 http://localhost:8080/ai/image?input=动漫美女 你就能看到类似下面的图片:

Java在人工智能时代能做点什么?_ai