
在开始之前,推荐大家阅读一篇文章《Vue 项目上线前的优化:移除 console.log 详解》(https://cloud.tencent.com/developer/article/2467252),该文章聚焦于 Vue 项目上线前的优化工作,围绕移除 console.log 这一要点,详细阐述了其意义所在,比如可以减少不必要的日志输出,提升项目运行效率、节省资源等;同时也介绍了具体的移除方法、所能达到的效果,并且还给出了相关案例以及最佳实践内容。如果对此感兴趣或者在 Vue 项目优化方面有需求的朋友,不妨去了解一下哦。
随着人工智能领域迎来大爆发,如今人工智能应用已然成为了我们生活与工作中的常态。在 Java 的技术生态里,Spring 社区积极响应这一趋势,推出了 Spring AI 项目。这个项目的一大亮点是已经集成了 OpenAI 的 API,这对于开发者来说意义重大。以往开发者若想与 OpenAI 进行交互,需要自行去实现向其发送请求以及接收响应的一整套交互程序,过程较为繁琐复杂。而有了 Spring AI 后,开发者只需简单调用它所提供的接口,就能轻松实现与 OpenAI 的交互,极大地提高了开发效率。
然而,我们也要考虑到一些现实因素。一方面,OpenAI 的 key 并非免费获取的,使用其服务是存在一定成本的;另一方面,由于 OpenAI 是国外的服务,在国内使用时,网络方面的限制往往会导致其响应速度受到影响,使用体验可能欠佳。鉴于这些情况,我们可以选择使用 Spring AI Alibaba 这个开源项目来进行开发。
开发工具:我们选用 IDEA 作为本次项目开发的集成开发环境(IDE)。IDEA 具有强大的代码编辑、智能提示、代码调试等功能,深受广大 Java 开发者的喜爱,能够为我们的开发工作提供极大的便利。它整合了诸多开发所需的工具和插件,比如对 Maven 项目管理工具的良好支持,方便我们进行依赖管理等操作,并且可以通过直观的界面操作快速创建、配置和运行各类 Java 项目。
JDK 版本要求:确保本地安装的 JDK 版本大于等于 17。JDK(Java Development Kit)是 Java 开发的基础工具包,不同版本的 JDK 会包含不同的特性和功能改进。从 Java 语言本身的发展来看,高版本会不断优化性能、增强安全性以及增加新的语法特性等。对于我们要使用的 Spring AI Alibaba 以及相关的 Spring Boot 项目构建等功能来说,JDK17 及以上版本有着更好的兼容性和支持,低于 17 版本在后续操作中可能会出现版本过低导致的报错情况,例如在解析一些新的语法结构或者调用特定的 API 时无法正常工作。
对于开发工具 IDEA 和 JDK,相信大多数程序员朋友们的开发环境中都已经具备了。接下来重点说一下怎么获取 Key,这是使用相关服务的关键步骤之一。
我们需要通过阿里的大模型服务平台百炼平台来获取 API-KEY。首先登录百炼平台,登录过程通常需要使用自己注册的阿里云账号信息(如果还没有账号,需要先进行注册流程,按照提示填写相关信息完成注册)。登录成功后,进入平台主页面,在页面中找到对应的大模型服务开启入口,不同的服务可能会有不同的分类展示方式,一般可以通过搜索或者在人工智能相关的服务板块中找到要开启的具体服务内容,然后按照系统提示点击开启服务(这个过程可能涉及到确认一些服务协议、选择服务套餐等相关操作,依据平台的具体设定来完成即可)。开启服务后,在平台页面的右上角找到【我的】这个选项,点击进入个人中心页面,在这里就能看到 API-KEY 的相关信息了,直接复制该 API-KEY 即可,后续在项目配置中会用到它。
创建 Spring Boot 项目:在 IDEA 中进行操作,通过点击菜单栏的 “File” -> “New” -> “Project”,然后在弹出的新建项目对话框中选择 “Spring Initializr”(这是 IDEA 内置的用于快速创建 Spring Boot 项目的工具)来新建一个 Spring Boot 项目。在创建项目的过程中,需要配置一些关键信息:
JDK 选择:明确选择已经安装好的 JDK17,确保后续项目编译和运行能够基于正确的 Java 运行环境,避免因版本不匹配出现的各种问题。
Spring Boot 版本选择:选择 Spring Boot 的版本为 3.x 版本。Spring Boot 一直在不断更新迭代,3.x 版本在依赖管理、自动配置等方面相较于之前版本有了进一步的优化和改进,并且与我们要使用的 Spring AI Alibaba 能够更好地适配,确保项目后续的功能正常实现,例如在加载相关的 AI 组件和配置时可以更顺畅地进行,避免出现因版本兼容性导致的类加载异常或者配置解析错误等情况。

创建完成后,接下来要配置 pom 文件,导入相关依赖,pom.xml 文件是 Maven 项目用于管理依赖的核心配置文件,通过在其中添加相应的依赖项,就能让项目自动下载并引入所需的库和组件,具体配置如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>这里的 org.springframework.boot:spring-boot-starter-web 依赖是用于构建 Web 应用的基础依赖,它会引入诸如 Spring MVC 等一系列用于处理 HTTP 请求、响应以及构建 RESTful API 等相关功能的组件,使得我们后续能够方便地开发出可以通过网络进行交互的应用接口。而 com.alibaba.cloud.ai:spring-ai-alibaba-starter 依赖则是 Spring AI Alibaba 的核心启动器依赖,指定版本为 1.0.0-M3.1,它包含了与阿里云通义系列模型进行交互、调用相关 AI 服务等功能的代码和配置,是实现我们 ChatGPT 应用 AI 功能的关键所在。repositories 节点下配置的 Spring Milestones 仓库是 Spring 官方提供的用于获取一些里程碑版本(即处于开发过程中,具有一定稳定性但尚未正式发布的版本)依赖的仓库,通过在这里指定该仓库,确保项目能够正确下载到对应的依赖版本。
配置完成后,在 IDEA 中刷新 Maven,让它自动下载并安装上述配置的依赖到本地的 Maven 仓库中,等待下载完毕即可。
再在我们的 application 配置文件(可以是 application.yml 或者 application.properties,这里以 application.yml 为例)中配置好我们从阿里获取到的 KEY,如下所示:
spring:
application:
name: springai_alibaba
ai:
dashscope:
api-key: sk-***在这个配置中,spring.application.name 用于指定当前 Spring 应用的名称,这在分布式系统或者微服务架构中很重要,方便对各个应用进行识别和管理。而 spring.ai.dashscope.api-key 就是我们前面获取到的 API-KEY,将其配置在这里,使得 Spring AI Alibaba 在项目运行时能够凭借这个 key 去访问阿里云的相关 AI 服务,实现与大模型的交互。
Spring AI Alibaba 提供了非常便捷的方式来完成 GPT 服务的调用,这里我们创建一个 ChatGptController 类,通过这个类来完成同步和流式两种方式对话的返回功能,以下是具体的代码实现:
@RestController
public class ChatGptController
{
private final ChatClient chatClient;
public ChatGptController(ChatClient.Builder builder) {
this.chatClient = builder
.build();
}
/**
* 同步 API
*/
@RequestMapping("/ai/chatgpt")
public String chatgptDemo(@RequestParam("message") String message)
{
return this.chatClient.prompt()
.user(message)
.call()
.content();
}
/**
* 流式 API
*/
@RequestMapping(value = "/ai/stream",produces = "text/html;charset=utf-8")
public Flux<String> flux(@RequestParam("message")String message) {
return chatClient.prompt()
.user(message)
.stream()
.content();
}
}在上述代码中,首先通过 @RestController 注解将这个类标记为一个 Spring RESTful 风格的控制器,意味着它可以接收并处理来自客户端的 HTTP 请求,并返回相应的响应结果。
定义了一个 ChatClient 类型的私有成员变量 chatClient,这个 ChatClient 是 Spring AI Alibaba 提供的用于与 AI 服务进行交互的核心客户端类,通过在构造函数中传入 ChatClient.Builder 来构建它,ChatClient.Builder 则提供了一种链式调用的方式来方便地配置 ChatClient 的各种属性和参数(虽然这里暂时只是简单调用 build 方法构建,但在更复杂的场景下可以通过它添加更多的配置项,比如设置超时时间、请求头信息等)。
对于同步 API 的实现,chatgptDemo 方法通过 @RequestMapping 注解将 /ai/chatgpt 这个路径映射到该方法上,表示当客户端发起对这个路径的 GET 请求时(默认是 GET 请求,也可以通过设置 method 属性来指定其他请求方法),就会执行这个方法。方法接收一个名为 message 的请求参数,代表用户输入的对话内容,然后通过 chatClient.prompt().user(message).call().content() 这样的链式调用方式,向 AI 服务发送请求并获取返回的响应内容,最后将这个内容作为方法的返回值返回给客户端,实现了同步的对话交互功能。
而流式 API 的实现,flux 方法同样通过 @RequestMapping 注解将 /ai/stream 路径映射到自身,并且通过 produces 属性指定了响应的内容类型为 text/html;charset=utf-8,表示返回的是 HTML 格式的文本内容并且字符编码为 UTF-8。该方法同样接收 message 参数,然后利用 chatClient.prompt().user(message).stream().content() 调用,以流式的方式从 AI 服务获取数据并返回一个 Flux<String> 类型的响应结果,Flux 是 Reactive Streams 规范在 Spring 框架中的实现,用于处理异步的、基于流的数据序列,这种方式适合处理大量数据或者需要实时推送数据的场景,比如实时的对话消息推送等。
编写完成后,启动项目,访问 localhost:8080/ai/stream?message=你的问题 进行测试,即可体验与 AI 进行对话的功能了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。