场景
SpringBoot中使用SpringAIAlibaba框架集成阿里云百炼实现AI快速对话入门示例:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160024361
基于上面的基础,使用OpenAI兼容的方式实现AI对话以及流式对话功能。
Spring AI 提供了 spring-ai-openai-spring-boot-starter,自动配置 OpenAiChatModel。
核心配置:
spring.ai.openai.api-key=...
spring.ai.openai.base-url=... # 可选,默认 https://api.openai.com
spring.ai.openai.chat.options.model=gpt-4o
通过 ChatClient 或直接注入 OpenAiChatModel 进行调用。
支持流式响应、函数调用、嵌入等。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
1. 配置 pom.xml 文件
在项目的 pom.xml 中,添加 spring-ai-openai-spring-boot-starter 依赖,并配置 Spring 里程碑仓库以确保依赖能正确下载。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> </parent> <groupId>com.example</groupId> <artifactId>spring-openai-bailian</artifactId> <version>1.0</version> <properties> <java.version>17</java.version> </properties> <!-- Spring AI BOM 统一管理依赖版本 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-M6</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> </dependencies> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories>2. 配置 application.yml
修改配置文件,将 spring.ai.openai 的 base-url 指向百炼平台的兼容模式地址,并填入你的 API Key 和想要使用的模型
spring: ai: openai: # 替换为你的阿里云百炼 API Key,建议使用环境变量 api-key: your-api-key # 百炼平台的兼容模式地址,注意不要额外添加 /v1 base-url: https://dashscope.aliyuncs.com/compatible-mode chat: options: # 替换为你想使用的模型名称,例如 qwen-max, qwen-plus 或 deepseek-r1 model: qwen-max 3. 编写调用代码
你可以创建一个 ChatClient 的 Bean,或者直接在 Controller 中注入 OpenAiChatModel 来调用模型。
import org.springframework.ai.chat.client.ChatClient; import org.springframework.http.MediaType; import org.springframework.http.codec.ServerSentEvent; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; @RestController public class ChatController { private final ChatClient chatClient; // 通过构造函数注入 ChatClient public ChatController(ChatClient.Builder chatClientBuilder) { this.chatClient = chatClientBuilder.build(); } // 1. 同步调用 @GetMapping("/ai/generate") public String generate(@RequestParam(value = "message", defaultValue = "你好") String message) { return chatClient.prompt() .user(message) .call() .content(); } // 2. 流式调用 (SSE) @GetMapping(value = "/ai/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<ServerSentEvent<String>> stream(@RequestParam(value = "message", defaultValue = "讲个笑话") String message) { return chatClient.prompt() .user(message) .stream() .content() .map(content -> ServerSentEvent.builder(content).build()); } }关键注意点
base-url 配置:
确保 base-url 配置为 https://dashscope.aliyuncs.com/compatible-mode,而不是 .../compatible-mode/v1。
因为 Spring AI 会自动在路径后添加 /v1,配置错误会导致 404 错误。
API Key 安全:
建议使用环境变量(如 ${DASHSCOPE_API_KEY})来配置 API Key,避免硬编码在配置文件中。
你可以使用 echo "export DASHSCOPE_API_KEY='你的API密钥'" >> ~/.bashrc 等命令进行设置。
模型选择:
在 model 字段填写你需要的模型名称,例如 qwen-max、qwen-plus 或 deepseek-r1 等,
具体可选的模型列表可以在百炼控制台的“模型广场”查看。
JDK 版本:
Spring AI 3.x 版本基于 Spring Boot 3.x,要求 JDK 17 或更高版本
4、启动测试
打开浏览器,直接访问以下 URL:
同步接口:
http://localhost:8080/ai/generate?message=你好,请介绍一下自己
流式接口:
http://localhost:8080/ai/stream?message=讲一个简短的笑话
流式接口会以 Server-Sent Events (SSE) 形式逐字输出,浏览器可能无法直接展示,建议使用Postman 测试