专栏名称: 阿里开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
目录
相关文章推荐
白鲸出海  ·  TTS美国销售额大涨,Perplexity免 ... ·  昨天  
阿里开发者  ·  悲催,放到 Map 中的元素取不出来了 ·  昨天  
51好读  ›  专栏  ›  阿里开发者

基于开源框架Spring AI Alibaba快速构建Java应用

阿里开发者  · 公众号  · 科技公司  · 2024-11-05 08:30

主要观点总结

本文旨在帮助开发者快速掌握并应用Spring AI Alibaba,提升基于Java的大模型应用开发效率和安全性。文章介绍了Spring AI和Spring AI Alibaba的核心优势,以及基于Spring Boot集成Spring AI Alibaba完成一个简单的对话模型的实战步骤。

关键观点总结

关键观点1: Spring AI介绍

Spring作为知名的Java应用框架提供商,推出了Spring AI来解决Java调用大模型时缺乏高效统一的应用框架的问题。它借鉴了langchain的核心理念,并结合Java面向对象编程的优势,提供了统一的接口标准,简化开发流程。

关键观点2: Spring AI Alibaba介绍

Spring AI Alibaba是在大模型应用在国内背景下的一种理想选择,它提供了强大的内容安全保障,并基于Qwen-2.5模型,该模型在OpenCompass评估中被评为开源领域佼佼者。它通过统一接口标准使得迁移和适配变得异常简单,并支持多种生成式任务、兼容Flux流处理机制,允许用户根据实际需要定制化扩展AI功能。

关键观点3: Spring AI Alibaba实战:后端构建

为了基于Spring Boot集成Spring AI Alibaba并完成一个简单的对话模型,文章提供了详细的步骤,包括环境准备、API密钥设置、添加仓库和依赖、配置application.properties文件、编写Controller等。特别强调了加入spring-boot-starter-webflux的重要性,因为它对于处理响应式流(Flux)至关重要。

关键观点4: 前端应用构建

采用React框架创建了一个简单的聊天应用,该应用通过HTTP请求与后端交互,并接收流式数据。文章详细介绍了如何初始化React项目、修改基础文件结构、实现用户界面逻辑,包括输入框、发送按钮及展示消息区域,并处理向服务器发送请求和监听响应流的过程。


正文

阿里妹导读


本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。

Spring AI介绍

当前Java调用大模型时,往往缺乏一个高效且统一的应用框架,Spring作为知名的Java应用框架提供商,推出了Spring AI来解决这个问题。它借鉴了langchain的一些核心理念,并结合了Java面向对象编程的优势。Spring AI的核心优势在于提供了统一的接口标准,开发者只需编写一次代码就能轻松切换不同的AI服务提供者,如OpenAI、阿里云等。此外,Spring AI还支持流式输出兼容性及自动POJO映射等功能,极大简化了开发流程。并且由于有专门团队维护,确保了长期稳定性和安全性。这种设计让基于Java的大模型应用开发变得更加便捷和高效。

Spring AI Alibaba介绍

当大模型在国内应用时,面临的主要挑战是在确保内容安全的同时,满足业务需求的智能化水平。Spring AI Alibaba作为这一背景下的一种理想选择,提供了强大的内容安全保障,并且基于Qwen-2.5模型,该模型在OpenCompass评估中被评为开源领域中的佼佼者。Spring AI Alibaba是将阿里云最佳实践与Spring AI框架本地化结合的结果,它不仅简化了开发者对接不同AI服务的过程,而且通过统一接口标准使得迁移和适配变得异常简单。其核心优势在于支持多种生成式任务(如对话、文生图等)、兼容Flux流处理机制以及提供诸如Prompt Template、OutputParser等功能,极大提升了开发效率与灵活性。此外,Spring AI Alibaba还具备调用外部数据的能力,允许用户根据实际需要定制化扩展AI功能,为构建更加智能的应用提供了坚实的基础。

Spring AI Alibaba 实战:后端构建

为了基于Spring Boot集成Spring AI Alibaba并完成一个简单的对话模型,构建一个支持prompt的流返回接口的项目,并确保GET接口支持CORS跨域,我们可以遵循以下步骤。本回答将详细指导如何配置和编写代码以达成这一目标。


1. 确认开发环境

  • 确保你的JDK版本在JDK17(含)以上。
  • 使用Spring Boot 3.3.x版本或更高版本。


