目前openai的chatgpt在国内使用有一定难度,不过国内的大模型在大部分情况下已经不弱于chatgpt,而且还更便宜,又能解决国内最敏感的内容安全问题。本文后续以spring ai调用国内chatgpt厂商实现为例,讲解怎么构建一个java调用chatgpt的应用。在构建java调用chatgpt的应用过程中,我们将使用java编程语言来编写代码,并通过spring框架来整合chatgpt的功能。通过调用国内chatgpt厂商提供的接口,我们可以实现与chatgpt的交互,从而构建出一个功能强大的java应用。在应用中,我们可以使用java代码来处理用户输入,并通过调用chatgpt的接口来获取相应的回复。这样,我们就可以在java应用中实现与chatgpt的对话功能,为用户提供智能化的服务。通过使用java调用chatgpt,我们可以构建出更加智能化的应用,为用户提供更好的体验。
24年12月截止了,赶紧来拿奖金!总计30万,Spring AI Alibaba 应用框架挑战赛开赛点此了解
Spring AI介绍
Spring AI是一个专为AI工程设计的应用框架,它继承了Spring生态系统的优良传统,比如可移植性、模块化设计等。该框架致力于将POJOs(Plain Old Java Objects)作为构建块应用于AI领域,使得开发者能够利用熟悉的Java语言和面向对象编程范式来创建复杂的AI应用程序。Spring AI最核心的优势在于提供了一套统一的接口标准,允许开发者编写一次代码即可轻松切换不同的AI服务提供商(例如OpenAI、Azure、阿里云等),极大地简化了跨平台迁移的工作量。此外,其对Spring生态系统的完美兼容性意味着现有基于Spring的应用可以无缝集成AI功能,进一步降低了开发门槛。
Spring AI alibaba介绍
Spring AI Alibaba是基于Spring AI框架构建的实现,专注于接入阿里云百炼系列的大模型服务。通过Spring AI Alibaba,开发者可以轻松地利用通义大模型进行文本生成、图像生成、语音合成等任务。其核心优势在于提供了统一的API接口,使得开发者能够以一致的方式调用不同类型的AI服务,并且只需修改配置即可切换不同的AI提供者,极大地简化了开发过程中的复杂度。此外,Spring AI Alibaba还支持本地部署及多种主流AI框架(如OpenAI和Ollama)的集成,进一步增强了其灵活性与适用性。
基于spring ai alibaba 生成做聊天的详细例子
基于Spring AI Alibaba生成做聊天的详细例子,我们将依照给定的知识来分析并提供详细的步骤。首先,要实现一个允许用户输入信息并通过流(Flux)返回响应的聊天API,需要理解的是整个过程依赖于对通义千问大模型的服务调用。下面将逐步说明如何通过配置和编写代码来完成这一目标。
前置条件
确保您的开发环境满足以下要求:
- JDK版本至少为17。
- Spring Boot版本为3.3.x或更高。
- 已经在阿里云上申请了通义千问服务的API Key,并且已经按照指示将其设置到了系统变量中。
配置阿里云API Key
根据我了解的信息中的描述,在命令行中设置环境变量或者直接在application.properties
文件里配置阿里云API Key:
export AI_DASHSCOPE_API_KEY=你的实际API-Key值
或者在application.properties
中添加:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
Maven仓库配置
由于Spring AI的部分库尚未发布到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>
添加项目依赖
在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/>
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M2</version>
</dependency>
<!-- 其他依赖... -->
</dependencies>
创建Controller处理聊天请求
接下来创建一个控制器类用于接收用户的输入并通过聊天客户端向AI发送请求,同时利用Flux进行流式响应:
@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("/chatStream")
public Flux<String> chatSteam(@RequestParam String input) {
PromptTemplate promptTemplate = new PromptTemplate(resource);
Prompt prompt = promptTemplate.create(Map.of("input", input));
return chatClient.prompt(prompt).stream().content();
}
}
此控制器定义了一个名为/chatStream
的GET方法端点,该端点接受一个名为input
的查询参数,并使用它构造一个提示语句给到聊天客户端。最终结果会以流的形式被客户端消费。
以上步骤详尽地介绍了如何从零开始构建一个基于Spring AI Alibaba支持Prompt与流式输出的聊天API。遵循上述指南,您可以顺利地为您的应用添加强大的AI对话能力。请注意保持所有配置和代码片段的一致性,并根据实际情况调整相关细节如版本号等。
基于Spring AI Alibaba生成一个图片的详细例子
根据我了解的信息提供的信息,我们将基于Spring Boot集成Spring AI Alibaba来实现动漫美女图的图像生成。以下是详细的步骤说明:
1. 确认前置要求
- JDK版本需要在JDK17(含)以上。
- Spring Boot版本需为3.3.x或更高。
2. 申请阿里云资源及API KEY
首先,您需要访问阿里云百炼页面并按照以下步骤操作:
- 登录您的阿里云账号。
- 开通“百炼大模型推理”服务,并等待开通成功的短信通知。
- 成功后再次登录阿里云百炼页面,点击右上角的小人图标 -> API-KEY -> 创建新的API-KEY。
- 记录生成的API-KEY,这将在稍后的配置中使用。
接着,设置环境变量以存储API KEY:
export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
3. 开通通义万象图像生成模型
- 进入百炼控制台。
- 在左侧菜单选择“模型广场”,查找并选择图像生成类目下的通义万象模型。
- 点击该模型的“API调用”按钮,在打开的页面顶部复制模型英文名(例如
wanx-v1
),用于后续代码配置。
4. 配置项目依赖
添加仓库地址
在您的pom.xml
文件中加入如下仓库配置以便获取最新版的Spring AI Alibaba组件:
<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
内添加必要的依赖包:
<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.1</version>
</dependency>
<!-- 其他必要依赖 -->
</dependencies>
5. 配置应用属性
编辑application.properties
文件,设置API KEY等信息:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
6. 编写控制器代码
创建一个新的REST控制器ImageModelController.java
,内容如下所示:
@RestController
@RequestMapping("/ai")
public class ImageModelController {
private final ImageModel imageModel;
@Autowired
public ImageModelController(ImageModel imageModel) {
this.imageModel = imageModel;
}
@GetMapping("/image")
public ResponseEntity<String> generateImage(@RequestParam String input) {
try {
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 ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("No image generated.");
}
String imageUrl = results.get(0).getOutput().getUrl();
return ResponseEntity.ok(imageUrl);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}
7. 测试接口
启动应用程序后,通过浏览器或者Postman等工具访问http://localhost:8080/ai/image?input=动漫美女
这样的URL来请求生成图像。返回的结果应该是一个指向新生成图片的URL链接。