用Java做人工智能_java AI development_API

Spring AI:简化Java大模型应用开发的框架

当前Java调用大模型时缺乏优秀的AI应用框架,导致开发效率低下。Spring作为老牌Java应用框架厂商,推出了Spring AI来解决这个问题。它借鉴了LangChain的核心理念,并结合了Java面向对象编程的特性,为开发者提供了一套标准化接口,使得一次编写代码后可以通过更改配置轻松切换不同的AI实现(如OpenAI、Azure、阿里云等)。这种方式不仅简化了对接不同AI提供商的复杂度,还提供了统一的抽象层,极大地减少了开发和迁移的工作量。此外,由于有专门团队维护,Spring AI能够持续更新和支持最新的AI技术,确保其在不断变化的大模型领域保持竞争力。

Spring AI Alibaba:为国内开发者提供安全智能的AI集成方案

当大模型进入国内市场时,面临的一个关键挑战是如何在确保内容安全的同时,使模型足够智能以满足业务需求。Spring AI Alibaba正是为应对这一挑战而设计的理想选择。它不仅具备强大的内容安全管理能力,而且集成了Qwen-2.5,该模型在OpenCompass评选中被评为开源模型中的第一名,展现了其卓越的性能和广泛的应用潜力。

Spring AI Alibaba是Spring AI框架针对阿里巴巴云产品及服务的一次本地化实现,专为使用阿里云通义系列AI能力(如对话、图像生成等)的开发者提供了简便易用的接口与工具。通过引入Spring AI Alibaba,开发人员可以轻松地在其应用程序中嵌入高级AI功能,无需深入研究复杂的底层技术细节。此外,Spring AI Alibaba支持多种类型的AI任务,并且能够无缝集成到现有的Spring Boot项目中,这极大地简化了AI应用的开发流程。其核心优势包括但不限于:对不同AI提供者间接口的标准化处理,允许代码一次编写即可跨平台运行;以及直接兼容Flux流输出的设计,使得基于流的数据处理变得简单高效。总之,Spring AI Alibaba为希望利用最新AI技术来增强自己产品的开发者们提供了一个强大而灵活的解决方案。

基于SpringBoot集成Spring AI Alibaba实现对话模型并构建支持prompt的流式返回接口

基于SpringBoot集成Spring AI Alibaba完成一个简单对话模型,并构建支持prompt的流返回接口

首先,根据提供的我了解的信息内容,我们了解到使用Spring AI Alibaba可以方便地为我们的项目添加AI能力,尤其是基于阿里云通义千问的服务。对于希望实现的特定功能,即通过GET请求提供一个跨域(CORS)支持、能够处理prompt并以Flux<String>形式返回结果的聊天接口,我们需要遵循一定的步骤来配置和编码。

环境与依赖准备
  • JDK版本:确保您的开发环境中的JDK版本不低于17。
  • Spring Boot版本:使用3.3.x系列版本。
  • 申请API Key:按照我了解的信息中给出的方法,在阿里云上申请通义千问服务的API Key,并记录下来用于后续配置。
  • Maven仓库设置:因为当前使用的Spring AI Alibaba组件还处于milestone阶段,所以需要在pom.xml文件中添加对Spring Milestones及Snapshots仓库的支持。
<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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 添加依赖项:在pom.xml中加入Spring Boot Parent以及spring-ai-alibaba-starter依赖,以便自动装配必要的组件如ChatClient等。
<parent>
  <groupId>org.springframework.boot</groupId>

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

  <version>3.3.4</version>

  <relativePath/>
</parent>

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

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

    <version>1.0.0-M2</version>

  </dependency>

  <!-- 其他必需或可选依赖 -->
</dependencies>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
配置API Key

在应用程序启动时或者通过环境变量设置通义千问API Key。这里采用环境变量方式:

export AI_DASHSCOPE_API_KEY=你的APIKey
  • 1.

同时,在application.propertiesapplication.yml中添加如下配置以引用该环境变量值:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
  • 1.
编写Controller

创建一个新的Controller类来定义我们的聊天接口,注意要启用跨域支持并且返回类型为Flux<String>以适应流式输出需求。

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")  // 启用跨域访问
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();
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

上述代码片段展示了如何定义一个简单的RESTful API端点/ai/steamChat,它接受查询参数input作为用户输入,利用Prompt Template机制构造合适的提示词后发送给通义千问模型,并将回复内容以流的形式逐段返回给客户端。

至此,您已经成功搭建了一个基本的基于Spring Boot与Spring AI Alibaba框架的应用程序,实现了通过HTTP GET方法调用AI聊天服务的功能。接下来,您可以进一步探索更多高级特性,比如自定义聊天选项、函数调用等,以丰富应用的功能性。