2. 在阿里云申请API Key

  • 访问 阿里云百炼页面 并登录账号。

    https://www.aliyun.com/product/bailian

  • 开通“百炼大模型推理”服务,获取API Key。

  • 设置环境变量:

    export AI_DASHSCOPE_API_KEY=你的API_KEY 或直接在应用程序配置文件中设置。


3. 添加仓库和依赖

由于Spring AI当前版本还未提交到Maven正式仓库,因此需要添加额外的仓库来访问这些资源:

<repositories>    <repository>      <id>sonatype-snapshotsid>
<url>https://oss.sonatype.org/content/repositories/snapshotsurl>
<snapshots> <enabled>trueenabled>
snapshots>
repository>
<repository> <id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots> <enabled>falseenabled>
snapshots>
repository>
<repository> <id>spring-snapshotsid>
<name>Spring Snapshotsname>
<url>https://repo.spring.io/snapshoturl>
<releases> <enabled >falseenabled>
releases>
repository>
repositories>
接着,在 pom.xml 中添加对 spring-ai-alibaba-starter 及Spring Boot parent项目的依赖:
<parent>  <groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>3.3.4version>
<relativePath/> parent>
<dependencies> <dependency> <groupId>com.alibaba.cloud.aigroupId>
<artifactId>spring-ai-alibaba-starterartifactId>
<version>1.0.0-M2.1version>
dependency>
<dependency> <groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webfluxartifactId>
dependency>
<dependency> <groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
dependencies>
这里特别注意加入了 spring-boot-starter-webflux ,因为它对于处理响应式流(Flux)至关重要。


4. 配置application.properties

在项目的

src/main/resources/application.properties 文件中加入如下配置:

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


5. 编写Controller

创建一个新的控制器类 ChatController.java ,实现带有CORS支持的聊天接口,该接口接受输入参数并通过 ChatClient 发送请求给AI模型,同时利用 PromptTemplate 提供更丰富的交互体验。此外,此控制器还将使用WebFlux框架提供的功能来返回响应式类型 Flux

import org.springframework.web.bind.annotation.*;import org.springframework.web.reactive.function.server.ServerResponse;import reactor.core.publisher.Flux;
@RestController@RequestMapping("/ai")@CrossOrigin(origins = "*") // 支持所有来源的跨域请求public class ChatController {
private final ChatClient chatClient; @Value("classpath:your-prompt-template.st") Resource promptTemplateResource;
public ChatController(ChatClient.Builder builder) { this.chatClient = builder.build(); }
@GetMapping("/steamChat") public Flux steamChat(@RequestParam String input) { PromptTemplate promptTemplate = new PromptTemplate(promptTemplateResource); Prompt prompt = promptTemplate.create(Map.of("input", input)); return chatClient.prompt(prompt).stream().content(); }}
请确保 your-prompt-template.st 是一个位于 src/main/resources/ 下的模板文件,用于定义与AI交互时使用的具体提示文本格式,比如:
针对{input},给出回应。
通过上述步骤,你就成功地基于Spring Boot集成了Spring AI Alibaba,并实现了满足题目要求的功能。这个过程涵盖了从准备环境到最终编码的所有关键点,包括了对外部库的支持、特定功能的启用以及REST API的设计等方面。

构建匹配的聊天前端应用

基于我了解的一些信息,我们将采用React框架来创建一个简单的聊天应用。该应用会通过HTTP请求与后端交互,并支持从后端接收流式数据( flux )。


1. 初始化React项目

首先,确保你的机器上已安装了Node.js和npm或yarn。然后执行以下命令以创建一个新的React应用:

npx create-react-app frontendcd frontendnpm install
这将创建一个名为 frontend 的基础React项目,并自动安装运行所需的所有依赖项。


2. 修改基本文件结构

根据需求调整基础文件内容。这里主要关注的是HTML模板、主入口文件以及核心组件。

  • public/index.html

保持默认即可,此文件定义了网页的基本结构。

  • src/index.js

无需修改,默认配置足够用于当前示例。

  • src/App.js

此文件负责渲染根组件。我们将导入并显示自定义的 ChatComponent

import React from 'react';import ChatComponent from './components/ChatComponent';
function App() { return ( <div className="App"> <ChatComponent /> div>
);}






请到「今天看啥」查看全文